10
20
30 :
40 DEFFNDis_Name(A%)="80x86 (INCOMPLETE)"
50 DEFFNDis_Code(A%,Ptr%,Data%):LOCAL s%,d%,c%,w%,num%
60 num%=1:c%=?Data%:w%=c%AND1:d%=c%AND7:s%=(c%AND&38)DIV8
70 !X%=0:$(X%+4)=FN_86:X%?3=num%:=num%
80 DEFFN_86:num%=1
90 IF(c%AND&C6)=0:=FNalu(s%)+" "+FNmr+","+FNreg((Data%?1AND&38)DIV8) :
100 IF(c%AND&C6)=0:=FNalu(s%)+" "+FNreg((Data%?1AND&38)DIV8)+","+FNmr :
110 ="???"
120
130 ="DB &"+FNh0(op%,2)
140 :
150 DEFFNalu(A%)=MID$("ADDOR ADCSBBANDSUBXORCMP",A%*3+1,3)
160 :
170 DEFFNmr:num%=num%+1:A%=Data%?1:mod%=(A%AND&C0):reg%=(A%AND&38)DIV8:rm%=(A%AND7)
180 IFmod%=&C0:=FNreg(rm%)
190 IFmod%=&00:=FNea(A%)+"]"
200 IFmod%=&80:num%=num%+1:=FNea(A%)+"+&"+FNh0(Data%?(num%-1),2)+"]"
210 IFmod%=&40:num%=num%+2:=FNea(A%)+"+&"+FNh0(Data%?(num%-2),4)+"]"
220 ="?"
230 :
240 DEFFNreg(A%):IFw%:=MID$("AXCXDXBXSPBPSIDI",A%*2+1,2)
250 =MID$("ALCLDLBLAHCHDHBH",A%*2+1,2)
260 :
270 DEFFNea(A%)
280 IFA%=0:="[BX+SI"
290 IFA%=1:="[BX+DI"
300 IFA%=2:="[BP+SI"
310 IFA%=3:="[BP+DI"
320 IFA%=4:="[SI"
330 IFA%=5:="[DI"
340 IFA%=7:="[BX"
350 num%=num%+2:="[&"+FNh0(Data%!(num%-2),4)
360 :
370
380
390
400
410
420 :
430
440 DEFFNrot(A%)=MID$("RLCRRCRL RR SLASRASLSSRL",A%*3+1,3)
450 DEFFNr(A%)=MID$("BCDEHLFA",A%+1,1)
460 DEFFNdrg(A%)=MID$("BCDEHLSPIXAFIY",(A%OR1)+((xy%*4)AND((A%AND6)=4)),2)
470 DEFFNreg(A%):IFxy%=0 AND A%<>6:=FNr(A%)
480 IFA%=6 AND xy%=0:="(HL)"
490 IFA%=6:num%=num%+1:="(I"+CHR$(87+xy%)+FNrel(Data%?2)+")"
500 IF(A%AND6)=4:="I"+CHR$(87+xy%)+FNr(A%)
510 =FNr(A%)
520 DEFFNrel(A%):IFA%<128:="+"+STR$A% ELSE =STR$(A%-256)
530 DEFFNjr(A%):IFA%<128:="&"+FNh0(Ptr%+A%+2,4) ELSE ="&"+FNh0(Ptr%+A%+2-256,4)
540 DEFFNcc(A%)=MID$("NZZ NCC POPEP M ",A%*2+1,2-((A% AND 1) AND (A%<4))-(1 AND (A%>5)))
550 :
560 DEFFNz80_0:IFc%=0:="NOP"
570 IF(c%AND&F7)=&10:num%=2:=MID$("DJNZJR ",s%*4-7,4)+" "+FNjr(Data%?1)
580 IFd%=7 AND s%<4:=LEFT$(FNrot(s%),3+(s%>1))+"A"
590 IFd%=7:=MID$("DAACPLSCFCCF",s%*3-11,3)
600 IFd%=6:num%=num%+1:="LD "+FNreg(s%)+",&"+FNh0(?(Data%+num%-1),2)
610 IF(d%AND6)=4:=MID$("INCDEC",(d%AND1)*3+1,3)+" "+FNreg(s%)
620 IFd%=3:=MID$("INCDEC",(s%AND1)*3+1,3)+" "+FNdrg(s%)
630 IFc%=&22:num%=num%+2:="LD (&"+FNh0(!(Data%+num%-2),4)+"),"+FNdrg(4)
640 IFc%=&2A:num%=num%+2:="LD "+FNdrg(4)+",(&"+FNh0(!(Data%+num%-2),4)+")"
650 IFc%=&32:num%=num%+2:="LD (&"+FNh0(Data%!1,4)+"),A"
660 IFc%=&3A:num%=num%+2:="LD A,(&"+FNh0(Data%!1,4)+")"
670 IFd%=2 AND (s%AND5)=0:="LD ("+FNdrg(s%)+"),A"
680 IFd%=2:="LD A,("+FNdrg(s%)+")"
690 IFd%=1 AND (s%AND1)=1:="ADD "+FNdrg(4)+","+FNdrg(s%)
700 IFd%=1:num%=num%+2:="LD "+FNdrg(s%)+",&"+FNh0(!(Data%+num%-2),4)
710 IFd%=0 AND s%>3:num%=num%+1:="JR "+FNcc(s%AND3)+","+FNjr(Data%?1)
720 ="EX AF,AF'"
730 :
740 DEFFNz80_40:IFc%=&76:="HALT"
750 IF s%=6:="LD "+FNreg(s%)+","+FNr(d%)
760 IF d%=6:="LD "+FNr(s%)+","+FNreg(d%)
770 ="LD "+FNreg(s%)+","+FNreg(d%)
780 :
790 DEFFNz80_80:IFs%<4:=FNalu(s%)+" A,"+FNreg(d%) ELSE=FNalu(s%)+" "+FNreg(d%)
800 DEFFNz80_C0:IFd%=5 AND (s%AND1)=1:=EVAL("FNz80_"+STR$~c%)
810 IFc%=&CB:=FNz80_CB
820 IFd%=7:="RST &"+FNh0(c%AND&38,2)
830 IFd%=6 AND s%<4:num%=2:=FNalu(s%)+" A,&"+FNh0(Data%?1,2)
840 IFd%=6:num%=2:=FNalu(s%)+" &"+FNh0(Data%?1,2)
850 IF(d%AND3)=1 AND(s%AND1)=0:=MID$("POP PUSH",(d%DIV4)*4+1,4)+" "+FNdrg(s%-4*(s%>5))
860 IFd%=4:num%=num%+2:="CALL "+FNcc(s%)+",&"+FNh0(Data%!1,4)
870 IFd%=2:num%=num%+2:="JP "+FNcc(s%)+",&"+FNh0(Data%!1,4)
880 IFd%=0:="RET "+FNcc(s%)
890 IFc%=&C3:num%=3:="JP &"+FNh0(Data%!1,4)
900 IFc%=&C9:="RET"
910 IFc%=&D3:num%=2:="OUT (&"+FNh0(Data%?1,2)+"),A"
920 IFc%=&DB:num%=2:="IN A,(&"+FNh0(Data%?1,2)+")"
930 IFc%=&D9:="EXX"
940 IFc%=&E3:="EX (SP),"+FNdrg(4)
950 IFc%=&E9:="JP ("+FNdrg(4)+")"
960 IFc%=&EB:="EX DE,HL"
970 IFc%=&F9:="LD SP,HL"
980 =MID$("DIEI",(s%AND1)*2+1,2)
990 :
1000 DEFFNz80_CD:num%=3:="CALL &"+FNh0(Data%!1,4)
1010 DEFFNz80_CB:num%=num%+1:IFxy%:c%=Data%?3 ELSE c%=Data%?1
1020 d%=c%AND7:s%=(c%AND&38)DIV8:IFc%<&40:=FNrot(s%)+" "+FNreg(d%)
1030 =MID$("BITRESSET",(c%DIV64)*3-2,3)+" "+STR$(s%)+","+FNreg(d%)
1040 :
1050 DEFFNz80_DD
1060 DEFFNz80_FD
1070 IFxy%:num%=1:="DEFB &"+FNh0(xy%*&20+&BD,2)
1080 LOCAL A$:xy%=(c%AND&20)DIV&20+1:num%=num%+1
1090 c%=Data%?1:d%=c%AND7:s%=(c%AND&38)DIV8:A$=EVAL("FNz80_"+STR$~(c%AND&C0))
1100 IFINSTR(MID$(A$,4),"X")+INSTR(A$,"Y")=0:num%=1:="DEFB &"+FNh0(xy%*&20+&BD,2) ELSE =A$
1110 :
1120 DEFFNz80_ED:IFxy%:num%=1:="DEFB &"+FNh0(xy%*&20+&CD,2)
1130 num%=num%+1:c%=Data%?1:d%=c%AND7:s%=(c%AND&38)DIV8
1140 IFc%<&10:="DEFW &"+FNh0(c%*256+&ED,4)+":\ MOS_"+MID$("QUITCLI BYTEWORDWRCHRDCHFILEARGSBGETBPUTGBPBFINDFF0CFF0DFF0EFF0F",c%*4+1,4)
1150 IFc%<&40 ORc%>&C0:num%=1:="DEFB &ED"
1160 IF(c%AND&C7)=&42:=FNalu(3-(s%AND1)*2)+" HL,"+FNdrg(s%)
1170 IF(c%AND&CF)=&4B:num%=num%+2:="LD "+FNdrg(s%)+",(&"+FNh0(Data%!2,4)+")"
1180 IF(c%AND&CF)=&43:num%=num%+2:="LD (&"+FNh0(Data%!2,4)+"),"+FNdrg(s%)
1190 IF(c%AND&C7)=&40:="IN "+FNr(s%)+",(C)"
1200 IF(c%AND&C7)=&41:="OUT (C),"+FNr(s%)
1210 IF(c%AND&E7)=&46 ANDs%<>1:="IM "+STR$(s%-1-(s%=0))
1220 IF(c%AND&F7)=&67:=MID$("RRDRLD",s%*3-11,3)
1230 IF(c%AND&F7)=&45:=MID$("RETNRETI",s%*4+1,4)
1240 IFc%=&44:="NEG"
1250 IF(c%AND&E7)=&47:="LD "+CHR$(65-8*(s%=0)-17*(s%=1))+","+CHR$(65-8*(s%=2)-17*(s%=3))
1260 IF(c%AND&E4)=&A0:=MID$("LDCPINOT",d%*2+1,2)+CHR$(73-5*(s%AND1))+CHR$(32+25*(s%AND2))
1270 num%=1:="DEFB &ED"