Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!mimsy!eneevax!iarocci
From: iarocci@eneevax.UUCP (Bill Dorsey)
Newsgroups: comp.sys.atari.st
Subject: vertical blank interrupt handler package
Message-ID: <538@eneevax.UUCP>
Date: Sat, 3-Jan-87 15:55:45 EST
Article-I.D.: eneevax.538
Posted: Sat Jan  3 15:55:45 1987
Date-Received: Sat, 3-Jan-87 21:55:36 EST
Reply-To: iarocci@eneevax.UUCP (Bill Dorsey)
Distribution: world
Organization: never
Lines: 192


   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
M&@A%6$%-4$Q%+D,`````_00``"$.ERN>7^H'```,+U2`L",FS1PT9=BP<3$&
M1(L6`\O(H9-F3!@V(,2P">-F#8@T;NA(E%,'#AT0:#B282,1Q,&$;!HH`*%"
M)DT00][`R2,GS1DT)U$,20$B1@X<-S+F`1&DS9DR;5B`2.)FC`N;-6<*A"*Q
MC<$Y:=ZX^3@'I<0R8I:>D<-1)!D09M[(`<$QC]@R(.B\`=$FS!J\/H&"4@,O-]/\
M.=[%(8.[`7F&KD(0@>$\/PGY(QVI?9?FSHAW.1LRDLO@>6T2Q)TTI$'(O^RX
M+&TY7LT!EEC@F3$9;(BA(=<<*;GW7+L@2<&<,+!5QQIF-7QTX%TB?%&C"Y)
M]-EK#69U$W+7O1&:?90Y"=<;"KUQ1UG.E<4C'!>*!D(=8+G1W9`@-/&<1U=<
MR$8:FY4UA&EMD,J2'"Q(=MA)![U1QWM]PB$7617N`-
M.=>MHY8J!X,43E$&7D-*%H:`)=+JEF`EUN%C=CB.%==E/+PQ1T%RNH"&#PY#
M+/&E(A"4AL8B-*R`?"+),1844CQQZV4E(KN%$RR[W,4.)O<%$@HIR+2'31^%
M9!EH,;!`*ADRX#P3"&R(U5T:2E,(TDDPOR9@##P;C9G5<\C`L])`IV$@"B#A
MQS,(/?0`PA193%&$%%(0]?-,D!!PV=1FH"`"57,`IU"4M\$5G,2\<>&&""E$
M7;=\9G\9-0A]F"SUV"@<'4,/8S`I4N5;]_@R&(_ZXV""@4#EH,F">.N>^"RA#"J"K
MS;;;<*=@ND"Z\[ZZ@"#(X+I-==\]N]ZV$YM[ZKUSW7WPB0,M/AVT.^&I?B%)
MQ!W3;^CD`B0#L/_XN\5+0P]@L(./\$`&,("$`9A0P#2L8`76X]_I0K.1I0`P
M#)@JU?=@-[RQ4;`,F[-<]$1'O=))4"`?3,SVRA*##8(@?+*#'_F$9;[6""8A
M(%1=Y[@'O,.U;VG$0T$*RW`\I(UP>J2+X``FB$,5[K`LWE/!ZUX8.[S-\':K
ML>$0T\)&<=N5"&%JQ=C3$
MG0W9R*@WQC$E;.JC,7B!XPA0V&#D%R&1J7+P:
MSWP&-"%@1UB&E`$+3A"$$R12C:"$`V)`0,H30!([[L&+%($V!Y:4`0XHH,$I
M"7`Z&C0*.V0H2QU"ZYD"YD8A3XH%E"@0Y0F$
M8,H=I'&)`DGE*K?I2FK!DE.RG*)+;(G+&NSR=#7XI5B">2IB8L0-Q[3(=Y99
M21H(5D))+D,`12Y#`````)D(```A#FTQ(QG+#P``#"]4@+`C)HV+,2!:M!A8
M1@Z=-&/"L`$AADT8-VM`I'%#IZ&<.G#H@$!SD0R;AB"V6&DX)\T;-R!BN(`!
M`@2,&"]NOL!QHTL#!2!4_`P*8L@;.'GDI#F#1B2*(2EBYN!),0^((&W.E&G#
M`D02-V-<#!4*5""4AFW2S&GY4N.'X[
M1S.=.V&,=UU"<6&,\5I>8=`1W6L@4'&1&B`((<047:$PPTTI
MM"!##3&T`(,--]3@0DU5P$%&EICYY49>D9EG1AIXY!FE1-5)^888X[G!&F>N
MB58'4YWI)L8;.H(P1T.IY58A641)%]YJ_WEFI5YOH/?&'6]A]U:1<'C(&@AU
MM.2&>4PVD5U&5WC(1AJEO34$96^TT>I),=@A57FAHX.O9RQ&NV6LIQ7))BN0,5@I"R8"00:A(<+%"FPD4F5U
M<+1#`@D$!&S0(AEW&'FSPLJ1AR`HBD>R5K+&;'E!6=PS1Y35(4>K9`Q=M$!C
M>&T:F@-112//%KVF-$NX43<,O=Q=!&T[UVM-FZS3-Y=*"00@*0
M$&`TX;SNJL>];0FNP!Y#:<1U&CM4SL9+YJT%1^9`64[UE4U[]85"&CW`L(-&/.`=]Q#+
MI['""BD,E3C==J?1A0MS*-=1#T9(4401?`O$N$1IZ"&8WVL-%H:T65?N>0]3
M@-00"C`PD0+M`B'945]SL)\<4E,=`'I/,,,[V/&2%ST>X"!ZTXL*Y8"2N#30
M"`4H4($5A,"$UA6A"D5(P1:T!X(>]``$Q^-:!E-@N*C`0(+6,T`&-]A!$()0
MA-KK@>](=Y+R6:Y[$IG(#JU&+,L-I"(7R8B/RO"C^%'0`/5#$`H\M[\8)L=K
M,'G"$OCW0^6@!W(P":"+#&0&9CD1!(GK0^74&+HHWH^*H*O)%>4`DRED80I%
MD((4N+@1('XQ2#`QPW).TC:ML?$G.-M/@`R'N`$839$_>P.H4'"2'`EF@TG`
MT9Z(%17)3;`FFVM::,YP$C>@+G2C+&7R\!`#&.1O!4*`0@M\`(%_[7!.'-`02J1Q((7R+)ROG,XW$$02A[-P"8!2J/>0_42`2M1P`+HG"&'/3@#4?8
MA1*>\)ZE@^$3,5K##X:0HSU(H5-4P,(4N-"'Y+3/[TK7%S.(QC2Y6V(3AP<)
M*`IPBO/<']&,ADQZ"296*$$HJ'AJ@#EF<8M#'6<9Z(!%2]5AC.WC*0'86!-_
M`A4.0@TG43%C5(0E-:%GG-)4JVI'/.J1BT[5RR"]IM"?;!.D^02G.$^CMO;A
M%27K#)UQSN`8E+03I`67`)!]3`^P]SXN:D4DS_(92KK%OK<`KJX4
M)$#Q4(B\AZ:A>8V%X`I8$%TY3/2)4%I[V1!$]GI3CI:?=[KC",8_\G!*AOA*Z6]RVNF-OG1/7@T%[O'EUK?
MVL&5`56VOQM<`R@;3V4NPG^SX$,%:WMM8W;PF]L=5PS[6:U4I>.]VZ>:Y]HY
MKFW-XQXSK.OVL;N,'U*(#^3J(;IJDV>K.4FCP19I@10XXU/%EVK1IAK0>7JU
MU!7#%L"VO7PS6WPAI"C"[ZAP/O*XX6^1")4./.UT=26N@JRX<=*:\I6KIN4'
M!!_,Z_WE-$NS6\TN0EKCJL58CS7@8;SJMB^N@)_X.%UP0`%J0]SQ@5/GQW#`
M--?&/@:35Z[H%&8Y]Y(^!1L7`0I,QR[.+:7F;M7]QD1_]?NV$/>C'^0-2.L!
MVU60!-CET0I!8$+>KRR27!\%):5!/-XSUQD`[*M2XZ)S8!(0\?BW:6P0\H-SH9,
MS3)XQI2!`_0.=S0@T$,^C!C.:JY>LW,^'1@-Q#F[U11$?__I``((0J1!'0@!
MR3%'&4N9`((2;Z#14!+%"31&&E8ID(1V<-5Q4A@:N;54''487XW77#B)2;&D=]D4T&XT:(F8H;87*T4!,<$(&9XUL.
ME9%0';,A=H=C8\!WQQMUE)=8C7*X]R`(LZ&8QFP7V16O0BT@-,<:T25FWUD*
MN7%&3YKF61GM:'N>_UJ!5T;!.G'EQEF#L0&'7DT6P0>E,&Q4HO:
M<3='377"V%IT!F6'650&'52%[=A*VP%5+-3-
M7M%90S5.;&U-FJ4E]*.#%<<32^F7(;1%W"%K$!GL%\35I[+>V<8;FH&*F&1U
MAC.L;#\U(0(5I`""T.7&(IDZ0\&,Y3\`5@Y001B9?^J4N=^8KV(C0@R/##(7
M%6T&-6#A4>C*H)%2U05K9&J!&693!HN0IB9GJ$-QT$*U1_'K+C8[GLL0CW$%:1.90!^Z$00P*2F+_CG81.*AL4@GA6X=J4H4I%$%1O)%*8N2@F8B8
M:G&IJ<_C/F61$(5-02#)#>/J\J+G<:]\9N*>':#H@C&`(&;1J4F((C($YCD/
M>A%!S4QR@[#3-.0-8E"#_("2QS(TRS=@@:0DA>80Z+UQ035J"(]JXL"\K$5L
M\*$B86SFQI$,K6P&V8BXSG@O/+XDB@H)T^T:`*)FZXXQ7;-62/:7`!&F0'(G@)CU^`]!E)0""%(P@!67E0
M5N6.*2+W+(@X!^E?NT@2N?(1!FH(B2<5DC"$)4P!"H3R8B'I(B>YV.$C*1(6
M7SR2EK6H#9O:;%80R)`\KT0K#^Q,YAOGP,R?T5,O]*K)06E6/601+I6(B4(5
M@N`$*E2A"1:Y7+N099\-F2E,_E&5<$@X-VOYT#/1VLP,FU?0C&RD5Y4"%J92
MLA(Y_-*@&UF*1V:#..V1,)S2H<@3E@0"+&B5JZ@Y0A&:0(2M$M%IU71(9"SW
M'MS4!#=#*]:QZ)2PPUQ2:7(!"T;,A*8@_:]I0#G>;"2HSB62:#R=DHLP/Q>M
M;,VJ,_=B&EI9Y+M3CF\_KN+7;%I@D*%MYD&1\M772CJ&LW#T,(Q]9.'0]<:Q
MM:R1!LZU\S.0@H#!Q
M#C6%%K[*0-A7POHF4&:0E'F'2QE(:D\X@F:>9XY@1=W`EEK&`DJE-.;5#
MUZ577MG7%>=QCVW.+<."TJ"=YQXLBSZC7&4\(DKFKB1(=!!>V;9&PM%:9`XZ
M4LK/Y-]JHAGM/;Y3S7#[`*PC-8
M8&QD0#VA(68:;AQ+8\D#$4EF5L8ROK2,FS3%#"A8,T(02"'OGMS35JVVL95*45ZFQ%?@S!WYUKM!2$Y,5?,T65PC;"
M@J+6,3`L<6>EQB.MS;SN#@UAHAB4A18>4Z=DKFX./M$"`I6RU*5-:)\;:H*U
M;?GH02Z<[PI+U#AJ07(EE;GQL*6F,^7BKG/(VJ"\L!8&XLQ&3JFC(EU+';74
M.5LNTI[)@<<9%Z-*BE*_NM1@\C"&"V,L7?]ZZS6/BL6DBCS!5UZP",M0L+L,
M;#.0!DG$(E+'E3P-4-=U(W/^V!5Q@J"0Q&SJO)2&.O+AK@G%,RF,I)D$=A14S>YXRD$*&@/OAW_'*U].*R:XA&1P#7.:M@"'DEM=X$*ZO#LJ3'LOE"Y^_
M%[C@NO;RY3[TD4/-NQK=F)BU:7'F40!NU%EH_10>4#4Q0A6<,(1]/L$)4P"C
MRKF#`J*TX.T>E*P1OP(=A2!1#V$J'Z]:'O)@-;BIL@,*QY0EGIJ``!()`-UF
MX@P11RYE_2!G*<$R-X83)D-76N;24(""3>C!?=X'?F`A?DOV.@980G"#&^*"
M&N2V%.F2&9W5/M01?PD79/8'"0R`-+`"`E>0!$S`!`UD+ODV8-?V2J7%*HZA,"'0(;/Q/QK1?2#P?9B$&!*8
M'VOX9('G<4C5?C+H8,TR!-$B.NT!1R6X`!_!)GP!8R+A?W;3%P7S@BXW@)%1
M@`#2(7/0+FH1+V7@AG`8?D6T9#6(.XZHA\ABB62`B4YU>2/8:+!1@@V`-50E
M%E.Q?\UV<'SR1U`8$6\3-X-!A02!A7;5(0@()B@0!@\8AV1"#.W/H&C9X$10U1RYX5-;(`.S7
MC`08)BA2!BG2ASXB&-HV7W2`+DXG%^T8*YD1%"11@NHX+!I'%*-'9)%('WA6
M:/C3>2#PCO'8(9KA=&H,-,H!]4(
MD-@83]K8)J1WD/RX%@6ICRZY=E@3D;M&!H`R!RNQ'L-8C)PX60WA$8O#/ON(
M&.$QCOJW%L+4+WQU0G]U$(,X>FE0$-`H&SD4(YAWAVY`$#P2$TD/S'
M+_53@V\PB"@'-KTV$#^7;B`($O5H&_CH+$W0!$5`!$D0!%10!$R0!2)(@499
M&H-X)W$/4MYFL:5,BO11P?R?>.$'L0IDW13&5B5$5!4$QH(5D))+D@`0P!#````
M`&P$```A#F@Q/F1I!@``#"]4@+`C)HT+-"!:M!A81@Z=-&/"L`$AADT8-VM`
MI'%#IZ&<.G#H@$!SD0R;AB"V6&DX)\T;-R!BN(`!`@2,&"]NOL!QHTL#!2!4
M_`P*8L@;.'GDI#F#1B2*(2EBYN!),0^((&W.E&G#`D02-V-<#!4*5""4AFW2
MS&GY4N.'X[1S.=.V&,=UU"<6&,\5I>8=`1W6L@4'&1&B`((<047:$PPTTIM"!##3&T`(,--]3@0DU5
MP$%&EICYY49>D9EG1AIXY!FE1-5)^888X[G!&F>NB58'4YWI)L8;.H(P1T.I
MY58A641)%]YJ_WEFI5YOH/?&'6]A]U:1<'C(&@AUM.2&>4PVD5U&5WC(1AJE
MO34$96^TT>I),=@A57FAHX.
MO9)TRV(J*3;8,9J.`=E\[VX0'VV[#$/30A!$9%%S#*@??2X3I"^>@`P6
M*X!Q>QA/[&$V2W$0/CG84^1A4ZW8%0D,<024T!1A!0R#Y'`#3`D@#'[!S?QA!-/=%4#37OU)<410G1/?-U+
M"X(3J%`%FB6@!NX3B++>P"P^Z48O52),7QP$D37,`4&7&H/_"B>[)`SP?%8(
M`A-L%K[QE>]\Z7M!``=8P.5]#P1.@((4GJ"^!.`@@88)`Q[2T`9Z@<`-]!(#
M2MQSN=RL)4\GRQW&%*3!PXQ!-,/C8-B(D(0I!`%FI4N`"I(FLR;TX'12K%L1
MG'!%VM5LBS#K8@]@IX"?T"$/OEF9YCXR!I'L82@:B=K'\+0#/.9,:BHP0QW`
811)909)AT/V06PS',(A`1H`
`
end