[comp.sys.atari.st] vertical blank interrupt handler package

iarocci@eneevax.UUCP (Bill Dorsey) (01/03/87)

   I have found the following vertical blank handler package to be useful for
a number of purposes, and thought I'd pass it on.  The arc'ed file includes
enough documentation so that most people should be able to use it.
   Basically, it allows one to write vertical blank interrupt routines in C,
never having to delve into 68000 code or worry about saving registers, etc.
It uses the vertical blank queue to insert a scheduler which calls user
processes.  I'm thinking about rewriting the scheduler in 68000 to speed it
up a bit, but this version works well, so here it is.
   Be sure to skim through the documentation file, as it contains explanations
of constants you may want to change.  One constant must be changed depending
on whether you are using a monochrome or RGB system in order for the sleep()
function to work properly.  If anyone has any questions or comments, I'll try
to answer them as best I can.

-----------------------------------------------------------------------------
begin 644 vbi.arc
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
8<K44]!$H>11)909)AT/V06PS',(A`1H`
`
end