10 ;WOBBLER 20 ;By Andy Guillaume 30 ;March 1996 for NAU 40 ; 50 XITVBI=49378 ;VBI Exit to DS 60 WSYNC=54282 ;Wait for SYNC reg 70 HSCROL=54276 ;Horiz Scroll reg 80 *=1536 90 CLINE *=*+1 ;Line counter 0100 TIMER *=*+1 ;VBI Timer Counter 0110 RTIME *=*+1 ;VBI Timer Reset 0120 CURRENT *=*+1 ;Pointer into DATA 0130 MAXIMUM *=*+1 ;Number of DATA 0140 SCT *=*+24 ;Scroll table 0150 DLI 0160 PHA ;Push A 0170 TXA ;X into A 0180 PHA ;Push A 0190 LDX CLINE ;Get line number 0200 LOA SCT,X ;Get scroll byte 0210 5TA WSYNC ;Wait for SYNC 0220 STA HSCROL ;Update scroll reg 0230 INC CLINE ;Next line 0240 PLA ;Pull A 0250 TAX ;A into X 0260 PLA ;Pull A 0270 RTI ;Return from DLI 0280 VBI 0290 PHA ;save A and X sane 0300 TXA ;as DLI does 0310 PHA 0320 LOA #8 ;8 into A 0330 STA CLINE ;Reset line number 0340 DEC TIMER ;Decrease Timer 0350 BNE EXIT ;If t<>0 then EXIT 0360 LOA RTIME ;Get Timer Reset 0370 STA TIMER ;Store at counter 0380 LDX #22 ;22 bytes to copy 0390 COPYLOOP 0400 LDA SCT,X ;Get byte 0410 STA SCT+1,X ;store in next loc 0420 DEX ;Decrement X 0430 BPL COPYLOOP ;If >-1 then LOOP 0440 LDX CURRENT ;Get DATA pointer 0450 LOA DATA,X ;Get byte 0460 STA SCT ;Store in tine 8 0470 INC CURRENT ;Increase pointer 0480 LOA CURRENT ;Get pointer 0490 CMP MAXIMUM ;At last line? 0500 BNE EXIT ;If No then EXIT 0510 LOA #8 ;8 into A 0520 STA CURRENT ;Reset pointer 0530 EXIT 0540 PLA ;Restore A and X 0550 TAX ;as before 0560 PLA 0570 JMP XITVBI ;Continue OS VBI 0580 DATA *=*+1 ;Store for DATA