10
20
30
40
50
60 :
70 Z%=&5000
80 zp1=&7A
90 zp2=zp1+1
100 copyVec1=zp1+2
110 copyVec2=zp1+3
120 copyHi=&93
130 osasci=&FFE3
140 osnewl=&FFE7
150 oswrch=&FFEE
160 osbyte=&FFF4
170 oscli=&FFF7
180 :
190 FOR N%=4 TO 6 STEP 2
200 P%=&8000
210 O%=Z%
220 [ OPT N%
230 BRK
240 BRK
250 BRK
260 JMP whatsUpNow
270 EQUB &82
280 EQUB offset MOD &100
290 EQUB &91
300 .title
310 EQUS"MR SOFTIE'S Magic Soft-Keys Rom"
320 BRK
330 EQUB &0D
340 EQUS" FK (flip banks of f1-f9)"
350 EQUB &0D
360 EQUS" SK (show f1-f9)"
370 EQUB &0D
380 EQUS" WK (wipe f1-f9)"
390 EQUB &0D
400 EQUB &1B
410 .offset
420 BRK
430 EQUS"(C) BBC Acorn User '91"
440 BRK
450 :
460 ]
470 O%=Z%+&1000
480 P%=&9000
490 [ OPT N%
500 :
510 .whatsUpNow
520 PHA
530 PHX
540 PHY
550 CMP #&27
560 BEQ pollJmp
570 CMP #&24
580 BEQ cpyBkJmp
590 CMP #&15
600 BEQ initJmp
610 CMP #9
620 BEQ help
630 CMP #4
640 BEQ youRang
650 :
660 .noClaim
670 PLY
680 PLX
690 PLA
700 RTS
710 :
720 .pollJmp
730 JMP pollOn
740 :
750 .initJmp
760 LDA &209
770 INA
780 BEQ noClaim
790 JMP initiate
800 :
810 .cpyBkJmp
820 JMP copyBack
830 :
840 .help
850 LDA (&F2),Y
860 CMP #&0D
870 BNE notOurHelp
880 JSR osnewl
890 LDX #&FF
900 .helpLoop
910 INX
920 LDA title,X
930 JSR osasci
940 CMP #&1B
950 BNE helpLoop
960 JSR osnewl
970 .notOurHelp
980 JMP noClaim
990 :
1000 .youRang
1010 INY
1020 INY
1030 LDA (&F2),Y
1040 CMP #&0D
1050 BNE notOurs
1060 DEY
1070 LDA (&F2),Y
1080 AND #&DF
1090 CMP #ASC"K"
1100 BNE notOurs
1110 DEY
1120 LDA (&F2),Y
1130 AND #&DF
1140 CMP #ASC"F"
1150 BEQ flipJmp
1160 CMP #ASC"S"
1170 BEQ showJmp
1180 CMP #ASC"W"
1190 BEQ wipeJmp
1200 .notOurs
1210 JMP noClaim
1220 :
1230 .flipJmp
1240 JMP flip
1250 :
1260 .showJmp
1270 JMP show
1280 :
1290 .wipeJmp
1300 JMP wipe
1310 :
1320 .pollOn
1330 LDA #&16
1340 JSR osbyte
1350 JMP noClaim
1360 :
1370 .initiate
1380 SEI
1390 LDA #oscliTrap MOD &100
1400 STA &DAB
1410 LDA #oscliTrap DIV &100
1420 STA &DAC
1430 LDA &F4
1440 STA &DAD
1450 LDA #&FF
1460 STA &209
1470 LDA #&0C
1480 STA &208
1490 CLI
1500 LDA #&17
1510 JSR osbyte
1520 JMP noClaim
1530 :
1540 .oscliTrap
1550 JSR &E802
1560 LDA &701
1570 AND #&DF
1580 CMP #ASC"K"
1590 BNE noNeed
1600 JSR save
1610 JSR byeAndy
1620 .noNeed
1630 RTS
1640 :
1650 .pageInAndy
1660 LDA &F4
1670 ORA #&80
1680 BRA fixRomsel
1690 :
1700 .byeAndy
1710 LDA &F4
1720 AND #&7F
1730 .fixRomsel
1740 STA &FE30
1750 STA &F4
1760 RTS
1770 :
1780 .testPtrs
1790 LDY #&10
1800 .chkLoop
1810 LDA &8011,Y
1820 CMP #&80
1830 BMI fail
1840 CMP #&84
1850 BPL fail
1860 DEY
1870 BPL chkLoop
1880 RTS
1890 .fail
1900 LDA #&12
1910 JSR osbyte
1920 RTS
1930 :
1940 .save
1950 JSR pageInAndy
1960 JSR testPtrs
1970 .update
1980 LDA &800F
1990 STA &F8
2000 LDA &8020
2010 STA &F9
2020 LDY #&21
2030 .upDloop
2040 LDA &8000,Y
2050 STA store,Y
2060 DEY
2070 BPL upDloop
2080 RTS
2090 :
2100 .copyBack
2110 LDY #&10
2120 .chkLoop2
2130 LDA store+&11,Y
2140 CMP #&80
2150 BMI copout
2160 CMP #&84
2170 BPL copout
2180 DEY
2190 BPL chkLoop2
2200 JSR pageInAndy
2210 LDY #&21
2220 .cBloop
2230 LDA store,Y
2240 STA &8000,Y
2250 DEY
2260 BPL cBloop
2270 .copout
2280 JSR byeAndy
2290 JMP noClaim
2300 :
2310 .flip
2320 JSR pageInAndy
2330 SEI
2340 LDY #0
2350 LDX #4
2360 LDA #&80
2370 STA zp2
2380 STZ zp1
2390 LDA #copyHi
2400 STA copyVec2
2410 STZ copyVec1
2420 .flipLoop
2430 LDA (zp1),Y
2440 STA temp
2450 LDA (copyVec1),Y
2460 STA (zp1),Y
2470 LDA temp
2480 STA (copyVec1),Y
2490 INY
2500 BNE flipLoop
2510 INC zp2
2520 INC copyVec2
2530 DEX
2540 BNE flipLoop
2550 CLI
2560 JSR testPtrs
2570 JSR update
2580 :
2590 .show
2600 JSR byeAndy
2610 LDA #&20
2620 STA zp1
2630 STA zp2
2640 LDA &355
2650 CMP #7
2660 BNE showGo
2670 LDA #&82
2680 STA zp1
2690 INA
2700 STA zp2
2710 .showGo
2720 JSR osnewl
2730 LDA #ASC"0"
2740 .shoLoop
2750 PHA
2760 LDA zp1
2770 JSR oswrch
2780 PLA
2790 PHA
2800 JSR oswrch
2810 LDA zp2
2820 JSR oswrch
2830 PLA
2840 PHA
2850 STA shoText+5
2860 LDX #shoText MOD &100
2870 LDY #shoText DIV &100
2880 JSR oscli
2890 PLA
2900 INA
2910 CMP #1+ASC"9"
2920 BNE shoLoop
2930 JSR osnewl
2940 PLY
2950 PLX
2960 PLA
2970 LDA #0
2980 RTS
2990 :
3000 .wipe
3010 LDA #&12
3020 JSR osbyte
3030 JSR pageInAndy
3040 JSR update
3050 JMP show
3060 :
3070 .shoText
3080 EQUS"SHOW ?"
3090 EQUB &0D
3100 :
3110 .temp
3120 BRK
3130 .store
3140 ]
3150 NEXT
3160 OSCLI "SRWRITE "+STR$~Z%+" "+STR$~(O%+1)+" 8000 7"