10 REM > Mon32
   20 REM > MonCore v2.02
   30 REM (C)1989-2007 J.G.Harston
   40 REM 16-Mar-2007 v2.00 JGH: Rewritten
   50 REM 22-May-2007 v2.01 JGH: *Spool only active when listing
   60 REM 15-Jan-2008 v2.02 JGH: Dynamically adjusts to screen size
   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:REM IFwid%<38:V.22,&87
  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 REM Library routines
 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 REM *********** End of MonCore ************
 1420 REM Specific disassembly routines from here
 1430 REM > Dis32 0.12 - 32000 disassembly routines
 1440 REM v0.13 - updated CXP, EXT, nn(Rn), ACB, BPT, @addr
 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 REM Format 10, 11, 13, 16, 17, 18, 19:
 1550 IF(op%AND&1F)=&06 OR (op%AND&5F)=&5E OR (op%AND&EF)=&8E:num%=0:=""
 1560 :
 1570 num%=1
 1580 REM Format 0:
 1590 IF(op%AND&0F)=&0A:="B"+FNbcc((op%AND&F0)DIV16)+"    "+FNdispPC
 1600 :
 1610 REM Format 1:
 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 REM Format 2:
 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 REM Format 3:
 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 REM Format 4:
 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 REM Format 5:
 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 REM Format 6:
 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 REM Format 7:
 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 REM Format 8:
 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 REM Format 9:
 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 REM Format 11:
 2230 IF(op%AND&0002FF)=&00BE:=MID$("ADDMOVCMPxxxSUBNEGundundDIVxxxundundMULABSundund",op0%*3+1,3)+FNfl(Data%?1AND1)+"   "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
 2240 :
 2250 REM Format 14:
 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 REM Format 15:
 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$+")":REM These should be short displacements
 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 REM IFA%=27:="*+"+FNdisp
 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%