10
20
30
40
50
60
70 :
80 bugfix%=FALSE:
90 ON ERROR PROCpr:REPORT:PROCClose_All:PRINT" at line ";ERL:END
100 A$=FNOS_GetEnv:ver$="0.13":debug%=0:PROCInit:A%=FN_DEBUG(STR$debug%)
110 IFbugfix%:IFPAGE>&FFFFF:SYS "GetCommandLine" TO name%:IFINSTR($$name%,"bbcwin.exe")=0:A$="-"
120 IF A$="-":A$=""
130 quiet%=A$<>""
140 IF A$="":PRINT"6809 Emulator v"ver$" (C)2014-2015 J.G.Harston"
150 IF A$="":PRINT"Memory start: &"FNh0(mem%,8)" MemSz: &"FNh0(mz%,6)" MemMsk: &"FNh0(mm%,6)
160 IF A$="":PRINT"Program space: &"FNh0(mbot%,6)"-&"FNh0(mtop%,6)" ";(mtop%-mbot%);" bytes"'
170 ON ERROR PROCError:A$=""
180
190 IF A$<>"":A%=FN_RUN(A$)
200 IF run%:PROCGo
210 IF quiet%:A%=FN_QUIT("")
220 ON ERROR PROCError:A$=""
230 quiet%=TRUE:REPEAT INPUT LINE"6809> "A$:PROCcmd(A$,0):UNTIL0
240
250 IF A$<>"":IFLEFT$(A$,1)="*":PROCcmd(MID$(A$,2),0) ELSE IF A$<>"":A%=FN_RUN(A$)
260 END
270 :
280 DEFPROCInit
290 d$=".":s$="/":IFos%AND40:d$="/":s$=".":IFos%>31:d$="\"
300 IFbugfix%:IFPAGE>&FFFFF:run$=@dir$+"*"
310 runpath$=run$:IF LEFT$(runpath$,1)="""":runpath$=MID$(runpath$,2,LEN runpath$-2)
320 REPEAT runpath$=LEFT$(runpath$):UNTIL INSTR(d$+":",RIGHT$(runpath$,1))
330 IFos%=32:mx%=@vdu%!208:my%=@vdu%!212:mw%=@vdu%!216:mh%=@vdu%!220:mc%=@vdu%?73+1
340 mz%=FNmemsize:mm%=mz%-1:mtop%=mz%:mbot%=0:run%=FALSE:trace0%=0:trace1%=&FFFF
350 DIM ctrl% 31,name% 255,mem% mz%:zp%=name%:hdr%=zp%:X%=ctrl%:Y%=X%DIV256
360 DIM d_path$(3):d_drv%=-1:d_chn%=0:prog%=&F800:err%=&FF00:escflg%=&FF80:osw0%=FALSE
370 ra%=0:rb%=0:rx%=0:ry%=0:rp%=0:rdp%=0:rs%=0:ru%=0:rpc%=0:errpc%=0
380
390
400
410 basic$="":IF os%>31:basic$=@dir$+"6809bas.bin" ELSE IF os%=6:basic$="<6809$Basic>"
420 PROCclient:IF client$<>"":OSCLI "Load """+client$+""" "+STR$~(mem%+&F800)
430 PROCEscInit:ENDPROC
440 :
450 DEFFNmemsize:A%=2^INT(LN(HIMEM-LOMEM-1024)/LN2):IF A%<&10000:=A% ELSE =&10000
460 DEFPROCclient:client$="":pc%=0:REPEAT
470 client$=MID$("Tube ClientSerial",pc%*6+1,6+2*(pc%=0))
480 IF os%>31:client$=FNf_name(runpath$+client$+"09.bin") ELSE client$=FNf_name(runpath$+client$+"09*")
490 in%=OPENIN(client$):pc%=pc%+1:UNTIL pc%=3 OR in%<>0
500 IF in%:CLOSE#in%:in%=0 ELSE client$=""
510 ENDPROC
520 :
530 DEFPROCError:X%=ctrl%:Y%=X%DIV256:errpc%=rpc%:IF INKEY-1:run%=FALSE
540 IF NOTrun%:PROCpr:REPORT:PROCClose_All:PRINTLEFT$(" at line "+STR$ERL,ERR<128 AND ERR<>17):IF INKEY-1:PROCRegDump
550 IF ERR=25:IFrun%:IF os%=32:run%=FALSE:VDU 23,22,mx%;my%;mw%,mh%,mc%,128:run%=TRUE:ENDPROC
560 IF ERR=17:mem%?escflg%=255:rp%=rp%OR(osw0%AND1):IFosw0%:osw0%=FALSE:ENDPROC
570
580 IF run%:mem%!err%=ERR:mem%?(err%+4)=&3F:mem%?(err%+5)=ERR:A%=ERR<128 AND ERR<>17:$(mem%+err%+6)=LEFT$("6809Em at $"+FNh0(rpc%,4)+": ",A%)+REPORT$+LEFT$(" at line "+STR$ERL,A%AND(ERL>0))+CHR$0:rp%=rp%OR2:rx%=err%+5:rpc%=err%+4:IFERR=17:mem%?escflg%=&FF
590 ENDPROC
600 DEFPROCpr:IF?(TOP-3):ENDPROC ELSE PRINT:ENDPROC
610 :
620 DEFPROCcmd(A$,link%):REPEAT:A$=FNs(A$):IFLEFT$(A$,1)="*":A$=MID$(A$,2)
630 UNTIL LEFT$(A$,1)<>"*" AND LEFT$(A$,1)<>" ":reset%=0
640
650 IF A$=""ORLEFT$(A$,1)="|":ENDPROC
660
670 IF LEFT$(A$,1)=".":OSCLI "."+MID$(A$,2)+LEFT$(LEFT$("\",LENA$>2)+"*.*",os%=32):ENDPROC
680 IF LEFT$(A$,1)="/":A$="RUN "+MID$(A$,2)
690 IF FNuc(LEFT$(A$,2))="FX":IF VALMID$(A$,3) OR (MID$(A$,3,1)="0"):OSCLIA$:ENDPROC
700 A%=INSTR(A$+" "," "):C$=FNuc(LEFT$(A$,A%-1)):T$=MID$(A$,A%+1)
710 A%=INSTR(" BASIC CORE DEBUG FLEX GO HELP LOAD MDUMP MDIS MEDIT MOUNT QUIT RUN RESET REG SAVE "," "+C$+" ")
720 IF A%:A%=EVAL("FN_"+C$+"(T$)"):ENDPROC
730 A%=FN_run(C$+" "+T$,TRUE):ENDPROC
740 :
750 DEFFN_HELP(A$):PRINT'"6809 Emulator ";ver$:IF FNuc(A$)<>"6809":=0
760 PRINT" BASIC"'" CORE <fsp>"'" DEBUG (<value> (<lowaddr> <highaddr>))"'" FLEX (<drv>)"'" GO (<addr>)"'" HELP"
770 PRINT" LOAD <afsp> <addr>"'" MDUMP <addr>"'" MDIS <addr>"'" MOUNT <drv> <afsp>"'" QUIT"'" RESET (<afsp>)"'" RUN <afsp>"
780 PRINT" SAVE <fsp> <start> <end>|+<length> (<exec> (<load>))"
790 =0
800 :
810 DEFFN_MDIS(A$):LOCAL N%,P%,C%
820 PROCaddrs:P%=start%:N%=16:IF num%<2:size%=256
830 REPEAT:C%=16:REPEATPRINTFNo0(P%,6);" ";:A$=FNdis(P%)
840 FOR A%=0 TO N%-1 STEP 2:PRINTFNo0(mem%!(P%+A%)AND&FFFF,6);" ";:NEXT
850 PRINTSPC(21-3.5*N%);:FOR A%=0 TO N%-1:PRINTFNc(mem%?(P%+A%));:NEXT:PRINTSPC(7-N%);A$
860 P%=(P%+N%)AND&FFFF:C%=C%-1:size%=size%-N%:UNTIL C%=0 OR size%<0:IF size%>0:A%=GET ELSE A%=0
870 UNTIL A%=27 OR size%<0:=0
880 :
890 DEFFN_MDUMP(A$):LOCAL N%,P%,C%
900 PROCaddrs:P%=start%:N%=16:IF num%<2:size%=256
910 REPEAT:C%=16:REPEATPRINTFNh0(P%,4);" ";
920 FOR A%=0 TO N%-1:PRINTFNh0(mem%?(P%+A%),2);" ";:NEXT
930 FOR A%=0 TO N%-1:PRINTFNc(mem%?(P%+A%));:NEXT:PRINT
940 P%=(P%+N%)AND&FFFF:C%=C%-1:size%=size%-N%:UNTIL C%=0 OR size%<0:IF size%>0:A%=GET ELSE A%=0
950 UNTIL A%=27 OR size%<0:=0
960 :
970 DEFFN_MEDIT(A$):=0
980 :
990 DEFFN_SAVE(A$)
1000 PROCfname:PROCaddrs
1010 IF num%<2:ERROR 252,"Bad address"
1020 IF start%>=0:start%=mem%+(start%ANDmm%)
1030 OSCLI "SAVE """+FNf_name(F$)+""" "+STR$~start%+"+"+STR$~size%+" "+STR$~exec%+" "+STR$~load%
1040 =0
1050 :
1060 DEFFN_LOAD(A$)
1070 PROCfname:PROCaddrs:IF num%=0:load%=-1
1080 =FN_load(F$,load%,TRUE)
1090 :
1100 DEFFN_QUIT(A$):IF VAL A$:halt%=TRUE:=0
1110 d_chn%=d_chn%:IFd_chn%:A%=d_chn%:d_chn%=0:CLOSE#A%
1120 PROCClose_All:
1130 OSCLI"QUIT":=0
1140 :
1150 DEFFN_BASIC(A$):A%=FN_basic(A$):rp%=1:rpc%=A%:=FN_go
1160 DEFFN_basic(A$):IF A$="":A$=basic$:IF A$="":A$="EXBAS09"
1170 in%=OPENIN(FNf_name(A$)):IF in%:CLOSE#in%:in%=0:A%=FN_LOAD(A$) ELSE A%=FN_LOAD(A$+s$+"bin")
1180 =A%
1190 :
1200 DEFFN_RESET(A$):CLS:A%=-1
1210 IF FNuc(A$)="TUBE":IF client$<>"":OSCLI"Load """+client$+""" "+STR$~(mem%+&F800):A$=""
1220 PRINT'$(mem%+&F817)''"Econet Station 128"':A%=FN_basic(A$)
1230 B%=mem%+A%+9:REPEATVDU?B%:B%=B%+1:UNTIL?B%=0:PRINT'
1240 rp%=0:rpc%=A%:A$="":=FN_go
1250 :
1260 DEFFN_load(RETURN F$,A%,F%)
1270 in%=0:size%=0:IF A%=-1 THEN
1280 in%=FNf_openin(F$):IF in%=0:F$=F$+s$+"bin":in%=FNf_openin(F$)
1290 IF in% THEN
1300 IF A%<0:IF PAGE<&FFFFF:SYS"XOS_File",5,F$,-1 TO ,,A%:IF(A%AND&FFFFFF00)=&FFFBBC00:A%=&8000
1310 size%=EXT#in%:PROCgbpb(4,in%,hdr%,256,0)
1320 IF hdr%!(hdr%?7)=&29432800 THEN
1330 A%=&8000:IF (hdr%?6 AND 32):A%=hdr%?7:REPEATA%=A%+1:UNTILhdr%?A%=0:A%=hdr%!(A%+1)
1340 ENDIF
1350 ELSE
1360 A%=-2:
1370 ENDIF
1380 ENDIF
1390 IF in%:IF F% OR A%=-1:CLOSE#in%:in%=0
1400 IF A%=-2:IF F%:ERROR 214,"File not found"
1410 IF A%=-1 OR (A%+size%>mm%):ERROR 252,"Bad address"
1420 IF F%:OSCLI"Load """+FNf_name(F$)+""" "+STR$~(mem%+A%)
1430 =A%
1440 :
1450 DEFFN_MOUNT(A$)
1460 IF A$="":FOR A%=0 TO 3:PRINT;A%;" ";d_path$(A%);LEFT$(":"+STR$(A%),d_path$(A%)=""):NEXT:=0
1470 IF A$="*":FOR drv%=0 TO 3:PROCfdc_info(drv%):NEXT:=0
1480 IF MID$(A$,2,1)<>" " OR LEFT$(A$,1)<"0" OR LEFT$(A$,3)>"3":OSCLIA$:=0
1490 A%=VALLEFT$(A$,1):d_path$(A%)=FNs(MID$(A$,3)):=0
1500 :
1510 DEFFN_FLEX(A$)
1520 IF A$="":IF d_path$(0)="":IF os%=6 :A$="0":d_path$(0)="^.Flex09.Flex301/vdk"
1530 IF A$="":IF d_path$(0)="":IF os%>31:A$="0":d_path$(0)="..\BBCFlex\BBCFLEX6.dsd"
1540 IF A$="":A$="0"
1550 IF LENA$>1:d_path$(0)=A$:A$="0"
1560 IF LENA$<>1 OR (VALA$<0 OR VALA$>3):ERROR 205,"Bad drive":=0
1570 drv%=VALA$:IF d_path$(drv%)="":ERROR 214,"Only disk images currently supported":=0
1580 PROCfdc_info(drv%) :
1590 A%=FNfdc_disk(&53,mem%+&C100,drv%,0,0,0,2):
1600 d_exec%=mem%!&C20A AND &FFFF
1610 rpc%=d_exec%:PROCGo:=0
1620 :
1630 DEFPROCsyscmd(cli$):IF os%<>32:OSCLI cli$:ENDPROC
1640 LOCAL ch%,err$,tmp$:tmp$=@tmp$+STR$TIME+"."
1650 LOCAL ERROR:ON ERROR LOCAL:RESTORE ERROR:IF ERR=214:OSCLI cli$:ENDPROC ELSE ERROR ERR,REPORT$:ENDPROC
1660 OSCLI cli$+" 2>"+tmp$:ch%=OPENIN(tmp$):IF ch%=0:ENDPROC
1670 err$=GET$#ch%:CLOSE#ch%:OSCLI"Delete "+tmp$:IF RIGHT$(err$,1)=",":RIGHT$(err$,1)="."
1680 ERROR 254,err$:ENDPROC
1690 :
1700 DEFFN_RUN(A$)
1710 IF PAGE<&FFFFF:SYS"XOS_File",5,A$ TO ,,A%:A%=A%AND&FFF00:IF A%=&FFB00 OR A%=&1C700:=FN_BASIC(A$)
1720 =FN_run(A$,FALSE)
1730 DEFFN_run(A$,osc%):A$=FNs(A$):IF A$="":=0
1740 C$=A$:PROCfname:hdr%=zp%:A%=FN_load(F$,-1,FALSE):IF A%<0:IF osc%:PROCsyscmd(C$):=0
1750 IF A%<0:ERROR 214,"File not found"
1760 rp%=1:=FN_go
1770 DEFFN_go
1780
1790
1800
1810 ra%=0:rpc%=A%:hdr%=mem%+A%
1820 IF hdr%!(hdr%?7)=&29432800 THEN
1830 IF (hdr%?6 AND 64)=0 :ERROR 249,"Not a language":=0
1840 IF (hdr%?6 AND 15)<>3:ERROR 249,"Not 6809 code":=0
1850 M%=hdr%-mem%+9:REPEAT:M%=M%+1:UNTILmem%?M%=0:A%=M%+1
1860 mem%?&FF82=A%DIV256:mem%?&FF83=A% :
1870 ra%=1 :
1880 ENDIF
1890 B%=256*mem%?&FFBA+mem%?&FFBB:A%=B%-2:A%=256*mem%?A%+mem%?(A%+1) :
1900 REPEAT:A%=A%+1:UNTIL mem%?A%=&34 OR (mem%!A% AND &FFFFFF)=&8CFFBE :
1910 mem%!&FF8C=0:mem%?&FF8C=rpc%DIV256:mem%?&FF8D=rpc%:rpc%=A% :
1920 REPEATB%=B%+1:UNTILmem%!B%=&39303836:B%=B%+7:B%=256*mem%?B%+mem%?(B%+1) :
1930 IF link%=0:rs%=rpc%-2:IFrs%>prog%:rs%=prog% :
1940 IF link%=0:rs%=rs%-2:mem%?rs%=&FF:mem%?(rs%+1)=&A7 :
1950 $(mem%+B%)=LEFT$(A$,63):mem%?&FF86=B%DIV256:mem%?&FF87=B% :
1960 rx%=B%:PROCGo:=0 :
1970 :
1980 DEFFN_REG(A$):A%=INSTR(A$,"="):IFA%=0:=0
1990 R%=VALLEFT$(A$,A%-1):A%=FNhex(MID$(A$,A%+1))
2000 IFR%=0:ra%=A%
2010 IFR%=1:rb%=A%
2020 IFR%=2:rx%=A%
2030 IFR%=3:ry%=A%
2040 IFR%=4:ru%=A%
2050 IFR%=5:rs%=A%
2060 IFR%=6:rdp%=A%
2070 IFR%=7:rp%=A%
2080 PROCRegDump:=0
2090 :
2100 DEFFN_GO(A$):IF A$="":=0
2110 A%=&FF90:IFA$<>"":IFINSTR("[(",LEFT$(A$,1)):A%=FNhex(MID$(A$,2)) ELSE IFA$<>"":rpc%=FNhex(A$):A%=-1
2120 IFA%<>-1:rpc%=256*mem%?A%+mem%?(A%+1)
2130 A%=INSTR(A$,";"):IF A%:A$=MID$(A$,A%+1) ELSE A$=""
2140 F$="":A%=rpc%:hdr%=mem%+A%:rp%=1:=FN_go
2150 :
2160 DEFFN_CORE(A$):
2170 A$=FNf_name(FNs(LEFT$(A$,INSTR(A$+" "," ")-1))):IFA$="":A$="core"
2180 OSCLI"Save "+A$+" "+STR$~mem%+"+"+STR$~mz%
2190 PROCSetType(A$,&FFD)
2200 =0
2210 :
2220 DEFFN_DEBUG(A$):IFA$="":PRINT"1=Register Dump"'"3=Single Step"'"4=Don't emulate MOS calls"'"8=Display MOS calls":=0
2230 debug%=0:trace0%=0:trace1%=&FFFF:IF FNuc(A$)="OFF":=0
2240 debug%=EVAL(A$):IF(debug%AND1):IF VPOS<9:REPEAT PRINT:UNTIL VPOS>8
2250 A%=INSTR(A$," "):IF A%:trace0%=FNhex(MID$(A$,A%+1)):A$=MID$(A$,A%+1)
2260 A%=INSTR(A$," "):IF A%:trace1%=FNhex(MID$(A$,A%+1))
2270 =0
2280 :
2290 DEFPROCSetType(A$,A%):IF os%>8:ENDPROC
2300 OSCLI"SetType "+A$+" "+STR$~A%
2310 ENDPROC
2320 :
2330 DEFFNhex(A$)
2340 IFFNuc(LEFT$(A$,2))="&O":=EVAL("&"+FNh0(FNoct(MID$(A$,3)),8)) ELSE =EVAL("&"+FNuc(A$))
2350 DEFFNoct(A$):LOCAL A%:REPEAT
2360 IF A$>"/" AND A$<":":A%=A%*8+VAL LEFT$(A$,1):A$=MID$(A$,2)
2370 UNTIL NOT(A$>"/" AND A$<":"):=A%
2380 :
2390 DEFPROCfname
2400 IFLEFT$(A$,1)="""":A%=INSTR(A$+"""","""",2):F$=MID$(A$,2,A%-2) ELSE A%=INSTR(A$+" "," "):F$=LEFT$(A$,A%-1)
2410 A$=FNs(MID$(A$,A%+1)):ENDPROC
2420 :
2430 DEFPROCaddrs
2440 num%=0:start%=0:size%=0:load%=0:exec%=0
2450 A$=FNs(A$):IF A$="":ENDPROC
2460 num%=INSTR(A$,"+"):IF num%=0:num%=INSTR(A$+" "," ")
2470 start%=FNhex(LEFT$(A$,num%-1)):load%=start%:exec%=load%:A$=FNs(MID$(A$,num%)):num%=1:IF A$="":ENDPROC
2480 IF LEFT$(A$,1)="+":size%=0:A$=FNs(MID$(A$,2)) ELSE size%=start%
2490 num%=INSTR(A$+" "," "):size%=FNhex(LEFT$(A$,num%-1))-size%:A$=FNs(MID$(A$,num%+1)):num%=2:IF A$="":ENDPROC
2500 num%=INSTR(A$+" "," "):exec%=FNhex(LEFT$(A$,num%-1)):A$=FNs(MID$(A$,num%+1)):num%=3:IF A$="":ENDPROC
2510 num%=INSTR(A$+" "," "):load%=FNhex(LEFT$(A$,num%-1)):A$=FNs(MID$(A$,num%+1)):num%=4
2520 ENDPROC
2530 :
2540 DEFPROCRegDump
2550 PRINT"A=&"FNh0(ra%,2)" X=&"FNh0(rx%,4)" U=&"FNh0(ru%,4)" DP=&"FNh0(rdp%DIV256,2)" PC=&"FNh0(rpc%,4)
2560 PRINT"B=&"FNh0(rb%,2)" Y=&"FNh0(ry%,4)" S=&"FNh0(rs%,4)" CC=&"FNh0(rp%,2);" ";
2570 FOR A%=7 TO 0 STEP -1:PRINTMID$("-CVZNIHFE",(((rp%AND(2^A%))<>0)AND(A%+1))+1,1);:NEXT:PRINT" "
2580 PRINT " X=&";:PROCDumpLine(rx%):PRINT
2590 PRINT " Y=&";:PROCDumpLine(ry%):PRINT
2600 PRINT " U=&";:PROCDumpLine(ru%):PRINT
2610 PRINT " S=&";:PROCDumpLine(rs%):PRINT
2620 PRINT "PC=&";:PROCDumpLine(rpc%)
2630 PRINTFNdis(rpc%);SPC(66-POS)
2640 ENDPROC
2650 :
2660 DEFPROCDumpLine(m%):PRINT FNh0(m%,4)" ";
2670 FOR B%=m% TO m%+7:PRINT FNc(mem%?B%);:NEXT:VDU32
2680 FOR B%=m% TO m%+7:PRINT FNh0(mem%?(B%ANDmm%)AND&FF,2)" ";:NEXT
2690 ENDPROC
2700 :
2710 DEFFNdis(A%):LOCAL X%,Y%:X%=ctrl%:Y%=X%DIV256:N%=FNDis_Code(68,A%,mem%+(A%ANDmm%)):=$(X%+4)
2720 :
2730 DEFFNc(A%):A%=A%AND255:IF A%<32 OR A%>126:="." ELSE =CHR$ A%
2740
2750
2760 :
2770 DEFPROCEscInit:esch%=esch%:IFesch%:ENDPROC
2780 IFos%>31 THEN
2790 DIM P% 36, L% -1:[OPT 8:.escyes:mov byte [edi-1],0:mov eax,-1:ret
2800 .esch%:mov ecx,256:mov edi,[@vdu%-148]:mov al,27:cld
2810 repnz scasb:jz escyes:xor eax,eax:ret:.escb%:dw 0:dw 0:]:ENDPROC
2820 ENDIF
2830 DIM esch% 31:FOR P=0 TO 1:P%=esch%:[OPT P*2:MOV R11,R11,LSL #1
2840 LDR R12,escb%:STRB R11,[R12]:MOV PC,R14:.escb%:EQUD mem%+escflg%:]:NEXT:escho%=0:ENDPROC
2850 DEFPROCEscOff:escho%=escho%:IFescho%:ENDPROC
2860 IFos%<32:SYS "OS_ChangeEnvironment",9,esch%,0,0 TO ,escho%,escRo%,escbo%:ENDPROC
2870 OSCLI"ESC OFF":escho%=TRUE:ON TIME IFUSResch%:mem%?escflg%=&FF:RETURN ELSE RETURN
2880 ENDPROC
2890 DEFPROCEscOn:escho%=escho%:IFescho%=0:ENDPROC
2900 IFos%<32:SYS "OS_ChangeEnvironment",9,escho%,escRo%,escbo%:escho%=0:ENDPROC
2910 ON TIME OFF:escho%=0:OSCLI"ESC ON":ENDPROC
2920 :
2930 DEFPROCClose_All
2940 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
2950 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
2960 ENDPROC
2970 :
2980 DEFPROCfdc_info(drv%)
2990 A%=FNfdc_disk(&53,mem%+&C100,drv%,0,0,0,0):IF A%:PRINT"No disk in drive ";drv%:ENDPROC
3000 PRINT"System Information Record for ";d_title$;":"
3010 PRINT"Disk shape:";FNd(d_trk%+1,5);" tracks ";FNd(d_sec%,3);" sectors ";d_sid%;" sides"
3020 PRINT"Disk used: ";FNd(d_used%,5);" sectors ";FNd(d_used%*256,8);" bytes ";FNd(d_used%/4,5);"K"
3030 PRINT"Disk free: ";FNd(d_free%,5);" sectors ";FNd(d_free%*256,8);" bytes ";FNd(d_free%/4,5);"K"
3040 PRINT"Disk size: ";FNd(d_size%,5);" sectors ";FNd(d_size%*256,8);" bytes ";FNd(d_size%/4,5);"K"
3050 ENDPROC
3060 :
3070 DEFFNfdc_disk(cmd%,add%,drv%,trk%,sid%,sec%,num%):LOCAL ptr%
3080 IF drv%>3:drv%=(drv%DIV2)+(drv%AND1)
3090 IF(debug%AND8):PRINT"cmd:";FNh0(cmd%,2);" add:";~add%-mem%;" ";
3100 IF(debug%AND8):PRINT"drv:";drv%;" trk:";trk%;" sid:";sid%;" sec:";sec%;" num:";num%;" ";
3110 IF drv%<>d_drv%:IF d_chn%:CLOSE#d_chn%:d_chn%=0 :
3120 IF d_chn%=0 THEN
3130 IF d_path$(drv%)="":=&1E :
3140 d_chn%=OPENUPd_path$(drv%):IF d_chn%=0:=&1E :
3150 ENDIF
3160 IF drv%<>d_drv%:d_drv%=-1:IF FNfdc_exam(drv%):=&1E :
3170 d_drv%=drv%:IF num%=0:=0 :
3180 IF d_chn%=0:=&1E
3190 sec%=sec%-d_sec0%
3200 IF d_sid%=1:ptr%=((sid%*80+trk%)*d_num%+sec%)*d_bps%+d_off%
3210 IF d_sid%=2:ptr%=((trk%*2 +sid%)*d_num%+sec%)*d_bps%+d_off%
3220
3230
3240 IF(debug%AND8):PRINT"ptr:&";FNh0(ptr%,6)
3250 IF cmd%=&4B:cmd%=1
3260 IF cmd%=&53:cmd%=3
3270 IF cmd%=&57:cmd%=3
3280 IF cmd%=&5B:FOR A%=0 TO d_num%+2:add%!(A%*4)=(A%MODd_num%)*65536:NEXT:=0
3290
3300
3310 IF cmd%<5:PROCgbpb(cmd%,d_chn%,add%,num%*d_bps%,ptr%)
3320 =0
3330 :
3340 DEFFNfdc_exam(drv%)
3350
3360
3370
3380
3390
3400
3410
3420
3430 PTR#d_chn%=0
3440 IF BGET#d_chn%+256*BGET#d_chn%=&6B64 THEN
3450 d_off%=BGET#d_chn%+256*BGET#d_chn%
3460 PTR#d_chn%=8
3470 d_trk%=BGET#d_chn%
3480 d_sid%=BGET#d_chn%
3490 d_sec%=(EXT#d_chn%-d_off%) DIV (d_trk%*d_sid%*256)
3500 ELSE
3510 d_off%=0
3520 d_trk%=EXT#d_chn% DIV 2560
3530 d_sid%=1
3540 d_sec%=10
3550 ENDIF
3560 d_num%=d_sec%:d_bps%=256:d_sec0%=0
3570 PTR#d_chn%=&221
3580 d_free%=256*BGET#d_chn%+BGET#d_chn%
3590 PTR#d_chn%=&226
3600 d_trk% =BGET#d_chn%
3610 d_sec% =BGET#d_chn%
3620 IF d_sec%>19:d_sid%=2 ELSE d_sid%=1
3630 d_num% =d_sec% DIV d_sid%
3640 d_size%=(d_trk%+1)*d_sec%
3650 d_used%=d_size%-d_free%
3660 PTR#d_chn%=&210:d_title$=""
3670 REPEAT:A%=BGET#d_chn%:IF A%:d_title$=d_title$+CHR$A%
3680 UNTILA%=0 OR LENd_title$=12
3690 =0
10
20
30
40 :
50 DEFPROCGo:abort%=FALSE:halt%=0:run%=TRUE:PROCEscOff
60 REPEAT:IF(debug%AND1):IF rpc%>=trace0% AND rpc%<=trace1%:x%=POS:y%=VPOS:VDU30:PROCRegDump:VDU31,x%,y%:IF(debug%AND2):IFGET
70
80 B%=mem%?rpc%:rpc%=rpc%+1
90
100 UNTIL EVAL("FNm"+STR$~(B%AND&F0)+"+FN_"+STR$~(B%AND&FF))
110 PROCEscOn:run%=FALSE:IF NOTquiet% OR abort%:PROCRegDump
120 ENDPROC
130 :
140 :
150
160
170 DEFPROCflg8(A%):rp%=(rp%AND&F1)OR(((A%AND255)=0)AND4)OR((A%AND128)DIV16):ENDPROC
180 DEFPROCcmp8(A%):rp%=(rp%AND&F0)OR(((A%AND255)=0)AND4)OR((A%AND128)DIV16)OR((A%AND256)DIV256):ENDPROC
190
200
210
220
230
240
250
260
270
280
290
300
310
320
330
340
350
360
370
380
390
400
410 DEFPROCflg16(A%):rp%=(rp%AND&F1)OR(((A%AND65535)=0)AND4)OR((A%AND32768)DIV4096):ENDPROC
420 DEFPROCcmp16(A%):rp%=(rp%AND&F0)OR(((A%AND65535)=0)AND4)OR((A%AND32768)DIV4096)OR((A%AND65536)DIV65536):ENDPROC
430 :
440
450
460 DEFFNbr8(A%):rpc%=rpc%+1:IFA%=0:=0
470 IFmem%?(rpc%-1)<128:rpc%=(rpc%+mem%?(rpc%-1))AND&FFFF:=0
480 rpc%=(rpc%+mem%?(rpc%-1)-256)AND&FFFF:=0
490 :
500
510
520 DEFFNbr16(A%):rpc%=rpc%+2:IFA%=0:=0
530 IFmem%?(rpc%-2)<128:rpc%=(rpc%+256*mem%?(rpc%-2)+mem%?(rpc%-1))AND&FFFF:=0
540 rpc%=(rpc%+256*mem%?(rpc%-2)+mem%?(rpc%-1)-65536)AND&FFFF:=0
550 :
560 :
570
580
590 DEFFNm10
600 DEFFNm20
610 DEFFNm30
620 DEFFNm40
630 DEFFNm50
640 =0
650 :
660 DEFFNm80
670 DEFFNmC0
680 A%=rpc%:rpc%=rpc%+1:=0 :
690 :
700 DEFFNm0
710 DEFFNm90
720 DEFFNmD0
730 A%=rdp%+mem%?rpc%:rpc%=rpc%+1:=0 :
740 :
750 DEFFNm70
760 DEFFNmB0
770 DEFFNmF0
780 A%=256*mem%?rpc%+mem%?(rpc%+1):rpc%=rpc%+2:=0 :
790 :
800 DEFFNm60
810 DEFFNmA0
820 DEFFNmE0
830 A%=mem%?rpc%:rpc%=rpc%+1:M%=A%AND31:N%=A%AND96 :
840 IFN%=0 :R%=rx%
850 IFN%=32:R%=ry%
860 IFN%=64:R%=ru%
870 IFN%=96:R%=rs%
880 :
890
900
910
920
930 :
940 IFA%<128:IFM%<16:A%=(R%+M%)AND&FFFF:=0 :
950 IFA%<128:IFM%>15:A%=(R%+M%-32)AND&FFFF:=0 :
960 IFM%=0 THEN
970 A%=R%:M%=1
980
990
1000 IFN%=0 :rx%=(rx%+M%)AND&FFFF:=0 :
1010 IFN%=32:ry%=(ry%+M%)AND&FFFF:=0 :
1020 IFN%=64:ru%=(ru%+M%)AND&FFFF:=0 :
1030 IFN%=96:rs%=(rs%+M%)AND&FFFF:=0 :
1040 ENDIF
1050 IFM%=1 THEN
1060 A%=R%
1070 IFN%=0 :rx%=(rx%+2)AND&FFFF:=0 :
1080 IFN%=32:ry%=(ry%+2)AND&FFFF:=0 :
1090 IFN%=64:ru%=(ru%+2)AND&FFFF:=0 :
1100 IFN%=96:rs%=(rs%+2)AND&FFFF:=0 :
1110 ENDIF
1120 IFM%=2 THEN
1130 M%=1
1140
1150
1160 IFN%=0 :rx%=(rx%-M%)AND&FFFF:A%=rx%:=0 :
1170 IFN%=32:ry%=(ry%-M%)AND&FFFF:A%=ry%:=0 :
1180 IFN%=64:ru%=(ru%-M%)AND&FFFF:A%=ru%:=0 :
1190 IFN%=96:rs%=(rs%-M%)AND&FFFF:A%=rs%:=0 :
1200 ENDIF
1210 IFM%=3 THEN
1220 IFN%=0 :rx%=(rx%-2)AND&FFFF:A%=rx%:=0 :
1230 IFN%=32:ry%=(ry%-2)AND&FFFF:A%=ry%:=0 :
1240 IFN%=64:ru%=(ru%-2)AND&FFFF:A%=ru%:=0 :
1250 IFN%=96:rs%=(rs%-2)AND&FFFF:A%=rs%:=0 :
1260 ENDIF
1270 IFM%=4:A%=R%:=0 :
1280 IFM%=5:A%=(rb%+R%+256*(rb%>127))AND&FFFF:=0 :
1290 IFM%=6:A%=(ra%+R%+256*(ra%>127))AND&FFFF:=0 :
1300 IFM%=7:PRINT"[M07:";~rpc%-2;"]";:A%=rpc%:=0 :
1310 :
1320
1330
1340
1350 :
1360 IFM%=8 THEN
1370 N%=mem%?rpc%:rpc%=rpc%+1
1380 A%=(R%+N%+256*(N%>127))AND&FFFF:=0 :
1390 ENDIF
1400 IFM%=9 THEN
1410 N%=256*mem%?rpc%+mem%?(rpc%+1):rpc%=rpc%+2
1420 A%=(R%+N%+65536*(N%>32767))AND&FFFF:=0 :
1430 ENDIF
1440 IFM%=10:PRINT"[M10:";~rpc%-2;"]";:A%=rpc%:=0 :
1450 IFM%=11:A%=(ra%*256+rb%+R%)AND&FFFF:=0 :
1460 IFM%=12 THEN
1470 N%=mem%?rpc%:rpc%=rpc%+1
1480 A%=(rpc%+N%+256*(N%>127))AND&FFFF:=0 :
1490 ENDIF
1500 IFM%=13 THEN
1510 N%=256*mem%?rpc%+mem%?(rpc%+1):rpc%=rpc%+2
1520 A%=(rpc%+N%+65536*(N%>32767))AND&FFFF:=0 :
1530 ENDIF
1540 IFM%=14:PRINT"[M14:";~rpc%-2;"]";:A%=rpc%:=0 :
1550 IFM%=15:PRINT"[M15:";~rpc%-2;"]";:A%=rpc%:=0 :
1560 IFM%=16:PRINT"[M16:";~rpc%-2;"]";:A%=rpc%:=0 :
1570 IFM%=17 THEN
1580 A%=256*mem%?R%+mem%?(R%+1)
1590 IFN%=0 :rx%=(rx%+2)AND&FFFF:=0 :
1600 IFN%=32:ry%=(ry%+2)AND&FFFF:=0 :
1610 IFN%=64:ru%=(ru%+2)AND&FFFF:=0 :
1620 IFN%=96:rs%=(rs%+2)AND&FFFF:=0 :
1630 ENDIF
1640 IFM%=18:PRINT"[M18:";~rpc%-2;"]";:A%=rpc%:=0 :
1650 IFM%=19 THEN
1660 IFN%=0 :rx%=(rx%-2)AND&FFFF:R%=rx% :
1670 IFN%=32:ry%=(ry%-2)AND&FFFF:R%=ry% :
1680 IFN%=64:ru%=(ru%-2)AND&FFFF:R%=ru% :
1690 IFN%=96:rs%=(rs%-2)AND&FFFF:R%=rs% :
1700 A%=256*mem%?R%+mem%?(R%+1):=0
1710 ENDIF
1720 IFM%=20:A%=256*mem%?R%+mem%?(R%+1):=0 :
1730 IFM%=21 THEN
1740 A%=(R%+rb%+256*(rb%>127))AND&FFFF :
1750 A%=256*mem%?A%+mem%?(A%+1):=0
1760 ENDIF
1770 IFM%=22 THEN
1780 A%=(R%+ra%+256*(ra%>127))AND&FFFF :
1790 A%=256*mem%?A%+mem%?(A%+1):=0
1800 ENDIF
1810 IFM%=23:PRINT"[M23:";~rpc%-2;"]";:A%=rpc%:=0
1820
1830 IFM%=24:PRINT"[M24:";~rpc%-2;"]";:A%=rpc%:=0 :
1840 IFM%=25:PRINT"[M25:";~rpc%-2;"]";:A%=rpc%:=0 :
1850 IFM%=26:PRINT"[M26:";~rpc%-2;"]";:A%=rpc%:=0
1860 IFM%=27:PRINT"[M27:";~rpc%-2;"]";:A%=rpc%:=0 :
1870 IFM%=28:PRINT"[M28:";~rpc%-2;"]";:A%=rpc%:=0 :
1880 IFM%=29:PRINT"[M29:";~rpc%-2;"]";:A%=rpc%:=0 :
1890 IFM%=30:PRINT"[M30:";~rpc%-2;"]";:A%=rpc%:=0
1900
1910 IFM%=31:IFN%=0:A%=256*mem%?rpc%+mem%?(rpc%+1):rpc%=rpc%+2:A%=256*mem%?A%+mem%?(A%+1):=0 :
1920 IFM%=31:A%=rpc%:=0
1930
1940
1950
1960
1970
1980
1990
2000
2010
2020
2030
2040
2050
2060
2070
2080
2090
2100
2110
2120
2130
2140
2150
2160
2170
2180
2190
2200
2210
2220 =0
2230 :
2240 DEFFNimm16a:A%=256*mem%?A%+mem%?rpc%:rpc%=rpc%+1:=A% :
2250 DEFFNimm16b:A%=256*mem%?rpc%+mem%?(rpc%+1):rpc%=rpc%+2:=A% :
2260 :
2270
2280
2290 DEFFN_12:=0 :
2300 :
2310
2320 DEFFN_14:=0
2330 DEFFN_15:=0
2340 DEFFN_16:=FNbr16(1) :
2350 DEFFN_17:rs%=rs%-2:mem%?rs%=(rpc%+2)DIV256:mem%?(rs%+1)=(rpc%+2):=FNbr16(1):
2360 DEFFN_18:=0
2370
2380 :
2390 DEFFN_1A:N%=FNmC0:rp%=rp%OR(mem%?A%):=0 :
2400 DEFFN_1B:=0
2410 DEFFN_1C:N%=FNmC0:rp%=rp%AND(mem%?A%):=0 :
2420 DEFFN_1D:IFrb%<128:ra%=0 ELSE ra%=255 :
2430 A%=rp%AND2:PROCflg8(ra%):rp%=rp%ORA%:=0
2440 :
2450 DEFFN_1E:N%=mem%?rpc%:rpc%=rpc%+1 :
2460 IF(N%AND&F0)=&00:A%=256*ra%+rb%
2470 IF(N%AND&F0)=&10:A%=rx%
2480 IF(N%AND&F0)=&20:A%=ry%
2490 IF(N%AND&F0)=&30:A%=ru%
2500 IF(N%AND&F0)=&40:A%=rs%
2510 IF(N%AND&F0)=&50:A%=rpc%
2520 IF(N%AND&F0)=&60:A%=0
2530 IF(N%AND&F0)=&70:A%=0
2540 IF(N%AND&F0)=&80:A%=ra%
2550 IF(N%AND&F0)=&90:A%=rb%
2560 IF(N%AND&F0)=&A0:A%=rp%
2570 IF(N%AND&F0)=&B0:A%=rdp%DIV256
2580 IF(N%AND&F0)=&C0:A%=0
2590 IF(N%AND&F0)=&D0:A%=0
2600 IF(N%AND&F0)=&E0:A%=0
2610 IF(N%AND&F0)=&F0:A%=0
2620 IF(N%AND&F)=&0:M%=256*ra%+rb%:ra%=A%DIV256:rb%=A%AND255
2630 IF(N%AND&F)=&1:M%=rx%:rx%=A%
2640 IF(N%AND&F)=&2:M%=ry%:ry%=A%
2650 IF(N%AND&F)=&3:M%=ru%:ru%=A%
2660 IF(N%AND&F)=&4:M%=rs%:rs%=A%
2670 IF(N%AND&F)=&5:M%=rpc%:rpc%=A%
2680 IF(N%AND&F)=&6:M%=0:A%=0
2690 IF(N%AND&F)=&7:M%=0:A%=0
2700 IF(N%AND&F)=&8:M%=ra%:ra%=A%
2710 IF(N%AND&F)=&9:M%=rb%:rb%=A%
2720 IF(N%AND&F)=&A:M%=rp%:rp%=A%
2730 IF(N%AND&F)=&B:M%=rdp%DIV256:rdp%=256*A%
2740 IF(N%AND&F)=&C:M%=0:A%=0
2750 IF(N%AND&F)=&D:M%=0:A%=0
2760 IF(N%AND&F)=&E:M%=0:A%=0
2770 IF(N%AND&F)=&F:M%=0:A%=0
2780 IF(N%AND&F0)=&00:ra%=M%DIV256:rb%=M%AND255
2790 IF(N%AND&F0)=&10:rx%=M%
2800 IF(N%AND&F0)=&20:ry%=M%
2810 IF(N%AND&F0)=&30:ru%=M%
2820 IF(N%AND&F0)=&40:rs%=M%
2830 IF(N%AND&F0)=&50:rpc%=M%
2840 IF(N%AND&F0)=&60:A%=0
2850 IF(N%AND&F0)=&70:A%=0
2860 IF(N%AND&F0)=&80:ra%=M%
2870 IF(N%AND&F0)=&90:rb%=M%
2880 IF(N%AND&F0)=&A0:rp%=M%
2890 IF(N%AND&F0)=&B0:rdp%=M%*256
2900 IF(N%AND&F0)=&C0:A%=0
2910 IF(N%AND&F0)=&D0:A%=0
2920 IF(N%AND&F0)=&E0:A%=0
2930 IF(N%AND&F0)=&F0:A%=0
2940 =0
2950 DEFFN_1F:N%=mem%?rpc%:rpc%=rpc%+1 :
2960 IF(N%AND&F0)=&00:A%=256*ra%+rb%
2970 IF(N%AND&F0)=&10:A%=rx%
2980 IF(N%AND&F0)=&20:A%=ry%
2990 IF(N%AND&F0)=&30:A%=ru%
3000 IF(N%AND&F0)=&40:A%=rs%
3010 IF(N%AND&F0)=&50:A%=rpc%
3020 IF(N%AND&F0)=&60:A%=0
3030 IF(N%AND&F0)=&70:A%=0
3040 IF(N%AND&F0)=&80:A%=ra%
3050 IF(N%AND&F0)=&90:A%=rb%
3060 IF(N%AND&F0)=&A0:A%=rp%
3070 IF(N%AND&F0)=&B0:A%=rdp%DIV256
3080 IF(N%AND&F0)=&C0:A%=0
3090 IF(N%AND&F0)=&D0:A%=0
3100 IF(N%AND&F0)=&E0:A%=0
3110 IF(N%AND&F0)=&F0:A%=0
3120 IF(N%AND&F)=&0:ra%=(A%AND&FF00)DIV256:rb%=A%AND255
3130 IF(N%AND&F)=&1:rx%=A%
3140 IF(N%AND&F)=&2:ry%=A%
3150 IF(N%AND&F)=&3:ru%=A%
3160 IF(N%AND&F)=&4:rs%=A%
3170 IF(N%AND&F)=&5:rpc%=A%
3180 IF(N%AND&F)=&6:A%=0
3190 IF(N%AND&F)=&7:A%=0
3200 IF(N%AND&F)=&8:ra%=A%
3210 IF(N%AND&F)=&9:rb%=A%
3220 IF(N%AND&F)=&A:rp%=A%
3230 IF(N%AND&F)=&B:rdp%=256*A%
3240 IF(N%AND&F)=&C:A%=0
3250 IF(N%AND&F)=&D:A%=0
3260 IF(N%AND&F)=&E:A%=0
3270 IF(N%AND&F)=&F:A%=0
3280 =0
3290 :
3300 DEFFN_20:=FNbr8(1) :
3310 DEFFN_21:=FNbr8(0) :
3320 DEFFN_22:=FNbr8(((rp%AND1)OR((rp%AND4)DIV4))EOR1) :
3330 DEFFN_23:=FNbr8((rp%AND1)OR((rp%AND4)DIV4)) :
3340 DEFFN_24:=FNbr8((rp%EOR1)AND1) :
3350 DEFFN_25:=FNbr8(rp%AND1) :
3360 DEFFN_26:=FNbr8((rp%AND4)EOR4) :
3370 DEFFN_27:=FNbr8(rp%AND4) :
3380 DEFFN_28:=FNbr8((rp%AND2)EOR2) :
3390 DEFFN_29:=FNbr8(rp%AND2) :
3400 DEFFN_2A:=FNbr8((rp%AND8)EOR8) :
3410 DEFFN_2B:=FNbr8(rp%AND8) :
3420 DEFFN_2C:PRINT"{";~rpc%-1;"}";:=FNbr8(((((rp%AND8)DIV2)EOR(rp%AND2))EOR2)) :
3430 DEFFN_2D:PRINT"[";~rpc%-1;"]";:=FNbr8(((rp%AND8)DIV2)EOR(rp%AND2)) :
3440 DEFFN_2E:IF(rp%AND4)=0:=FNbr8(1) :
3450 PRINT"@";
3460 =FNbr8((((rp%AND4)DIV2)AND(((rp%AND8)DIV2)EOR(rp%AND2)))EOR2) :
3470 DEFFN_2F:IF(rp%AND4)=0:=FNbr8(0) :
3480 PRINT"#";
3490 =FNbr8((((rp%AND4)DIV2)AND(((rp%AND8)DIV2)EOR(rp%AND2)))) :
3500 :
3510 DEFFN_30:N%=FNmE0:rx%=A%:rp%=(rp%AND&FB)OR((rx%=0)AND4):=0 :
3520 DEFFN_31:N%=FNmE0:ry%=A%:rp%=(rp%AND&FB)OR((ry%=0)AND4):=0 :
3530 DEFFN_32:N%=FNmE0:rs%=A%:=0 :
3540 DEFFN_33:N%=FNmE0:ru%=A%:=0 :
3550 :
3560 DEFFN_34:A%=mem%?rpc%:rpc%=rpc%+1 :
3570 IF(A%AND128):rs%=rs%-2:mem%?rs%=rpc%DIV256:mem%?(rs%+1)=rpc%
3580 IF(A%AND64):rs%=rs%-2:mem%?rs%=ru%DIV256:mem%?(rs%+1)=ru%
3590 IF(A%AND32):rs%=rs%-2:mem%?rs%=ry%DIV256:mem%?(rs%+1)=ry%
3600 IF(A%AND16):rs%=rs%-2:mem%?rs%=rx%DIV256:mem%?(rs%+1)=rx%
3610 IF(A%AND8):rs%=rs%-1:mem%?rs%=rdp%DIV256
3620 IF(A%AND4):rs%=rs%-1:mem%?rs%=rb%
3630 IF(A%AND2):rs%=rs%-1:mem%?rs%=ra%
3640 IF(A%AND1):rs%=rs%-1:mem%?rs%=rp%
3650 =0
3660 DEFFN_35:A%=mem%?rpc%:rpc%=rpc%+1 :
3670 IF(A%AND1):rp%=mem%?rs%:rs%=rs%+1
3680 IF(A%AND2):ra%=mem%?rs%:rs%=rs%+1
3690 IF(A%AND4):rb%=mem%?rs%:rs%=rs%+1
3700 IF(A%AND8):rdp%=256*mem%?rs%:rs%=rs%+1
3710 IF(A%AND16):rx%=256*mem%?rs%+mem%?(rs%+1):rs%=rs%+2
3720 IF(A%AND32):ry%=256*mem%?rs%+mem%?(rs%+1):rs%=rs%+2
3730 IF(A%AND64):ru%=256*mem%?rs%+mem%?(rs%+1):rs%=rs%+2
3740 IF(A%AND128):rpc%=256*mem%?rs%+mem%?(rs%+1):rs%=rs%+2
3750 =0
3760 DEFFN_36:A%=mem%?rpc%:rpc%=rpc%+1 :
3770 IF(A%AND128):ru%=ru%-2:mem%?ru%=rpc%DIV256:mem%?(ru%+1)=rpc%
3780 IF(A%AND64):ru%=ru%-2:mem%?ru%=rs%DIV256:mem%?(ru%+1)=rs%
3790 IF(A%AND32):ru%=ru%-2:mem%?ru%=ry%DIV256:mem%?(ru%+1)=ry%
3800 IF(A%AND16):ru%=ru%-2:mem%?ru%=rx%DIV256:mem%?(ru%+1)=rx%
3810 IF(A%AND8):ru%=ru%-1:mem%?ru%=rdp%DIV256
3820 IF(A%AND4):ru%=ru%-1:mem%?ru%=rb%
3830 IF(A%AND2):ru%=ru%-1:mem%?ru%=ra%
3840 IF(A%AND1):ru%=ru%-1:mem%?ru%=rp%
3850 =0
3860 DEFFN_37:A%=mem%?rpc%:rpc%=rpc%+1 :
3870 IF(A%AND1):rp%=mem%?ru%:ru%=ru%+1
3880 IF(A%AND2):ra%=mem%?ru%:ru%=ru%+1
3890 IF(A%AND4):rb%=mem%?ru%:ru%=ru%+1
3900 IF(A%AND8):rdp%=256*mem%?ru%:ru%=ru%+1
3910 IF(A%AND16):rx%=256*mem%?ru%+mem%?(ru%+1):ru%=ru%+2
3920 IF(A%AND32):ry%=256*mem%?ru%+mem%?(ru%+1):ru%=ru%+2
3930 IF(A%AND64):ru%=256*mem%?ru%+mem%?(ru%+1):ru%=ru%+2
3940 IF(A%AND128):rpc%=256*mem%?ru%+mem%?(ru%+1):ru%=ru%+2
3950 =0
3960 :
3970
3980 :
3990 DEFFN_39:rpc%=256*mem%?rs%+mem%?(rs%+1):rs%=rs%+2:=0 :
4000 DEFFN_3A:rx%=(rx%+rb%)AND&FFFF:=0 :
4010 :
4020
4030
4040 :
4050 DEFFN_3D:A%=ra%*rb%:ra%=A%DIV256:rb%=A%AND255:rp%=(rp%AND&FA)OR((A%=0)AND4)OR(rb%DIV128):=0:
4060 :
4070
4080 :
4090
4100 DEFFN_3F:rs%=rs%-12:rp%=rp%OR128:mem%?rs%=rp%:mem%?(rs%+1)=ra%:mem%?(rs%+2)=rb%:mem%?(rs%+3)=rdp%DIV256
4110 mem%?(rs%+4)=rx%DIV256:mem%?(rs%+5)=rx%:mem%?(rs%+6)=ry%DIV256:mem%?(rs%+7)=ry%
4120 mem%?(rs%+8)=ru%DIV256:mem%?(rs%+9)=ru%:mem%?(rs%+10)=rpc%DIV256:mem%?(rs%+11)=rpc%
4130 rpc%=256*mem%?&FEFA+mem%?&FEFB:=0 :
4140 :
4150 DEFFN_0:N%=0-mem%?A%:PROCcmp8(N%):mem%?A%=N%:=0 :
4160 DEFFN_40:N%=0-ra%:PROCcmp8(N%):ra%=N%AND255:=0 :
4170 DEFFN_50:N%=0-rb%:PROCcmp8(N%):rb%=N%AND255:=0 :
4180 DEFFN_60:N%=0-mem%?A%:PROCcmp8(N%):mem%?A%=N%:=0 :
4190 DEFFN_70:N%=0-mem%?A%:PROCcmp8(N%):mem%?A%=N%:=0 :
4200
4210 :
4220 DEFFN_1:N%=0-mem%?A%:PROCcmp8(N%):mem%?A%=N%:=0 :
4230 DEFFN_41:N%=0-ra%:PROCcmp8(N%):ra%=N%AND255:=0 :
4240 DEFFN_51:N%=0-rb%:PROCcmp8(N%):rb%=N%AND255:=0 :
4250 DEFFN_61:N%=0-mem%?A%:PROCcmp8(N%):mem%?A%=N%:=0 :
4260 DEFFN_71:N%=0-mem%?A%:PROCcmp8(N%):mem%?A%=N%:=0 :
4270
4280 :
4290 DEFFN_2:mem%?A%=mem%?A%EOR255:PROCflg8(mem%?A%):rp%=rp%OR1:=0 :
4300 DEFFN_42:ra%=ra%EOR255:PROCflg8(ra%):rp%=rp%OR1:=0 :
4310 DEFFN_52:rb%=rb%EOR255:PROCflg8(rb%):rp%=rp%OR1:=0 :
4320 DEFFN_62:mem%?A%=mem%?A%EOR255:PROCflg8(mem%?A%):rp%=rp%OR1:=0 :
4330 DEFFN_72:mem%?A%=mem%?A%EOR255:PROCflg8(mem%?A%):rp%=rp%OR1:=0 :
4340 :
4350 DEFFN_3:mem%?A%=mem%?A%EOR255:PROCflg8(mem%?A%):rp%=rp%OR1:=0 :
4360 DEFFN_43:ra%=ra%EOR255:PROCflg8(ra%):rp%=rp%OR1:=0 :
4370 DEFFN_53:rb%=rb%EOR255:PROCflg8(rb%):rp%=rp%OR1:=0 :
4380 DEFFN_63:mem%?A%=mem%?A%EOR255:PROCflg8(mem%?A%):rp%=rp%OR1:=0 :
4390 DEFFN_73:mem%?A%=mem%?A%EOR255:PROCflg8(mem%?A%):rp%=rp%OR1:=0 :
4400 :
4410 DEFFN_4:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4420 DEFFN_44:ra%=ra%:rp%=(rp%AND&FE)OR(ra%AND1):ra%=ra%DIV2:PROCflg8(ra%):=0 :
4430 DEFFN_54:rb%=rb%:rp%=(rp%AND&FE)OR(rb%AND1):rb%=rb%DIV2:PROCflg8(rb%):=0 :
4440 DEFFN_64:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4450 DEFFN_74:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4460
4470 :
4480 DEFFN_5:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4490 DEFFN_45:ra%=ra%:rp%=(rp%AND&FE)OR(ra%AND1):ra%=ra%DIV2:PROCflg8(ra%):=0 :
4500 DEFFN_55:rb%=rb%:rp%=(rp%AND&FE)OR(rb%AND1):rb%=rb%DIV2:PROCflg8(rb%):=0 :
4510 DEFFN_65:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4520 DEFFN_75:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4530
4540 :
4550 DEFFN_6:N%=mem%?A%+256*(rp%AND1):rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4560 DEFFN_46:ra%=ra%+256*(rp%AND1):rp%=(rp%AND&FE)OR(ra%AND1):ra%=ra%DIV2:PROCflg8(ra%):=0 :
4570 DEFFN_56:rb%=rb%+256*(rp%AND1):rp%=(rp%AND&FE)OR(rb%AND1):rb%=rb%DIV2:PROCflg8(rb%):=0 :
4580 DEFFN_66:N%=mem%?A%+256*(rp%AND1):rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4590 DEFFN_76:N%=mem%?A%+256*(rp%AND1):rp%=(rp%AND&FE)OR(N%AND1):N%=N%DIV2:mem%?A%=N%:PROCflg8(N%):=0 :
4600
4610 :
4620 DEFFN_7:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=(N%DIV2)OR(N%AND128):mem%?A%=N%:PROCflg8(N%):=0 :
4630 DEFFN_47:ra%=ra%:rp%=(rp%AND&FE)OR(ra%AND1):ra%=(ra%DIV2)OR(N%AND128):PROCflg8(ra%):=0 :
4640 DEFFN_57:rb%=rb%:rp%=(rp%AND&FE)OR(rb%AND1):rb%=(rb%DIV2)OR(N%AND128):PROCflg8(rb%):=0 :
4650 DEFFN_67:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=(N%DIV2)OR(N%AND128):mem%?A%=N%:PROCflg8(N%):=0 :
4660 DEFFN_77:N%=mem%?A%:rp%=(rp%AND&FE)OR(N%AND1):N%=(N%DIV2)OR(N%AND128):mem%?A%=N%:PROCflg8(N%):=0 :
4670
4680 :
4690 DEFFN_8:N%=mem%?A%*2:mem%?A%=N%:PROCflg8(N%):rp%=(rp%AND&FE)OR(N%DIV256):=0 :
4700 DEFFN_48:ra%=ra%*2:PROCflg8(ra%):rp%=(rp%AND&FE)OR(ra%DIV256):ra%=ra%AND255:=0 :
4710 DEFFN_58:rb%=rb%*2:PROCflg8(rb%):rp%=(rp%AND&FE)OR(rb%DIV256):rb%=rb%AND255:=0 :
4720 DEFFN_68:N%=mem%?A%*2:mem%?A%=N%:PROCflg8(N%):rp%=(rp%AND&FE)OR(N%DIV256):=0 :
4730 DEFFN_78:N%=mem%?A%*2:mem%?A%=N%:PROCflg8(N%):rp%=(rp%AND&FE)OR(N%DIV256):=0 :
4740
4750 :
4760 DEFFN_9:N%=mem%?A%*2+(rp%AND1):mem%?A%=N%:PROCflg8(N%):rp%=(rp%AND&FC)OR(N%DIV256)OR((((N%EOR(N%DIV2))AND128))DIV64):=0 :
4770 DEFFN_49:ra%=ra%*2+(rp%AND1):PROCflg8(ra%):rp%=(rp%AND&FC)OR(ra%DIV256)OR((((ra%EOR(ra%DIV2))AND128))DIV64):ra%=ra%AND255:=0 :
4780 DEFFN_59:rb%=rb%*2+(rp%AND1):PROCflg8(rb%):rp%=(rp%AND&FC)OR(rb%DIV256)OR((((rb%EOR(rb%DIV2))AND128))DIV64):rb%=rb%AND255:=0 :
4790 DEFFN_69:N%=mem%?A%*2+(rp%AND1):mem%?A%=N%:PROCflg8(N%):rp%=(rp%AND&FC)OR(N%DIV256)OR((((N%EOR(N%DIV2))AND128))DIV64):=0 :
4800 DEFFN_79:N%=mem%?A%*2+(rp%AND1):mem%?A%=N%:PROCflg8(N%):rp%=(rp%AND&FC)OR(N%DIV256)OR((((N%EOR(N%DIV2))AND128))DIV64):=0 :
4810
4820 :
4830 DEFFN_A:mem%?A%=mem%?A%-1:PROCflg8(mem%?A%):=0 :
4840 DEFFN_4A:ra%=(ra%-1)AND255:PROCflg8(ra%):=0 :
4850 DEFFN_5A:rb%=(rb%-1)AND255:PROCflg8(rb%):=0 :
4860 DEFFN_6A:mem%?A%=mem%?A%-1:PROCflg8(mem%?A%):=0 :
4870 DEFFN_7A:mem%?A%=mem%?A%-1:PROCflg8(mem%?A%):=0 :
4880 :
4890 DEFFN_B:mem%?A%=mem%?A%-1:PROCflg8(mem%?A%):=0 :
4900 DEFFN_4B:ra%=(ra%-1)AND255:PROCflg8(ra%):=0 :
4910 DEFFN_5B:rb%=(rb%-1)AND255:PROCflg8(rb%):=0 :
4920 DEFFN_6B:mem%?A%=mem%?A%-1:PROCflg8(mem%?A%):=0 :
4930 DEFFN_7B:mem%?A%=mem%?A%-1:PROCflg8(mem%?A%):=0 :
4940 :
4950 DEFFN_C:mem%?A%=mem%?A%+1:PROCflg8(mem%?A%):=0 :
4960 DEFFN_4C:ra%=(ra%+1)AND255:PROCflg8(ra%):=0 :
4970 DEFFN_5C:rb%=(rb%+1)AND255:PROCflg8(rb%):=0 :
4980 DEFFN_6C:mem%?A%=mem%?A%+1:PROCflg8(mem%?A%):=0 :
4990 DEFFN_7C:mem%?A%=mem%?A%+1:PROCflg8(mem%?A%):=0 :
5000 :
5010 DEFFN_D:PROCflg8(mem%?A%):=0 :
5020 DEFFN_4D:PROCflg8(ra%):=0 :
5030 DEFFN_5D:PROCflg8(rb%):=0 :
5040 DEFFN_6D:PROCflg8(mem%?A%):=0 :
5050 DEFFN_7D:PROCflg8(mem%?A%):=0 :
5060 :
5070 DEFFN_E:rpc%=A%:=0 :
5080 DEFFN_4E:ra%=0:rp%=(rp%AND&F0)OR4:=0 :
5090 DEFFN_5E:rb%=0:rp%=(rp%AND&F0)OR4:=0 :
5100 DEFFN_6E:rpc%=A%:=0 :
5110 DEFFN_7E:N%=rpc%-3:IF N%<&FFCE OR (debug%AND4)=4:rpc%=A%:=0 :
5120 IF N%<>&FFF7:A%=FN_39:=FNmos(N%) :
5130 A%=FNmos(N%):=FN_39 :
5140 :
5150 DEFFN_F:mem%?A%=0:rp%=(rp%AND&F0)OR4:=0 :
5160 DEFFN_4F:ra%=0:rp%=(rp%AND&F0)OR4:=0 :
5170 DEFFN_5F:rb%=0:rp%=(rp%AND&F0)OR4:=0 :
5180 DEFFN_6F:mem%?A%=0:rp%=(rp%AND&F0)OR4:=0 :
5190 DEFFN_7F:mem%?A%=0:rp%=(rp%AND&F0)OR4:=0 :
5200 :
5210 DEFFN_80:ra%=ra%-mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
5220 DEFFN_90:ra%=ra%-mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
5230 DEFFN_A0:ra%=ra%-mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
5240 DEFFN_B0:ra%=ra%-mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
5250 DEFFN_C0:rb%=rb%-mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
5260 DEFFN_D0:rb%=rb%-mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
5270 DEFFN_E0:rb%=rb%-mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
5280 DEFFN_F0:rb%=rb%-mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
5290 :
5300 DEFFN_81:A%=ra%-mem%?A%:PROCcmp8(A%):=0 :
5310 DEFFN_91:A%=ra%-mem%?A%:PROCcmp8(A%):=0 :
5320 DEFFN_A1:A%=ra%-mem%?A%:PROCcmp8(A%):=0 :
5330 DEFFN_B1:A%=ra%-mem%?A%:PROCcmp8(A%):=0 :
5340 :
5350 DEFFN_C1:A%=rb%-mem%?A%:PROCcmp8(A%):=0 :
5360 DEFFN_D1:A%=rb%-mem%?A%:PROCcmp8(A%):=0 :
5370 DEFFN_E1:A%=rb%-mem%?A%:PROCcmp8(A%):=0 :
5380 DEFFN_F1:A%=rb%-mem%?A%:PROCcmp8(A%):=0 :
5390 :
5400 DEFFN_82:ra%=ra%-mem%?A%-(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
5410 DEFFN_92:ra%=ra%-mem%?A%-(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
5420 DEFFN_A2:ra%=ra%-mem%?A%-(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
5430 DEFFN_B2:ra%=ra%-mem%?A%-(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
5440 DEFFN_C2:rb%=rb%-mem%?A%-(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
5450 DEFFN_D2:rb%=rb%-mem%?A%-(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
5460 DEFFN_E2:rb%=rb%-mem%?A%-(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
5470 DEFFN_F2:rb%=rb%-mem%?A%-(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
5480 :
5490 DEFFN_83:rb%=256*ra%+rb%:rb%=rb%-FNimm16a:PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5500 DEFFN_93:rb%=256*ra%+rb%:rb%=rb%-256*mem%?A%-mem%?(A%+1):PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5510 DEFFN_A3:rb%=256*ra%+rb%:rb%=rb%-256*mem%?A%-mem%?(A%+1):PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5520 DEFFN_B3:rb%=256*ra%+rb%:rb%=rb%-256*mem%?A%-mem%?(A%+1):PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5530 DEFFN_C3:rb%=256*ra%+rb%:rb%=rb%+FNimm16a:PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5540 DEFFN_D3:rb%=256*ra%+rb%:rb%=rb%+256*mem%?A%+mem%?(A%+1):PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5550 DEFFN_E3:rb%=256*ra%+rb%:rb%=rb%+256*mem%?A%+mem%?(A%+1):PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5560 DEFFN_F3:rb%=256*ra%+rb%:rb%=rb%+256*mem%?A%+mem%?(A%+1):PROCcmp16(rb%):ra%=(rb%AND&FF00)DIV256:rb%=rb%AND255:=0 :
5570 :
5580 DEFFN_84:ra%=ra%ANDmem%?A%:PROCflg8(ra%):=0 :
5590 DEFFN_94:ra%=ra%ANDmem%?A%:PROCflg8(ra%):=0 :
5600 DEFFN_A4:ra%=ra%ANDmem%?A%:PROCflg8(ra%):=0 :
5610 DEFFN_B4:ra%=ra%ANDmem%?A%:PROCflg8(ra%):=0 :
5620 DEFFN_C4:rb%=rb%ANDmem%?A%:PROCflg8(rb%):=0 :
5630 DEFFN_D4:rb%=rb%ANDmem%?A%:PROCflg8(rb%):=0 :
5640 DEFFN_E4:rb%=rb%ANDmem%?A%:PROCflg8(rb%):=0 :
5650 DEFFN_F4:rb%=rb%ANDmem%?A%:PROCflg8(rb%):=0 :
5660 :
5670 DEFFN_85:A%=ra%ANDmem%?A%:PROCflg8(A%):=0 :
5680 DEFFN_95:A%=ra%ANDmem%?A%:PROCflg8(A%):=0 :
5690 DEFFN_A5:A%=ra%ANDmem%?A%:PROCflg8(A%):=0 :
5700 DEFFN_B5:A%=ra%ANDmem%?A%:PROCflg8(A%):=0 :
5710 DEFFN_C5:A%=rb%ANDmem%?A%:PROCflg8(A%):=0 :
5720 DEFFN_D5:A%=rb%ANDmem%?A%:PROCflg8(A%):=0 :
5730 DEFFN_E5:A%=rb%ANDmem%?A%:PROCflg8(A%):=0 :
5740 DEFFN_F5:A%=rb%ANDmem%?A%:PROCflg8(A%):=0 :
5750 :
5760 DEFFN_86:ra%=mem%?A%:PROCflg8(ra%):=0 :
5770 DEFFN_96:ra%=mem%?A%:PROCflg8(ra%):=0 :
5780 DEFFN_A6:ra%=mem%?A%:PROCflg8(ra%):=0 :
5790 DEFFN_B6:ra%=FNio_rd(A%):PROCflg8(ra%):=0 :
5800 DEFFN_C6:rb%=mem%?A%:PROCflg8(rb%):=0 :
5810 DEFFN_D6:rb%=mem%?A%:PROCflg8(rb%):=0 :
5820 DEFFN_E6:rb%=mem%?A%:PROCflg8(rb%):=0 :
5830 DEFFN_F6:rb%=FNio_rd(A%):PROCflg8(rb%):=0 :
5840 :
5850 DEFFN_87:=0
5860 DEFFN_97:mem%?A%=ra%:PROCflg8(ra%):=0 :
5870 DEFFN_A7:mem%?A%=ra%:PROCflg8(ra%):=0 :
5880 DEFFN_B7:PROCio_wr(A%,ra%):PROCflg8(ra%):=0 :
5890 DEFFN_C7:=0
5900 DEFFN_D7:mem%?A%=rb%:PROCflg8(rb%):=0 :
5910 DEFFN_E7:mem%?A%=rb%:PROCflg8(rb%):=0 :
5920 DEFFN_F7:PROCio_wr(A%,rb%):PROCflg8(rb%):=0 :
5930 :
5940 DEFFN_88:ra%=ra%EORmem%?A%:PROCflg8(ra%):=0 :
5950 DEFFN_98:ra%=ra%EORmem%?A%:PROCflg8(ra%):=0 :
5960 DEFFN_A8:ra%=ra%EORmem%?A%:PROCflg8(ra%):=0 :
5970 DEFFN_B8:ra%=ra%EORmem%?A%:PROCflg8(ra%):=0 :
5980 DEFFN_C8:rb%=rb%EORmem%?A%:PROCflg8(rb%):=0 :
5990 DEFFN_D8:rb%=rb%EORmem%?A%:PROCflg8(rb%):=0 :
6000 DEFFN_E8:rb%=rb%EORmem%?A%:PROCflg8(rb%):=0 :
6010 DEFFN_F8:rb%=rb%EORmem%?A%:PROCflg8(rb%):=0 :
6020 :
6030 DEFFN_89:ra%=ra%+mem%?A%+(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
6040 DEFFN_99:ra%=ra%+mem%?A%+(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
6050 DEFFN_A9:ra%=ra%+mem%?A%+(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
6060 DEFFN_B9:ra%=ra%+mem%?A%+(rp%AND1):PROCcmp8(ra%):ra%=ra%AND255:=0 :
6070 DEFFN_C9:rb%=rb%+mem%?A%+(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
6080 DEFFN_D9:rb%=rb%+mem%?A%+(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
6090 DEFFN_E9:rb%=rb%+mem%?A%+(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
6100 DEFFN_F9:rb%=rb%+mem%?A%+(rp%AND1):PROCcmp8(rb%):rb%=rb%AND255:=0 :
6110 :
6120 DEFFN_8A:ra%=ra%ORmem%?A%:PROCflg8(ra%):=0 :
6130 DEFFN_9A:ra%=ra%ORmem%?A%:PROCflg8(ra%):=0 :
6140 DEFFN_AA:ra%=ra%ORmem%?A%:PROCflg8(ra%):=0 :
6150 DEFFN_BA:ra%=ra%ORmem%?A%:PROCflg8(ra%):=0 :
6160 DEFFN_CA:rb%=rb%ORmem%?A%:PROCflg8(rb%):=0 :
6170 DEFFN_DA:rb%=rb%ORmem%?A%:PROCflg8(rb%):=0 :
6180 DEFFN_EA:rb%=rb%ORmem%?A%:PROCflg8(rb%):=0 :
6190 DEFFN_FA:rb%=rb%ORmem%?A%:PROCflg8(rb%):=0 :
6200 :
6210 DEFFN_8B:ra%=ra%+mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
6220 DEFFN_9B:ra%=ra%+mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
6230 DEFFN_AB:ra%=ra%+mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
6240 DEFFN_BB:ra%=ra%+mem%?A%:PROCcmp8(ra%):ra%=ra%AND255:=0 :
6250 DEFFN_CB:rb%=rb%+mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
6260 DEFFN_DB:rb%=rb%+mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
6270 DEFFN_EB:rb%=rb%+mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
6280 DEFFN_FB:rb%=rb%+mem%?A%:PROCcmp8(rb%):rb%=rb%AND255:=0 :
6290 :
6300
6310 DEFFN_8C:A%=rx%-FNimm16a:PROCcmp16(A%):=0 :
6320 DEFFN_9C:A%=rx%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
6330 DEFFN_AC:A%=rx%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
6340 DEFFN_BC:A%=rx%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
6350 DEFFN_CC:A%=FNimm16a:rb%=A%AND255:ra%=A%DIV256:PROCflg16(A%):=0 :
6360 DEFFN_DC:A%=256*mem%?A%+mem%?(A%+1):rb%=A%AND255:ra%=A%DIV256:PROCflg16(A%):=0 :
6370 DEFFN_EC:A%=256*mem%?A%+mem%?(A%+1):rb%=A%AND255:ra%=A%DIV256:PROCflg16(A%):=0 :
6380 DEFFN_FC:A%=256*mem%?A%+mem%?(A%+1):rb%=A%AND255:ra%=A%DIV256:PROCflg16(A%):=0 :
6390 :
6400 DEFFN_8D:rs%=rs%-2:mem%?rs%=rpc%DIV256:mem%?(rs%+1)=rpc%:rpc%=rpc%-1:=FNbr8(1) :
6410 DEFFN_9D:rs%=rs%-2:mem%?rs%=rpc%DIV256:mem%?(rs%+1)=rpc%:rpc%=A%:=0 :
6420 DEFFN_AD:rs%=rs%-2:mem%?rs%=rpc%DIV256:mem%?(rs%+1)=rpc%:rpc%=A%:=0 :
6430 DEFFN_BD:rs%=rs%-2:mem%?rs%=rpc%DIV256:mem%?(rs%+1)=rpc%:rpc%=A%:=0 :
6440 DEFFN_CD:=0
6450 DEFFN_DD:mem%?A%=ra%:mem%?(A%+1)=rb%:PROCflg16(256*ra%+rb%):=0 :
6460 DEFFN_ED:mem%?A%=ra%:mem%?(A%+1)=rb%:PROCflg16(256*ra%+rb%):=0 :
6470 DEFFN_FD:mem%?A%=ra%:mem%?(A%+1)=rb%:PROCflg16(256*ra%+rb%):=0 :
6480 :
6490 DEFFN_8E:rx%=FNimm16a:PROCflg16(rx%):=0 :
6500 DEFFN_9E:rx%=256*mem%?A%+mem%?(A%+1):PROCflg16(rx%):=0 :
6510 DEFFN_AE:rx%=256*mem%?A%+mem%?(A%+1):PROCflg16(rx%):=0 :
6520 DEFFN_BE:rx%=256*mem%?A%+mem%?(A%+1):PROCflg16(rx%):=0 :
6530 DEFFN_CE:ru%=FNimm16a:PROCflg16(ru%):=0 :
6540 DEFFN_DE:ru%=256*mem%?A%+mem%?(A%+1):PROCflg16(ru%):=0 :
6550 DEFFN_EE:ru%=256*mem%?A%+mem%?(A%+1):PROCflg16(ru%):=0 :
6560 DEFFN_FE:ru%=256*mem%?A%+mem%?(A%+1):PROCflg16(ru%):=0 :
6570 :
6580 DEFFN_8F:=0
6590 DEFFN_9F:mem%?A%=rx%DIV256:mem%?(A%+1)=rx%:PROCflg16(rx%):=0 :
6600 DEFFN_AF:mem%?A%=rx%DIV256:mem%?(A%+1)=rx%:PROCflg16(rx%):=0 :
6610 DEFFN_BF:mem%?A%=rx%DIV256:mem%?(A%+1)=rx%:PROCflg16(rx%):=0 :
6620 DEFFN_CF:=0
6630 DEFFN_DF:mem%?A%=ru%DIV256:mem%?(A%+1)=ru%:PROCflg16(ru%):=0 :
6640 DEFFN_EF:mem%?A%=ru%DIV256:mem%?(A%+1)=ru%:PROCflg16(ru%):=0 :
6650 DEFFN_FF:mem%?A%=ru%DIV256:mem%?(A%+1)=ru%:PROCflg16(ru%):=0 :
6660 :
6670 :
6680
6690 DEFFN_10:B%=mem%?rpc%:rpc%=rpc%+1:IF(B%AND&C0)=&40:=0
6700 IF(B%AND&80):IF(B%AND7)<3:=0
6710 IF(B%AND&87)=&85:=0
6720 IF(B%AND&E0)<&20:=0
6730 IF(B%AND&F0)=&30:IFB%<>&3F:=0
6740 =EVAL("FNg10_"+STR$~B%)
6750 :
6760 DEFFNg10_20:=FNbr16(1) :
6770 DEFFNg10_21:=FNbr16(0) :
6780 DEFFNg10_22:=FNbr16(((rp%AND1)OR((rp%AND4)DIV4))EOR1) :
6790 DEFFNg10_23:=FNbr16((rp%AND1)OR((rp%AND4)DIV4)) :
6800 DEFFNg10_24:=FNbr16((rp%EOR1)AND1) :
6810 DEFFNg10_25:=FNbr16(rp%AND1) :
6820 DEFFNg10_26:=FNbr16((rp%AND4)EOR4) :
6830 DEFFNg10_27:=FNbr16(rp%AND4) :
6840 DEFFNg10_28:=FNbr16((rp%AND2)EOR2) :
6850 DEFFNg10_29:=FNbr16(rp%AND2) :
6860 DEFFNg10_2A:=FNbr16((rp%AND8)EOR8) :
6870 DEFFNg10_2B:=FNbr16(rp%AND8) :
6880 DEFFNg10_2C:=FNbr16(((((rp%AND8)DIV2)EOR(rp%AND2))EOR2)) :
6890 DEFFNg10_2D:=FNbr16(((rp%AND8)DIV2)EOR(rp%AND2)) :
6900 DEFFNg10_2E:IF(rp%AND4)=0:=FNbr16(1)
6910 PRINT"@";
6920 =FNbr16((((rp%AND4)DIV2)AND(((rp%AND8)DIV2)EOR(rp%AND2)))EOR2):
6930 DEFFNg10_2F:=FNbr16((((rp%AND4)DIV2)AND(((rp%AND8)DIV2)EOR(rp%AND2)))) :
6940 :
6950
6960 :
6970 DEFFNg10_83:N%=FNmF0:A%=256*ra%+rb%-A%:PROCcmp16(A%):=0 :
6980 DEFFNg10_93:N%=FNmD0:A%=256*ra%+rb%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
6990 DEFFNg10_A3:N%=FNmE0:A%=256*ra%+rb%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7000 DEFFNg10_B3:N%=FNmF0:A%=256*ra%+rb%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7010 :
7020 DEFFNg10_8C:N%=FNmF0:A%=ry%-A%:PROCcmp16(A%):=0 :
7030 DEFFNg10_9C:N%=FNmD0:A%=ry%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7040 DEFFNg10_AC:N%=FNmE0:A%=ry%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7050 DEFFNg10_BC:N%=FNmF0:A%=ry%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7060 :
7070 DEFFNg10_8E:N%=FNmF0:ry%=A%:PROCflg16(ry%):=0 :
7080 DEFFNg10_9E:N%=FNmD0:ry%=256*mem%?A%+mem%?(A%+1):PROCflg16(ry%):=0 :
7090 DEFFNg10_AE:N%=FNmE0:ry%=256*mem%?A%+mem%?(A%+1):PROCflg16(ry%):=0 :
7100 DEFFNg10_BE:N%=FNmF0:ry%=256*mem%?A%+mem%?(A%+1):PROCflg16(ry%):=0 :
7110 :
7120 DEFFNg10_CE:N%=FNmF0:rs%=A%:PROCflg16(rs%):=0 :
7130 DEFFNg10_DE:N%=FNmD0:rs%=256*mem%?A%+mem%?(A%+1):PROCflg16(rs%):=0 :
7140 DEFFNg10_EE:N%=FNmE0:rs%=256*mem%?A%+mem%?(A%+1):PROCflg16(rs%):=0 :
7150 DEFFNg10_FE:N%=FNmF0:rs%=256*mem%?A%+mem%?(A%+1):PROCflg16(rs%):=0 :
7160 :
7170 DEFFNg10_9F:N%=FNmD0:mem%?A%=ry%DIV256:mem%?(A%+1)=ry%:PROCflg16(ry%):=0 :
7180 DEFFNg10_AF:N%=FNmE0:mem%?A%=ry%DIV256:mem%?(A%+1)=ry%:PROCflg16(ry%):=0 :
7190 DEFFNg10_BF:N%=FNmF0:mem%?A%=ry%DIV256:mem%?(A%+1)=ry%:PROCflg16(ry%):=0 :
7200 :
7210 DEFFNg10_DF:N%=FNmD0:mem%?A%=rs%DIV256:mem%?(A%+1)=rs%:PROCflg16(rs%):=0 :
7220 DEFFNg10_EF:N%=FNmE0:mem%?A%=rs%DIV256:mem%?(A%+1)=rs%:PROCflg16(rs%):=0 :
7230 DEFFNg10_FF:N%=FNmF0:mem%?A%=rs%DIV256:mem%?(A%+1)=rs%:PROCflg16(rs%):=0 :
7240 :
7250 :
7260
7270 DEFFN_11:B%=mem%?rpc%:rpc%=rpc%+1
7280 IF(B%AND&C0)<>&80:=0
7290 IF(B%AND&0F)<>3 AND (B%AND&0F)<>12:=0
7300 =EVAL("FNg11_"+STR$~B%)
7310 :
7320
7330 :
7340 DEFFNg11_83:N%=FNmF0:A%=ru%-A%:PROCcmp16(A%):=0 :
7350 DEFFNg11_93:N%=FNmD0:A%=ru%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7360 DEFFNg11_A3:N%=FNmE0:A%=ru%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7370 DEFFNg11_B3:N%=FNmF0:A%=ru%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7380 :
7390 DEFFNg11_8C:N%=FNmF0:A%=rs%-A%:PROCcmp16(A%):=0 :
7400 DEFFNg11_9C:N%=FNmD0:A%=rs%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7410 DEFFNg11_AC:N%=FNmE0:A%=rs%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7420 DEFFNg11_BC:N%=FNmF0:A%=rs%-256*mem%?A%-mem%?(A%+1):PROCcmp16(A%):=0 :
7430 :
10
20
30 :
40 DEFFNmos(m%):LOCAL X%,Y%
50 A%=ra%:X%=rx%:Y%=ry%:C%=rp%:rp%=0
60 CASE m% OF
70 WHEN &13,&FFF4:=FNmos_byte
80 WHEN &33,&FFEE:VDU A%:=0
90 WHEN &FFEC:VDU 13:=0
100 WHEN &FFE7:CALL &FFE7:=0
110 WHEN &FFE3:CALL &FFE3:=0
120 WHEN &43,&FFE0:ra%=GET:rp%=(ra%=27)AND1:=0
130 WHEN &73,&FFD7:=FNmos_bget
140 WHEN &83,&FFD4:=FNmos_bput
150 WHEN &A3,&FFCE:=FNmos_find
160 WHEN &63,&FFDA:=FNmos_args
170 WHEN &B3:=FNmos_quit
180 WHEN &C3:=FNmos_lang
190 ENDCASE
200 X%=X%+mem%:Y%=X%DIV256
210 CASE m% OF
220 WHEN &03,&FFF7:=FNmos_cli
230 WHEN &23,&FFF1:=FNmos_word
240 WHEN &53,&FFDD:=FNmos_file
250 WHEN &93,&FFD1:=FNmos_gbpb
260 ENDCASE
270 =0
280 :
290 DEFFNmos_cli:PROCcmd($X%,TRUE):=0
300 :
310 DEFFNmos_byte
320 IF A%=&82:rx%=0:ry%=0:=0 :
330 IF A%=&83:rx%=256*mem%?&FF88+mem%?&FF89:ry%=mem%?&FF88:=0:
340 IF A%=&84:rx%=256*mem%?&FF8A+mem%?&FF8B:ry%=mem%?&FF8A:=0:
350 IF A%>123:IFA%<127:mem%?escflg%=128*(A%AND1):OSCLI"FX15" :
360 IF A%=&7F:IFrx%=0 OR rx%=&FFFF:rx%=0:=0 :
370 IF A%=&A0:IFos%=6:IFFNvdu:=0 :
380 IF os%<32:X%=X%AND255:A%=USR&FFF4:rx%=(A%AND&FFFF00)DIV256:ry%=(A%AND&FF0000)DIV65536:rp%=(A%AND&1000000)DIV&1000000:=0
390
400 IF A%=128:IFrx%=7:MOUSE rx%,A%,A%:ry%=(rx%>>8)AND255:=0
410 IF A%=128:IFrx%=8:MOUSE A%,rx%,A%:ry%=(rx%>>8)AND255:=0
420 IF A%=128:IFrx%=9:MOUSE A%,A%,rx%:ry%=(rx%>>8)AND255:=0
430 CASE A% OF
440 WHEN 0:rx%=32:=0
450 WHEN 127:rx%=EOF#rx%:=0
460 WHEN 128:A%=(255AND(rx%>&FFFD))-ADVAL((rx%AND255)+256*ry%OR((ry%>&7F)AND&FFFF0000)):rx%=A%:ry%=A%DIV256:=0
470 WHEN 129:A%=INKEY((rx%AND255)+256*ry%OR((ry%>&7F)AND&FFFF0000)):PROCcarry(A%=-1 AND ry%<&80):rx%=A%AND&FFFF:ry%=(A%AND&FF00)DIV256:PROCcarry(A%=-1):=0
480 WHEN 134:rx%=POS:ry%=VPOS:=0
490 WHEN 135:rx%=GET(POS,VPOS):ry%=MODE:=0
500 WHEN 160:
510 CASE rx% OF
520 WHEN 0,128:SYS "GetRgnBox",@vdu%!60,zp%:rx%=zp%!0
530 WHEN 2,129:SYS "GetRgnBox",@vdu%!60,zp%:rx%=zp%!4
540 WHEN 4,130:SYS "GetRgnBox",@vdu%!60,zp%:rx%=zp%!8
550 WHEN 6,131:SYS "GetRgnBox",@vdu%!60,zp%:rx%=zp%!12
560 WHEN 8,132:rx%=@vdu%!24 DIV @vdu%!216
570 WHEN 9,133:rx%=@vdu%!36 DIV @vdu%!220-1
580 WHEN 10,134:rx%=@vdu%!28 DIV @vdu%!216-1
590 WHEN 11,135:rx%=@vdu%!32 DIV @vdu%!220
600 WHEN 12,136:rx%=2*@vdu%!0
610 WHEN 14,137:rx%=2*@vdu%!4
620 WHEN 16,138:rx%=2*@vdu%!8
630 WHEN 18,139:SYS "GetRgnBox",@vdu%!60,zp%:rx%=2*(zp%!12-@vdu%!12-1)
640 WHEN 20,142:r%(1)=@vdu%!16
650 WHEN 22,143:SYS "GetRgnBox",@vdu%!60,zp%:rx%=(zp%!12-@vdu%!20-1)
660 WHEN 36:rx%=@vdu%!8
670 WHEN 38:SYS "GetRgnBox",@vdu%!60,zp%:rx%=(zp%!12-@vdu%!12-1)
680 WHEN 87,155:rx%=@vdu%?70
690 WHEN 88,156:rx%=@vdu%?71
700 WHEN 89,153:rx%=@vdu%?65
710 WHEN 90,154:rx%=@vdu%?67
720 WHEN 91,151:rx%=3-(@vdu%?64-7)DIV2:IFrx%<0:rx%=1
730 WHEN 92,152:rx%=3-(@vdu%?66-7)DIV2:IFrx%<0:rx%=1
740 WHEN 96,3:rx%=@vdu%?73
750 OTHERWISE
760 rx%=0
770 ENDCASE
780 ry%=rx%DIV256:=0
790 ENDCASE
800 =0
810 DEFFNvdu:IFos%<>6:=0
820 IFrx%<16:IFrx%<>3:=0
830 IF FALSE THEN
840 =0
850 ENDIF
860
870 IFrx%=3:rx%=96
880 CASE rx% OF
890 WHEN 16:A%=138
900 WHEN 18:A%=139
910 WHEN 20:A%=142
920 WHEN 22:A%=143
930 WHEN 36:A%=144
940 WHEN 38:A%=145
950 WHEN 77:A%=148
960 WHEN 80:A%=149
970 WHEN 83:A%=150
980 WHEN 87:A%=155
990 WHEN 88:A%=156
1000 WHEN 89:A%=153
1010 WHEN 90:A%=154
1020 WHEN 91:A%=151
1030 WHEN 92:A%=152
1040 WHEN 96:A%=3
1050 OTHERWISE
1060 A%=rx%:IF A%<128:rx%=0:rx%=0:=TRUE
1070 ENDCASE
1080 !zp%=A%:zp%!4=-1:SYS "OS_ReadVduVariables",zp%,zp%+8
1090 rx%=zp%!8:ry%=rx%DIV256
1100 =TRUE
1110 :
1120 DEFFNmos_word
1130 IFA%=0:A%=256*?X%+X%?1:mem%?escflg%=0:osw0%=TRUE:PROCEscOn:INPUTLINE""A$:PROCEscOff:$(mem%+A%)=A$:osw0%=FALSE:ry%=LENA$:=0
1140 IF A%=190:IF X%?2=9:IF ?X%>8:A%=FNDis_Code(9,X%!4,X%!8):=0
1150 IF A%=190:IF X%?2=9:IF ?X%<9:$(X%+4)=FNDis_Name(9):=0
1160 IF A%=127:IF d_chn%:=FNmos_word7F
1170 IF os%<32 OR A%=10:CALL &FFF1:=0
1180 CASE A% OF
1190 WHEN 1:mem%!rx%=TIME:=0
1200 WHEN 2:TIME=mem%!rx%:=0
1210 WHEN 7:SOUND mem%!rx%AND&FFFF,mem%!(2+rx%)AND&FFFF,mem%!(4+rx%)AND&FFFF,mem%!(6+rx%)AND&FFFF:=0
1220 WHEN 8:ENVELOPE mem%?rx%,mem%?(1+rx%),mem%?(2+rx%),mem%?(3+rx%),mem%?(4+rx%),mem%?(5+rx%),mem%?(6+rx%),mem%?(7+rx%),mem%?(8+rx%),mem%?(9+rx%),mem%?(10+rx%),mem%?(11+rx%),mem%?(12+rx%),mem%?(13+rx%):=0
1230 WHEN 9:mem%?(rx%+4)=POINT(mem%!rx%AND&FFFF,mem%!(2+rx%)AND&FFFF)
1240 WHEN 14:$(mem%+rx%)=TIME$:=0
1250 WHEN 15:TIME$=$(mem%+rx%+1):=0
1260 ENDCASE
1270 =0
1280 :
1290 DEFFNmos_word7F
1300 IF(debug%AND8):PRINT"OSW7F: ";?X%;" ";~X%!1;" ";X%?5;" ";~X%?6;" ";X%?7;" ";X%?8;" "FNh0(X%?9,2)" "FNh0(X%?10,2)" "FNh0(X%?11,2)" "FNh0(X%?12,2)" "FNh0(X%?13,2)" "FNh0(X%?14,2)" "FNh0(X%?15,2)
1310 A$="":FORA%=0TO14:A$=A$+CHR$X%?A%:NEXT
1320
1330 A% =FNfdc_disk(X%?6,mem%+X%!1,X%?0 AND 5,X%?7,(X%?0 DIV 2) AND 1,X%?8,X%?9 AND 31)
1340 B%=X%?15:$X%=A$:X%?15=B%:X%?(X%?5+7)=A%
1350 IF(debug%AND8):PRINT"RESULT:";?X%;" ";~X%!1;" ";X%?5;" ";~X%?6;" ";X%?7;" ";X%?8;" "FNh0(X%?9,2)" "FNh0(X%?10,2)" "FNh0(X%?11,2)" "FNh0(X%?12,2)" "FNh0(X%?13,2)" "FNh0(X%?14,2)" "FNh0(X%?15,2)
1360 IF(debug%AND10)=10:A%=GET
1370 =0
1380 :
1390 DEFPROCswap(S%):REPEAT
1400 A%=X%?(S%+0):X%?(S%+0)=X%?(S%+3):X%?(S%+3)=A%
1410 A%=X%?(S%+1):X%?(S%+1)=X%?(S%+2):X%?(S%+2)=A%
1420 S%=S%-4:UNTILS%<0
1430 ENDPROC
1440 DEFPROCaddr(A%):IFX%!A%<&10000:X%!A%=mem%+A%!X%
1450 ENDPROC
1460 :
1470 DEFFNmos_file
1480 fn%=mem%+256*?X%+X%?1:PROCswap(14)
1490 IF debug%AND8:PRINT"OSFILE ";ra%;" ";~fn%-mem%;" ";~X%!2;" ";~X%!6;" ";~X%!10;" ";~X%!14
1500 IF ra%=255:PROCaddr(2)
1510 IF ra%=0 :PROCaddr(10):PROCaddr(14)
1520 IF os%<32 :SYS "OS_File",ra%,$fn%,X%!2,X%!6,X%!10,X%!14 TO ra%,,X%!2,X%!6,X%!10,X%!14 ELSE ra%=FNfile($fn%,ra%)
1530 FOR A%=2 TO 14 STEP 4:mem%!(rx%+A%)=X%!A%:NEXT:PROCswap(14):=0
1540 :
1550 DEFFNmos_args
1560
1570
1580
1590 IF os%>31:IF A%=0:IF Y%=0:ra%=29:=0
1600 IF A%=0:IF Y%=0:ra%=(USR&FFDA)AND&FF:=0
1610 X%=mem%+X%:PROCswap(0)
1620 IF Y%=0 OR Y%=&FFFF THEN
1630 CASE A% OF
1640 WHEN 0:!X%=0 :
1650 WHEN 1: :
1660 WHEN 2:!X%=0 :
1670 WHEN 3: :
1680 WHEN 4:!X%=0 :
1690 WHEN 5:!X%=0 :
1700 WHEN 6: :
1710 ENDCASE
1720 PROCswap(0):=0
1730 ENDIF
1740 CASE A% OF
1750 WHEN 0:!X%=PTR#Y%
1760 WHEN 1:PTR#Y%=!X%
1770 WHEN 2:!X%=EXT#Y%
1780 WHEN 3:EXT#Y%=!X%
1790 WHEN 4:!X%=EXT#Y%
1800 WHEN 5:!X%=EOF#Y%
1810 WHEN 6:EXT#Y%=!X%
1820 WHEN 255:IFos%>31
1830 OTHERWISE
1840 !X%=FNargs(A%,Y%,!X%)
1850 ENDCASE
1860 PROCswap(0):=0
1870 :
1880 DEFFNmos_bget:IF Y%=0:ra%=GET:=0
1890 IFos%>31:ra%=BGET#Y%:=0
1900 A%=USR&FFD7:ra%=A%AND&FF:PROCcarry(A%AND&1000000):=0
1910 :
1920 DEFFNmos_bput:IF Y%=0:VDU A%:=0 ELSE BPUT#Y%,A%:=0
1930 :
1940 DEFFNmos_gbpb
1950 PROCswap(9):B%=(X%!1<&10000):PROCaddr(1)
1960 IF ?X%=0:IFA%=1ORA%=2:REPEATVDUmem%?(X%!1):X%!5=X%!5-1:UNTILX%!5<1
1970 IF ?X%=0:IFA%=3ORA%=4:REPEATmem%?(X%!1)=GET:X%!5=X%!5-1:UNTILX%!5<1
1980 IF ?X%:PROCf_gbpb(A%,X%?0,X%!1,X%!5,X%!9)
1990 IF B%:X%!1=X%!1-mem%
2000 PROCswap(9):=0
2010 :
2020 DEFFNmos_find:IFA%=0:CLOSE#Y%:=0
2030 IF (A%AND&C0)=&40:ra%=FNopenin($(mem%+X%)):=0
2040 IF (A%AND&C0)=&80:ra%=FNopenout($(mem%+X%)):=0
2050 IF (A%AND&C0)=&C0:ra%=FNopenup($(mem%+X%)):=0
2060 :
2070 DEFFNmos_quit:=TRUE
2080 DEFFNmos_lang:=0
2090 :
2100 DEFPROCcarry(C%):rp%=(rp%AND-2)OR(C%AND1):ENDPROC
10
20 :
30
40
50 DEFPROCio_reset:ENDPROC
60 :
70 DEFFNio_rd(A%):IF(A%AND&FFF0)<>&FEE0:=mem%?A%
80 LOCAL X%,Y%
90 IFA%=&FEE0:=&7F :
100
110 IFA%=&FEE1:=&80
120 IFA%=&FEE2:=&C0 :
130 IFA%=&FEE3:=&80
140 IFA%=&FEE8:=((ADVAL(-2)<>0)AND2)+((ADVAL(-3)<>0)AND1) :
150 IFA%=&FEE9:A%=145:X%=1:=((USR&FFF4)AND&FF0000)DIV65536 :
160 =&7F
170 :
180 DEFPROCio_wr(A%,B%):IF(A%AND&FFE0)<>&FEE0:mem%?A%=B%:ENDPROC
190 LOCAL X%,Y%
200 IFA%=&FEE1:VDU B%:ENDPROC :
210
220 IFA%=&FEE8:OSCLI"FX7,8":OSCLI"FX8,8":OSCLI"FX2,2":ENDPROC :
230 IFA%=&FEE9:A%=138:X%=2:Y%=B%:CALL&FFF4:ENDPROC :
240 ENDPROC
250 :
10
20
30 :
40 DEFFNDis_Name(A%)="6809"
50 DEFFNDis_Code(A%,Ptr%,Data%):num%=1
60 X%!0=0:$(X%+4)=FN_diss:IFnum%<1:num%=1:$(X%+4)="EQUB &"+FNh0(Data%?0,2)
70 X%?3=num%:=num%
80 DEFFN_diss:op%=?Data%:num%=1
90 IF(op%AND&CF)=&83:="SUBD "+FNmde2((op%AND&30)DIV16)
100 IF(op%AND&CF)=&C3:="ADDD "+FNmde2((op%AND&30)DIV16)
110 IFop%=&87:num%=0:=""
120 IFop%=&C7:num%=0:=""
130 IF(op%AND&CF)=&87:="ST"+CHR$(65+(op%AND64)DIV64)+" "+FNmde((op%AND&30)DIV16)
140 IF(op%AND&CF)=&8C:="CMPX "+FNmde2((op%AND&30)DIV16)
150 IF(op%AND&CF)=&CC:="LDD "+FNmde2((op%AND&30)DIV16)
160 IFop%=&8D:num%=2:="BSR &"+FNh0(FNjr(Data%?1),4)
170 IF(op%AND&CF)=&8D:="JSR "+FNmde((op%AND&30)DIV16)
180 IFop%=&CD:num%=0:=""
190 IF(op%AND&CF)=&CD:="STD "+FNmde2((op%AND&30)DIV16)
200 IF(op%AND&CF)=&8E:="LDX "+FNmde2((op%AND&30)DIV16)
210 IF(op%AND&CF)=&CE:="LDU "+FNmde2((op%AND&30)DIV16)
220 IFop%=&8F:num%=0:=""
230 IF(op%AND&CF)=&8F:="STX "+FNmde2((op%AND&30)DIV16)
240 IFop%=&CF:num%=0:=""
250 IF(op%AND&CF)=&CF:="STU "+FNmde2((op%AND&30)DIV16)
260 IF(op%AND&80)=&80:=FNalu(op%AND15)+CHR$(65+(op%AND64)DIV64)+" "+LEFT$(" ",(op%AND&8E)=&86)+FNmde((op%AND&30)DIV16)
270 IF(op%AND&E0)=&40:=FNrot(op%AND15)+CHR$(65+(op%AND16)DIV16)
280 IF(op%AND&EF)=&6E:="JMP "+FNmde2((op%AND&30)DIV16)
290 IF(op%AND&E0)=&60:=FNrot(op%AND15)+" "+FNmde((op%AND&30)DIV16)
300 IF(op%AND&F0)=&20:num%=num%+1:="B"+MID$("RARNHILSCCCSNEEQVCVSPLMIGELTGTLE",(op%AND15)*2+1,2)+" &"+FNh0(FNjr(Data%?1),4)
310 IFop%=&0E:="JMP "+FNmde(1)
320 IF(op%AND&F0)=&00:=FNrot(op%AND15)+" "+FNmde(1)
330 IFop%=&10:=FNgrp10
340 IFop%=&11:=FNgrp11
350 IFop%=&12:="NOP"
360 IFop%=&13:="SYNC"
370 IFop%=&19:="DAA"
380 IFop%=&1A:="ORCC "+FNmde(0)
390 IFop%=&1C:="ANDCC "+FNmde(0)
400 IFop%=&1D:="SEX"
410 IF(op%AND&FE)=&1E:num%=num%+1:=MID$("EXGTFR",(op%AND1)*3+1,3)+" "+FNr(Data%?1 DIV16)+","+FNr(Data%?1 AND15)
420 IF(op%AND&FC)=&30:="LEA"+FNreg2(op%AND3)+" "+FNmde(2)
430 IFop%=&34:num%=num%+1:="PSHS "+FNstk(Data%?1)
440 IFop%=&35:num%=num%+1:="PULS "+FNstk(Data%?1)
450 IFop%=&36:num%=num%+1:="PSHU "+FNstk(Data%?1)
460 IFop%=&37:num%=num%+1:="PULU "+FNstk(Data%?1)
470 IFop%=&39:="RTS"
480 IFop%=&3A:="ABX"
490 IFop%=&3B:="RTI"
500 IFop%=&3C:="CWAI"
510 IFop%=&3D:="MUL"
520 IFop%=&3F:="SWI"
530 IFop%=&16:num%=3:="LBRA &"+FNh0(FNljr(256*Data%?1+Data%?2),4)
540 IFop%=&17:num%=3:="LBSR &"+FNh0(FNljr(256*Data%?1+Data%?2),4)
550 IFop%=&3E:="RESET"
560 num%=0:=""
570 DEFFNgrp10:num%=num%+1:op%=Data%?1
580 IF(op%AND&E0)=&20:num%=num%+1:="LB"+MID$("RARNHILSCCCSNEEQVCVSPLMIGELTGTLE",(op%AND15)*2+1,2)+" &"+FNh0(FNljr(256*Data%?1+Data%?2),4)
590 IFop%=&3F:="SWI2"
600 IF(op%AND&CF)=&83:="CMPD "+FNmde2((op%AND&30)DIV16)
610 IF(op%AND&CF)=&8C:="CMPY "+FNmde2((op%AND&30)DIV16)
620 IF(op%AND&CF)=&8E:="LDY "+FNmde2((op%AND&30)DIV16)
630 IFop%=&8F;num%=0:=""
640 IF(op%AND&CF)=&8F:="STY "+FNmde2((op%AND&30)DIV16)
650 IF(op%AND&CF)=&CE:="LDS "+FNmde2((op%AND&30)DIV16)
660 IFop%=&CF:num%=0:=""
670 IF(op%AND&CF)=&CF:="STS "+FNmde2((op%AND&30)DIV16)
680 num%=0:=""
690 DEFFNgrp11:num%=num%+1:op%=Data%?1
700 IFop%=&3F:="SWI3"
710 IF(op%AND&CF)=&83:="CMPU "+FNmde2((op%AND&30)DIV16)
720 IF(op%AND&CF)=&8C:="CMPS "+FNmde2((op%AND&30)DIV16)
730 num%=0:=""
740 DEFFNalu(A%)=MID$("SUBCMPSBCxxxANDBITLD ST EORADCOR ADD",A%*3+1,3+(A%=6 OR A%=7 OR A%=10))
750 DEFFNrot(A%):IFA%=1ORA%=2ORA%=5ORA%=11ORA%=14:num%=-9:=""
760 =MID$("NEGxxxxxxCOMLSRxxxRORASRASLROLDECxxxINCTSTxxxCLR",A%*3+1,3)
770 DEFFNmde2(A%):IFA%=0:num%=num%+2:="#&"+FNh0(Data%?(num%-2),2)+FNh0(Data%?(num%-1),2)
780 DEFFNmde(A%):IFA%=0:num%=num%+1:="#&"+FNh0(Data%?(num%-1),2)
790 IFA%=1:num%=num%+1:="&"+FNh0(Data%?(num%-1),2)
800 IFA%=2:num%=num%+1:=FNidx(Data%?(num%-1))
810 IFA%=3:num%=num%+2:="&"+FNh0(Data%?(num%-2),2)+FNh0(Data%?(num%-1),2)
820 DEFFNidx(A%):R$=FNreg1((A%AND&60)DIV32):A%=A%AND&9F
830 IFA%<16:=STR$(A%AND15)+","+R$
840 IFA%<32:=STR$((A%AND15)-16)+","+R$
850 O$="":C$="":IF(A%AND16):O$="[":C$="]"
860 A%=A%AND15
870 IFA%=0:IFO$<>"":num%=0:=""
880 IFA%=0:=O$+R$+"+,"+C$
890 IFA%=1:=O$+R$+"++,"+C$
900 IFA%=2:IFO$<>"":num%=0:=""
910 IFA%=2:=O$+",-"+R$+C$
920 IFA%=3:=O$+",--"+R$+C$
930 IFA%=4:=O$+","+R$+C$
940 IFA%=5:=O$+"B,"+R$+C$
950 IFA%=6:=O$+"A,"+R$+C$
960 IFA%=7:num%=0:""
970 IFA%=8:num%=num%+1:=O$+"&"+FNh0(Data%?(num%-1),2)+","+R$+C$
980 IFA%=9:num%=num%+2:=O$+"&"+FNh0(Data%?(num%-2),2)+FNh0(Data%?(num%-1),2)+","+R$+C$
990 IFA%=10:num%=0:=""
1000 IFA%=11:=O$+"D,"+R$+C$
1010 IFA%=12:num%=num%+1:=O$+"&"+FNh0(Data%?(num%-1),2)+",PC"+C$
1020 IFA%=13:num%=num%+2:=O$+"&"+FNh0(Data%?(num%-2),2)+FNh0(Data%?(num%-1),2)+",PC"+C$
1030 IFA%=14:num%=0:=""
1040 IFA%=14:IFO$="":num%=0:=""
1050 IFA%=15:num%=num%+2:=O$+"&"+FNh0(Data%?(num%-2),2)+FNh0(Data%?(num%-1),2)+C$
1060 =""
1070 DEFFNreg1(A%)=MID$("XYUS",A%+1,1)
1080 DEFFNreg2(A%)=MID$("XYSU",A%+1,1)
1090 DEFFNr(A%)=MID$("D X Y U S PC????A B CCDP????????",A%*2+1,1-(A%=5 OR A%>9))
1100 DEFFNjr(A%):IFA%<128:=Ptr%+2+A% ELSE =Ptr%+2-256+A%
1110 DEFFNljr(A%):IFA%<32768:=Ptr%+3+A% ELSE =Ptr%+3-65536+A%
1120 DEFFNstk(A%):A$=""
1130 IF(A%AND1):A$=",CC"
1140 IF(A%AND2):A$=A$+",A"
1150 IF(A%AND4):A$=A$+",B"
1160 IF(A%AND8):A$=A$+",DP"
1170 IF(A%AND16):A$=A$+",X"
1180 IF(A%AND32):A$=A$+",Y"
1190 IF(A%AND64):A$=A$+MID$(",U,S",(Data%?0AND2)+1,2)
1200 IF(A%AND128):A$=A$+",PC"
1210 =MID$(A$,2)
10
20 :
30
40
50 :
60 DEFPROCClose_All
70 in%=in%:IFin%:A%=in%:in%=0:CLOSE#A%
80 out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
90 ENDPROC
10
20 :
30
40
50 :
60
70
80 DEFFNs(A$):IFLEFT$(A$,1)=" ":REPEATA$=MID$(A$,2):UNTILLEFT$(A$,1)<>" "
90 IFRIGHT$(A$,1)=" ":REPEATA$=LEFT$(A$,LENA$-1):UNTILRIGHT$(A$,1)<>" "
100 =A$
110 :
120
130
140 DEFFNuc(A$):LOCAL B$:IFA$="":=""
150 REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":=B$
160 :
170
180
190 DEFFNlc(A$):LOCAL B$:IFA$="":=""
200 REPEATB$=B$+CHR$(ASCA$OR((A$<"_")AND&20)):A$=MID$(A$,2):UNTILA$="":=B$
210 :
10
20
30
40
50 :
60
70
80 :
90
100 DEFFNh0(A%,N%):=RIGHT$("0000000"+STR$~A%,N%)
110 :
120
130 DEFFNh(A%,N%):=RIGHT$(" "+STR$~A%,N%)
140 :
150
160 DEFFNd0(A%,N%):=RIGHT$("00000000"+STR$A%,N%)
170 :
180
190 DEFFNd(A%,N%):=RIGHT$(" "+STR$A%,N%)
200 :
210
220 DEFFNo0(A%,N%):LOCAL A$,B%,L%:IFA%<0:B%=2:A%=A%AND&7FFFFFFF
230 REPEATA$=STR$(A%AND7)+A$:A%=A%DIV8:L%=L%+3:UNTILL%>27:=RIGHT$(STR$(A%+B%)+A$,N%)
240 :
250
260 DEFFNo(A%,N%):LOCAL A$:IFA%<0:=FNo0(A%,N%)
270 REPEATA$=STR$(A%AND7)+A$:A%=A%DIV8:UNTILA%=0:=RIGHT$(STRING$(N%," ")+A$,N%)
280 :
290
300 DEFFNb0(A%,N%):LOCAL A$,B$,L%:B$="0":IFA%<0:B$="1":A%=A%AND&7FFFFFFF
310 REPEATA$=STR$(A%AND1)+A$:A%=A%DIV2:L%=L%+1:UNTILL%>30:=RIGHT$(B$+A$,N%)
320 :
330
340 DEFFNb(A%,N%):LOCAL A$:IFA%<0:=FNb0(A%,N%)
350 REPEATA$=STR$(A%AND1)+A$:A%=A%DIV2:UNTILA%=0:=RIGHT$(STRING$(N%," ")+A$,N%)
360 :
370
380 DEFFNdrv(A%):=CHR$(48+A%-7*(A%>9))
390 :
400
410 DEFFNDrv(A$):=ASCA$-48+7*(A$>"9")AND31
420 :
10
20 :
30
40
50 :
60
70
80
90 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y%:X%=1:os%=((USR&FFF4)AND&FF00)DIV256
100 IFos%>31:IFPAGE>&FFFFF:DIMX%LOCAL256:SYS"GetModuleFileName",0,X%,255:run$=$$X%:=@cmd$
110 A%=&600-&7B00*(PAGE>&8000)-&3F00*(PAGE>&C000):IF!(PAGE-&108)=@%:A%=PAGE-&208
120 IF?(TOP-3)=0:A%=&100:IFHIMEM<&FFFF:A%=PAGE-&300:IF!(HIMEM+512)=@%:A%=HIMEM
130 A$=$A%:IFPAGE=&8F00:run$=A$:SYS16TOA$,,A%:SYS72,"",A%:A$=MID$(A$,1+INSTR(A$+" "," ",1+INSTR(A$," "))):IFLENA$=0:A$=run$
140 FORY%=-1TO0:A$=" "+A$:REPEATA$=MID$(A$,2):UNTILASCA$<>32:IFASCA$=34:A%=INSTR(A$,"""",2)+1 ELSE A%=INSTR(A$+" "," ")
150 IFY%:run$=MID$(A$,1-(ASCA$=34),A%-1+2*(ASCA$=34)):A$=MID$(A$,A%+1)
160 NEXT:=A$
170 :
180
190
200
210 DEFPROCos(A$):IFASCA$=42:OSCLIA$ ELSE IFLENA$:CHAINA$
220 ENDPROC
230 :
240
250
260 DEFPROCexit(A%):OSCLI"FX1,"+STR$(A%AND255):quit$=quit$:A$=quit$:quit$="":PROCos(A$)
270 IFPAGE>&FFFFF:QUIT A% ELSE END
280 ENDPROC
290 :
10
20
30
40
50
60
70
80 :
90
100
110 :
120
130
140 :
150
160
170 DEFFNfile(A$,A%):IFA%<>8:IFPAGE<&FFFFF:$name%=A$:?X%=name%:X%?1=name%DIV256:=(USR&FFDD)AND&FF
180 A$=FNf_name(A$):IFA%=255 OR A%=5:X%!14=OPENIN(A$):IFX%!14:X%!10=EXT#X%!14:CLOSE#X%!14:X%!14=&33
190 IFA%=255:IFX%?6=0:OSCLI"LOAD """+A$+""" "+STR$~X%!2:=1
200 IFA%=5:IFX%!14:=1 ELSE IFA%=5:=0
210 IFA%=0:OSCLI"SAVE """+A$+""" "+STR$~X%!10+" "+STR$~X%!14:X%!10=X%!14-X%!10:=1
220 IFA%=7:OSCLI"SAVE """+A$+""" "+STR$~PAGE+"+"+STR$~X%!10:X%!10=X%!14-X%!10:=1
230 IFA%<>8:=0
240 IF(os%AND-24):A$="mkdir "+A$ ELSE A$="cdir "+A$
250 IFHIMEM>&FFFF:LOCAL ERROR:ON ERROR LOCAL:=0
260 OSCLIA$:=2
270 :
280
290
300 DEFPROCf_gbpb(A%,chn%,addr%,num%,ptr%)
310 ?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:IFPAGE<&FFFFF:CALL&FFD1:ENDPROC
320 IFA%=1ORA%=3:PTR#?X%=X%!9
330 REPEAT:IFA%=1ORA%=2:BPUT#?X%,?X%!1 ELSE IFA%=3ORA%=4:?X%!1=BGET#?X%
340 X%!1=X%!1+1:X%!5=X%!5-1:UNTIL(EOF#?X% AND A%>2)OR X%!5<1:ENDPROC
350 :
360 DEFPROCgbpb(A%,chn%,addr%,num%,ptr%)
370 ?X%=chn%:X%!1=addr%:X%!5=num%:X%!9=ptr%:IFPAGE<&FFFFF:CALL&FFD1:ENDPROC
380 IFA%=1ORA%=3:PTR#?X%=X%!9
390 REPEAT:IFA%=1ORA%=2:BPUT#?X%,?X%!1 ELSE IFA%=3ORA%=4:?X%!1=BGET#?X%
400 X%!1=X%!1+1:X%!5=X%!5-1:UNTIL(EOF#?X% AND A%>2)OR X%!5<1:ENDPROC
410 :
420
430
440 DEFFNgbpb(A%):IFPAGE>&FFFFF:=""
450 X%!1=name%:CALL&FFD1:A%=name%+((1+?name%)AND((A%AND-2)=6)):A%?(1+?A%)=13:=$(A%+1)
460 :
470
480
490 DEFFNf_scan(ptr%):IFPAGE>&FFFFF:=""
500 X%!1=name%:X%!5=1:X%!9=ptr%:A%=8:CALL&FFD1:IFX%!5=1:=""
510 A%=name%+1:A%!(A%?-1)=&D20:A%?(INSTR($A%," ")-1)=13:=$A%
520 :
530 DEFFNgbpb8(ptr%):IFPAGE>&FFFFF:=""
540 X%!1=name%:X%!5=1:X%!9=ptr%:A%=8:CALL&FFD1:IFX%!5=1:=""
550 A%=name%+1:A%!(A%?-1)=&D20:A%?(INSTR($A%," ")-1)=13:=$A%
560 :
570
580
590 DEFFNf_args(A%,Y%,ptr%):LOCAL X%,E%:IF?(TOP-3)=0:E%=Y%:Y%=0
600 IF FALSE THEN
610 LOCAL !&70:X%=&70:!X%=ptr%:CALL&FFDA:=!X%
620 ELSE
630 SYS"OS_Args",A%,Y%,ptr% TO ,,ptr%
640 SAVE:=ptr%
650 :
660 DEFFNargs(A%,Y%,ptr%):LOCAL X%,E%:IF?(TOP-3)=0:E%=Y%:Y%=0
670 IF FALSE THEN
680 LOCAL !&70:X%=&70:!X%=ptr%:CALL&FFDA:=!X%
690 ELSE
700 SYS"OS_Args",A%,Y%,ptr% TO ,,ptr%
710 SAVE:=ptr%
720 :
730
740
750 DEFFNf_argsA(A%):IF FALSE THEN
760 LOCAL X%,Y%,E%,!&70:X%=&70:=(USR&FFDA)AND&FF
770 ELSE
780 SYS"OS_Args",A% TO A%
790 SAVE:=A%
800 :
810 DEFFNargsA(A%):IF FALSE THEN
820 LOCAL X%,Y%,E%,!&70:X%=&70:=(USR&FFDA)AND&FF
830 ELSE
840 SYS"OS_Args",A% TO A%
850 SAVE:=A%
860 :
870
880
890 DEFFNfs:IF(os%AND-32)=0:LOCAL A%,Y%,E%:=(USR&FFDA)AND&FF
900 =29
910 :
920
930
940 DEFPROCf_delete(A$):IF(os%AND-24):A$="del "+A$ ELSE A$="delete "+A$
950 OSCLIA$:ENDPROC
960 :
970
980
990 DEFPROCf_dir(A$):IF(os%AND-24):A$="cd "+A$ ELSE A$="dir "+A$
1000 OSCLIA$:ENDPROC
1010 :
1020
1030
1040 DEFPROCf_cdir(A$):
1050 IF(os%AND-24):A$="mkdir "+A$ ELSE A$="cdir "+A$
1060 IF FALSE THEN
1070 OSCLIA$:ENDPROC
1080 ENDIF
1090 LOCAL ERROR:ON ERROR LOCAL:ENDPROC
1100 OSCLIA$
1110 ENDPROC
1120 :
1130
1140
1150 DEFFNf_openin(A$)=OPENIN(FNf_name(A$))
1160 :
1170
1180
1190 DEFFNf_openout(A$)=OPENOUT(FNf_name(A$))
1200 :
1210
1220
1230 DEFFNf_openup(A$)=OPENUP(FNf_name(A$))
1240 :
1250 DEFFNf_name(A$):IFos%AND-32:LOCALA%,B%:REPEATB%=A%:A%=INSTR(A$,"\",A%+1):UNTILA%=0:IFINSTR(A$,".",B%)=0:A$=A$+"."
1260 =A$