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