10 MODE7 11 VDU23,1,0;0;0;0; 20 REM"From K1H not written by me" 30 REM"Author unknown" 40 PRINT'''" Readrom " 50 PRINT'"This program will allow you to" 60 PRINT'"read the contents of any rom." 70 PRINT'"use shift keys to scroll." 80 PRINT''"Option to save rom if required" 90 PRINT'''"Press any key to run it" 100 A=GET 110 REM: READROM 120 MODE7 130 HIMEM=&3C00 140 DIM mcode &100 150 select=&FE30 160 osrdrm=&FFB9 170 osasci=&FFE3 180 osbyte=&FFF4 190 oscli=&FFF7 200 copy=&70 210 temp=&71 220 read=&72 230 write=&74 240 romnumber=&F4 250 rompoint=&F6 260 ON ERROR PRINT:END 270 FOR pass=0 TO 2 STEP 2 280 P%=mcode 290 [OPT pass 300 .number 310 LDA #&AA 320 LDX #0 330 LDY #&FF 340 JSR osbyte \ Find rom table 350 STX read 360 STY read+1 370 LDY copy 380 LDA (read),Y 390 BEQ finish 400 LDA #8 410 STA rompoint 420 LDA #&80 430 STA rompoint+1 440 .readname 450 INC rompoint 460 LDY copy 470 JSR osrdrm 480 CMP #ASC(" ") 490 BCC finish 500 JSR osasci 510 JMP readname 520 .finish 530 RTS 540 .move 550 LDA romnumber 560 STA temp 570 LDA copy 580 STA romnumber 590 STA select 600 LDA #&80 610 STA read+1 620 LDA #&3C 630 STA write+1 640 LDY #0 650 STY read 660 STY write 670 .relocate 680 LDA (read),Y 690 STA (write),Y 700 INY 710 BNE relocate 720 INC read+1 730 INC write+1 740 LDA read+1 750 CMP #&C0 760 BNE relocate 770 LDA temp 780 STA romnumber 790 STA select 800 RTS 810 ] 820 NEXT 830 FOR socket=0 TO 15 840 ?copy=socket 850 IF socket<10 PRINT;" "; 860 PRINT;socket;" "; 870 CALL number 880 PRINT 890 NEXT 900 VDU14 910 REPEAT 920 INPUT'"Which ROM (0-15) "socket 930 UNTIL socket >= 0 AND socket < 16 940 ?copy=socket 950 CALL move 960 PRINT'" to scroll, to exit" 970 ON ERROR PROCsave 980 FOR block=&3C00 TO &7BFF STEP 8 990 PRINT';~block+&4400;" "; 1000 FOR memory=0 TO 7 1010 byte=block?memory 1020 IF byte<16 VDU48 1030 PRINT;~byte;" "; 1040 NEXT 1050 FOR memory=0 TO 7 1060 byte=memory?block 1070 IF byte>31 AND byte<127 VDUbyte ELSE VDU46 1080 NEXT 1090 NEXT 1100 PROCsave 1110 END 1120 DEFPROCsave 1130 ON ERROR PRINT:END 1140 VDU15 1150 INPUT''"Save ROM? (Y/N) "yes$ 1160 REPEAT 1170 IF yes$="Y" INPUT"Filename = "filename$ ELSE INPUT"Another? (Y/N) "yes$:IF yes$<>"Y" END ELSE RUN 1180 size=FALSE 1190 FOR block=&3C00 TO &3D00 1200 IF ?block <> ?(block+&2000) size= TRUE 1210 NEXT 1220 IF size=TRUE size=&4000 ELSE size=&2000 1230 $mcode="SAVE "+filename$+" 3C00+"+STR$~(size)+" FFFF8000 FFFF8000" 1240 X%=mcode MOD 256 1250 Y%=mcode DIV 256 1260 CALL oscli 1270 yes$="" 1280 UNTIL FALSE 1290 ENDPROC