10
20
30
40
50
60
70 :
80 ONERRORREPORT:PRINTERL:PROCend:END
90 os%=FNfx(0,1):MODE(FNfx(135,0)DIV256)OR((HIMEM<&FFFF)AND&80):IFHIMEM<&FFFF:HIMEM=FNfx(132,0)
100 DIM ctrl%39,data%15,zp%3:X%=ctrl%:Y%=X%DIV256
110 blen%=HIMEM-LOMEM-&580+&C00*(HIMEM>&FFFF):buf%=HIMEM-blen%:HIMEM=buf%
120 hex%=TRUE:dmp%=0:ny%=0:dd$="isassembl":io%=FNfx(130,0)=&FFFF
130 E%=E%AND3:Z%=Z%AND3:D%=1+((D%-1)AND7):ONERRORIFFNerr:PROCend:END
140 REPEAT:CLS:PROCSetScr:REPEATX%=ctrl%:Y%=X%DIV256:PROCaddr:UNTILFNmenu:UNTILQ$="Q"ORQ$="X":PROCend:END
150 :
160 DEFFNline(addr%):PRINTFNho(addr%-O%,D%);" ";:!data%=!addr%:data%!4=addr%!4:data%!8=addr%!8
170 IFio%:IFaddr%<0:FORB%=0TO7:data%?B%=FNrm(addr%+B%):NEXT
180 IFdmp%:FORB%=0TO7:PRINTFNho(data%?B%,2)" ";:NEXT:FORB%=0TO7:PRINTFNc(data%?B%);:NEXT:PRINT:=addr%+8
190 N%=FNDis_Code(M%,addr%-O%,data%)
200 IFZ%=0:FORB%=0TON%-1:PRINTFNho(data%?B%,2);" ";:NEXT
210 IFZ%=1:FORB%=0TON%-1STEP2:PRINTFNho(data%!B%AND&FFFF,4);" ";:NEXT
220 IFZ%=3:FORB%=0TON%-1STEP4:PRINTFNho(data%!B%,N%*2);" ";:NEXT
230 PRINTTAB(t1%+D%);:FORB%=0TON%-1:PRINTFNc(data%?B%);:NEXT
240 PRINTTAB(t2%+D%);" ";FNaddr($(X%+4)):IF(X%?2AND64):PRINT
250 =addr%+N%
260 :
270 DEFFNmenu:CLS:IFFNDis_Name(M%)="":M%=FNcpu:PROCSetScr
280 PROCtop:addr%=FNline(P%):num%=addr%-P%
290 REPEATaddr%=FNline(addr%):UNTILVPOS>hgh%-1+8*(wid%<40)
300 REPEATQ$=GET$:V%=VPOS:IFQ$="*":PROCosc
310 IFQ$=" ":addr%=FNline(addr%):PRINTTAB(0,2 AND (hgh%>19));:P%=P%+num%:num%=FNline(P%)-P%
320 IFQ$>"`" AND Q$<"{":Q$=CHR$(ASCQ$-32)
330 UNTILINSTR(CHR$13+CHR$8+CHR$9+CHR$127+"+;-=GPQWSMHJOLTYZNR*0123456789ABCDEFX",Q$)
340 IFQ$="*":=TRUE
350 IFQ$=CHR$13:P%=P%+1:=0
360 IFQ$=CHR$127ORQ$=CHR$8:P%=P%-1:=0
370 IFQ$="+"ORQ$=";":P%=P%+8:=0
380 IFQ$="-"ORQ$="=":P%=P%-8:=0
390 IFQ$=CHR$9:dmp%=dmp%EOR2:=0
400 IFQ$="W":D%=4+((D%-3)MOD5):=0
410 IFQ$="H":hex%=NOThex%:=0
420 IFQ$="J":Z%=(Z%+1)AND3:=0
430 IFQ$="M":INPUT"Address: &"A$:IFA$="":P%=buf%:O%=P%:=0 ELSEIFQ$="M":P%=EVAL("&"+A$)+O%:=0
440 IFQ$="O":PROCo:PROCtop:=0
450 IFQ$="L":PROClist(FALSE):=0
460 IFQ$="S" ANDos%:PROCmode:=TRUE
470 IFQ$="T":INPUTLINE"Text: "Q$:A%=?(P%+LENQ$):$(P%)=Q$:?(P%+LENQ$)=A%:P%=P%+LENQ$:=0
480 IFQ$="Y":INPUTLINE"Message: "Q$:A%=?(P%+LENQ$):$P%=Q$:?(P%+LENQ$)=A%:?(P%-1+LENQ$)=&80 OR ?(P%-1+LENQ$):?(P%+LENQ$)=A%:P%=P%+LENQ$:=0
490 IFQ$="Z":M%=FNcpu:PROCSetScr:=0
500 IFQ$="N":E%=(E%+1)AND3:=0
510 IFQ$="R" ANDos%:PROCrom:=0
520 IFQ$="G":INPUTLINE"Get file: "A$:IFA$<>"":OSCLI"LOAD """+A$+""" "+STR$~buf%+LEFT$("+"+STR$~blen%,os%=32):=TRUE
530 IFQ$="P":INPUTLINE"Put file: "A$:IFA$<>"":INPUT"Length: &"Q$:OSCLI"SAVE """+A$+""" "+STR$~buf%+"+"+Q$:=TRUE
540 IF(Q$>"/" AND Q$<":")OR(Q$>"@" AND Q$<"G"):PROCbyte(Q$):=0
550 IFQ$="Q"ORQ$="X":INPUT"Quit? "Q$:A%=(ASCQ$AND&DF)=89:Q$="":IFA%:Q$="Q"
560 =Q$="X"ORQ$="Q"
570 :
580 DEFPROCo:INPUT"Address for code address 0000: &"A$:IFA$="":A$=STR$~buf%
590 IFLEFT$(A$,1)="=":O%=P%-EVAL("&"+MID$(A$,2)):ENDPROC
600 A%=P%-O%:O%=EVAL("&"+A$):P%=O%+A%:ENDPROC
610 :
620 DEFPROClist(T%)
630 INPUT"Start address: &"A$:IFA$="":addr%=P% ELSE addr%=EVAL("&"+A$)+O%
640 INPUT"End address: &"A$:IFA$="":end%=addr%+&8000 ELSE end%=EVAL("&"+A$)+O%
650 INPUT"Address for code address 0000: &"A$:IFA$<>"":O%=EVAL("&"+A$)
660 OSCLI"FX3":REPEATaddr%=FNline(addr%):UNTILaddr%>end%:OSCLI"FX3,16":ENDPROC
670 :
680 DEFPROCbyte(Q$):PRINT"Bytes: &";Q$;
690 REPEAT:A%=GET:IFA%>96:A%=A%AND&DF
700 IF(A%=95 OR A%=8) AND Q$<>"":VDU127:Q$=LEFT$(Q$,LEN Q$-1)
710 IF((A%>47 AND A%<58) OR (A%>64 AND A%<71)) AND LEN Q$<30:VDUA%:Q$=Q$+CHR$A%
720 UNTILA%=13:IFQ$<>"":REPEAT:?P%=EVAL("&"+LEFT$(Q$,2)):P%=P%+1:Q$=MID$(Q$,3):UNTILLENQ$<2
730 ENDPROC
740 :
750 DEFPROCrom:INPUT"ROM: &"A$:IFA$="":P%=P%AND&FFFFFF:ENDPROC
760 P%=(P%AND&FFFF)OR&FF000000 OR 65536*EVAL("&F"+A$):ENDPROC
770 :
780 DEFPROCmode:INPUT"Mode: "A$:IFA$="":ENDPROC
790 Q%=EVAL(A$)OR&80:IFos%<6:IFio%:IFFNfx(133,Q%)<HIMEM:ENDPROC
800 VDU22,Q%:ENDPROC:
810 ENDPROC
820 :
830 DEFPROCosc:IFwid%>40:VDU26,31,0,hgh%
840 REPEAT:INPUTLINE"*"A$:OSCLI A$:VDU58:REPEATQ$=GET$:UNTILINSTR(CHR$13+"GgPp*",Q$):VDU127
850 UNTILQ$<>"*":IFQ$=CHR$13:Q$="*"
860 ENDPROC
870 :
880 DEFFNaddr(A$):PROCname:IFhex%:=A$
890 A%=INSTR(A$,"&"):IFA%=0:=A$
900 L%=A%:REPEATL%=L%+1:UNTILINSTR("0123456789ABCDEF",MID$(A$,L%,1))=0 OR L%>LENA$
910 =LEFT$(A$,A%)+"o"+FNo0(EVAL(MID$(A$,A%,L%-A%+1)),(L%-A%-1)*3/2)+MID$(A$,L%)
920 DEFPROCname:IFE%=0:ENDPROC ELSE A%=INSTR(A$,"&FF"):IFA%=0:ENDPROC
930 L%=EVAL(MID$(A$,A%,5))-&FFCE:IFL%<0 OR L%>43:ENDPROC
940 IF((L%MOD3-(L%>27))MOD3-3*(L%=24)+(L%>24 AND L%<28)-3*(L%=27)-(L%=28)):ENDPROC
950 IF(E%AND2):A$=A$+" :\ ":IF(E%AND1):A%=LENA$+1
960 A$=LEFT$(A$,A%-1)+"OS"+MID$("FINDGBPBBPUTBGETARGSFILERDCHASCINEWLWRCRWRCHWORDBYTE_CLI",(L%DIV3)*4+1,4)+MID$(A$,A%+5):IFE%=2:A$=A$+"&"+STR$~(L%+&FFCE)
970 ENDPROC
980 :
990 DEFPROCtop:IFhgh%>20:VDU30:PRINT"Memory: &";FNh0(P%-O%,D%)SPC(19-POS);"Origin: &";FNh0(O%,D%+1);SPC(39-POS)'"Buffer: &"~buf%;SPC(19-POS)"Buffer size: &"~blen%'SPC(39):ENDPROC
1000 VDU28,47,hgh%,wid%,0:PRINTTAB(9,2);FNh0(P%-O%,D%+1);TAB(9,3);FNh0(O%,D%+1):VDU28,0,hgh%,45,0:ENDPROC
1010 :
1020 DEFPROCSetScr:OSCLI"FX3,16":VDU3,26:C$=CHR$132:B$=CHR$135:!X%=0:A$=FNDis_Name(M%):A%=X%?3:D%=(A%AND3)*2+4:Z%=(A%AND12)DIV4:hex%=(A%AND16)=0:IFFNfx(135,0)DIV256<>7:C$=" ":B$=" "
1030 t1%=13:wid%=FNfx(160,10):hgh%=FNfx(160,9)AND&FF:IFwid%>80:IFD%>4:t1%=(wid%-79)/8*3+13 ELSE IFwid%<38:VDU22,&87:PROCSetScr:ENDPROC
1040 t2%=t1%+t1%DIV3:IFhgh%<20 OR wid%>40:VDU28,wid%-33,hgh%,wid%,0:IFhgh%<20:PRINT"** "A$" D"dd$"er **"''"Memory: &";FNh0(P%-O%,D%+1)'"Origin: &";FNh0(O%,D%+1)'"Buffer addr: &";~buf%'"Buffer size: &";~blen%:VDU28,0,hgh%,45,0:ENDPROC
1050 W%=33-11*(wid%<40):PRINTSTRING$(W%/4-LENA$/2+(ny%>9),"*");" ";A$;" D"dd$"er ";ny%;" ";STRING$(W%-POS,"*")
1060 IFwid%<40:PRINTTAB(0,hgh%-6);C$"RETURN"B$"forward 1"SPC4;C$"+"B$"forward 8"SPC7;C$"DELETE"B$"back 1"SPC7;C$"-"B$"back 8"'C$"L"B$"List d"dd$"y "C$"TAB"B$"DUMP/LIST"SPC6;
1070 IFwid%<40:PRINTC$"M"B$"Set Memory address"C$"O"B$"Set code origin"'C$"T"B$"Enter text"SPC8;C$"Y"B$"Enter message ";C$"Z"B$"Set machine"SPC6;C$"SPC"B$"Move past code";:VDU28,0,hgh%-7,wid%,1:ENDPROC
1080 PRINT"RETURN forward 1 + forward 8"'"DELETE backward 1 - backward 8"'"SPACE move past code"''" M: Set memory address"'" O: Set code origin"'" N: Display named labels"'" W: Address width"'" J: Data width"'" H: Hex/Oct toggle"
1090 PRINT" TAB: Dump/List"''" 0-9, A-F: Enter bytes"'" T: Enter text"'" Y: Enter message"'" L: List d"dd$"y"'" G: Get to buffer"'" P: Put from buffer":IFos%:PRINT" Z: Set machine"
1100 PRINT" S: Screen mode"'" R: ROM number"'" Q: Quit";
1110 VDU28,0,hgh%,wid%-35,0:ENDPROC
1120 :
1130 DEFFNcpu:IFFNDis_Name(0)<>"":=M% ELSE =FNDis_CPU
1140 :
1150 DEFFNerr:IFERR<0:P%=P%DIV2:O%=O%DIV2:=INKEY(os%>0)
1160 REPORT:IFERR<>17:IFGET
1170 IFINKEY(os%>0):PRINT" at line ";ERL ELSE CLS
1180 =INKEY(os%>0)
1190 :
1200 DEFPROCend:OSCLI"FX3":ON ERROR END
1210 VDU26:PRINTTAB(0,hgh%);:*QUIT
1220 ENDPROC
1230 :
1240 DEFPROCaddr:IFPAGE>&FFFFF:IFP%<PAGE OR P%>HIMEM+blen%:P%=buf%
1250 ENDPROC
1260 DEFFNho(A%,N%):IFhex%:=FNh0(A%,N%) ELSE =FNo0(A%,N%*3/2)
1270 :
1280
1290 DEFFNc(A%):A%=A%AND127:IFA%=127 OR A%<32:="." ELSE =CHR$A%
1300 DEFFNh0(A%,N%)=RIGHT$("0000000"+STR$~A%,N%)
1310 DEFFNo0(A%,N%):LOCAL A$,B%,L%:IFA%<0:B%=2:A%=A%AND&7FFFFFFF
1320 REPEATA$=STR$(A%AND7)+A$:A%=A%DIV8:L%=L%+3:UNTILL%>27:=RIGHT$(STR$(A%+B%)+A$,N%)
1330 DEFFNfx(A%,X%):LOCAL Y%:Y%=X%DIV256:IFPAGE<&FFFFFF:=((USR&FFF4)AND&FFFF00)DIV256
1340 IFA%=135:X%=MODE:IFX%>-1:=X%*256ELSEIFA%=135:=&A00
1350 IFA%=160:IFX%=10:=@vdu%!28 DIV @vdu%!216-1
1360 IFA%=160:IFX%=9:=@vdu%!36 DIV @vdu%!220-1
1370 =((USR&FFF4)AND&FFFF00)DIV256
1380 DEFFNrm(!&F6):LOCALY%:Y%=?&F8+&40:IFY%AND&40:IF?&F7>&BF:?&F9=0
1390 IF!&F6<0:IF?&F7>&7FORY%=&3E:=(USR&FFB9)AND&FF ELSE =?!&F6
1400 :
1410
1420
1430
1440
1450 :
1460 DEFFNDis_Name(A%):X%?3=2:="32000"
1470 DEFFNDis_Code(A%,Ptr%,Data%):LOCAL op%,num%,i%,g1%,g2%,op0%,dz%
1480 op%=!Data%:i%=op%AND3:g1%=Data%?1DIV8:g2%=(op%AND&7C0)DIV64
1490 X%!0=0:A$=FN_32:IFLENA$<35:$(X%+4)=A$ ELSE $(X%+4)=LEFT$(A$,32)+"..."
1500 IFnum%:IFnum%<13:X%?3=num%:=num%
1510 X%?2=&80:X%?3=1:$(X%+4)="EQUB &"+FNh0(?Data%,2)+LEFT$(" ; num="+STR$num%,num%<>0):=1
1520 :
1530 DEFFN_32
1540
1550 IF(op%AND&1F)=&06 OR (op%AND&5F)=&5E OR (op%AND&EF)=&8E:num%=0:=""
1560 :
1570 num%=1
1580
1590 IF(op%AND&0F)=&0A:="B"+FNbcc((op%AND&F0)DIV16)+" "+FNdispPC
1600 :
1610
1620 IF(op%AND&FF)=&02:="BSR "+FNdispPC
1630 IF(op%AND&FF)=&12:X%?2=&40:="RET "+FNdisp
1640 IF(op%AND&FF)=&22:="CXP "+FNdisp
1650 IF(op%AND&FF)=&32:X%?2=&40:="RXP "+FNdisp
1660 IF(op%AND&FF)=&42:X%?2=&40:="RETT "+FNdisp
1670 IF(op%AND&FF)=&52:X%?2=&40:="RETI"
1680 IF(op%AND&FF)=&62:="SAVE "+FNlst(0)
1690 IF(op%AND&FF)=&72:="RESTORE "+FNlst(7)
1700 IF(op%AND&FF)=&82:="ENTER "+FNlst(0)+","+FNdisp
1710 IF(op%AND&FF)=&92:="EXIT "+FNlst(7)
1720 IF(op%AND&FF)=&A2:="NOP"
1730 IF(op%AND&FF)=&B2:="WAIT"
1740 IF(op%AND&FF)=&C2:="DIA"
1750 IF(op%AND&FF)=&D2:num%=2:="FLAG &"+FNh0(Data%?1,2)
1760 IF(op%AND&FF)=&E2:num%=2:="SVC &"+FNh0(Data%?1,2)
1770 IF(op%AND&FF)=&F2:num%=1:="BPT"
1780 :
1790 num%=2
1800
1810 IF(op%AND&7C)=&0C:IFi%<>2:="ADDQ"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)
1820 IF(op%AND&7C)=&1C:IFi%<>2:="CMPQ"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)
1830 IF(op%AND&7C)=&2C:IFi%<>2:="SPR"+FNsz(i%)+" "+FNareg(g2%DIV2)+","+FNgen(g1%,i%)
1840 IF(op%AND&7C)=&3C:IFi%<>2:="S"+FNcc((op%AND&380)DIV128)+FNsz(i%)+" "+FNgen(g1%,i%)
1850 IF(op%AND&7C)=&4C:IFi%<>2:="ACB"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)+","+FNdispPC
1860 IF(op%AND&7C)=&5C:IFi%<>2:="MOVQ"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)
1870 IF(op%AND&7C)=&6C:IFi%<>2:="LPR"+FNsz(i%)+" "+FNareg(g2%DIV2)+","+FNgen(g1%,i%)
1880 :
1890
1900 IF(op%AND&7FC)=&27C:X%?2=&40
1910 IF(op%AND&FC)=&7C:IFi%<>2:=LEFT$(MID$("CXPD BICPSRJUMP BISPSRxxxx ADJSP JSR CASE",g2%DIV4*6+1,VALMID$("46464534",g2%DIV4+1,1))+FNsz(i%),5)+" "+FNgen(g1%,i%)
1920 :
1930
1940 IF(op%AND&0C)<>&0C:IFi%<>2:A%=(op%AND&3C)DIV4:IFop%<8:A$=FNgen(g1%,i%):=LEFT$(MID$("ADD CMP BIC xxx ADDCMOV OR xxx SUB ADDRAND xxxSUBCTBITXOR",A%*4+1,VALMID$("333043203430443",A%+1,1))+FNsz(i%)+" ",5)+" "+A$+","+FNgen(g2%,i%)
1950 IF(op%AND&0C)<>&0C:IFi%<>2:A%=(op%AND&3C)DIV4:IFop%>7:A$=FNgen(g2%,i%):=LEFT$(MID$("ADD CMP BIC xxx ADDCMOV OR xxx SUB ADDRAND xxxSUBCTBITXOR",A%*4+1,VALMID$("333043203430443",A%+1,1))+FNsz(i%)+" ",5)+" "+FNgen(g1%,i%)+","+A$
1960 :
1970 num%=3:i%=(op%AND&300)DIV256:g1%=Data%?2DIV8:g2%=(op%AND&7C000)DIV&4000:op0%=(Data%?1AND&3C)DIV4
1980
1990 IF(op%AND&F87CFF)=&80E:IFi%<>2:="SETCFG"+FNsz(Data%?1 AND 3)+" "+FNcfg(g2%DIV2)
2000 IF(op%AND&F870FF)=&00E:IFi%<>2:IF(op%AND&60000)<>&40000:=MID$("MOVSCMPSxxxxSKPS",op0%*6+1,4)+FNsz(i%)+FNstr(g2%DIV2)
2010 :
2020
2030 IF(op%AND&0000FF)=&04E:IFi%<>2:=LEFT$(MID$("ROT ASH CBIT CBITIundefLSH SBIT SBITINEG NOT undefSUBP ABS COM IBIT ADDP",op0%*5+1,VALMID$("3345534533543345",op0%+1,1))+FNsz(i%)+" ",5)+" "+FNgen(g1%,0)+","+FNgen(g2%,i%)
2040 :
2050
2060 IF(op%AND&0038FF)=&00CE:IFi%<>2:=MID$("MOVCMP",op0%*3+1,3)+"M"+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)+","+FNdisp
2070 IF(op%AND&0038FF)=&08CE:IFi%<>2:A$=MID$("INSEXT",op0%*3-5,3)+"S"+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%):num%=num%+1:=A$+","+STR$(Data%?(num%-1)DIV32)+","+STR$(1+(Data%?(num%-1)AND31))
2080 IF(op%AND&0020FF)=&20CE:IFi%<>2:=MID$("MULMEIundDEIQUOREMMODDIV",op0%*3-23,3)+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
2090 IF(op%AND&0030FF)=&10CE:IFi%<>2:=MID$("MOVX"+FNsz(i%)+"WMOVZ"+FNsz(i%)+"WMOVZ"+FNsz(i%)+"DMOVX"+FNsz(i%)+"D",op0%*6-23,6)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
2100 :
2110
2120 IF(op%AND&00047F)=&002E:IFi%<>2:=MID$("EXTINS",(op%AND&80)DIV128*3+1,3)+FNsz(i%)+" R"+STR$(op0%DIV2)+","+FNgen(g1%,i%)+","+FNgen(g2%,i%)+","+FNdisp
2130 IF(op%AND&00003F)=&002E:IFi%<>2:A%=(op%AND&C0)+(op%AND&400)DIV4:IFA%=&40 OR A%=&C0 OR A%=&100:=LEFT$(MID$("CVTP xxxxxCHECKINDEX",A%DIV64*5-4,5+(A%=64))+FNsz(i%)+" ",6)+" R"+STR$(op0%DIV2)+","+FNgen(g1%,i%)+","+FNgen(g2%,i%)
2140 IF(op%AND&0004FF)=&046E:IFi%<>2:="FFS"+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
2150 IF(op%AND&002CFF)=&0CAE:IFi%<>2:="MOV"+MID$("SUUS",(op0%AND4)DIV2+1,2)+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
2160 :
2170
2180 IF(op%AND&003FFF)=&083E:="LFSR "+FNgen(g1%,i%)
2190 IF(op%AND&003FFF)=&303E:="SFSR "+FNgen(g1%,i%)
2200 IF(op%AND&0000FF)=&003E:IFi%<>2:=MID$("MOV xxxxxMOVLFMOVFLROUNDTRUNCxxxxxFLOOR",(op0%DIV2)*5+1,VALMID$("35555555",(op0%DIV2)+1,1))+FNfl(op%AND1)+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
2210 :
2220
2230 IF(op%AND&0002FF)=&00BE:=MID$("ADDMOVCMPxxxSUBNEGundundDIVxxxundundMULABSundund",op0%*3+1,3)+FNfl(Data%?1AND1)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
2240 :
2250
2260 IF(op%AND&0078FF)=&001E:=MID$("RDVALWRVAL",op0%*5+1,5)+FNsz(i%)+" "+FNgen(g1%,i%)
2270 IF(op%AND&0078FF)=&081E:=MID$("LMR SMR ",op0%*5-9,5)+FNsz(i%)+" "+FNmmu(g2%DIV2)+","+FNgen(g1%,i%)
2280 :
2290
2300 IF(op%AND&00001F)=&0016:="SLAVE "+STR$((Data%?0)DIV32)+",&"+FNh0(Data%!1,4)
2310 :
2320 num%=1:X%?2=&80:="equb &"+FNh0(op%,2)
2330 :
2340 DEFFNlst(A%):LOCAL rn%,n%,A$:rn%=Data%?num%:num%=num%+1
2350 FOR n%=0 TO 7:IF (rn% AND (2^n%)):A$=A$+",R"+STR$(n%EORA%)
2360 NEXT n%:="["+MID$(A$,2)+"]"
2370 DEFFNcfg(A%)=LEFT$("I",(A%AND1)=1)+LEFT$("F",(A%AND2)=2)+LEFT$("M",(A%AND4)=4)+LEFT$("C",(A%AND8)=8)
2380 DEFFNstr(A%)=LEFT$("T",(A%AND1)=1)+LEFT$("B",(A%AND2)=2)+LEFT$("W",(A%AND12)=4)+LEFT$("U",(A%AND12)=12)
2390 DEFFNbcc(A%)=MID$("EQNECSCCHILSGTLEFSFCLOHSLTGER NV",A%*2+1,2)
2400 DEFFNcc(A%)=MID$("EQNECSCCHILSGTLEFSFCLOHSLTGEALNV",A%*2+1,2)
2410 DEFFNshort(A%):A%=A%AND15:IF A%<8:="+"+STR$A% ELSE =STR$(A%-16)
2420 DEFFNsz(A%)=MID$("BW-D",A%+1,1)
2430 DEFFNfl(A%)=MID$("LF",A%+1,1)
2440 DEFFNgen(A%,sz%):LOCAL rn%:rn%=A%
2450 IFA%<8:="R"+STR$A%
2460 IFA%<16:=FNdispReg+"(R"+STR$(rn%-8)+")"
2470 IFA%=16:A$=FNdisp+"(FP)":=FNdisp+"("+A$+")":
2480 IFA%=17:A$=FNdisp+"(SP)":=FNdisp+"("+A$+")"
2490 IFA%=18:A$=FNdisp+"(SB)":=FNdisp+"("+A$+")"
2500 IFA%=19:="revd"
2510 IFA%=20:IFsz%=0:num%=num%+1:="&"+FNh0(Data%?(num%-1),2)
2520 IFA%=20:IFsz%=1:num%=num%+2:="&"+FNh0(Data%!(num%-2),4)
2530 IFA%=20:num%=num%+4:="&"+FNh0(Data%?(num%-4),2)+FNh0(Data%?(num%-3),2)+FNh0(Data%?(num%-2),2)+FNh0(Data%?(num%-1),2)
2540 IFA%=21:="@&"+FNh0(FNdispOff,8)
2550 IFA%=22:A$=FNdisp:="EXT("+A$+")+"+FNdisp
2560 IFA%=23:="TOS"
2570 IFA%=24:=FNdispReg+"(FP)"
2580 IFA%=25:=FNdispReg+"(SP)"
2590 IFA%=26:=FNdispReg+"(SB)"
2600 IFA%=27:=FNdispPC
2610
2620 rn%=Data%?num%:num%=num%+1
2630 IFA%=28:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":B]"
2640 IFA%=29:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":W]"
2650 IFA%=30:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":D]"
2660 IFA%=31:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":Q]"
2670 =""
2680 DEFFNdisp:A%=FNdispVal:="&"+FNh0(A%,dz%*2+2)
2690 DEFFNdispPC:="&"+FNh0(Ptr%+FNdispOff,8)
2700 DEFFNdispReg:A%=FNdispOff:IFA%<0:=STR$A% ELSE ="&"+FNh0(A%,(1+LENSTR$~A%)AND-2)
2710 DEFFNdispOff:A%=FNdispVal:dz%=EVAL("&"+MID$("0000003F00001FFF000000001FFFFFFF",dz%*8+1,8)):IFA%>dz%:=A%-2*dz%-2 ELSE =A%
2720 DEFFNdispVal:dz%=(Data%?num%)DIV64:dz%=VALMID$("0013",dz%+1,1)
2730 IFdz%=0:num%=num%+1:=Data%?(num%-1)
2740 IFdz%=1:num%=num%+2:=Data%?(num%-1)+256*(Data%?(num%-2) AND 63)
2750 num%=num%+4:=Data%?(num%-1)+256*Data%?(num%-2)+65536*Data%?(num%-3)+&1000000*(Data%?(num%-4) AND 63)
2760 DEFFNareg(A%)
2770 IFA%=0:="US"
2780 IFA%=8:="FP"
2790 IFA%=9:="SP"
2800 IFA%=10:="SB"
2810 IFA%=13:="PSR"
2820 IFA%=14:="INTBASE"
2830 IFA%=15:="MOD"
2840 ="AR"+STR$A%
2850 DEFFNmmu(A%)
2860 IF(A%AND14)=0:="BPR"+STR$A%
2870 IF(A%AND14)=4:="PF"+STR$(A%-4)
2880 IFA%=8:="SC"
2890 IFA%=10:="MSR"
2900 IFA%=11:="BCNT"
2910 IF(A%AND14)=12:="PTB"+STR$(A%-12)
2920 IFA%=15:="EIA"
2930 ="mmu"+STR$A%