10
20
30
40 :
50 PRINT"1: Mode 7 display"'"2: Mode 0 display"
60 REPEATA$=GET$:UNTILINSTR("12",A$)
70 IFA$="1":PROCm7 ELSE PROCm0
80 END
90 :
100 DEFPROCm7
110 FOR P=0 TO 1
120 P%=&900
130 [OPT P*3
140 CMP #4:BNE ignore
150 TXA:PHA
160 TSX:TXA:STA stack
170 CLC:ADC #16
180 CMP #&D8:BCC not_do
190 STA index2:AND #&FE:STA index
200 LDX #&D8
210 .do_loop
220 LDA #32
230 CPX index:BNE put_space
240 LDA #ASC"5":BIT index2
250 BEQ put_space:LDA #ASC"j"
260 .put_space
270 STA &7B28,X:INX:INX
280 BMI do_loop
290 LDA #151:STA &7C00
300 .not_do
310 PLA:TAX
320 LDA #4
330 .ignore
340 JMP (old)
350 .old
360 EQUW 0
370 .index
380 EQUB 0
390 .index2
400 EQUB 0
410 .stack
420 EQUB 0
430 ]NEXT
440 END
450 DEFPROCon
460 !old=!&220
470 ?&220=0:?&221=9
480 *FX14,4
490 END
500 FOR P=0 TO 1
510 P%=&A00
520 [OPT P*3
530 JSR &FFE0
540 CMP #13:BNE again
550 RTS
560 .again
570 JSR &A00
580 RTS
590 ]
600 NEXT
610 END
620 REPEAT
630 DRAW 256*4,0:CLS
640 DRAW 256*4,1024
650 MOVE 256*4,500
660 FOR A=256 TO 0 STEP -16:MOVE 4*A,500:DRAW 4*A,508:NEXT
670 TIME=0
680 MOVE 4*256,0
690 FORA=0TO 1023/2:DRAW4*?&943,A:NEXT
700 PRINTTIME
710 UNTIL0
720 :
730 DEFPROCm0:OSBYTE=&FFF4
740 OSWRCH=&FFEE:WRCHV=&20E:USERV=&220:VduQueue=&26A
750 :
760 FOR P=0 TO 1
770 P%=&900
780 [OPT P*3
790 :
800 .vector
810 BIT VduQueue:BMI VduBusy
820 BIT IAmBusy:BMI VduBusy
830 PHA:TXA:PHA:TYA:PHA
840 SEC:ROR IAmBusy
850 LDY Ycoord:BNE NoRedraw
860 LDX #0:.RedrawLp1
870 LDA Window,X:JSR OSWRCH:INX:CPX #27:BNE RedrawLp1
880 LDY #128:LDX #0:.RedrawLp2
890 JSR Move:DEY:JSR Draw:INY
900 TXA:CLC:ADC #16:TAX:BNE RedrawLp2
910 TSX:LDY #255:JSR Move
920 .NoRedraw
930 DEC Ycoord
940 TSX:LDY Ycoord:JSR Draw
950 ASL IAmBusy
960 PLA:TAY:PLA:TAX:PLA
970 .VduBusy
980 .old
990 JMP 0
1000 :
1010 .Move:LDA #4:BNE Plot
1020 .Draw:LDA #5
1030 .Plot
1040 PHA:LDA #25:JSR OSWRCH:PLA:JSR OSWRCH
1050 TXA:ROL A:ROL A:PHA:PHP:AND #&FC:JSR OSWRCH
1060 PLP:PLA:ROL A:AND #3:JSR OSWRCH
1070 TYA:ROL A:PHP:AND #&FE:JSR OSWRCH
1080 PLP:LDA #0:ROL A:ORA #2:JMP OSWRCH
1090 :
1100 .VduVector
1110 PHP:SEC:ROR IAmBusy
1120 .OldVdu
1130 JSR 0
1140 ASL IAmBusy:PLP:RTS
1150 :
1160 .IAmBusy:EQUB 0
1170 .Ycoord:EQUB 0
1180 .Window
1190 EQUB 24:EQUW 0:EQUW 512:EQUW 1279:EQUW 1023:\ Set G-Window
1200 EQUB 16:EQUB 28:EQUB 0:EQUB 31:EQUB 79:EQUB 16:\ CLG, Set T-Window
1210 EQUB 25:EQUB 4:EQUW 1024:EQUW 1023:\ MOVE 1024,1023
1220 EQUB 25:EQUB 5:EQUW 1024:EQUW 512:\ DRAW 1024,512
1230 :
1240 .go%
1250 PHP:SEI
1260 LDA USERV:STA old+1:LDA USERV+1:STA old+2
1270 LDA #vector AND 255:STA USERV
1280 LDA #vector DIV 256:STA USERV+1
1290 LDA WRCHV:STA OldVdu+1:LDA WRCHV+1:STA OldVdu+2
1300 LDA #VduVector AND 255:STA WRCHV
1310 LDA #VduVector DIV 256:STA WRCHV+1
1320 LDA #14:LDX #4:JSR OSBYTE
1330 PLP:RTS
1340 ]NEXT
1350 :
1360 PRINT"*Save Stack FFFF0900 ";~P%OR&FFFF0000;" ";~go%OR&FFFF0000
1370 ENDPROC
1380 DEFPROCtest
1390 CLS
1400 REPEAT
1410 $&7C00="!&268=&"+STR$~(!&268)+" !&26C=&"+STR$~(!&26C)
1420 :
1430 VDUGET:UNTIL0