10
20
30 :
40 IFLOMEM+&4100>HIMEM:MODE&87
50 ONERRORREPORT:PROCCloseAll:PRINT:END
60 PRINT"Patch View Professional for Y2K Reading"'
70 DIM ctrl% 30,name% 30,mem% &4100:X%=ctrl%:Y%=X%DIV256
80 PROCPatchVP:PROCPatchVPCoPro:END
90 :
100 DEFPROCPatchVP
110 INPUT"Filename of ViewProfB rom image: "rom$:IFrom$="":ENDPROC
120 OSCLI"Load "+rom$+" "+STR$~mem%
130 IFmem%!12<>&00625057 OR mem%!16<>&00302E32:PRINT"Only works for ViewPb 2.0":ENDPROC
140 INPUT"Filename to save rom image: "save$:IFsave$="":ENDPROC
150 mem%?&1259=&F7:mem%?&125A=&BF
160 mem%!&3FF7=&ADFFF120:mem%!&3FFB=&1B4C060D:mem%?&3FFF=&80
170 mem%!&001B=&0AB038C9:mem%!&001F=&0C8D30A9:mem%!&0023=&8D32A906
180 mem%!&0026=&60060B8D
190 OSCLI"Save "+save$+" "+STR$~mem%+"+4000 0 FFFBBC00"
200 ENDPROC
210 :
220
230 P%=&9258:[JSR &BFF7:]
240 P%=&BFF7:[JSR &FFF1:LDA &060D:JMP &801B:]
250 P%=&801B:[CMP #ASC"8":BCS P%+12:LDA #ASC"0":STA &060C:LDA #ASC"2":STA &060B:RTS:]
260 :
270 DEFPROCPatchVPCoPro
280 INPUT"Filename of VP2nd6502 file: "file$:IFfile$="":ENDPROC
290 in%=OPENUP(file$):PROCRdBytes(in%,mem%,&4000,0)
300 IFmem%!&10<>&6C616E6F OR mem%!&14<>&302E3220:PRINT"Only works for ViewProfessional 2.0":CLOSE#in%:in%=0:ENDPROC
310 INPUT"Filename to save ViewProfessional file: "save$:IFsave$="":CLOSE#in%:in%=0:ENDPROC
320 out%=OPENOUT(save$):IFout%=0:PRINT"Can't open "save$:CLOSE#in%:in%=0:ENDPROC
330 mem%!&1B=&ADFFF120:mem%!&1F=&38C9060D:mem%!&23=&30A90AB0
340 mem%!&27=&A9060C8D:mem%!&2B=&060B8D32:mem%?&2F=&60
350 PROCWrBytes(out%,mem%,&4000,0)
360 PROCRdBytes(in%,mem%,&4057,&4000)
370 mem%?&094A=&1B:mem%?&094B=&40
380 PROCWrBytes(out%,mem%,&4057,&4000)
390 PROCCloseAll:X%!2=&4000:A%=FNfile(save$,2):X%!6=&4000:A%=FNfile(save$,3)
400 ENDPROC
410 :
420 DEFPROCCloseAll
430 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
440 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
450 ENDPROC
460 :
470 DEFPROCRdBytes(in%,addr%,num%,ptr%):PTR#in%=ptr%
480 ?X%=in%:X%!1=addr%:X%!5=num%:X%!9=ptr%:A%=4:CALL&FFD1:ENDPROC
490 DEFPROCWrBytes(out%,addr%,num%,ptr%):PTR#out%=ptr%
500 ?X%=out%:X%!1=addr%:X%!5=num%:X%!9=ptr%:A%=2:CALL&FFD1:ENDPROC
510 DEFFNfile(A$,A%):$name%=A$:?X%=name%:X%?1=name%DIV256:=(USR&FFDD)AND&FF