10
20
30
40 :
50 DEFFNDis_Name(A%):X%?3=2:="32000"
60 DEFFNDis_Code(A%,Ptr%,Data%):LOCAL op%,num%,i%,g1%,g2%,op0%,dz%
70 op%=!Data%:i%=op%AND3:g1%=Data%?1DIV8:g2%=(op%AND&7C0)DIV64
80 X%!0=0:A$=FN_32:IFLENA$<35:$(X%+4)=A$ ELSE $(X%+4)=LEFT$(A$,32)+"..."
90 IFnum%:IFnum%<13:X%?3=num%:=num%
100 X%?2=&80:X%?3=1:$(X%+4)="EQUB &"+FNh0(?Data%,2)+LEFT$(" ; num="+STR$num%,num%<>0):=1
110 :
120 DEFFN_32
130
140 IF(op%AND&1F)=&06 OR (op%AND&5F)=&5E OR (op%AND&EF)=&8E:num%=0:=""
150 :
160 num%=1
170
180 IF(op%AND&FF)=&EA:X%?2=&40:="BR "+FNdispPC
190 IF(op%AND&0F)=&0A:="B"+FNcc((op%AND&F0)DIV16)+" "+FNdispPC
200 :
210
220 IF(op%AND&FF)=&02:="BSR "+FNdispPC
230 IF(op%AND&FF)=&12:X%?2=&40:="RET "+FNdisp
240 IF(op%AND&FF)=&22:="CXP "+FNdisp
250 IF(op%AND&FF)=&32:X%?2=&40:="RXP "+FNdisp
260 IF(op%AND&FF)=&42:X%?2=&40:="RETT "+FNdisp
270 IF(op%AND&FF)=&52:X%?2=&40:="RETI"
280 IF(op%AND&FF)=&62:="SAVE "+FNlst(0)
290 IF(op%AND&FF)=&72:="RESTORE "+FNlst(7)
300 IF(op%AND&FF)=&82:="ENTER "+FNlst(0)+","+FNdisp
310 IF(op%AND&FF)=&92:="EXIT "+FNlst(7)
320 IF(op%AND&FF)=&A2:="NOP"
330 IF(op%AND&FF)=&B2:="WAIT"
340 IF(op%AND&FF)=&C2:="DIA"
350 IF(op%AND&FF)=&D2:num%=2:="FLAG &"+FNh0(Data%?1,2)
360 IF(op%AND&FF)=&E2:num%=2:="SVC &"+FNh0(Data%?1,2)
370 IF(op%AND&FF)=&F2:num%=1:="BPT"
380 :
390 num%=2
400
410 IF(op%AND&7C)=&0C:IFi%<>2:="ADDQ"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)
420 IF(op%AND&7C)=&1C:IFi%<>2:="CMPQ"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)
430 IF(op%AND&7C)=&2C:IFi%<>2:="SPR"+FNsz(i%)+" "+FNareg(g2%DIV2)+","+FNgen(g1%,i%)
440 IF(op%AND&7C)=&3C:IFi%<>2:="S"+FNcc((op%AND&380)DIV128)+FNsz(i%)+" "+FNgen(g1%,i%)
450 IF(op%AND&7C)=&4C:IFi%<>2:="ACB"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)+","+FNdispPC
460 IF(op%AND&7C)=&5C:IFi%<>2:="MOVQ"+FNsz(i%)+" "+FNshort(g2%DIV2)+","+FNgen(g1%,i%)
470 IF(op%AND&7C)=&6C:IFi%<>2:="LPR"+FNsz(i%)+" "+FNareg(g2%DIV2)+","+FNgen(g1%,i%)
480 :
490
500 IF(op%AND&7FC)=&27C:X%?2=&40
510 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%)
520 :
530
540 IF(op%AND&0C)<>&0C:IFi%<>2:A%=(op%AND&3C)DIV4:A$=FNgen(g1%,i%):=LEFT$(MID$("ADD CMP BIC xxx ADDCMOV OR xxx SUB ADDRAND xxx SUBCTBITXOR",A%*4+1,VALMID$("333043203430443",A%+1,1))+FNsz(i%)+" ",5)+" "+A$+","+FNgen(g2%,i%)
550 :
560 num%=3:i%=(op%AND&300)DIV256:g1%=Data%?2DIV8:g2%=(op%AND&7C000)DIV&4000:op0%=(Data%?1AND&3C)DIV4
570
580 IF(op%AND&F87CFF)=&80E:IFi%<>2:="SETCFG"+FNsz(Data%?1 AND 3)+" "+FNcfg(g2%DIV2)
590 IF(op%AND&F870FF)=&00E:IFi%<>2:IF(op%AND&60000)<>&40000:=MID$("MOVSCMPSxxxxSKPS",op0%*6+1,4)+FNsz(i%)+FNstr(g2%DIV2)
600 :
610
620 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%)
630 :
640
650 IF(op%AND&0038FF)=&00CE:IFi%<>2:=MID$("MOVCMP",op0%*3+1,3)+"M"+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)+","+FNdisp
660 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))
670 IF(op%AND&0020FF)=&20CE:IFi%<>2:=MID$("MULMEIundDEIQUOREMMODDIV",op0%*3-23,3)+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
680 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%)
690 :
700
710 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
720 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%)
730 IF(op%AND&0004FF)=&046E:IFi%<>2:="FFS"+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
740 IF(op%AND&002CFF)=&0CAE:IFi%<>2:="MOV"+MID$("SUUS",(op0%AND4)DIV2+1,2)+FNsz(i%)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
750 :
760
770 IF(op%AND&003FFF)=&083E:="LFSR "+FNgen(g1%,i%)
780 IF(op%AND&003FFF)=&303E:="SFSR "+FNgen(g1%,i%)
790 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%)
800 :
810
820 IF(op%AND&0002FF)=&00BE:=MID$("ADDMOVCMPxxxSUBNEGundundDIVxxxundundMULABSundund",op0%*3+1,3)+FNfl(Data%?1AND1)+" "+FNgen(g1%,i%)+","+FNgen(g2%,i%)
830 :
840
850 IF(op%AND&0078FF)=&001E:=MID$("RDVALWRVAL",op0%*5+1,5)+FNsz(i%)+" "+FNgen(g1%,i%)
860 IF(op%AND&0078FF)=&081E:=MID$("LMR SMR ",op0%*5-9,5)+FNsz(i%)+" "+FNmmu(g2%DIV2)+","+FNgen(g1%,i%)
870 :
880
890 IF(op%AND&00001F)=&0016:="SLAVE "+STR$((Data%?0)DIV32)+",&"+FNh0(Data%!1,4)
900 :
910 num%=1:X%?2=&80:="equb &"+FNh0(op%,2)
920 :
930 DEFFNlst(A%):LOCAL rn%,n%,A$:rn%=Data%?num%:num%=num%+1
940 FOR n%=0 TO 7:IF (rn% AND (2^n%)):A$=A$+",R"+STR$(n%EORA%)
950 NEXT n%:="["+MID$(A$,2)+"]"
960 DEFFNcfg(A%)=LEFT$("I",(A%AND1)=1)+LEFT$("F",(A%AND2)=2)+LEFT$("M",(A%AND4)=4)+LEFT$("C",(A%AND8)=8)
970 DEFFNstr(A%)=LEFT$("T",(A%AND1)=1)+LEFT$("B",(A%AND2)=2)+LEFT$("W",(A%AND12)=4)+LEFT$("U",(A%AND12)=12)
980 DEFFNcc(A%)=MID$("EQNECSCCHILSGTLEFSFCLOHSLTGEALNV",A%*2+1,2)
990 DEFFNshort(A%):A%=A%AND15:IF A%<8:="+"+STR$A% ELSE =STR$(A%-16)
1000 DEFFNsz(A%)=MID$("BW-D",A%+1,1)
1010 DEFFNfl(A%)=MID$("LF",A%+1,1)
1020 DEFFNgen(A%,sz%):LOCAL rn%:rn%=A%
1030 IFA%<8:="R"+STR$A%
1040 IFA%<16:=FNdispReg+"(R"+STR$(rn%-8)+")"
1050 IFA%=16:A$=FNdisp+"(FP)":=FNdisp+"("+A$+")":
1060 IFA%=17:A$=FNdisp+"(SP)":=FNdisp+"("+A$+")"
1070 IFA%=18:A$=FNdisp+"(SB)":=FNdisp+"("+A$+")"
1080 IFA%=19:="revd"
1090 IFA%=20:IFsz%=0:num%=num%+1:="&"+FNh0(Data%?(num%-1),2)
1100 IFA%=20:IFsz%=1:num%=num%+2:="&"+FNh0(Data%!(num%-2),4)
1110 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)
1120 IFA%=21:="@&"+FNh0(FNdispOff,8)
1130 IFA%=22:A$=FNdisp:="EXT("+A$+")+"+FNdisp
1140 IFA%=23:="TOS"
1150 IFA%=24:=FNdispReg+"(FP)"
1160 IFA%=25:=FNdispReg+"(SP)"
1170 IFA%=26:=FNdispReg+"(SB)"
1180 IFA%=27:=FNdispPC
1190 rn%=Data%?num%:num%=num%+1
1200 IFA%=28:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":B]"
1210 IFA%=29:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":W]"
1220 IFA%=30:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":D]"
1230 IFA%=31:=FNgen(rn%DIV8,sz%)+"[R"+STR$(rn%AND7)+":Q]"
1240 =""
1250 DEFFNdisp:A%=FNdispVal:="&"+FNh0(A%,dz%*2+2)
1260 DEFFNdispPC:="&"+FNh0(Ptr%+FNdispOff,8)
1270 DEFFNdispReg:A%=FNdispOff:IFA%<0:=STR$A% ELSE ="&"+FNh0(A%,(1+LENSTR$~A%)AND-2)
1280 DEFFNdispOff:A%=FNdispVal:dz%=EVAL("&"+MID$("0000003F00001FFF000000001FFFFFFF",dz%*8+1,8)):IFA%>dz%:=A%-2*dz%-2 ELSE =A%
1290 DEFFNdispVal:dz%=(Data%?num%)DIV64:dz%=VALMID$("0013",dz%+1,1)
1300 IFdz%=0:num%=num%+1:=Data%?(num%-1)
1310 IFdz%=1:num%=num%+2:=Data%?(num%-1)+256*(Data%?(num%-2) AND 63)
1320 num%=num%+4:=Data%?(num%-1)+256*Data%?(num%-2)+65536*Data%?(num%-3)+&1000000*(Data%?(num%-4) AND 63)
1330 DEFFNareg(A%)
1340 IFA%=0:="US"
1350 IFA%=8:="FP"
1360 IFA%=9:="SP"
1370 IFA%=10:="SB"
1380 IFA%=13:="PSR"
1390 IFA%=14:="INTBASE"
1400 IFA%=15:="MOD"
1410 ="AR"+STR$A%
1420 DEFFNmmu(A%)
1430 IF(A%AND14)=0:="BPR"+STR$A%
1440 IF(A%AND14)=4:="PF"+STR$(A%-4)
1450 IFA%=8:="SC"
1460 IFA%=10:="MSR"
1470 IFA%=11:="BCNT"
1480 IF(A%AND14)=12:="PTB"+STR$(A%-12)
1490 IFA%=15:="EIA"
1500 ="mmu"+STR$A%