10
20
30
40
50
60 zeropage=&A8
70 units=zeropage
80 tens=zeropage+1
90 pointer=&F2
100 ramcopy=&F4
110 romselect=&FE30
120 mcode%=&0900
130 OSARGS=&FFDA
140 OSBYTE=&FFF4
150 romtype=&2A1
160 DIM mcode% &200:load%=&FFFF0900
170 FOR P=0 TO 1
180 P%=load%:O%=mcode%
190 [OPT P*2+4
200 .error
210 BRK:EQUB 220:EQUS "Syntax: *SRWipe <rom>":BRK
220 :
230 .exec%
240 LDA #0:LDX #1:JSR OSBYTE :\ Find machine type
250 TXA:BNE CmdLine :\ If not Electron, X<>&00
260 LDA #&05:STA ROMSEL+1 :\ Change to Electron ROMSEL
270 DEC ROMTABLE1 :\ Change to Electron ROMTABLE
280 .CmdLine
290 LDA #1:LDX #zeropage:JSR OSARGS :\ Find command line (Y=0 from above)
300 :
310 LDA ramcopy:PHA
320 LDA (zeropage),Y
330 CMP #ASC"0":BCC error
340 CMP #ASC"9"+1:BCC inrange
350 AND #&DF
360 CMP #ASC"A":BCC error
370 AND #&DF:CMP #ASC"F"+1
380 BCC inrangehex
390 SBC #ASC"W":BCC error
400 :
410 TAY:LDX #0
420 .findram
430 JSR SelectRom
440 LDA &8008
450 EOR #&AA
460 STA &8008
470 CMP &8008
480 BEQ foundram
490 .nextram
500 INX
510 CPX #16
520 BNE findram
530 BEQ error
540 .foundram
550 EOR #&AA
560 STA &8008
570 DEY
580 BPL nextram
590 BMI wipe
600 .errorjmp
610 JMP error
620 .inrangehex
630 SBC #6
640 .inrange
650 AND #15
660 TAX
670 CMP #1
680 BNE wipe
690 INY
700 LDA (zeropage),Y
710 CMP #ASC"!"
720 BCC wipe
730 CMP #ASC"0"
740 BCC errorjmp
750 CMP #ASC"6"
760 BCS errorjmp
770 AND #15
780 ADC #10
790 .wipe
800 JSR SelectRom
810 LDA #0
820 .ROMTABLE1
830 STA romtype,X
840 STA zeropage+0
850 LDX #&BF
860 STX zeropage+1
870 TAY
880 .clear
890 STA (zeropage),Y
900 INY
910 BNE clear
920 DEC zeropage+1
930 BMI clear
940 :
950 .done
960 PLA:TAX :\ Restore ROM
970 .SelectRom
980 LDA #12:JSR SelectRom2
990 TXA:STA &FF30,X :\ Enable WERAM writes
1000 .SelectRom2
1010 STA &F4
1020 .ROMSEL
1030 STA &FE30:RTS :\ Select ROM
1040 :
1050 EQUS "v1.04"
1060 ]:NEXT
1070 PRINT" *SAVE SRWipe ";~mcode%;" ";~O%;" ";~exec%OR&FFFF0000;" ";~load%