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