›MODULE; VBI DEMO FOR ANTIC›DEFINE RTI="$40",› PHA="$48",› PLA="$68",› TXA="$8A",› TAX="$AA",› TYA="$98",› TAY="$A8",› JMP="$4C",› XITVBV="$E462",››SAVETEMPS="[$A2 $07 $B5 $C0 $48 $B5› $A8 $48 $B5 $A0 $48 $B5 $80 $48 › $CA $10 $F2 $A5 $D3 $48]",›GETTEMPS="[$68 $85 $D3 $A2 $00 $68› $95 $80 $68 $95 $A0 $68 $95 $A8› $68 $95 $C0 $E8 $E0 $08 $D0 $F0]"›CARD SDLST=560,VDSLST=512,› VVBLKD=$224›BYTE NMIEN=$D40E,COLBK=$D01A,› WSYNC=$D40A,COUNT=[0]›BYTE ARRAY DLIST›BYTE ARRAY CLRS(0)=[64 66 68 70 72 74› 72 70 68 66 64 66 68 70 72› 74 72 70 68 66 64 66 68› 70 72 74 76 ]››PROC DLINT(); a DLI written in ACTION!›BYTE DUM›[PHA TXA PHA TYA PHA]›IF COUNT=26 THEN DUM=0›ELSE DUM=CLRS(COUNT) FI›WSYNC=1›COLBK=DUM›COUNT=COUNT+1›IF COUNT=27›THEN COUNT=0›FI›[PLA TAY PLA TAX PLA RTI]››PROC INIT7()›GRAPHICS(7)›SETCOLOR(0,2,10) SETCOLOR(1,5,12)›SETCOLOR(2,0,0)›RETURN››PROC DLSETUP(); custom Display List›BYTE I›INIT7()›NMIEN=$40›DLIST=SDLST ›VDSLST=DLINT›FOR I=30 TO 40›DO DLIST(I)=141 OD›FOR I=42 TO 54 STEP 2›DO DLIST(I)=141 OD›FOR I=57 TO 72 STEP 3›DO DLIST(I)=141 OD›FOR I=76 TO 84 STEP 4›DO DLIST(I)=141 OD›NMIEN=$C0›RETURN››PROC ROTATE(); the VBI routine›BYTE HOLD,CTR,CNTR›SAVETEMPS; save the temp registers›HOLD=CLRS(26); save the last element›FOR CTR=0 TO 25; the loop›DO CNTR=25-CTR; to count backwards,› ; ACTION has no STEP-1› ; statement›CLRS(CNTR+1)=CLRS(CNTR) OD; rotate›CLRS(0)=HOLD; put the last element› ; into the first›GETTEMPS; get the temp registers›[JMP XITVBV]; exit the VBI››PROC VBINST(); install the VBI›NMIEN=0; turn off the interrupts›VVBLKD=ROTATE; vector to PROC ROTATE›NMIEN=$40; turn the interrupts back on›RETURN››PROC DJD(); the driver routine, named›BYTE CRSINH=752; for a famous› ; computer genius›VBINST(); install the VBI›DLSETUP(); set up the Display List›CRSINH=1›PRINTE()›PRINTE("Áîôéã Interrupts in ACTION!")›PRINT(" by DAVID PLOTKIN")›DO OD; an endless loop...›RETURN››