[comp.sys.amiga] Scrolling a single plane -- heart monitor

dlleigh@mit-amt.MEDIA.MIT.EDU (Darren L. Leigh) (03/15/88)

As part of a lab course here at MIT I am building a heart monitor, and
I would like to use my A1000 as a super intelligent display.

The idea is for the Amiga to receive ECG data via the parallel port at
about 200 samples/sec.  I then want to display this data in real time,
scrolling horizontally, as seen in any good hospital sitcom.  There
should be at least five seconds of data on the screen all the time so
I will probably use high-res mode with overscan and cut down the
sampling rate some.  The sampled data can probably be left in one
plane (though more would be nice for anti-aliasing) and I would like
to use another plane or two to display heart statistics.

Is it possible to horizontally scroll only one plane out of a
multi-plane bitmap?  How quick is horizontal scrolling?  I mean
actually moving all that data, not just moving a pointer.  What would
be the best way to do this?  Any and all ideas are appreciated.

The actual ECG hardware is not that expensive (build it yourself for
$25, even less if you you can scrounge parts).  If people are
interested I could post plans and software when I finish.

=============================================================================
 Darren Leigh			dlleigh@media-lab.mit.edu
 362 Memorial Dr.               mit-amt!dlleigh
 Cambridge, MA 02139                                  Condorito Lives!

dillon@CORY.BERKELEY.EDU (Matt Dillon) (03/15/88)

:As part of a lab course here at MIT I am building a heart monitor, and
:I would like to use my A1000 as a super intelligent display.
:
:The idea is for the Amiga to receive ECG data via the parallel port at
:about 200 samples/sec.  I then want to display this data in real time,

	I suggest you write an interrupt server to do this.  200 samples
a second are *EASY*... just use a 555 IC or something to generate 200
pulses a second into the FLAG input to the 8520 handling the parallel port.
That way you get data 200 times a second no matter how loaded the Amiga is.

:scrolling horizontally, as seen in any good hospital sitcom.  There
:should be at least five seconds of data on the screen all the time so
:I will probably use high-res mode with overscan and cut down the
:sampling rate some.  The sampled data can probably be left in one
:plane (though more would be nice for anti-aliasing) and I would like
:to use another plane or two to display heart statistics.

	Probably the easiest thing to do would be to have a high priority
task hanging around waiting for a signal from the interrupt server and then
updating the display (i.e. if the Amiga is loaded down and two interrupts
go off before the screen can be updated, this task would then jump-scroll
two pixels instead of one and update the display).  It should use BltBitMap()
on the SCREEN'S bitmap to shift the data.  That is, use graphics calls to
the screen's bitmap and rastport to handle stuff (much faster than graphics
calls to a window's rastport).

	Since this usually doesn't bode well with any visible windows,
what I would do is do EVERYTHING in the screen's rastport.  Open an
invisible window in the screen so you can get keyboard and mouse events.


>
>Is it possible to horizontally scroll only one plane out of a
>multi-plane bitmap?  How quick is horizontal scrolling?  I mean
>actually moving all that data, not just moving a pointer.  What would
>be the best way to do this?  Any and all ideas are appreciated.

	MASKING OUT PLANES is accomplished by modifying the Mask field in 
the screen's rastport before doing rendering operations.   Note that the
BltBitMap() call uses a different Mask .. the one you specify in the call.

	You can then render into the screen's rastport on the remaining
planes without effecting the scrolling graphics below.  If you make the
invisible window stationary, you could also render into that with the 
window's rastport's Mask field setup properly (somewhat safer).

	With BltBitMap() you can scroll any plane or planes in any way
you want.  Up, Down, Left, Right, By twos, By threes, By N pixels, even
InsideOut (but not in one call).  Look into the Screen structure.

	Needless to say, you want to use a custom screen...

>The actual ECG hardware is not that expensive (build it yourself for
>$25, even less if you you can scrounge parts).  If people are
>interested I could post plans and software when I finish.

	I think people would be interested, I certainly am!  When you
are through with the lab course, post it!

						-Matt

dale@boing.UUCP (Dale Luck) (03/16/88)

In article <2143@mit-amt.MEDIA.MIT.EDU> dlleigh@media-lab.UUCP (Darren L. Leigh) writes:
>Is it possible to horizontally scroll only one plane out of a
>multi-plane bitmap?  How quick is horizontal scrolling?  I mean
>actually moving all that data, not just moving a pointer.  What would
>be the best way to do this?  Any and all ideas are appreciated.
Set up a screen in dual play field mode. Make one of the bitmaps about twice
as wide as the screen. When you want to shift that playfield to the left
increment RxOffset in the RasInfo. Call MakeScreen, Rethink DIsplay, or
try using ScrollVPort. When you get to the middle though you will have to
copy the righthand side over to the left hand side and start back with
RxOffset = 0. Otherwise you will spiral down through your bitmap.
Hope this helps.
There are trickes necessary to create a dualplayfield screen, you have to
create it as a standard screen and then convert it yourself into dual
playfield.
Dale Luck

cjp@antique.UUCP (Charles Poirier) (03/21/88)

In article <8803150721.AA23510@cory.Berkeley.EDU> dillon@CORY.BERKELEY.EDU.UUCP writes:
>.... Since this usually doesn't bode well with any visible windows,
>what I would do is do EVERYTHING in the screen's rastport.  Open an
>invisible window in the screen so you can get keyboard and mouse events.
>						-Matt


Pardon my ignorance, but I would like to know how to create an invisible
window.
	Thank you,
-- 
	Charles Poirier   (decvax,ihnp4,attmail)!vax135!cjp

   "Docking complete...       Docking complete...       Docking complete..."

dillon@CORY.BERKELEY.EDU (Matt Dillon) (03/22/88)

:>.... Since this usually doesn't bode well with any visible windows,
:>what I would do is do EVERYTHING in the screen's rastport.  Open an
:>invisible window in the screen so you can get keyboard and mouse events.
:>						-Matt
:Pardon my ignorance, but I would like to know how to create an invisible
:window.
:	Thank you,

	Oh.  Try specifying a NULL title, no system gadgets, and the
	BORDERLESS flag.  The idea is that the window would be used only
	to get mouse and keyboard events, not something you can play 
	around with.  Usually one makes the window the same size as
	the screen except with MaxRows - 1 rows and dropped one pixel
	from the top of the screen so the user can still use the screen
	gadgets.

					-Matt