> MonCore v2.01  (C)1989-2007 J.G.Harston & 16-Mar-2007 v2.00 JGH: Rewritten (< 22-May-2007 v2.01 JGH: *Spool only active when listing 2: <::end: FAos%=fx(0,1):mode: ctrl%31,data%15,zp%3:X%=ctrl%:Y%=X%256 P5blen%=--&480+&C00*(>&8000):buf%=-blen%:=buf% Zhgh%-1+8*(wid%<40) ,Q$=:V%=:Q$>"`" Q$<"{":Q$=(Q$-32) OQ$=" ":addr%=line(addr%):0,2 (hgh%>19));:P%=P%+num%:num%=line(P%)-P% "=13+9+127+"+;-=GPQWSMHJOLTYZNR*0123456789ABCDEFX",Q$) ,Q$=13:P%=P%+1:=0 6Q$=127:P%=P%-1:=0 @Q$="+"Q$=";":P%=P%+8:=0 JQ$="-"Q$="=":P%=P%-8:=0 TQ$="Q":dmp%=dmp%2:=0 ^Q$="W":D%=4+((D%-3)5):=0 hQ$="H":hex%=hex%:=0 rQ$="J":Z%=(Z%+1)3:=0 |OQ$="M":"Address: &"A$:A$="":P%=buf%:O%=P%:=0 Q$="M":P%=("&"+A$)+O%:=0 Q$="O":o:top:=0 Q$="L":list():=0 Q$="S" os%:mode:=0 LQ$="T":B$;:"Text: "Q$:A%=?(P%+Q$):$(P%)=Q$:?(P%+Q$)=A%:P%=P%+Q$:=0 xQ$="Y":B$;:"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" os%:rom:=0 Q$="*":osc::SetScr:=0 RQ$="G":"Get file: "A$:A$<>"":"LOAD "+A$+" "+~buf%+"+"+~blen%,os%=32):=0 SQ$="P":"Put file: "A$:A$<>"":"Length: &"Q$:"SAVE "+A$+" "+~buf%+"+"+Q$:=0 5(Q$>"/" Q$<":")(Q$>"@" Q$<"G"):byte(Q$):=0  =Q$="X" : >o:"Address for code address 0000: &"A$:A$="":A$=~buf% %A$,1)="=":O%=P%-("&"+A$,2)): &$A%=P%-O%:O%=("&"+A$):P%=O%+A%: 0: :list(T%) D>"Start address: &"A$:A$="":addr%=P% addr%=("&"+A$)+O% NC"End address: &"A$:A$="":end%=addr%+&8000 end%=("&"+A$)+O% X>"Address for code address 0000: &"A$:A$<>"":O%=("&"+A$) b6"FX3":addr%=line(addr%):addr%>end%:"FX3,16": l: vbyte(Q$):"Bytes: &";Q$; :A%=:A%>96:A%=A%&DF 'A%=95 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  : ,rom:"ROM: &"A$:A$="":P%=P%&FFFFFF: 0P%=(P%&FFFF)&FF000000 65536*("&F"+A$): : mode:"Mode: "A$:A$="": :Q%=(A$)&80:os%<6:fx(130,0)=&FFFF:fx(133,Q%)<: +22,Q%:SetScr:wid%<39:22,&87:SetScr  :  osc:wid%>40:26,31,0,hgh% -:"*"A$: A$: A$="":hgh%<20::SetScr   *: 4ݤaddr(A$):name:hex%:=A$ >A%=A$,"&"):A%=0:=A$ H=L%=A%:L%=L%+1:"0123456789ABCDEF",A$,L%,1))=0 L%>A$ R>=A$,A%)+"o"+o0((A$,A%,L%-A%+1)),(L%-A%-1)*3/2)+A$,L%) \*name:E%=0: A%=A$,"&FF"):A%=0: f)L%=(A$,A%,5))-&FFCE:L%<0 L%>43: pE((L%3-(L%>27))3-3*(L%=24)+(L%>24 L%<28)-3*(L%=27)-(L%=28)): z)(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:wid%=79:hgh%=31:!X%=0:A$=Dis_Name(M%):A%=X%?3:D%=(A%3)*2+4:Z%=(A%12)4:hex%=(A%16)=0 [os%<32:wid%=byte(160,10,0)-byte(160,8,0)&FF:hgh%=byte(160,9,0)-byte(160,11,0)&FF hgh%<20 wid%>40:28,47,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: wW%=wid%+46*(wid%>40):W%/4-A$/2+(ny%>9)-(W%<40),"*");" ";A$;" D"dd$"er ";ny%;" ";W%-,"*"):wid%<40:0,hgh%-6); wid%<40: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$"Q"B$"DUMP/LIST"7; wid%<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"4;C$"SPACE"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"'"Q: 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":os%:"Z: Set machine" 0"S: Screen mode"'"R: Rom number"'"X: Exit"; 28,0,hgh%,45,0 $ .: 8ݤcpu:Dis_Name(0)<>"":=M% B!:(7)"Microprocessor Menu"' L A$=FNDis_Name(0) V: A%,A$: `,;A%;":";4+( 20)*20);A$;20 (<20)); j5 A%,A$:A%=0::'"Enter CPU number: "cpu%:cpu% t@A%=Dis_Name(cpu%)="":A%:"No d"dd$"y routine for this CPU" ~A%::=cpu% F 2,6502,8,8008,9,6809,11,PDP11,12,6512,18,80186,28,80286,30,OGGIN = 32,32016,38,80386,44,ARM,48,80486,58,80586,65,6502/6512 9 68,68x00 Series,80,Z80,85,8080/8085,86,80x86 Series + 89,INS8900,94,9440 series,99,9900,0,* : (ݤerr:<0:P%=P%2:O%=O%2:=(os%>0) :<>17:  (os%>0):" at line ";  =(os%>0) : end:"FX3": 26:0,hgh%);:*QUIT   : -addr:os%=32:P%< P%>+blen%:P%=buf%  (9ݤmode:os%=6:>&7FFF:= =(byte(135,0,0)256)&80 23ݤho(A%,N%):hex%:=h0(A%,N%) =o0(A%,N%*1.5) <: F Library routines P1ݤc(A%):A%=A%127:A%=127 A%<32:="." =A% Z#ݤh0(A%,N%)="0000000"+~A%,N%) dݤo0(A%,N%):A%=A%&FFFF:="00000"+(48+((A%32768)7))+(48+((A%4096)7))+(48+((A%512)7))+(48+((A%64)7))+(48+((A%8)7))+(48+(A%7)),N%) nL DEFFNo0(A%,N%):LOCAL A$,B$:IFA%<0:B$="7":A%=A%AND&7FFFFFFF ELSE B$="0" xP REPEATA$=STR$(A%AND7)+A$:A%=A%DIV8:UNTILA%=0:=RIGHT$(STRING$(N%,B$)+A$,N%) )ݤbyte(A%,X%,Y%)=((&FFF4)&FF00)256 6ݤfx(A%,X%): Y%:Y%=X%256:=((&FFF4)&FFFF00)256 <ݤrm(!&F6): Y%:Y%=?&F8 &F0:?&F8<&80:?&F7>&BF:?&F9=0 4!&F6<0:?&F7>&7F Y%=&E:=(&FFB9)&FF =?!&F6 : - *********** End of MonCore ************ - Specific disassembly routines from here = > Dis86 1.00 - 12-Feb-2007 - 80x86 disassembly routines  **** INCOMPLETE *** : ݤDis_Name(A%)="80x86" BݤDis_Code(A%,Ptr%,Data%): s%,d%,c%,w%:!X%=0:num%=1:c%=?Data% >w%=c%1:d%=c%7:s%=(c%&38)8:$(X%+4)=_86:X%?3=num%:=num% ݤ_86:num%=1 H(c%&C6)=0:=alu(s%)+" "+mr+","+reg((Data%?1&38)8) : alu rm,r8 H(c%&C6)=0:=alu(s%)+" "+reg((Data%?1&38)8)+","+mr : alu rm,r8 " ="???" , 6="DB &"+h0(op%,2) @: J3ݤalu(A%)="ADDOR ADCSBBANDSUBXORCMP",A%*3+1,3) T: ^Hݤmr:num%=num%+1:A%=Data%?1:mod%=(A%&C0):reg%=(A%&38)8:rm%=(A%7) hmod%=&C0:=reg(rm%) rmod%=&00:=ea(A%)+"]" |Amod%=&80:num%=num%+1:=ea(A%)+"+&"+h0(Data%?(num%-1),2)+"]" Amod%=&40:num%=num%+2:=ea(A%)+"+&"+h0(Data%?(num%-2),4)+"]" ="?" : 0ݤreg(A%):w%:="AXCXDXBXSPBPSIDI",A%*2+1,2) "="ALCLDLBLAHCHDHBH",A%*2+1,2) :  ݤea(A%) A%=0:="[BX+SI" A%=1:="[BX+DI" A%=2:="[BP+SI" A%=3:="[BP+DI" A%=4:="[SI" A%=5:="[DI" A%=7:="[BX" +num%=num%+2:="[&"+h0(Data%!(num%-2),4) : & 0 : D N X: b< DEFFNalu(A%)=MID$("ADDADCSUBSBCANDXOROR CP ",A%*3+1,3) l3ݤrot(A%)="RLCRRCRL RR SLASRASLSSRL",A%*3+1,3) vݤ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)" 7A%=6:num%=num%+1:="(I"+(87+xy%)+rel(Data%?2)+")" #(A%6)=4:="I"+(87+xy%)+r(A%)  =r(A%) +ݤrel(A%):A%<128:="+"+A% =(A%-256) Fݤjr(A%):A%<128:="&"+h0(Ptr%+A%+2,4) ="&"+h0(Ptr%+A%+2-256,4) Kݤcc(A%)="NZZ NCC POPEP M ",A%*2+1,2-((A% 1) (A%<4))-(1 (A%>5))) : ݤ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) 4Ic%=&2A:num%=num%+2:="LD "+drg(4)+",(&"+h0(!(Data%+num%-2),4)+")" >7c%=&32:num%=num%+2:="LD (&"+h0(Data%!1,4)+"),A" H7c%=&3A:num%=num%+2:="LD A,(&"+h0(Data%!1,4)+")" R-d%=2 (s%5)=0:="LD ("+drg(s%)+"),A" \"d%=2:="LD A,("+drg(s%)+")" f2d%=1 (s%1)=1:="ADD "+drg(4)+","+drg(s%) pCd%=1:num%=num%+2:="LD "+drg(s%)+",&"+h0(!(Data%+num%-2),4) z@d%=0 s%>3:num%=num%+1:="JR "+cc(s%3)+","+jr(Data%?1) ="EX AF,AF'" : ݤz80_40:c%=&76:="HALT" ' s%=6:="LD "+reg(s%)+","+r(d%) ' d%=6:="LD "+r(s%)+","+reg(d%) "="LD "+reg(s%)+","+reg(d%) : Eݤz80_80:s%<4:=alu(s%)+" A,"+reg(d%) =alu(s%)+" "+reg(d%) /ݤz80_C0:d%=5 (s%1)=1:=("FNz80_"+~c%) c%=&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) 8c%=&C9:="RET" B2c%=&D3:num%=2:="OUT (&"+h0(Data%?1,2)+"),A" L2c%=&DB:num%=2:="IN A,(&"+h0(Data%?1,2)+")" Vc%=&D9:="EXX" `!c%=&E3:="EX (SP),"+drg(4) j!c%=&E9:="JP ("+drg(4)+")" tc%=&EB:="EX DE,HL" ~c%=&F9:="LD SP,HL" ="DIEI",(s%1)*2+1,2) : ,ݤz80_CD:num%=3:="CALL &"+h0(Data%!1,4) 5ݤz80_CB:num%=num%+1:xy%:c%=Data%?3 c%=Data%?1 9d%=c%7:s%=(c%&38)8:c%<&40:=rot(s%)+" "+reg(d%) 8="BITRESSET",(c%64)*3-2,3)+" "+(s%)+","+reg(d%) : ݤz80_DD ݤz80_FD ,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) 2&c%<&40 c%>&C0:num%=1:="DEFB &ED" <4(c%&C7)=&42:=alu(3-(s%1)*2)+" HL,"+drg(s%) FH(c%&CF)=&4B:num%=num%+2:="LD "+drg(s%)+",(&"+h0(Data%!2,4)+")" PE(c%&CF)=&43:num%=num%+2:="LD (&"+h0(Data%!2,4)+"),"+drg(s%) Z((c%&C7)=&40:="IN "+r(s%)+",(C)" d%(c%&C7)=&41:="OUT (C),"+r(s%) n0(c%&E7)=&46 s%<>1:="IM "+(s%-1-(s%=0)) x'(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)) G(c%&E4)=&A0:="LDCPINOT",d%*2+1,2)+(73-5*(s%1))+(32+25*(s%2)) num%=1:="DEFB &ED"