40GOTO 250 60DEFPROCvdu(N) 70LOCAL D,D$,B,byte,item,lbyte 80FOR item=1 TO N 90READ D$ 100IFRIGHT$(D$,1)="@" THEN B=2 ELSE B=1 110D=EVAL(D$) 120IFASC(D$)>64 THEN [OPT PASS:LDA D:JSR OSWRCH:]:GOTO160 130IF D<0 THEN D=(ABS(D) EOR &FFFF)+1 140byte=D MOD 256:PROCform 150IF B=2 THEN byte=D DIV 256:PROCform 160NEXT item 170ENDPROC 180 190DEFPROCform 200IF byte<>lbyte THEN [OPT PASS:LDA #byte:] 210[OPT PASS:JSR OSWRCH:] 220lbyte=byte 230ENDPROC 250OSWRCH=&FFEE:OSBYTE=&FFF4 260SCR=&70 270DIM START 1000 280FOR PASS=0 TO 3 STEP 3 290P%=START 300RESTORE 310 320 330PROCvdu(29) 340DATA 22,2,18,0,132,16,18,0,3,25,4,500@,500@,25,1,200@,0@,25,81,0@,-200@,25,1,-200@,0@,25,81,0@,200@ 350 360[OPT PASS 370.BEGIN \ start at screen pos &3000 380LDA #&00 390STA SCR 400LDA #&06 410STA SCR+1 420.SCROLL 430LDA #&13 440JSR OSBYTE 450LDA #&0D 460STA &FE00 470LDA SCR 480STA &FE01 490LDA #&0C 500STA &FE00 510LDA SCR+1 520STA &FE01 530CLC 540LDA#&51 550STA&77 560JSRadd 570LDA&78:STA SCR 580LDA&79:STA SCR+1 590\ (78/79) and (SCR/SCR+1) 591\ point to the start of scr mem 630JSR shuffle 640JMP SCROLL 650\ 660\ 670\ 760.add 761LDA SCR+1:STA&79:LDA SCR:CLC 762ADC&77 763STA&78 764BCC addret 765LDA SCR+1:CLC:ADC#&01 766CMP#&10:BNE addend 767LDA#&06 768.addend:STA&79 769.addret:RTS 770.sub 771LDA SCR+1:STA&79:LDA SCR:SEC 772SBC&77:STA&78 773BCS subret 775LDA SCR+1:SEC:SBC#&01 776CMP#&5:BNE subend 777LDA#&0F 778.subend:STA&79:.subret:RTS 779\ 780\ 781\ 890.shuffle \ assumes current screen addr is in 78/79 900JSR getaddr 910JSR storetop 929LDX #&1F \ copy loop starts with 2nd and ends before the last 930.copyloop 935LDA&78:STA&88:LDA&79:STA&89:JSR incaddr 936LDY#&07 937.move 939 LDA(&78),Y 940 STA(&88),Y 941 DEY 942BPL move 943DEX 944BNE copyloop 945RTS 947JSR incaddr:JSR retrtop 948RTS 950\ 951\ 952\ 957.getaddr:ASL&78:ROL&79:ASL&78:ROL&79:ASL&78:ROL&79:RTS 958.incaddr:CLC:LDA&78:ADC#&80:STA&78:LDA&79:ADC#&02:CMP#&80:BMI incret:SEC:SBC#&50:.incret:STA&79:RTS 959\ 960.storetop:LDY#&07 962.loopst 963LDA(&78),Y 964STA&60,Y 965DEY 966BPL loopst 967RTS 980.retrtop:LDY#&07 982.looprt 983LDA&60,Y 984STA(&78),Y 985DEY 986BPL looprt 987RTS:] 988NEXT PASS 990END