> Mon32  > MonCore v2.00  (C)1989-2007 J.G.Harston (& 16-Mar-2007 v2.00 JGH: Rewritten 2: <::end: FAos%=fx(0,1):mode: ctrl%31,data%15,zp%3:X%=ctrl%:Y%=X%256 P3blen%=--&400+&C00*(os%>5):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$) b%addr%=line(addr%):addr%>end%: 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: : 2SetScr:3,26:A$=132:B$=135:wid%=79:hgh%=31 [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:"** "Dis_Name(M%)" 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: ލW%=wid%+46*(wid%>40):W%/4-Dis_Name(M%)/2+(ny%>9)-(W%<40),"*");" ";Dis_Name(M%);" D"dd$"er ";ny%;" ";W%-,"*"):wid%<40:0,hgh%-6); wid%<40:A$"RETURN"B$"forward 1"4;A$"+"B$"forward 8"7;A$"DELETE"B$"back 1"7;A$"-"B$"back 8"'A$"L"B$"List d"dd$"y "A$"Q"B$"DUMP/LIST"7; wid%<40:A$"M"B$"Set Memory address"A$"O"B$"Set code origin"'A$"T"B$"Enter text"8;A$"Y"B$"Enter message ";A$"Z"B$"Set machine"4;A$"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"' LA$=Dis_Name(0):: A%,A$: V,;A%;":";4+( 20)*20);A$;20 (<20)); `5 A%,A$:A%=0::'"Enter CPU number: "cpu%:cpu% jDA%=Dis_Name(cpu%)="":A%:"No disassembly routine for this CPU" tA%::=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: 26:0,hgh%);:*QUIT  :  -addr:os%=32:P%< P%>+blen%:P%=buf%  9ݤmode:os%=6:>&7FFF:= =(byte(135,0,0)256)&80 (3ݤho(A%,N%):hex%:=h0(A%,N%) =o0(A%,N%*1.5) 2: < Library routines F1ݤc(A%):A%=A%127:A%=127 A%<32:="." =A% P#ݤh0(A%,N%)="0000000"+~A%,N%) Zݤ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%) dL DEFFNo0(A%,N%):LOCAL A$,B$:IFA%<0:B$="7":A%=A%AND&7FFFFFFF ELSE B$="0" nP REPEATA$=STR$(A%AND7)+A$:A%=A%DIV8:UNTILA%=0:=RIGHT$(STRING$(N%,B$)+A$,N%) x)ݤ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 / > Dis32 1.00 - 32000 disassembly routines ݤDis_Name(A%)="32000" #ݤDis_Code(A%,Ptr%,Data%): op% 2op%=!Data%:X%!0=0:$(X%+4)=_32:X%?3=num%:=num%  ݤ_32  num%=1 2(op%&FF)=&12:num%=2:="RET &"+h0(Data%?1,2) E(op%&CF)=&02:="BSRRETCXPRXP",((op%&F0)16)*3+1,3)+" "+dispPC 2(op%&FF)=&42:num%=2:="RETT &"+h0(Data%?1,2) (op%&FF)=&52:="RETI" "-(op%&FF)=&62:num%=2:="SAVE [reg list]" ,/(op%&FF)=&72:num%=2:="RESTORE [reg list]" 66(op%&FF)=&82:num%=2:="ENTER [reg list],"+dispPC @-(op%&FF)=&92:num%=2:="EXIT [reg list]" J(op%&FF)=&A2:="NOP" T(op%&FF)=&B2:="WAIT" ^(op%&FF)=&C2:="DIA" h2(op%&FF)=&D2:num%=2:="FLAG &"+h0(Data%?1,2) r2(op%&FF)=&E2:num%=2:="SVC &"+h0(Data%?1,2) |2(op%&FF)=&F2:num%=2:="BPT &"+h0(Data%?1,2) 5(op%&0F)=&0A:="B"+cc((op%&F0)16)+" "+dispPC  num%=2 (op%&0000FF)=&00004E:A$="ROT ASH CBIT CBITIxxxx LSH SBIT SBITINEG NOT xxxx SUBP ABS COM IBIT ADDP",(op%&3C0)1024*5+1,5) (op%&0000FF)=&00004E:=A$,A$+" "," ")-1)+sz(Data%?1 3)+" "+gen((Data%?2 &F8)8,Data%?1 3)+","+gen((op%&3C000)&4000,Data%?1 3) : (op%&003CFF)=&0000CE:num%=3:="MOVM"+sz(Data%?1 3)+" "+gen((op%&7C000)&4000,Data%?1 3)+","+gen((Data%?2 &F8)8,Data%?1 3)+disp : (op%&0000FF)=&0000CE:num%=3:A$="MOVM CMPM INSS"+sz(data%?1 3)+" EXTS MOVXBWMOVZBWMOVZ"+sz(Data%?1 3)+"DMOVX"+sz(Data%?1 3)+"DMUL MEI xxx DEI QUO REM MOD DIV",(op%&3C00)1024*6+1,6) m(op%&0000FF)=&0000CE:=A$+" "+gen((Data%?2 &F8)8,Data%?1 3)+","+gen((op%&7C000)&4000,Data%?1 3) : (op%&F870FF)=&00000E:num%=3:="MOVS CMPS SETCFGSKPS",(op%&C00)1024*6+1,6)+sz(Data%?1 3)+" "+short((op%&38000)&8000) (op%&43F)=&02E:num%=3:="EXT CVTP INS CHECK",(op%&C0)64*5+1,5)+" R"+((Data%?1 &38)8)+","+gen((Data%?2 &F8)8,Data%?1 3)+","+gen((op%&7C000)&4000,Data%?1 3) : ](op%&7C)=&0C:="ADDQ"+sz(op%3)+" "+short((op%&380)128)+","+gen((Data%?1)8,op%3) ](op%&7C)=&1C:="CMPQ"+sz(op%3)+" "+short((op%&380)128)+","+gen((Data%?1)8,op%3) [(op%&7C)=&2C:="SPR"+sz(op%3)+" "+areg((op%&780)128)+","+gen((Data%?1)8,op%3) &R(op%&7C)=&3C:="S"+cc((op%&380)128)+sz(op%3)+","+gen((Data%?1)8,op%3) 0f(op%&7C)=&4C:="ACB"+sz(op%3)+" "+short((op%&380)128)+","+gen((Data%?1)8,op%3)+","+disp :](op%&7C)=&5C:="MOVQ"+sz(op%3)+" "+short((op%&380)128)+","+gen((Data%?1)8,op%3) D[(op%&7C)=&6C:="LPR"+sz(op%3)+" "+areg((op%&780)128)+","+gen((Data%?1)8,op%3) N_(op%&FC)=&7C:A$="CXPD BICPSRJUMP BISPR xxxx ADJSP JSR CASE",((op%&700)256)*6+1,6) X=(op%&FC)=&7C:=A$+sz(op%3)+" "+gen((Data%?1)8,op%3) b(op%&0C)<>&0C:="ADDCMPBICxxxADCMOVORRxxxSUBADRANDxxxSBCTSTXOR",(op%&3C)4*3+1,3)+sz(op%3)+" "+gen((Data%?1)8,op%3)+","+gen((op%&7C0)64,op%3) l num%=3 v: num%=1:="EQUB &"+h0(op%,2)  G(op%&00043F)=&00002E:="EXT CVTP INS CHECK",(op%&C0)64*5+1,5) F(op%&00043F)=&00042E:="INDEXFFS MOVSUxxxx",(op%&C0)64*5+1,5) ](op%&0000FF)=&00003E:="MOVIFLFSR MOVLFMOVFLROUNDTRUNCSFSR FLOOR",(op%&300)256*5+1,5) l(op%&0000FF)=&0000BE:="ADDFMOVFCMPFSUBFNEGFxxx xxx DIVFxxx xxx MULFABSFxxx xxx",(op%&3C)1024*4+1,4) H(op%&0030FF)=&00001E:="RDVALWRVALLMR SMR",(op%&C00)1024*5+1,5) : num%=1:="EQUB &"+h0(op%) : :ݤcc(A%)="EQNECSCCHILSGTLEFSFCLOHSLTGEALNV",A%*2+1,2) +ݤshort(A%): A%<8:="+"+A% =(A%-16) ݤsz(A%)="BW-D",A%+1,1) ݤgen(A%,sz%): rn%:rn%=A%  A%<8:="R"+A% #A%<16:=disp+"(R"+(rn%-8)+")"  ,A%=16:A$=disp+"(FP)":=disp+"("+A$+")" *,A%=17:A$=disp+"(SP)":=disp+"("+A$+")" 4,A%=18:A$=disp+"(SB)":=disp+"("+A$+")" >A%=19:="reserved" H8A%=20:sz%=0:num%=num%+1:="&"+h0(Data%?(num%-1),2) R8A%=20:sz%=1:num%=num%+2:="&"+h0(Data%!(num%-2),4) \sA%=20:num%=num%+4:="&"+h0(Data%?(num%-4),2)+h0(Data%?(num%-3),2)+h0(Data%?(num%-2),2)+h0(Data%?(num%-1),2) fA%=21:="@"+disp pA%=22:="EXT (disp1)+disp2" zA%=23:="TOS" A%=24:=disp+"(FP)" A%=25:=disp+"(SP)" A%=26:=disp+"(SB)" A%=27:="*+"+disp rn%=Data%?num%:num%=num%+1 /A%=28:=gen(rn%8,sz%)+"[R"+(rn%7)+":B]" /A%=29:=gen(rn%8,sz%)+"[R"+(rn%7)+":W]" /A%=30:=gen(rn%8,sz%)+"[R"+(rn%7)+":D]" /A%=31:=gen(rn%8,sz%)+"[R"+(rn%7)+":Q]" ="" +ݤdisp:A%=dispVal:="&"+h0(A%,dz%*2+2) -ݤdispPC:="&"+h0(dispVal+num%*0+Ptr%,8) 7ݤdispVal:dz%=(Data%?num%)64:dz%="0013",dz%+1,1) ,dz%=0:num%=num%+1:A%=Data%?(num%-1):=A% Fdz%=1:num%=num%+2:A%=Data%?(num%-1)+256*(Data%?(num%-2) 63):=A% dA%=data%?(num%+3)+256*data%?(num%+2)+65536*data%?(num%+1)+&1000000*(data%?num% 63):num%=num%+4 $=A% .ݤareg(A%) 8A%=0:="US" BA%=8:="FP" LA%=9:="SP" VA%=10:="SB" `A%=13:="PSR" jA%=14:="INTBASE" tA%=15:="MOD" ~ ="xx"