> MonZ80  > MonCore v2.02  (C)1989-2008 J.G.Harston (& 16-Mar-2007 v2.00 JGH: Rewritten 2< 22-May-2007 v2.01 JGH: *Spool only active when listing &FFFF):buf%=-blen%:=buf% xFhex%=:dmp%=0:ny%=0:dd$="isassembl":io%=(fx(130,0)=&FFFF)(os%<6) 2E%=E%3:Z%=Z%3:D%=1+((D%-1)7):err:end: H::SetScr:X%=ctrl%:Y%=X%256:>&FFFFF:P%< P%>+blen%:P%=buf% menu:Q$="Q"Q$="X":end: : Vݤline(addr%):ho(addr%-O%,D%);" ";:!data%=!addr%:data%!4=addr%!4:data%!8=addr%!8 2io%:addr%<0:B%=07:data%?B%=rm(addr%+B%): Ldmp%:B%=07:ho(data%?B%,2)" ";::B%=07:c(data%?B%);:::=addr%+8 #N%=Dis_Code(M%,addr%-O%,data%) ,Z%=0:B%=0N%-1:ho(data%?B%,2);" ";: 4Z%=1:B%=0N%-12:ho(data%!B%&FFFF,4);" ";: 1Z%=3:B%=0N%-14:ho(data%!B%,N%*2);" ";: *t1%+D%);:B%=0N%-1:c(data%?B%);: -t2%+D%);" ";addr($(X%+4)):(X%?264):  =addr%+N% : .ݤmenu::Dis_Name(M%)="":M%=cpu:SetScr "&top:addr%=line(P%):num%=addr%-P% ,-addr%=line(addr%):>hgh%-1+8*(wid%<40) 6Q$=:V%=:Q$="*":osc @MQ$=" ":addr%=line(addr%):0,(hgh%>19)2);:P%=P%+num%:num%=line(P%)-P% J!Q$>"`" Q$<"{":Q$=(Q$-32) T@13+8+9+127+"+;-=GPQWSMHJOLTYZNR*0123456789ABCDEFX",Q$) ^Q$="*":= hQ$=13:P%=P%+1:=0 rQ$=127Q$=8:P%=P%-1:=0 |Q$="+"Q$=";":P%=P%+8:=0 Q$="-"Q$="=":P%=P%-8:=0 Q$=9:dmp%=dmp%2:=0 Q$="W":D%=4+((D%-3)5):=0 Q$="H":hex%=hex%:=0 Q$="J":Z%=(Z%+1)3:=0 Q$="M":m:=0 Q$="O":o:top:=0 Q$="L":list():=0 Q$="S":mode:= HQ$="T":"Text: "Q$:A%=?(P%+Q$):$(P%)=Q$:?(P%+Q$)=A%:P%=P%+Q$:=0 tQ$="Y":"Message: "Q$:A%=?(P%+Q$):$P%=Q$:?(P%+Q$)=A%:?(P%-1+Q$)=&80 ?(P%-1+Q$):?(P%+Q$)=A%:P%=P%+Q$:=0 Q$="Z":M%=cpu:SetScr:=0 Q$="N":E%=(E%+1)3:=0 Q$="R"io%:rom:=0 WQ$="G":"Get file: "A$:A$<>"":"LOAD """+A$+""" "+~buf%+"+"+~blen%,os%=32):= XQ$="P":"Put file: "A$:A$<>"":"Length: &"Q$:"SAVE """+A$+""" "+~buf%+"+"+Q$:= &5(Q$>"/" Q$<":")(Q$>"@" Q$<"G"):byte(Q$):=0 0?Q$="Q"Q$="X":"Quit? "Q$:A%=(Q$&DF)=89:Q$="":A%:Q$="Q" :=Q$="X"Q$="Q" D: N9m:"Address: &"A$:A$=uc(A$):A$="":P%=buf%:O%=P%: XCA%=("&"+A$):io%:A%<&10000:P%=(P%&FFFF0000)+A%+O% P%=A%+O% b l: vIo:"Address for code address 0000: &"A$:A$=uc(A$):A$="":A$=~buf% %A$,1)="=":O%=P%-("&"+A$,2)): $A%=P%-O%:O%=("&"+A$):P%=O%+A%: : list(T%) I"Start address: &"A$:A$=uc(A$):A$="":addr%=P% addr%=("&"+A$)+O% P"End address: &"A$:A$=uc(A$):A$="":end%=addr%+&8000 end%=("&"+A$)+O% I"Address for code address 0000: &"A$:A$=uc(A$):A$<>"":O%=("&"+A$) 6"FX3":addr%=line(addr%):addr%>end%:"FX3,16": : 6byte(Q$):"Bytes: &";Q$;::A%=:A%>96:A%=A%&DF 0(A%=95 A%=8) Q$<>"":127:Q$=Q$, Q$-1) =((A%>47 A%<58)(A%>64 A%<71)) Q$<30:A%:Q$=Q$+A% ?A%=13:Q$<>""::?P%=("&"+Q$,2)):P%=P%+1:Q$=Q$,3):Q$<2   : 7rom:"ROM: &"A$:A$=uc(A$):A$="":P%=P%&FFFFFF:  0P%=(P%&FFFF)&FF000000 65536*("&F"+A$): *: 4mode:"Mode: "A$:A$="": >&Q%=(A$)&80:io%:fx(133,Q%)<: H 22,Q%: R: \ osc:wid%>40:26,31,0,hgh% f3:"*"A$: A$:58:Q$=:13+"GgPp*",Q$):127 pQ$<>"*":Q$=13:Q$="*" z : ݤaddr(A$):name:hex%:=A$ A%=A$,"&"):A%=0:=A$ =L%=A%:L%=L%+1:"0123456789ABCDEF",A$,L%,1))=0 L%>A$ >=A$,A%)+"o"+o0((A$,A%,L%-A%+1)),(L%-A%-1)*3/2)+A$,L%) : *name:E%=0: A%=A$,"&FF"):A%=0: )L%=(A$,A%,5))-&FFCE:L%<0 L%>43: E((L%3-(L%>27))3-3*(L%=24)+(L%>24 L%<28)-3*(L%=27)-(L%=28)): )(E%2):A$=A$+" :\ ":(E%1):A%=A$+1 A$=A$,A%-1)+"OS"+"FINDGBPBBPUTBGETARGSFILERDCHASCINEWLWRCRWRCHWORDBYTE_CLI",(L%3)*4+1,4)+A$,A%+5):E%=2:A$=A$+"&"+~(L%+&FFCE)  : top:hgh%>20:30:"Memory: &";h0(P%-O%,D%)(19-);"Origin: &";h0(O%,D%+1);(39-)'"Buffer: &"~buf%;(19-)"Buffer size: &"~blen%'(39): R28,47,hgh%,wid%,0:9,2);h0(P%-O%,D%+1);9,3);h0(O%,D%+1):28,0,hgh%,45,0: : $SetScr:"FX3,16":3,26:C$=132:B$=135:!X%=0:A$=Dis_Name(M%):A%=X%?3:D%=(A%3)*2+4:Z%=(A%12)4:hex%=(A%16)=0:fx(135,0)256<>7:C$=" ":B$=" " .pt1%=13:wid%=fx(160,10):hgh%=fx(160,9)&FF:wid%>80:D%>4:t1%=(wid%-79)/8*3+13 wid%<38:22,&87:SetScr: 8t2%=t1%+t1%3:hgh%<20 wid%>40:28,wid%-33,hgh%,wid%,0:hgh%<20:"** "A$" D"dd$"er **"''"Memory: &";h0(P%-O%,D%+1)'"Origin: &";h0(O%,D%+1)'"Buffer addr: &";~buf%'"Buffer size: &";~blen%:28,0,hgh%,45,0: BWW%=33-11*(wid%<40):W%/4-A$/2+(ny%>9),"*");" ";A$;" D"dd$"er ";ny%;" ";W%-,"*") Lwid%<40:0,hgh%-6);C$"RETURN"B$"forward 1"4;C$"+"B$"forward 8"7;C$"DELETE"B$"back 1"7;C$"-"B$"back 8"'C$"L"B$"List d"dd$"y "C$"TAB"B$"DUMP/LIST"6; Vwid%<40:C$"M"B$"Set Memory address"C$"O"B$"Set code origin"'C$"T"B$"Enter text"8;C$"Y"B$"Enter message ";C$"Z"B$"Set machine"6;C$"SPC"B$"Move past code";:28,0,hgh%-7,wid%,1: `"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" j" 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"'" Z: Set machine"'" S: Screen mode":io%:" R: ROM number" t(" Q: Quit";:28,0,hgh%,wid%-35,0: ~: +ݤcpu:Dis_Name(0)<>"":=M% =Dis_CPU : #ݤerr:<0:P%=P%2:O%=O%2:=-1 :<>17: -1:" at line "; =-1 : end:"FX3": 26:0,hgh%);:*QUIT  : 3ݤho(A%,N%):hex%:=h0(A%,N%) =o0(A%,N%*3/2) :   Library routines 1ݤc(A%):A%=A%127:A%=127 A%<32:="." =A% ݤuc(A$): B$:A$="":="" (5B$=B$+(A$((A$<"@")&DF)):A$=A$,2):A$="":=B$ 2#ݤh0(A%,N%)="0000000"+~A%,N%) <5ݤo0(A%,N%): A$,B%,L%:A%<0:B%=2:A%=A%&7FFFFFFF F;A$=(A%7)+A$:A%=A%8:L%=L%+3:L%>27:=(A%+B%)+A$,N%) P?ݤfx(A%,X%):Y%:Y%=X%256:<&FFFFF:=((&FFF4)&FFFF00)256 Z-A%=135:X%=:X%>-1:=X%*256A%=135:=&A00 d*A%=160:X%=10:=@vdu%!28 @vdu%!216-1 n)A%=160:X%=9:=@vdu%!36 @vdu%!220-1 x=((&FFF4)&FFFF00)256 7ݤrm(!&F6):Y%:Y%=?&F8+&40:Y%&40:?&F7>&BF:?&F9=0 3!&F6<0:?&F7>&7FY%=&3E:=(&FFB9)&FF =?!&F6 : - *********** End of MonCore ************ - Specific disassembly routines from here < > DisZ80 1.01 - 09-Jan-1989 - Z80 disassembly routines : ݤDis_Name(A%)="Z80" CݤDis_Code(A%,Ptr%,Data%): s%,d%,c%,xy%:!X%=0:num%=1:c%=?Data% 8d%=c%7:s%=(c%&38)8:$(X%+4)=("FNz80_"+~(c%&C0)) X%?3=num%:=num% : 3ݤalu(A%)="ADDADCSUBSBCANDXOROR CP ",A%*3+1,3) 3ݤrot(A%)="RLCRRCRL RR SLASRASLSSRL",A%*3+1,3) ݤr(A%)="BCDEHLFA",A%+1,1) >ݤdrg(A%)="BCDEHLSPIXAFIY",(A%1)+((xy%*4)((A%6)=4)),2) "$ݤreg(A%):xy%=0 A%<>6:=r(A%) ,A%=6 xy%=0:="(HL)" 67A%=6:num%=num%+1:="(I"+(87+xy%)+rel(Data%?2)+")" @#(A%6)=4:="I"+(87+xy%)+r(A%) J =r(A%) T+ݤrel(A%):A%<128:="+"+A% =(A%-256) ^Fݤjr(A%):A%<128:="&"+h0(Ptr%+A%+2,4) ="&"+h0(Ptr%+A%+2-256,4) hKݤcc(A%)="NZZ NCC POPEP M ",A%*2+1,2-((A% 1) (A%<4))-(1 (A%>5))) r: |ݤz80_0:c%=0:="NOP" @(c%&F7)=&10:num%=2:="DJNZJR ",s%*4-7,4)+" "+jr(Data%?1) )d%=7 s%<4:=rot(s%),3+(s%>1))+"A" %d%=7:="DAACPLSCFCCF",s%*3-11,3) Cd%=6:num%=num%+1:="LD "+reg(s%)+",&"+h0(?(Data%+num%-1),2) 4(d%6)=4:="INCDEC",(d%1)*3+1,3)+" "+reg(s%) 0d%=3:="INCDEC",(s%1)*3+1,3)+" "+drg(s%) Fc%=&22:num%=num%+2:="LD (&"+h0(!(Data%+num%-2),4)+"),"+drg(4) Ic%=&2A:num%=num%+2:="LD "+drg(4)+",(&"+h0(!(Data%+num%-2),4)+")" 7c%=&32:num%=num%+2:="LD (&"+h0(Data%!1,4)+"),A" 7c%=&3A:num%=num%+2:="LD A,(&"+h0(Data%!1,4)+")" -d%=2 (s%5)=0:="LD ("+drg(s%)+"),A" "d%=2:="LD A,("+drg(s%)+")" 2d%=1 (s%1)=1:="ADD "+drg(4)+","+drg(s%) Cd%=1:num%=num%+2:="LD "+drg(s%)+",&"+h0(!(Data%+num%-2),4) @d%=0 s%>3:num%=num%+1:="JR "+cc(s%3)+","+jr(Data%?1) ="EX AF,AF'" &: 0ݤz80_40:c%=&76:="HALT" :' s%=6:="LD "+reg(s%)+","+r(d%) D' d%=6:="LD "+r(s%)+","+reg(d%) N"="LD "+reg(s%)+","+reg(d%) X: b7ݤz80_80:=alu(s%)+" "+"A,",s%<2 s%=3)+reg(d%) l/ݤz80_C0:d%=5 (s%1)=1:=("FNz80_"+~c%) vc%=&CB:=z80_CB !d%=7:="RST &"+h0(c%&38,2) 8d%=6 s%<4:num%=2:=alu(s%)+" A,&"+h0(Data%?1,2) /d%=6:num%=2:=alu(s%)+" &"+h0(Data%?1,2) H(d%3)=1 (s%1)=0:="POP PUSH",(d%4)*4+1,4)+" "+drg(s%-4*(s%>5)) :d%=4:num%=num%+2:="CALL "+cc(s%)+",&"+h0(Data%!1,4) :d%=2:num%=num%+2:="JP "+cc(s%)+",&"+h0(Data%!1,4) d%=0:="RET "+cc(s%) +c%=&C3:num%=3:="JP &"+h0(Data%!1,4) c%=&C9:="RET" 2c%=&D3:num%=2:="OUT (&"+h0(Data%?1,2)+"),A" 2c%=&DB:num%=2:="IN A,(&"+h0(Data%?1,2)+")" c%=&D9:="EXX" !c%=&E3:="EX (SP),"+drg(4) !c%=&E9:="JP ("+drg(4)+")"  c%=&EB:="EX DE,HL" c%=&F9:="LD SP,HL"  ="DIEI",(s%1)*2+1,2) *: 4,ݤz80_CD:num%=3:="CALL &"+h0(Data%!1,4) >5ݤz80_CB:num%=num%+1:xy%:c%=Data%?3 c%=Data%?1 H9d%=c%7:s%=(c%&38)8:c%<&40:=rot(s%)+" "+reg(d%) R8="BITRESSET",(c%64)*3-2,3)+" "+(s%)+","+reg(d%) \: f ݤz80_DD p ݤz80_FD z,xy%:num%=1:="DEFB &"+h0(xy%*&20+&BD,2) ' A$:xy%=(c%&20)&20+1:num%=num%+1 >c%=Data%?1:d%=c%7:s%=(c%&38)8:A$=("FNz80_"+~(c%&C0)) FA$,4),"X")+A$,"Y")=0:num%=1:="DEFB &"+h0(xy%*&20+&BD,2) =A$ : 5ݤz80_ED:xy%:num%=1:="DEFB &"+h0(xy%*&20+&CD,2) 0num%=num%+1:c%=Data%?1:d%=c%7:s%=(c%&38)8 c%<&10:="DEFW &"+h0(c%*256+&ED,4)+":\ MOS_"+"QUITCLI BYTEWORDWRCHRDCHFILEARGSBGETBPUTGBPBFINDFF0CFF0DFF0EFF0F",c%*4+1,4) &c%<&40 c%>&C0:num%=1:="DEFB &ED" 4(c%&C7)=&42:=alu(3-(s%1)*2)+" HL,"+drg(s%) H(c%&CF)=&4B:num%=num%+2:="LD "+drg(s%)+",(&"+h0(Data%!2,4)+")" E(c%&CF)=&43:num%=num%+2:="LD (&"+h0(Data%!2,4)+"),"+drg(s%) ((c%&C7)=&40:="IN "+r(s%)+",(C)" %(c%&C7)=&41:="OUT (C),"+r(s%) 0(c%&E7)=&46 s%<>1:="IM "+(s%-1-(s%=0)) '(c%&F7)=&67:="RRDRLD",s%*3-11,3) ((c%&F7)=&45:="RETNRETI",s%*4+1,4) $c%=&44:="NEG" .P(c%&E7)=&47:="LD "+(65-8*(s%=0)-17*(s%=1))+","+(65-8*(s%=2)-17*(s%=3)) 8G(c%&E4)=&A0:="LDCPINOT",d%*2+1,2)+(73-5*(s%1))+(32+25*(s%2)) Bnum%=1:="DEFB &ED"