;HRTmon Amiga system monitor ;Copyright (C) 1991-1998 Alain Malek Alain.Malek@cryogen.com ; ;This program is free software; you can redistribute it and/or ;modify it under the terms of the GNU General Public License ;as published by the Free Software Foundation; either version 2 ;of the License, or (at your option) any later version. ; ;This program is distributed in the hope that it will be useful, ;but WITHOUT ANY WARRANTY; without even the implied warranty of ;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;GNU General Public License for more details. ; ;You can find the full GNU GPL online at: http://www.gnu.org ;assembler from Beermon modified for HRTmon ;68000-68040/FPU/MMU ;-> a0=ptr on string ;-> a1=address where to assemble ;<- d0: 0=ok -1=error ;<- opcode in op68000 & len-1.w in oplen ;oplen dc.w 0 ;nb word for instr.-1 ;op68000 dc.w 0,0,0,0,0 ;assembled instr. here !! ;s * only for test * ; lea.l linebufBMON,a0 ; lea.l $1f0000,a1 ; bsr.w assemble ; rts ;linebufBMON dc.b "lea ($1f0020,pc),a0" ; dcb.b 80,0 ;lineeofBMON dc.b 0 ; even ifnd baseBMON baseBMON endc ifnd s67BMON s67BMON =$0000 s6BMON =$0100 s8BMON =$0200 stabBMON=$0300 snopBMON=$0400 s9a_BMON=$0500 ;68020 cas s9aBMON =$0600 ;68020 chk2,cmp2 endc assemble: movem.l d1-d7/a0-a6,-(a7) lea.l baseBMON,a6 move.l a1,paraBMON move.l a0,a2 .seek tst.b (a2)+ bne.b .seek ;seek end of line subq.l #1,a2 move.l a2,lineendBMON move.l a0,a5 ;cmdadr! nn3BMON: cmp.l lineendBMON,a0 bhi.b nn4BMON move.b (a0)+,d0 cmp.b #"Z",d0 bhi.b nn3BMON cmp.b #"A",d0 bcs.b nn3BMON bset #5,d0 ;go lower case move.b d0,-1(a0) bra.b nn3BMON nn4BMON: lea instrBMON(pc),a4 nn7BMON: ; btst #0,paraBMON+3 ;test if even address ? ; bne.b nassq ; cmp.b #"-",(a5) ;line? ; beq.w ignline move.l a5,a0 lea 6(a4),a1 nn6BMON: move.b (a1),d0 bclr #7,d0 cmp.b (a0)+,d0 bne.w nn5BMON btst #7,(a1)+ beq.b nn6BMON lea op68000-2,a1 clr.l lginstrBMON ;0:2byte instrBMON,2:4byte (mulx.l...) clr.w (a1)+ ;oplen! clr.w (a1) move.w 4(a4),d0 ;info and.w #$700,d0 cmp.w #snopBMON,d0 beq.w nnsnopBMON cmp.w #stabBMON,d0 ;bne.b nnstabBMON beq.w nn9BMON nnstabBMON: cmp.b #".",(a0)+ bne.w nn5BMON cmp.w #s67BMON,d0 bne.b nns67BMON sf imsizeBMON ;%00 cmp.b #"b",(a0)+ ;op68000:0 beq.w nn9BMON addq.b #1,imsizeBMON ;%01 move.w #%01000000,(a1) cmp.b #"w",-1(a0) beq.w nn9BMON addq.b #1,imsizeBMON ;%10 move.w #%10000000,(a1) cmp.b #"l",-1(a0) beq.w nn9BMON nns67BMON: cmp.w #s9a_BMON,d0 ;68020 cas bne.b nns9a_BMON sf imsizeBMON ;%00 move.w #%01000000000,(a1) ;68020 cmp.b #"b",(a0)+ ;op68000:0 beq.w nn9BMON addq.b #1,imsizeBMON ;%01 move.w #%10000000000,(a1) cmp.b #"w",-1(a0) beq.w nn9BMON addq.b #1,imsizeBMON ;%10 move.w #%11000000000,(a1) cmp.b #"l",-1(a0) beq.w nn9BMON nns9a_BMON: cmp.w #s9aBMON,d0 ;68020 chk2,cmp2 bne.b nns9aBMON sf imsizeBMON ;%00 cmp.b #"b",(a0)+ ;op68000:0 beq.w nn9BMON addq.b #1,imsizeBMON ;%01 move.w #%01000000000,(a1) cmp.b #"w",-1(a0) beq.w nn9BMON addq.b #1,imsizeBMON ;%10 move.w #%10000000000,(a1) cmp.b #"l",-1(a0) beq.b nn9BMON nns9aBMON: cmp.w #s6BMON,d0 bne.b nns6BMON move.b #%01,imsizeBMON cmp.b #"w",(a0)+ beq.b nn9BMON addq.b #1,imsizeBMON ;%10 move.w #%1000000,(a1) cmp.b #"l",-1(a0) beq.b nn9BMON nns6BMON: cmp.w #s8BMON,d0 bne.b nn5BMON ;ill instrtab or cmd move.b #%01,imsizeBMON cmp.b #"w",(a0)+ beq.b nn9BMON addq.b #1,imsizeBMON ;%10 move.w #%100000000,(a1) cmp.b #"l",-1(a0) bne.b nn5BMON nn9BMON: cmp.b #" ",(a0) bne.b nn5BMON nn10BMON: addq.w #1,a0 cmp.l lineendBMON,a0 bhi.b nn5BMON cmp.b #" ",(a0) beq.b nn10BMON nnsnopBMON: st d7 move.l a0,a3 move.w 4(a4),d0 ext.w d0 ;no a4,a5 add.w d0,d0 lea assoffsBMON(pc),a0 move.w (a0,d0.w),d0 lea assubsBMON(pc),a0 jsr (a0,d0.w) ;a4:instrtabentry,a5:cmdtxt,a3:cnttxt ;a6:notmodify!! tst.b d7 bne.b nn8BMON nn5BMON: sf d7 tst.l (a4) beq.b nretryBMON ;unknown lea 14(a4),a4 bra.w nn7BMON nn8BMON: lea op68000,a0 move.w (a0),d1 or.w 2(a4),d1 move.w d1,(a0) moveq #0,d0 ;ok! ass_outBMON movem.l (a7)+,d1-d7/a0-a6 rts nretryBMON moveq #-1,d0 ;unknown instruction bra.b ass_outBMON ;--------------------------------------------------------------- ifnd longtoaBMON longtoaBMON: movem.l d0-d2,-(a7) moveq #8-1,d2 lta0BMON: rol.l #4,d0 moveq #$0f,d1 and.w d0,d1 move.b l2asciiBMON(pc,d1.w),(a0)+ dbf d2,lta0BMON movem.l (a7)+,d0-d2 rts l2asciiBMON:dc.b "0123456789abcdef" ;--------------------------------------------------------------- atolong_BMON: cmp.b #"$",(a3) bne.b atolongBMON addq.w #1,a3 atolongBMON: moveq #8-1,d2 bra.b atob2BMON atoword_BMON: cmp.b #"$",(a3) bne.b atowordBMON addq.w #1,a3 atowordBMON: moveq #4-1,d2 bra.b atob2BMON atobyte_BMON: cmp.b #"$",(a3) bne.b atobyteBMON addq.w #1,a3 atobyteBMON: moveq #2-1,d2 atob2BMON: moveq #0,d0 atob1BMON: move.b (a3),d1 cmp.b #"f",d1 bhi.b atob3BMON sub.b #"0",d1 bcs.b atob3BMON cmp.b #9,d1 bls.b atob0BMON cmp.b #"a"-"0",d1 bcs.b atob3BMON sub.b #"a"-"0"-10,d1 atob0BMON: lsl.l #4,d0 or.b d1,d0 addq.w #1,a3 dbf d2,atob1BMON atob3BMON: tst.l d0 rts atodnibBMON:moveq #0,d0 ;0-99 move.b (a3),d1 sub.b #"0",d1 bcs.b atdnb0BMON cmp.b #9,d1 bhi.b atdnb0BMON addq.w #1,a3 move.b d1,d0 move.b (a3),d1 sub.b #"0",d1 bcs.b atdnb0BMON cmp.b #9,d1 bhi.b atdnb0BMON addq.w #1,a3 mulu #10,d0 add.b d1,d0 atdnb0BMON: tst.b d0 rts atodlongBMON: moveq #0,d0 moveq #0,d1 moveq #10-1,d2 atol1BMON: move.b (a3),d1 sub.b #"0",d1 bcs.b atodl0BMON cmp.b #9,d1 bhi.b atodl0BMON addq.w #1,a3 add.l d0,d0 ;*2 move.l d0,-(a7) lsl.l #2,d0 ;*2*4 add.l (a7)+,d0 add.l d1,d0 dbf d2,atol1BMON atodl0BMON: rts endc ;--------------------------------------------------------------- skipspcBMON:cmp.b #" ",(a0) bne.b fnspc0BMON addq.w #1,a0 bra.b skipspcBMON findspcBMON:cmp.b #" ",(a0) beq.b fnspc0BMON addq.w #1,a0 bra.b findspcBMON fnspc0BMON: cmp.l lineendBMON,a0 ;bhi.b eol rts ;--------------------------------------------------------------- ifnd instrBMON instrBMON: dc.w $ffff,$4afc,snopBMON!xnoopsBMON dc.b "illega","l"+128,0 dc.w $ffff,$4e70,snopBMON!xnoopsBMON dc.b "rese","t"+128,0,0,0 dc.w $ffff,$4e71,snopBMON!xnoopsBMON dc.b "no","p"+128,0,0,0,0,0 dc.w $ffff,$4e73,snopBMON!xnoopsBMON dc.b "rt","e"+128,0,0,0,0,0 dc.w $ffff,$4e75,snopBMON!xnoopsBMON dc.b "rt","s"+128,0,0,0,0,0 dc.w $ffff,$4e77,snopBMON!xnoopsBMON dc.b "rt","r"+128,0,0,0,0,0 dc.w $ffff,$4afa,snopBMON!xnoopsBMON ;cpu32 only dc.b "bgn","d"+128,0,0,0,0 dc.w $ffc0,$f200,snopBMON!xfpuBMON ;68881 dc.b "f"+128,0,0,0,0,0,0,0 dc.w $ffc0,$f200,stabBMON!xfmovelBMON ;68881 dc.b "fmove.","l"+128,0 dc.w $ffc0,$f200,stabBMON!xfmovemlBMON ;68881 dc.b "fmovem.","l"+128 dc.w $ffc0,$f200,stabBMON!xfmovemxBMON ;68881 dc.b "fmovem.","x"+128 dc.w $ffff,$f200,stabBMON!xfmovecrBMON ;68881 dc.b "fmovec","r"+128,0 dc.w $ffff,$f280,snopBMON!xfnopBMON ;68881 dc.b "fno","p"+128,0,0,0,0 dc.w $ffff,$f510,snopBMON!xnoopsBMON ;68040 only! dc.b "pflusha","n"+128 dc.w $ffff,$f518,snopBMON!xnoopsBMON ;68040 only! dc.b "pflusha","!"+128 dc.w $ffff,$f000,snopBMON!xpflushaBMON ;68020 order! dc.b "pflush","a"+128,0 dc.w $ffff,$f000,stabBMON!xpflushsBMON ;68851 only order! dc.b "pflush","s"+128,0 dc.w $ffc0,$f000,stabBMON!xpflushrBMON ;68851 only order! dc.b "pflush","r"+128,0 dc.w $fff8,$f500,stabBMON!xpflush40BMON ;68040 only! dc.b "pflush","n"+128,0 dc.w $fff8,$f508,stabBMON!xpflush40BMON ;68040 only! dc.b "pflus","h"+128,0,0 dc.w $fff8,$f548,stabBMON!xpflush40BMON ;68040 only! dc.b "ptest","w"+128,0,0 dc.w $fff8,$f568,stabBMON!xpflush40BMON ;68040 only! dc.b "ptest","r"+128,0,0 dc.w $ffff,$f000,stabBMON!xpflushBMON ;68020 order! dc.b "pflus","h"+128,0,0 dc.w $ffc0,$f000,stabBMON!xpvalidBMON ;68851 only dc.b "pvali","d"+128,0,0 dc.w $ffff,$003c,stabBMON!xiwordtoccrBMON dc.b "or","i"+128,0,0,0,0,0 dc.w $ffff,$023c,stabBMON!xiwordtoccrBMON dc.b "and","i"+128,0,0,0,0 dc.w $ffff,$0a3c,stabBMON!xiwordtoccrBMON dc.b "eor","i"+128,0,0,0,0 dc.w $ffff,$007c,stabBMON!xiwordtosrBMON dc.b "or","i"+128,0,0,0,0,0 dc.w $ffff,$027c,stabBMON!xiwordtosrBMON dc.b "and","i"+128,0,0,0,0 dc.w $ffff,$0a7c,stabBMON!xiwordtosrBMON dc.b "eor","i"+128,0,0,0,0 dc.w $f1f8,$c140,stabBMON!xdx9btodx02BMON dc.b "ex","g"+128,0,0,0,0,0 dc.w $f1f8,$c148,stabBMON!xax9btoax02BMON dc.b "ex","g"+128,0,0,0,0,0 dc.w $f1f8,$c188,stabBMON!xdx9btoax02BMON dc.b "ex","g"+128,0,0,0,0,0 dc.w $fff8,$4e58,stabBMON!xiunlkBMON dc.b "unl","k"+128,0,0,0,0 dc.w $fff8,$4808,stabBMON!xilinklgBMON ;68020 dc.b "link.","l"+128,0,0 dc.w $fff8,$4e50,stabBMON!xilinkBMON dc.b "lin","k"+128,0,0,0,0 dc.w $fff8,$4848,stabBMON!xbkptBMON ;68020 dc.b "bkp","t"+128,0,0,0,0 dc.w $f1f0,$8140,stabBMON!xpackBMON ;68020 dc.b "pac","k"+128,0,0,0,0 dc.w $f1f0,$8180,stabBMON!xpackBMON ;68020 dc.b "unp","k"+128,0,0,0,0 dc.w $fff0,$4e40,stabBMON!xitrapBMON dc.b "tra","p"+128,0,0,0,0 dc.w $f100,$7000,stabBMON!ximoveqBMON dc.b "move","q"+128,0,0,0 dc.w $ffff,$f800,stabBMON!xlpstopBMON ;cpu32 only dc.b "lpsto","p"+128,0,0 dc.w $ffff,$4e72,stabBMON!xiwordBMON dc.b "sto","p"+128,0,0,0,0 dc.w $ffff,$4e74,stabBMON!xiwordBMON ;68010 dc.b "rt","d"+128,0,0,0,0,0 dc.w $fdff,$0cfc,snopBMON!xcas2BMON ;68020 dc.b "cas2","."+128,0,0,0 dc.w $fff8,$4840,stabBMON!xsrcdx02BMON dc.b "swa","p"+128,0,0,0,0 dc.w $fff8,$49c0,stabBMON!xsrcdx02BMON ;68020 dc.b "ext","b"+128,0,0,0,0 dc.w $ffb8,$4880,s6BMON!xsrcdx02BMON dc.b "ex","t"+128,0,0,0,0,0 dc.w $fff0,$06c0,stabBMON!xrx03BMON ;68020 dc.b "rt","m"+128,0,0,0,0,0 ;???? dc.w $fffe,$f07a,snopBMON!xpccodesizeBMON ;68851 only order! dc.b "ptra","p"+128,0,0,0 dc.w $ffff,$f07c,snopBMON!xpccodeBMON ;68851 only order! dc.b "ptra","p"+128,0,0,0 dc.w $fffe,$f27a,snopBMON!xfccodesizeBMON ;68881 order! dc.b "ftra","p"+128,0,0,0 dc.w $ffff,$f27c,snopBMON!xfccodeBMON ;68881 order! dc.b "ftra","p"+128,0,0,0 dc.w $f0fe,$50fa,snopBMON!xccodesizeBMON ;68020 order! dc.b "tra","p"+128,0,0,0,0 dc.w $f0ff,$50fc,snopBMON!xccodeBMON ;68020 order! dc.b "tra","p"+128,0,0,0,0 dc.w $ffff,$4e76,snopBMON!xnoopsBMON ;order! dc.b "trap","v"+128,0,0,0 ;???? dc.w $ff3f,$f418,stabBMON!xidbcacBMON ;68040 dc.b "cinv","a"+128,0,0,0 dc.w $ff38,$f408,stabBMON!xidbindBMON ;68040 dc.b "cinv","l"+128,0,0,0 dc.w $ff38,$f410,stabBMON!xidbindBMON ;68040 dc.b "cinv","p"+128,0,0,0 dc.w $ff3f,$f438,stabBMON!xidbcacBMON ;68040 dc.b "cpush","a"+128,0,0 dc.w $ff38,$f428,stabBMON!xidbindBMON ;68040 dc.b "cpush","l"+128,0,0 dc.w $ff38,$f430,stabBMON!xidbindBMON ;68040 dc.b "cpush","p"+128,0,0 dc.w $fff8,$f620,stabBMON!xmov16BMON ;68040 order! dc.b "move1","6"+128,0,0 dc.w $ffe0,$f600,stabBMON!xmov162BMON ;68040 dc.b "move1","6"+128,0,0 dc.w $f138,$b108,s67BMON!xicmpmBMON dc.b "cmp","m"+128,0,0,0,0 dc.w $f1f0,$c100,stabBMON!xxbcdBMON dc.b "abc","d"+128,0,0,0,0 dc.w $f1f0,$8100,stabBMON!xxbcdBMON dc.b "sbc","d"+128,0,0,0,0 dc.w $f130,$d100,s67BMON!xsize67adsbxBMON dc.b "add","x"+128,0,0,0,0 dc.w $f130,$9100,s67BMON!xsize67adsbxBMON dc.b "sub","x"+128,0,0,0,0 dc.w $ffc0,$f000,stabBMON!xpmovefdBMON ;68030 only dc.b "pmovef","d"+128,0 dc.w $ffc0,$f000,stabBMON!xpmoveBMON ;68020 dc.b "pmov","e"+128,0,0,0 dc.w $ffc0,$f000,snopBMON!xploadBMON ;68020 dc.b "ploa","d"+128,0,0,0 dc.w $ffc0,$f000,snopBMON!xptestBMON ;68020 dc.b "ptes","t"+128,0,0,0 dc.w $ffc0,$e8c0,stabBMON!xbfieldBMON ;68020 dc.b "bfts","t"+128,0,0,0 dc.w $ffc0,$eac0,stabBMON!xbfieldBMON ;68020 dc.b "bfch","g"+128,0,0,0 dc.w $ffc0,$ecc0,stabBMON!xbfieldBMON ;68020 dc.b "bfcl","r"+128,0,0,0 dc.w $ffc0,$eec0,stabBMON!xbfieldBMON ;68020 dc.b "bfse","t"+128,0,0,0 dc.w $ffc0,$e9c0,stabBMON!xbfieldtodxBMON ;68020 dc.b "bfext","u"+128,0,0 dc.w $ffc0,$ebc0,stabBMON!xbfieldtodxBMON ;68020 dc.b "bfext","s"+128,0,0 dc.w $ffc0,$edc0,stabBMON!xbfieldtodxBMON ;68020 dc.b "bfff","o"+128,0,0,0 dc.w $ffc0,$efc0,stabBMON!xdxtobfieldBMON ;68020 dc.b "bfin","s"+128,0,0,0 dc.w $ffc0,$06c0,stabBMON!xcallmBMON ;68020 dc.b "call","m"+128,0,0,0 dc.w $ffc0,$40c0,stabBMON!xsrtoeaBMON dc.b "mov","e"+128,0,0,0,0 dc.w $ffc0,$42c0,stabBMON!xccrtoeaBMON ;68010 dc.b "mov","e"+128,0,0,0,0 dc.w $ffc0,$44c0,stabBMON!xeatoccrBMON dc.b "mov","e"+128,0,0,0,0 dc.w $ffc0,$46c0,stabBMON!xeatosrBMON dc.b "mov","e"+128,0,0,0,0 dc.w $fff0,$4e60,stabBMON!ximuspBMON dc.b "mov","e"+128,0,0,0,0 dc.w $fffe,$4e7a,stabBMON!ximovecBMON ;68010 dc.b "move","c"+128,0,0,0 dc.w $fb80,$4880,s6BMON!ximovemBMON dc.b "move","m"+128,0,0,0 dc.w $f138,$0108,s6BMON!xsize6movepBMON dc.b "move","p"+128,0,0,0 dc.w $ffc0,$f800,snopBMON!xtblBMON ;cpu32 only dc.b "tb","l"+128,0,0,0,0,0 dc.w $f1c0,$41c0,stabBMON!xeatoaxBMON dc.b "le","a"+128,0,0,0,0,0 dc.w $ffff,$60ff,stabBMON!xlongbxxBMON ;68020 dc.b "bra.","l"+128,0,0,0 dc.w $ffff,$61ff,stabBMON!xlongbxxBMON ;68020 dc.b "bsr.","l"+128,0,0,0 dc.w $ffff,$6000,stabBMON!xwordbxxBMON dc.b "bra.","w"+128,0,0,0 dc.w $ffff,$6100,stabBMON!xwordbxxBMON dc.b "bsr.","w"+128,0,0,0 dc.w $ff00,$6000,stabBMON!xshortbxxBMON ;order ! dc.b "bra.","b"+128,0,0,0 dc.w $ff00,$6000,stabBMON!xshortbxxBMON ;order ! dc.b "bra.","s"+128,0,0,0 ;clone dc.w $ff00,$6100,stabBMON!xshortbxxBMON dc.b "bsr.","b"+128,0,0,0 dc.w $ff00,$6100,stabBMON!xshortbxxBMON dc.b "bsr.","s"+128,0,0,0 ;clone dc.w $ffb0,$f080,snopBMON!xbrapccBMON ;68851 only dc.b "p","b"+128,0,0,0,0,0,0 dc.w $ffa0,$f280,snopBMON!xbrafccBMON ;68881 dc.b "f","b"+128,0,0,0,0,0,0 dc.w $f0ff,$60ff,snopBMON!xlongccBMON ;68020 dc.b "b"+128,0,0,0,0,0,0,0 dc.w $f0ff,$6000,snopBMON!xwordccBMON dc.b "b"+128,0,0,0,0,0,0,0 dc.w $f000,$6000,snopBMON!xshortccBMON dc.b "b"+128,0,0,0,0,0,0,0 dc.w $fff8,$f048,snopBMON!xpccodewordrelBMON ;68851 only dc.b "pd","b"+128,0,0,0,0,0 dc.w $ffc0,$f040,snopBMON!xpccodeeaBMON ;68851 only dc.b "p","s"+128,0,0,0,0,0,0 dc.w $fff8,$f248,snopBMON!xfccodewordrelBMON ;68881 dc.b "fd","b"+128,0,0,0,0,0 dc.w $ffc0,$f240,snopBMON!xfccodeeaBMON ;68881 dc.b "f","s"+128,0,0,0,0,0,0 dc.w $f0f8,$50c8,snopBMON!xccodewordrelBMON ;order ! dc.b "d","b"+128,0,0,0,0,0,0 dc.w $f0c0,$50c0,snopBMON!xccodeeaBMON dc.b "s"+128,0,0,0,0,0,0,0 dc.w $ffc0,$4800,stabBMON!xsrceaBMON dc.b "nbc","d"+128,0,0,0,0 dc.w $ffc0,$4840,stabBMON!xsrceaBMON dc.b "pe","a"+128,0,0,0,0,0 dc.w $ffc0,$4ac0,stabBMON!xsrceaBMON dc.b "ta","s"+128,0,0,0,0,0 dc.w $ffc0,$4e80,stabBMON!xsrceaBMON dc.b "js","r"+128,0,0,0,0,0 dc.w $ffc0,$4ec0,stabBMON!xsrceaBMON dc.b "jm","p"+128,0,0,0,0,0 dc.w $ffc0,$e0c0,stabBMON!xsrceaBMON dc.b "as","r"+128,0,0,0,0,0 dc.w $ffc0,$e1c0,stabBMON!xsrceaBMON dc.b "as","l"+128,0,0,0,0,0 dc.w $ffc0,$e2c0,stabBMON!xsrceaBMON dc.b "ls","r"+128,0,0,0,0,0 dc.w $ffc0,$e3c0,stabBMON!xsrceaBMON dc.b "ls","l"+128,0,0,0,0,0 dc.w $ffc0,$e4c0,stabBMON!xsrceaBMON dc.b "rox","r"+128,0,0,0,0 dc.w $ffc0,$e5c0,stabBMON!xsrceaBMON dc.b "rox","l"+128,0,0,0,0 dc.w $ffc0,$e6c0,stabBMON!xsrceaBMON dc.b "ro","r"+128,0,0,0,0,0 dc.w $ffc0,$e7c0,stabBMON!xsrceaBMON dc.b "ro","l"+128,0,0,0,0,0 dc.w $ffc0,$f100,stabBMON!xsrceaBMON ;68851 only dc.b "psav","e"+128,0,0,0 dc.w $ffc0,$f140,stabBMON!xsrceaBMON ;68851 only dc.b "prestor","e"+128 dc.w $ffc0,$f300,stabBMON!xsrceaBMON ;68881 dc.b "fsav","e"+128,0,0,0 dc.w $ffc0,$f340,stabBMON!xsrceaBMON ;68881 dc.b "frestor","e"+128 dc.w $ffc0,$4c40,stabBMON!xdivullBMON ;68020 dc.b "divul.","l"+128,0 dc.w $ffc0,$4c40,stabBMON!xdivsllBMON ;68020 dc.b "divsl.","l"+128,0 dc.w $ffc0,$4c40,stabBMON!xmululBMON ;68020 dc.b "divu.","l"+128,0,0 dc.w $ffc0,$4c40,stabBMON!xmulslBMON ;68020 dc.b "divs.","l"+128,0,0 dc.w $ffc0,$4c00,stabBMON!xmululBMON ;68020 dc.b "mulu.","l"+128,0,0 dc.w $ffc0,$4c00,stabBMON!xmulslBMON ;68020 dc.b "muls.","l"+128,0,0 dc.w $f1c0,$80c0,stabBMON!xeatodxBMON dc.b "div","u"+128,0,0,0,0 dc.w $f1c0,$81c0,stabBMON!xeatodxBMON dc.b "div","s"+128,0,0,0,0 dc.w $f1c0,$c0c0,stabBMON!xeatodxBMON dc.b "mul","u"+128,0,0,0,0 dc.w $f1c0,$c1c0,stabBMON!xeatodxBMON dc.b "mul","s"+128,0,0,0,0 dc.w $f1c0,$4180,stabBMON!xeatodxBMON dc.b "chk.","w"+128,0,0,0 dc.w $f1c0,$4100,stabBMON!xea2todxBMON ;68020 dc.b "chk.","l"+128,0,0,0 dc.w $f0c0,$90c0,s8BMON!xsize8eatoax9bBMON dc.b "sub","a"+128,0,0,0,0 dc.w $f0c0,$b0c0,s8BMON!xsize8eatoax9bBMON dc.b "cmp","a"+128,0,0,0,0 dc.w $f0c0,$d0c0,s8BMON!xsize8eatoax9bBMON dc.b "add","a"+128,0,0,0,0 dc.w $f100,$8000,s67BMON!xsize67eatodxBMON dc.b "o","r"+128,0,0,0,0,0,0 dc.w $f100,$9000,s67BMON!xsize67eatodxBMON dc.b "su","b"+128,0,0,0,0,0 dc.w $f100,$b000,s67BMON!xsize67eatodxBMON dc.b "cm","p"+128,0,0,0,0,0 dc.w $f100,$c000,s67BMON!xsize67eatodxBMON dc.b "an","d"+128,0,0,0,0,0 dc.w $f100,$d000,s67BMON!xsize67eatodxBMON dc.b "ad","d"+128,0,0,0,0,0 dc.w $f100,$8100,s67BMON!xdxtoeaBMON dc.b "o","r"+128,0,0,0,0,0,0 dc.w $f100,$9100,s67BMON!xdxtoeaBMON dc.b "su","b"+128,0,0,0,0,0 dc.w $f100,$b100,s67BMON!xdxtoeaBMON dc.b "eo","r"+128,0,0,0,0,0 dc.w $f100,$c100,s67BMON!xdxtoeaBMON dc.b "an","d"+128,0,0,0,0,0 dc.w $f100,$d100,s67BMON!xdxtoeaBMON dc.b "ad","d"+128,0,0,0,0,0 dc.w $ffc0,$0800,stabBMON!xinibtoeaBMON dc.b "bts","t"+128,0,0,0,0 dc.w $ffc0,$0840,stabBMON!xinibtoeaBMON dc.b "bch","g"+128,0,0,0,0 dc.w $ffc0,$0880,stabBMON!xinibtoeaBMON dc.b "bcl","r"+128,0,0,0,0 dc.w $ffc0,$08c0,stabBMON!xinibtoeaBMON dc.b "bse","t"+128,0,0,0,0 dc.w $f9c0,$08c0,s9a_BMON!xcasBMON ;68020 dc.b "ca","s"+128,0,0,0,0,0 dc.w $f9c0,$00c0,s9aBMON!xchk2BMON ;68020 dc.b "chk","2"+128,0,0,0,0 dc.w $f9c0,$00c0,s9aBMON!xcmp2BMON ;68020 dc.b "cmp","2"+128,0,0,0,0 dc.w $f100,$5000,s67BMON!xsize67i9btoeaBMON dc.b "add","q"+128,0,0,0,0 dc.w $f100,$5100,s67BMON!xsize67i9btoeaBMON dc.b "sub","q"+128,0,0,0,0 dc.w $f118,$e000,s67BMON!xsize67x9btodx02BMON dc.b "as","r"+128,0,0,0,0,0 dc.w $f118,$e008,s67BMON!xsize67x9btodx02BMON dc.b "ls","r"+128,0,0,0,0,0 dc.w $f118,$e010,s67BMON!xsize67x9btodx02BMON dc.b "rox","r"+128,0,0,0,0 dc.w $f118,$e018,s67BMON!xsize67x9btodx02BMON dc.b "ro","r"+128,0,0,0,0,0 dc.w $f118,$e100,s67BMON!xsize67x9btodx02BMON dc.b "as","l"+128,0,0,0,0,0 dc.w $f118,$e108,s67BMON!xsize67x9btodx02BMON dc.b "ls","l"+128,0,0,0,0,0 dc.w $f118,$e110,s67BMON!xsize67x9btodx02BMON dc.b "rox","l"+128,0,0,0,0 dc.w $f118,$e118,s67BMON!xsize67x9btodx02BMON dc.b "ro","l"+128,0,0,0,0,0 dc.w $ff00,$0000,s67BMON!xsize67ixtoeaBMON dc.b "or","i"+128,0,0,0,0,0 dc.w $ff00,$0200,s67BMON!xsize67ixtoeaBMON dc.b "and","i"+128,0,0,0,0 dc.w $ff00,$0400,s67BMON!xsize67ixtoeaBMON dc.b "sub","i"+128,0,0,0,0 dc.w $ff00,$0600,s67BMON!xsize67ixtoeaBMON dc.b "add","i"+128,0,0,0,0 dc.w $ff00,$0a00,s67BMON!xsize67ixtoeaBMON dc.b "eor","i"+128,0,0,0,0 dc.w $ff00,$0c00,s67BMON!xsize67ixtoeaBMON dc.b "cmp","i"+128,0,0,0,0 dc.w $f1c0,$0100,stabBMON!xdxtoeaBMON dc.b "bts","t"+128,0,0,0,0 dc.w $f1c0,$0140,stabBMON!xdxtoeaBMON dc.b "bch","g"+128,0,0,0,0 dc.w $f1c0,$0180,stabBMON!xdxtoeaBMON dc.b "bcl","r"+128,0,0,0,0 dc.w $f1c0,$01c0,stabBMON!xdxtoeaBMON dc.b "bse","t"+128,0,0,0,0 dc.w $ff00,$0e00,s67BMON!xmovesBMON ;68010 dc.b "move","s"+128,0,0,0 dc.w $ff00,$4000,s67BMON!xsrceaBMON dc.b "neg","x"+128,0,0,0,0 dc.w $ff00,$4200,s67BMON!xsrceaBMON dc.b "cl","r"+128,0,0,0,0,0 dc.w $ff00,$4400,s67BMON!xsrceaBMON dc.b "ne","g"+128,0,0,0,0,0 dc.w $ff00,$4600,s67BMON!xsrceaBMON dc.b "no","t"+128,0,0,0,0,0 dc.w $ff00,$4a00,s67BMON!xsrceaBMON dc.b "ts","t"+128,0,0,0,0,0 dc.w $c000,$0000,snopBMON!ximoveBMON dc.b "move","."+128,0,0,0 dc.w $f000,$a000,stabBMON!xdcwopBMON dc.b "line-","a"+128,0,0 dc.w $f000,$f000,stabBMON!xdcwopBMON dc.b "line-","f"+128,0,0 dc.w $0000,$0000,stabBMON!xdcwopBMON dc.b "dc.","w"+128,0,0,0,0 ;--------------------------------------------------------------- xopfailBMON=0 ;dummy xnoopsBMON=1 xdcwopBMON=2 xeatoccrBMON=3 xeatosrBMON=4 xsrtoeaBMON=5 xwordbxxBMON=6 xwordccBMON=7 xshortbxxBMON=8 xshortccBMON=9 xeatoaxBMON=10 xeatodxBMON=11 xdxtoeaBMON=12 xiwordtoccrBMON=13 xiwordtosrBMON=14 xiwordBMON=15 xccodewordrelBMON=16 xinibtoeaBMON=17 xccodeeaBMON=18 xsrceaBMON=19 xsize67eatodxBMON=20 xsize8eatoax9bBMON=21 xsize67adsbxBMON=22 xsize67ixtoeaBMON=23 xsize67i9btoeaBMON=24 xsize67x9btodx02BMON=25 xitrapBMON=26 xsrcdx02BMON=27 ximuspBMON=28 ximoveBMON=29 ximoveqBMON=30 xicmpmBMON=31 xxbcdBMON=32 xsize6movepBMON=33 ximovemBMON=34 xdx9btodx02BMON=35 xax9btoax02BMON=36 xdx9btoax02BMON=37 xiunlkBMON=38 xilinkBMON=39 ximovecBMON=40 xccrtoeaBMON=41 xmovesBMON=42 xbfieldBMON=43 xbfieldtodxBMON=44 xdxtobfieldBMON=45 xbkptBMON=46 xlongbxxBMON=47 xlongccBMON=48 xcallmBMON=49 xcasBMON=50 xcas2BMON=51 xchk2BMON=52 xcmp2BMON=53 xrx03BMON=54 xccodeBMON=55 xccodesizeBMON=56 xilinklgBMON=57 xmululBMON=58 xmulslBMON=59 xdivullBMON=60 xdivsllBMON=61 xpackBMON=62 xea2todxBMON=63 ;chk.l xfccodeBMON=64 xfccodesizeBMON=65 xfccodewordrelBMON=66 xfccodeeaBMON=67 xfnopBMON=68 xfmovecrBMON=69 xpmoveBMON=70 xpmovefdBMON=71 xpflushaBMON=72 xpflushBMON=73 xploadBMON=74 xptestBMON=75 xidbcacBMON=76 xidbindBMON=77 xmov16BMON=78 xpccodeeaBMON=79 xpccodewordrelBMON=80 xpccodeBMON=81 xpccodesizeBMON=82 xbrapccBMON=83 xbrafccBMON=84 xpflushsBMON=85 xpflushrBMON=86 xpvalidBMON=87 xpflush40BMON=88 xmov162BMON=89 xlpstopBMON=90 xtblBMON=91 xfpuBMON=92 xfmovelBMON=93 xfmovemlBMON=94 xfmovemxBMON=95 endc ;--------------------------------------------------------------- assoffsBMON:dc.w aopfailBMON,anoopsBMON,adcwopBMON,aeatoccrBMON,aeatosrBMON,asrtoeaBMON dc.w awordbxxBMON,awordccBMON dc.w ashortbxxBMON,ashortccBMON,aeatoaxBMON,aeatodxBMON,adxtoeaBMON,aiwordtoccrBMON dc.w aiwordtosrBMON,aiwordBMON,accodewordrelBMON,ainibtoeaBMON,accodeeaBMON,asrceaBMON dc.w asize67eatodxBMON,asize8eatoax9bBMON,asize67adsbxBMON,asize67ixtoeaBMON dc.w asize67i9btoeaBMON,asize67x9btodx02BMON,aitrapBMON,asrcdx02BMON,aimuspBMON dc.w aimoveBMON,aimoveqBMON,aicmpmBMON,axbcdBMON,asize6movepBMON dc.w aimovemBMON,adx9btodx02BMON,aax9btoax02BMON,adx9btoax02BMON dc.w aiunlkBMON,ailinkBMON,aimovecBMON,accrtoeaBMON,aimovesBMON,abfieldBMON,abfieldtodxBMON dc.w adxtobfieldBMON,abkptBMON,alongbxxBMON,alongccBMON,aicallmBMON,acasBMON,acas2BMON dc.w achk2BMON,acmp2BMON,artmBMON,atpccBMON,atpccsizeBMON,alinklgBMON,amululBMON,amulslBMON dc.w adivullBMON,adivsllBMON,apackBMON,aea2todxBMON,atpfccBMON,atpfccsizeBMON dc.w afccodewordrelBMON,afccodeeaBMON,afnopBMON,afmovecrBMON,apmoveBMON,apmovefdBMON dc.w apflushaBMON,apflushBMON,aploadBMON,aptestBMON,aidbcacBMON,aidbindBMON,amov16BMON dc.w apccodeeaBMON,apccodewordrelBMON,atppccBMON,atppccsizeBMON,abrapccBMON,abrafccBMON dc.w apflushsBMON,apflushrBMON,apvalidBMON,apflush40BMON,amov162BMON,alpstopBMON dc.w atblBMON,afpuBMON,afmovelBMON,afmovemlBMON,afmovemxBMON ;--------------------------------------------------------------- assubsBMON: aopfailBMON=*-assubsBMON anoopsBMON=*-assubsBMON rts adcwopBMON=*-assubsBMON bsr.w atoword_BMON move.w d0,op68000 rts aeatoccrBMON=*-assubsBMON sf imsizeBMON bsr.w asseaBMON lea toccrtxtBMON(pc),a0 bra.w cmptxtBMON aeatosrBMON=*-assubsBMON move.b #1,imsizeBMON bsr.w asseaBMON lea tosrtxtBMON(pc),a0 bra.w cmptxtBMON accrtoeaBMON=*-assubsBMON lea ccrtxtBMON(pc),a0 bra.b assreaBMON asrtoeaBMON=*-assubsBMON lea srtxtBMON(pc),a0 assreaBMON: bsr.w cmptxtBMON bra.w asstoeaBMON abrapccBMON=*-assubsBMON bsr.w asspccodeBMON bra.b abraf0BMON abrafccBMON=*-assubsBMON bsr.w assfccodeBMON abraf0BMON: or.w d0,op68000 cmp.b #".",(a3)+ bne.w failBMON cmp.b #"w",(a3)+ beq.b awdcc0BMON bset #6,op68000+1 ;long cmp.b #"l",-1(a3) beq.b algcc0BMON bra.b awdbxx1BMON ;failBMON awordccBMON=*-assubsBMON bsr.w assccodeBMON cmp.b #".",(a3)+ bne.b awdbxx1BMON ;failBMON cmp.b #"w",(a3)+ ;bxx.w bne.b awdbxx1BMON ;failBMON awdcc0BMON: bsr.w asstabBMON awordbxxBMON=*-assubsBMON awdrelBMON: bsr.w atolong_BMON subq.l #2,d0 sub.l lginstrBMON,d0 ;fdbx dx,lab... sub.l paraBMON,d0 move.l d0,d1 ;beq.b awdbxx1BMON ;beq.w *+2 bpl.b awdbxx0BMON not.l d1 awdbxx0BMON:cmp.l #$7fff,d1 bhi.b awdbxx1BMON bra.w storewordBMON awdbxx1BMON:sf d7 rts alongccBMON=*-assubsBMON bsr.w assccodeBMON cmp.b #".",(a3)+ bne.b awdbxx1BMON ;failBMON cmp.b #"l",(a3)+ ;bxx.l bne.b awdbxx1BMON ;failBMON algcc0BMON: bsr.w asstabBMON alongbxxBMON=*-assubsBMON bsr.w atolong_BMON subq.l #2,d0 sub.l paraBMON,d0 bra.w storelongBMON ashortccBMON=*-assubsBMON bsr.w assccodeBMON cmp.b #".",(a3)+ bne.b ashbxx1BMON ;failBMON moveq #"b",d0 sub.b (a3)+,d0 beq.b ashort0BMON cmp.b #"b"-"s",d0 ;clone bne.b ashbxx1BMON ;failBMON ashort0BMON:bsr.w asstabBMON ashortbxxBMON=*-assubsBMON ashbxxBMON: bsr.w atolong_BMON subq.l #2,d0 sub.l paraBMON,d0 or.b d0,op68000+1 beq.b ashbxx1BMON bpl.b ashbxx0BMON not.l d0 ashbxx0BMON:moveq #$7f,d1 cmp.l d1,d0 bls.b ashbxx2BMON ashbxx1BMON:sf d7 ashbxx2BMON:rts aeatoaxBMON=*-assubsBMON bsr.w asseaBMON bra.w asstoax9bBMON aea2todxBMON=*-assubsBMON move.b #2,imsizeBMON bra.b aea2dxBMON aeatodxBMON=*-assubsBMON move.b #1,imsizeBMON aea2dxBMON: asize67eatodxBMON=*-assubsBMON bsr.w asseaBMON bra.w asstodx9bBMON adxtoeaBMON=*-assubsBMON bsr.w assdx9bBMON bra.w asstoeaBMON aiwordtoccrBMON=*-assubsBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w atobyte_BMON bsr.w storewordBMON lea toccrtxtBMON(pc),a0 bra.w cmptxtBMON aiwordtosrBMON=*-assubsBMON bsr.b aiwrdBMON lea tosrtxtBMON(pc),a0 bra.w cmptxtBMON aiwordBMON=*-assubsBMON aiwrdBMON: cmp.b #"#",(a3)+ bne.w failBMON bsr.w atoword_BMON bra.w storewordBMON alpstopBMON=*-assubsBMON move.w #$01c0,d0 bsr.w storeinstrBMON bra.b aiwrdBMON atblBMON=*-assubsBMON moveq #0,d0 ;unsigned moveq #"u",d1 sub.b (a3)+,d1 beq.b atbluBMON add.b #"s"-"u",d1 bne.w failBMON bset #11,d0 ;signed atbluBMON: cmp.b #"n",(a3) bne.b atblnBMON bset #10,d0 ;round addq.w #1,a3 atblnBMON: cmp.b #".",(a3)+ bne.w failBMON moveq #"b",d1 sub.b (a3)+,d1 beq.b atblbBMON bset #6,d0 cmp.b #"b"-"w",d1 beq.b atblbBMON cmp.b #"b"-"l",d1 bne.w failBMON eor.b #%11000000,d0 atblbBMON: bsr.w storeinstrBMON bsr.w asstabBMON cmp.b #"d",(a3)+ bne.b atbleaBMON bsr.w assxx02BMON cmp.b #":",(a3)+ bne.w failBMON bsr.w assdn02BMON or.b d0,op68000+3 bra.b atbldBMON atbleaBMON: subq.w #1,a3 bsr.w asseaBMON bset #0,op68000+2 atbldBMON: cmp.b #",",(a3)+ bne.w failBMON bsr.w assdn02BMON rol.w #4,d0 or.b d0,op68000+2 rts afpuBMON=*-assubsBMON sf d7 rts afmovemxBMON=*-assubsBMON moveq #0,d0 bsr.w storeinstrBMON cmp.b #"d",(a3) beq.b afmvmx0BMON ;dynamic mask cmp.b #"f",(a3) beq.b afmvmx0BMON bsr asseaBMON cmp.b #",",(a3)+ bne.w failBMON bra assfprxBMON afmvmx0BMON:bset #13-8,op68000+2 bsr assfprxBMON bsr asstoeaBMON moveq #%111000,d0 and.w op68000,d0 beq.w failBMON ;dn cmp.b #%001000,d0 ;an beq.w failBMON cmp.b #%111100,d0 ;# beq.w failBMON cmp.b #%100000,d0 ;-(an)? bne.b afmvmx1BMON move.b op68000+3,d1 ;rl moveq #8-1,d0 afmvmx2BMON:lsr.b #1,d1 roxl.b #1,d2 dbf d0,afmvmx2BMON move.b d2,op68000+3 bclr #12-8,op68000+2 ;predec mode afmvmx1BMON:rts afmovemlBMON=*-assubsBMON st d5 bra.b afmovemBMON afmovelBMON=*-assubsBMON sf d5 ;fmovem flag afmovemBMON:moveq #0,d4 ;fpcr counter move.w #$8000,d0 bsr.w storeinstrBMON move.b #%010,imsizeBMON ;long pea fpiar0BMON(pc) ;fpiar,An check cmp.b #"f",(a3) bne.b afpcr1BMON bset #13-8,op68000+2 bsr.b afpcrBMON bra asstoeaBMON afpcr1BMON: bsr asseaBMON cmp.b #",",(a3)+ bne.b fpfailBMON afpcrBMON: cmp.b #"f",(a3)+ bne.b fpfailBMON cmp.b #"p",(a3)+ bne.b fpfailBMON moveq #12,d2 cmp.b #"c",(a3) beq.b afpcr0BMON moveq #11,d2 cmp.b #"s",(a3) beq.b afpcr0BMON moveq #10,d2 cmp.b #"i",(a3)+ bne.b fpfailBMON cmp.b #"a",(a3) bne.b fpfailBMON afpcr0BMON: addq.w #1,a3 cmp.b #"r",(a3)+ bne.b fpfailBMON bset d2,op68000+2 addq.b #1,d4 ;fpcr counter cmp.b #"/",(a3) bne.b afpcr2BMON tst.b d5 ;fmovem flag beq.b fpfailBMON addq.w #1,a3 bra.b afpcrBMON afpcr2BMON: rts fpiar0BMON: moveq #%111000,d0 and.b op68000+1,d0 ;ea field bne.b fpiar1BMON ;Dn? cmp.b #1,d4 ;1 fpcr? bne.b fpfailBMON fpiar1BMON: subq.b #%001000,d0 ;An bne.b fpcrokBMON cmp.b #1,d4 ;1 fpcr? bne.b fpfailBMON btst #10-8,op68000+2 ;fpiar? bne.b fpcrokBMON fpfailBMON: sf d7 fpcrokBMON: rts afmovecrBMON=*-assubsBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w atobyte_BMON beq.b amfk0BMON cmp.b #$3f,d0 bhi.w failBMON cmp.b #$0b,d0 bcs.w failBMON cmp.b #$0f,d0 bls.b amfk0BMON cmp.b #$30,d0 bcs.w failBMON amfk0BMON: or.w #$5c00,d0 bsr.w storewordBMON bra.w asstofpx79BMON assfprxBMON:move.w #$d000,d0 ;postincr/cntrl mode cmp.b #"d",(a3) ;dynamic mask? bne.b arxmvm2BMON addq.w #1,a3 move.b (a3)+,d0 sub.b #"0",d0 bcs.w arxfailBMON cmp.b #7,d0 bhi.w arxfailBMON lsl.b #4,d0 bset #11,d0 ;dynamic bra.b arxmvm1BMON arxmvm2BMON:cmp.b #"f",(a3)+ bne.b arxfailBMON cmp.b #"p",(a3)+ bne.b arxfailBMON move.b (a3)+,d1 sub.b #"0",d1 bcs.b arxfailBMON cmp.b #7,d1 bhi.b arxfailBMON moveq #7,d3 sub.b d1,d3 bset d3,d0 arxmvm4BMON:cmp.b #",",(a3) beq.b arxmvm1BMON cmp.b #"/",(a3)+ beq.b arxmvm2BMON cmp.b #"-",-1(a3) bne.b arxmvm1BMON cmp.b #"f",(a3)+ bne.b arxfailBMON cmp.b #"p",(a3)+ bne.b arxfailBMON move.b (a3)+,d2 sub.b #"0",d2 bcs.b arxfailBMON cmp.b #7,d2 bhi.b arxfailBMON cmp.b d1,d2 bls.b arxfailBMON arxmvm3BMON:addq.b #1,d1 moveq #7,d3 sub.b d1,d3 bset d3,d0 cmp.b d1,d2 bne.b arxmvm3BMON bra.b arxmvm4BMON arxmvm1BMON:or.w d0,op68000+2 rts arxfailBMON:bra failBMON apccodewordrelBMON=*-assubsBMON bsr.w asspccodeBMON bra.b accode1BMON afccodewordrelBMON=*-assubsBMON bsr.w assfccodeBMON accode1BMON:bsr.w storeinstrBMON ;instrBMON bra.b accode0BMON ;4bytes instrlen ok (oma bug) accodewordrelBMON=*-assubsBMON bsr.w assccodeBMON accode0BMON:bsr.w asstabBMON bsr.w assdx02BMON cmp.b #",",(a3)+ beq.w awdrelBMON sf d7 rts ainibtoeaBMON=*-assubsBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w atodnibBMON cmp.b #31,d0 bhi.w failBMON bsr.w storeinstrBMON bra.w asstoeaBMON apccodeeaBMON=*-assubsBMON bsr.w asspccodeBMON bra.b asrc1BMON afccodeeaBMON=*-assubsBMON bsr.w assfccodeBMON asrc1BMON: bsr.w storeinstrBMON bra.b asrc0BMON accodeeaBMON=*-assubsBMON bsr.w assccodeBMON asrc0BMON: bsr.w asstabBMON asrceaBMON=*-assubsBMON bra.w asseaBMON aimovesBMON=*-assubsBMON bsr.w storeinstrBMON ;space moveq #0,d3 cmp.b #",",2(a3) ;xx, bne.b actlmvsBMON bset #11,d3 bsr.w amvcregBMON addq.w #1,a3 bsr.w asseaBMON bra.b aimvs0BMON actlmvsBMON:bsr.w asseaBMON cmp.b #",",(a3)+ bne.w failBMON bsr.w amvcregBMON aimvs0BMON: move.w d3,op68000+2 rts asize8eatoax9bBMON=*-assubsBMON bsr.w asseaBMON bra.w asstoax9bBMON asize67ixtoeaBMON=*-assubsBMON cmp.b #"#",(a3) bne.w failBMON bsr.w asseaBMON ;#$xx.x bra.w asstoeaBMON ;clr previous ea ! asize67i9btoeaBMON=*-assubsBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w atobyteBMON beq.w failBMON cmp.b #8,d0 bhi.w failBMON bne.b ai9b0BMON sf d0 ai9b0BMON: add.b d0,d0 or.b d0,op68000 bra.w asstoeaBMON asize67x9btodx02BMON=*-assubsBMON cmp.b #"#",(a3)+ bne.b ashft0BMON bsr.w atobyteBMON beq.w failBMON cmp.b #8,d0 bhi.w failBMON bne.b ashft1BMON sf d0 ashft1BMON: add.b d0,d0 or.b d0,op68000 bra.w asstodx02BMON ashft0BMON: bset #5,op68000+1 subq.w #1,a3 bsr.w assdx9bBMON bra.w asstodx02BMON aitrapBMON=*-assubsBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w atodnibBMON cmp.b #15,d0 bhi.w failBMON or.b d0,op68000+1 rts asrcdx02BMON=*-assubsBMON bra.w assdx02BMON aimuspBMON=*-assubsBMON lea usptxtBMON(pc),a0 cmp.b #"a",(a3) beq.b aimusp0BMON bset #3,op68000+1 bsr.b aimusp1BMON cmp.b #",",(a3)+ bra.w assax02BMON aimusp0BMON:bsr.w assax02BMON cmp.b #",",(a3)+ bne.w failBMON aimusp1BMON:bra.w cmptxtBMON apmovefdBMON=*-assubsBMON ;68030mmu only move.w #$0100,d0 bsr.b apmvfdBMON move.w op68000+2,d0 cmp.w #$4100,d0 ;40:tc beq.w apfdokBMON eor.w #%0000100100000000,d0 ;08:tt0,0c:tt1,48:srp,4c:crp and.w #%1011101111111111,d0 bne.w failBMON apfdokBMON: rts apmoveBMON=*-assubsBMON bsr.b apregBMON move.l a1,a3 ;restore ptr tas d7 ;failBMON?, ignore failBMON beq.b afromeaBMON apmv2eaBMON:move.w #$200,d0 bsr.w storeinstrBMON bsr.b apregBMON bra.w asstoeaBMON afromeaBMON:moveq #0,d0 apmvfdBMON: bsr.w storeinstrBMON bsr.w asseaBMON cmp.b #",",(a3)+ bne.w failBMON apregBMON: lea pregsBMON(pc),a0 move.l a3,a1 aprglpBMON: move.b (a0)+,d1 beq.w failBMON aprgcmpBMON:moveq #$7f,d0 and.b (a0),d0 cmp.b (a3)+,d0 bne.b aprgskpBMON tst.b (a0)+ bpl.b aprgcmpBMON bra.b aprokBMON aprgskpBMON:tst.b (a0)+ bpl.b aprgskpBMON move.l a1,a3 bra.b aprglpBMON aprokBMON: or.b d1,op68000+2 rts aidbcacBMON=*-assubsBMON aidb3BMON: move.b (a3)+,d1 cmp.b #"c",(a3)+ bne.b aidb2BMON moveq #4-1,d0 lea idctxBMON(pc),a0 aidb1BMON: cmp.b (a0,d0.w),d1 beq.b aidb0BMON dbf d0,aidb1BMON aidb2BMON: bra.w failBMON aidb0BMON: lsl.w #6,d0 or.w d0,op68000 rts aidbindBMON=*-assubsBMON bsr.b aidb3BMON cmp.b #",",(a3)+ bne.w failBMON apflush40BMON=*-assubsBMON cmp.b #"(",(a3)+ bne.w failBMON bsr.w assax02BMON cmp.b #")",(a3)+ bne.w failBMON rts aimovecBMON=*-assubsBMON moveq #0,d3 cmp.b #"t",(a3) ;movec tc, (68040) beq.b actlmvcBMON cmp.b #",",2(a3) ;xx,xxx(x) bne.b actlmvcBMON bset #0,op68000+1 bsr.b amvcregBMON addq.w #1,a3 ;cmp.b #",",(a3)+ bne.w failBMON bsr.b actrlmvBMON bra.b aimvc0BMON actlmvcBMON:bsr.b actrlmvBMON cmp.b #",",(a3)+ bne.w failBMON bsr.b amvcregBMON aimvc0BMON: move.w d3,d0 bra.w storewordBMON actrlmvBMON:lea cregsBMON-6(pc),a2 actrl1BMON: addq.w #6,a2 tst.b (a2) bmi.w actrl4BMON moveq #0,d1 actrl2BMON: move.b 2(a2,d1.w),d0 beq.b actrl0BMON cmp.b (a3,d1.w),d0 bne.b actrl1BMON addq.b #1,d1 cmp.b #4,d1 bne.b actrl2BMON actrl0BMON: or.w (a2),d3 add.w d1,a3 rts actrl4BMON: sf d7 ;failBMON rts amvcregBMON:move.b (a3)+,d0 cmp.b #"d",d0 beq.b mvcdxBMON bset #15,d3 ;ax cmp.b #"a",d0 bne.w actrl4BMON mvcdxBMON: bsr.w assrn02BMON ror.w #4,d0 or.w d0,d3 ;ax/dx rts abfieldtodxBMON=*-assubsBMON bsr.b abfi3BMON cmp.b #",",(a3)+ bne.w failBMON cmp.b #"d",(a3)+ bne.w failBMON moveq #0,d3 bsr.b mvcdxBMON or.w d3,op68000+2 rts adxtobfieldBMON=*-assubsBMON cmp.b #"d",(a3)+ bne.w failBMON moveq #0,d3 bsr.b mvcdxBMON cmp.b #",",(a3)+ bne.w failBMON bsr.b abfi3BMON or.w d3,op68000+2 rts abfieldBMON=*-assubsBMON abfi3BMON: bsr.w storeinstrBMON bsr.w asseaBMON cmp.b #"{",(a3)+ bne.w failBMON bsr.b abfi2BMON and.w #%111111,d0 lsl.w #6,d0 move.w d0,d2 cmp.b #":",(a3)+ bne.w failBMON bsr.b abfi2BMON and.w #%111111,d0 or.w d2,d0 cmp.b #"}",(a3)+ bne.w failBMON move.w d0,op68000+2 rts abfi2BMON: cmp.b #"d",(a3) beq.b abfi1BMON bsr.w atodnibBMON beq.w failBMON cmp.b #32,d0 bhi.w failBMON bclr #5,d0 ;bitfield32=0 rts abfi1BMON: addq.w #1,a3 move.b (a3)+,d0 sub.b #"0",d0 bcs.w failBMON cmp.b #7,d0 bhi.w failBMON bset #5,d0 rts abkptBMON=*-assubsBMON cmp.b #"#",(a3)+ bne.w failBMON bra.w assxx02BMON apackBMON=*-assubsBMON cmp.b #"-",(a3) bne.b apadxBMON addq.w #1,a3 cmp.b #"(",(a3)+ bne.w failBMON bsr.w assax02BMON lea xbcdtxtBMON(pc),a0 bsr.w cmptxtBMON bsr.w assax9bBMON cmp.b #")",(a3)+ bne.w failBMON bset #3,op68000+1 bra.b apad0BMON apadxBMON: bsr.w assdx02BMON bsr.w asstodx9bBMON apad0BMON: cmp.b #",",(a3)+ bne.w failBMON bra.w aiwrdBMON amov16BMON=*-assubsBMON cmp.b #"(",(a3)+ bne.w failBMON bsr.w assax02BMON lea cmpmtxtBMON(pc),a0 bsr.w cmptxtBMON bsr.w assan02BMON ror.w #4,d0 or.w #$8000,d0 bra.w storeinstrBMON amov162BMON=*-assubsBMON cmp.b #"a",1(a3) ;(ax) bne.b amov0BMON cmp.b #"(",(a3)+ bne.w failBMON bsr.w assax02BMON cmp.b #")",(a3)+ bne.w failBMON moveq #%000000,d1 cmp.b #"+",(a3)+ beq.b amov1BMON subq.w #1,a3 moveq #%010000,d1 amov1BMON: cmp.b #",",(a3)+ bne.w failBMON or.b d1,op68000+1 amov2BMON: move.w op68000,-(a7) bsr.w asseaBMON moveq #%111111,d0 and.w op68000,d0 move.w (a7)+,op68000 cmp.w #%111001,d0 bne.w failBMON rts amov0BMON: bsr.b amov2BMON cmp.b #",",(a3)+ bne.w failBMON cmp.b #"(",(a3)+ bne.w failBMON bsr.w assax02BMON cmp.b #")",(a3)+ bne.w failBMON moveq #%001000,d1 cmp.b #"+",(a3)+ beq.b amov3BMON moveq #%011000,d1 amov3BMON: or.b d1,op68000+1 rts aimoveBMON=*-assubsBMON moveq #%01,d0 sf imsizeBMON cmp.b #"b",(a3) beq.b aimov0BMON moveq #%11,d0 addq.b #1,imsizeBMON cmp.b #"w",(a3) beq.b aimov0BMON moveq #%10,d0 addq.b #1,imsizeBMON cmp.b #"l",(a3) bne.w failBMON aimov0BMON: lsl.b #4,d0 or.b d0,op68000 addq.w #1,a3 bsr.w asstabBMON bsr.w asseaBMON move.w op68000,-(a7) bsr.w asstoeaBMON move.w op68000,d1 move.w (a7)+,op68000 move.w d1,d0 and.w #%111,d0 ror.w #7,d0 or.w d0,op68000 and.w #%111000,d1 lsl.w #3,d1 or.w d1,op68000 rts aimoveqBMON=*-assubsBMON sf imsizeBMON bsr.w asseaBMON move.w op68000,d0 clr.l oplen and.w #%111111,d0 ;#x cmp.w #%111100,d0 bne.w failBMON move.b op68000+3,op68000+1 bra.w asstodx9bBMON aicallmBMON=*-assubsBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w atobyte_BMON ;d0.l bsr.w storeinstrBMON bra.w asstoeaBMON acasBMON=*-assubsBMON bsr.b assdn02BMON move.w d0,d2 cmp.b #",",(a3)+ bne.w failBMON bsr.b assdn02BMON lsl.w #6,d0 or.w d2,d0 bsr.w storeinstrBMON bra.w asstoeaBMON assan02BMON:cmp.b #"a",(a3)+ bne.w failBMON bra.b assrn02BMON assdn02BMON:cmp.b #"d",(a3)+ bne.w failBMON assrn02BMON:move.b (a3)+,d0 sub.b #"0",d0 bcs.w failBMON cmp.b #7,d0 bhi.w failBMON ext.w d0 rts acas2BMON=*-assubsBMON cmp.b #"w",(a3) beq.b aca0BMON cmp.b #"l",(a3) bne.w failBMON bset #9-8,op68000 aca0BMON: addq.w #1,a3 bsr.w asstabBMON bsr.b assdn02BMON swap d0 cmp.b #":",(a3)+ bne.b cas2flBMON bsr.b assdn02BMON move.l d0,d1 cmp.b #",",(a3)+ bne.b cas2flBMON bsr.b assdn02BMON swap d0 cmp.b #":",(a3)+ bne.b cas2flBMON bsr.b assdn02BMON lsl.l #6,d0 or.l d0,d1 cmp.b #",",(a3)+ bne.b cas2flBMON cmp.b #"(",(a3)+ bne.b cas2flBMON moveq #0,d3 bsr.w amvcregBMON cmp.b #")",(a3)+ bne.b cas2flBMON cmp.b #":",(a3)+ bne.b cas2flBMON cmp.b #"(",(a3)+ bne.b cas2flBMON swap d3 bsr.w amvcregBMON cmp.b #")",(a3)+ bne.b cas2flBMON or.l d1,d3 move.l d3,d0 bra.w storelongBMON cas2flBMON: sf d7 rts achk2BMON=*-assubsBMON move.w #$0800,d3 bra.b achkcmpBMON acmp2BMON=*-assubsBMON moveq #0,d3 achkcmpBMON:bsr.w storeinstrBMON bsr.w asseaBMON cmp.b #",",(a3)+ bne.b cas2flBMON bsr.w amvcregBMON ;or.w ?,d3 move.w d3,op68000+2 rts artmBMON=*-assubsBMON moveq #0,d3 bsr.w amvcregBMON rol.w #4,d3 or.w d3,op68000 ;0000ynnn rts atppccsizeBMON=*-assubsBMON bsr.w asspccodeBMON bra.b atpc2BMON atpfccsizeBMON=*-assubsBMON bsr.w assfccodeBMON atpc2BMON: bsr.w storeinstrBMON bra.b atpc1BMON atpccsizeBMON=*-assubsBMON bsr.w assccodeBMON atpc1BMON: cmp.b #".",(a3)+ bne.w failBMON move.b (a3)+,d0 bsr.w asstabBMON cmp.b #"w",d0 beq.w aiwrdBMON cmp.b #"l",d0 bne.w failBMON bset #0,op68000+1 atpc0BMON: cmp.b #"#",(a3)+ bne.w failBMON bsr.w atolong_BMON bra.w storelongBMON atpccBMON=*-assubsBMON bsr.w assccodeBMON cmp.b #" ",(a3)+ bne.w failBMON rts apvalidBMON=*-assubsBMON bsr.w assan02BMON or.w #$2c00,d0 bsr.b afstoreBMON bra.w asstoeaBMON atppccBMON=*-assubsBMON bsr.w asspccodeBMON bra.b afst0BMON atpfccBMON=*-assubsBMON bsr.w assfccodeBMON afst0BMON: cmp.b #" ",(a3)+ bne.w failBMON afstoreBMON:bra.w storeinstrBMON afnopBMON=*-assubsBMON moveq #0,d0 ;4byte command bra.b afstoreBMON apflushaBMON=*-assubsBMON move.w #$2400,d0 bra.b afstoreBMON apflushrBMON=*-assubsBMON move.w #$a000,d0 bsr.b afstoreBMON bra.w asseaBMON apflushsBMON=*-assubsBMON move.w #$3400,d3 bra.b apfl3BMON apflushBMON=*-assubsBMON move.w #$3000,d3 apfl3BMON: move.b (a3)+,d2 cmp.b #"f",(a3) bne.b apfl1BMON addq.w #1,a3 cmp.b #"c",(a3)+ bne.w failBMON moveq #%00000000,d1 cmp.b #"s",d2 beq.b apfl2BMON moveq #%00000001,d1 cmp.b #"d",d2 beq.b apfl2BMON bra.w failBMON apfl1BMON: moveq #%00010000,d1 moveq #"#",d0 sub.b d2,d0 beq.b apfl0BMON cmp.b #"#"-"d",d0 bne.w failBMON moveq #%00001000,d1 apfl0BMON: bsr.w assrn02BMON or.w d0,d1 apfl2BMON: cmp.b #",",(a3)+ bne.w failBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w assrn02BMON lsl.w #5,d0 or.w d1,d0 or.w d3,d0 ;$3000|$3400 bra.b afstoreBMON aploadBMON=*-assubsBMON move.w #$2010,d1 apte0BMON: moveq #"w",d0 sub.b (a3)+,d0 beq.b aplo0BMON bset #9,d1 subq.b #"w"-"r",d0 bne.w failBMON aplo0BMON: bsr.w asstabBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w assrn02BMON or.w d1,d0 bsr.w afstoreBMON bra.w asstoeaBMON aptestBMON=*-assubsBMON move.w #$8110,d1 bsr.b apte0BMON cmp.b #",",(a3)+ bne.w failBMON cmp.b #"#",(a3)+ bne.w failBMON bsr.w assrn02BMON ror.w #6,d0 beq.w failBMON ;level 0? move.w d0,d1 cmp.b #",",(a3)+ bne.w failBMON cmp.b #"a",(a3)+ bne.w failBMON bsr.w assrn02BMON rol.w #5,d0 or.w d1,d0 or.w d0,op68000+2 rts adivsllBMON=*-assubsBMON move.w #$800,d0 bra.b adivs0BMON adivullBMON=*-assubsBMON moveq #0,d0 adivs0BMON: bsr.w storeinstrBMON move.b #%10,imsizeBMON bsr.w asseaBMON cmp.b #",",(a3)+ bne.w failBMON bsr.w assdn02BMON ;d0.w move.w d0,d3 cmp.b #":",(a3)+ bne.w failBMON bsr.w assdn02BMON cmp.b d0,d3 beq.w failBMON bra.b notwoBMON amulslBMON=*-assubsBMON move.w #$800,d0 bra.b amuls0BMON amululBMON=*-assubsBMON moveq #0,d0 amuls0BMON: bsr.w storeinstrBMON move.b #%10,imsizeBMON bsr.w asseaBMON cmp.b #",",(a3)+ bne.w failBMON bsr.w assdn02BMON ;d0.w move.w d0,d3 cmp.b #":",(a3)+ bne.b notwoBMON bset #10,d3 bsr.w assdn02BMON notwoBMON: ror.w #4,d0 ;mulx.l ea,dm:dm=dn or.w d0,d3 or.w d3,op68000+2 rts aicmpmBMON=*-assubsBMON cmp.b #"(",(a3)+ bne.w failBMON bsr.w assax02BMON lea cmpmtxtBMON(pc),a0 bsr.w cmptxtBMON bsr.w assax9bBMON cmp.b #")",(a3)+ bne.w failBMON cmp.b #"+",(a3)+ bne.w failBMON rts asize67adsbxBMON=*-assubsBMON ;same! axbcdBMON=*-assubsBMON aasxbcdBMON:cmp.b #"-",(a3)+ bne.b axbcd0BMON bset #3,op68000+1 cmp.b #"(",(a3)+ bne.b axbcd2BMON ;failBMON bsr.w assax02BMON lea xbcdtxtBMON(pc),a0 bsr.w cmptxtBMON bsr.w assax9bBMON cmp.b #")",(a3)+ beq.b axbcd1BMON ;no failBMON axbcd2BMON: sf d7 axbcd1BMON: rts axbcd0BMON: subq.w #1,a3 bsr.w assdx02BMON bra.w asstodx9bBMON asize6movepBMON=*-assubsBMON cmp.b #"d",(a3) beq.b amovp0BMON bsr.w asseaBMON move.w op68000,d0 bclr #5,op68000+1 and.w #%111000,d0 cmp.w #%101000,d0 bne.w failBMON bra.w asstodx9bBMON amovp0BMON: bset #7,op68000+1 bsr.w assdx9bBMON bsr.w asstoeaBMON move.w op68000,d0 bclr #5,op68000+1 and.w #%111000,d0 cmp.w #%101000,d0 bne.w failBMON rts aimovemBMON=*-assubsBMON moveq #0,d0 bsr storeinstrBMON cmp.b #"d",(a3) beq.b aimovm0BMON cmp.b #"a",(a3) beq.b aimovm0BMON bset #10-8,op68000 bsr.w asseaBMON cmp.b #",",(a3)+ bne.w failBMON bsr.b assrxBMON bra.b aimovm7BMON aimovm0BMON:bsr.b assrxBMON bsr.w asstoeaBMON aimovm7BMON:moveq #%111000,d0 and.w op68000,d0 cmp.w #%100000,d0 ;-(an) bne.b aimovm8BMON move.w op68000+2,d1 ;rl moveq #16-1,d0 aimovm9BMON:lsr.w #1,d1 roxl.w #1,d2 dbf d0,aimovm9BMON move.w d2,op68000+2 aimovm8BMON:rts assrxBMON: clr.w d0 aimovm2BMON:move.b 1(a3),d1 sub.b #"0",d1 bcs.w failBMON cmp.b #7,d1 bhi.w failBMON cmp.b #"d",(a3) beq.b aimovm5BMON cmp.b #"a",(a3) bne.w failBMON addq.b #8,d1 aimovm5BMON:addq.w #2,a3 bset d1,d0 aimovm4BMON:cmp.b #",",(a3) beq.b aimovm1BMON cmp.b #"/",(a3)+ beq.b aimovm2BMON cmp.b #"-",-1(a3) bne.b aimovm1BMON move.b 1(a3),d2 sub.b #"0",d2 bcs.w failBMON cmp.b #7,d2 bhi.w failBMON cmp.b #"d",(a3) beq.b aimovm6BMON cmp.b #"a",(a3) bne.w failBMON addq.b #8,d2 aimovm6BMON:addq.w #2,a3 cmp.b d1,d2 bls.w failBMON aimovm3BMON:addq.b #1,d1 bset d1,d0 cmp.b d1,d2 bne.b aimovm3BMON bra.b aimovm4BMON aimovm1BMON:move.w d0,op68000+2 rts adx9btodx02BMON=*-assubsBMON bsr.b assdx9bBMON bra.w asstodx02BMON aax9btoax02BMON=*-assubsBMON bsr.b assax9bBMON bra.b asstoax02BMON adx9btoax02BMON=*-assubsBMON bsr.b assdx9bBMON bra.b asstoax02BMON aiunlkBMON=*-assubsBMON bra.b assax02BMON alinklgBMON=*-assubsBMON bsr.b assax02BMON cmp.b #",",(a3)+ bne.w failBMON bra.w atpc0BMON ailinkBMON=*-assubsBMON bsr.b assax02BMON cmp.b #",",(a3)+ bne.w failBMON bra.w aiwrdBMON asstoax9bBMON:cmp.b #",",(a3)+ bne.w failBMON assax9bBMON:cmp.b #"a",(a3)+ beq.b assxx9bBMON bra.w failBMON asstodx9bBMON:cmp.b #",",(a3)+ bne.w failBMON assdx9bBMON:cmp.b #"d",(a3)+ bne.w failBMON assxx9bBMON:move.b (a3)+,d0 sub.b #"0",d0 bcs.w failBMON cmp.b #7,d0 bhi.w failBMON lsl.w #8,d0 add.w d0,d0 ;asl.w #1,d0 or.w d0,op68000 rts asstoax02BMON:cmp.b #",",(a3)+ bne.w failBMON assax02BMON:cmp.b #"a",(a3)+ bne.w failBMON bra.b assxx02BMON asstodx02BMON:cmp.b #",",(a3)+ bne.w failBMON assdx02BMON:cmp.b #"d",(a3)+ bne.w failBMON assxx02BMON:move.b (a3)+,d0 sub.b #"0",d0 bcs.w failBMON cmp.b #7,d0 bhi.w failBMON or.b d0,op68000+1 rts ifnd failBMON failBMON: sf d7 rts endc asstofpx79BMON: cmp.b #",",(a3)+ bne.w failBMON assfpx79BMON:cmp.b #"f",(a3)+ bne.w failBMON cmp.b #"p",(a3)+ bne.w failBMON move.b (a3)+,d0 sub.b #"0",d0 bcs.w failBMON cmp.b #7,d0 bhi.w failBMON ext.w d0 lsl.w #7,d0 or.w d0,op68000+2 ;fpu instrBMON! rts assccodeBMON:clr.w d0 lea ccodetxtBMON(pc),a0 asscc0BMON: move.b (a3),d1 lsl.w #8,d1 move.b 1(a3),d1 tst.b 1(a0) ;"t",0;"f",0 bne.b asscc2BMON sf d1 asscc2BMON: cmp.w (a0)+,d1 beq.b asscc1BMON add.w #$0100,d0 cmp.w #$1000,d0 bne.b asscc0BMON bra.w failBMON asscc1BMON: addq.w #1,a3 tst.b d1 ;"t",0;"f",0 beq.b asscc3BMON addq.w #1,a3 asscc3BMON: or.w d0,op68000 rts assfccodeBMON: moveq #124,d0 ;(31-1)*4 assfcc2BMON:lea fccodetxtBMON(pc),a0 lea (a0,d0.w),a0 move.l a3,-(a7) moveq #4-1,d1 assfcc0BMON:cmpm.b (a3)+,(a0)+ bne.b assfcc1BMON tst.b (a0) dbeq d1,assfcc0BMON cmp.b #"e",(a3) ;ngle preference beq.b assfcc1BMON addq.w #4,a7 ;remove a3 lsr.w #2,d0 rts assfcc1BMON:move.l (a7)+,a3 subq.w #4,d0 bpl.b assfcc2BMON bra.w failBMON asspccodeBMON: move.b (a3)+,d1 lsl.w #8,d1 move.b (a3)+,d1 lea pccodetxtBMON(pc),a0 moveq #30,d0 ;(16-1)*2 asspcc0BMON:cmp.w (a0,d0.w),d1 beq.b asspcc1BMON subq.w #2,d0 bpl.b asspcc0BMON bra.w failBMON asspcc1BMON:lsr.w #1,d0 rts cmpt0BMON: cmp.b (a3)+,d0 bne.w failBMON cmptxtBMON: move.b (a0)+,d0 bclr #7,d0 beq.b cmpt0BMON cmp.b (a3)+,d0 bne.w failBMON rts storeinstrBMON:addq.l #2,lginstrBMON storewordBMON: lea op68000-2,a0 move.w (a0),d1 ;oplen! addq.w #1,(a0)+ add.w d1,d1 move.w d0,2(a0,d1.w) rts storelongBMON: lea op68000-2,a0 move.w (a0),d1 ;oplen! addq.w #2,(a0)+ add.w d1,d1 move.l d0,2(a0,d1.w) rts asstabBMON: cmp.l lineendBMON,a3 bhi.w failBMON cmp.b #" ",(a3)+ beq.b asstabBMON asstab0BMON:subq.w #1,a3 rts asstoeaBMON:cmp.b #",",(a3)+ bne.w failBMON asseaBMON: and.w #$ffc0,op68000 cmp.b #"d",(a3) ;dx beq.w assdx02BMON or.w #$0008,op68000 cmp.b #"a",(a3) ;ax beq.w assax02BMON and.w #$ffc0,op68000 cmp.b #"(",(a3) ;(ax)|(ax)+ bne.b assea0BMON cmp.b #"a",1(a3) bne.b assea0BMON addq.w #1,a3 or.w #$0010,op68000 bsr.w assax02BMON cmp.b #")",(a3)+ bne.w failBMON cmp.b #"+",(a3) bne.b assea1BMON addq.w #1,a3 or.w #$0018,op68000 assea1BMON: rts assea0BMON: cmp.b #"-",(a3) ;-(ax) bne.b assea2BMON cmp.b #"(",1(a3) bne.w failBMON addq.w #2,a3 or.w #$0020,op68000 bsr.w assax02BMON cmp.b #")",(a3)+ bne.w failBMON rts assea2BMON: cmp.b #"#",(a3) bne.w assea3BMON addq.w #1,a3 or.w #$003c,op68000 cmp.b #34,(a3) bne.b assea16BMON addq.w #1,a3 moveq #0,d0 moveq #5-1,d1 assea18BMON:cmp.b #34,(a3)+ beq.b assea17BMON lsl.l #8,d0 move.b -1(a3),d0 dbf d1,assea18BMON bra.w failBMON assea16BMON:cmp.b #"$",(a3) beq.b assea22BMON bsr.w atodlongBMON bra.b assea17BMON assea22BMON:bsr.w atolong_BMON assea17BMON:move.b imsizeBMON,d1 beq.b assea13BMON cmp.b #%01,d1 beq.b assea14BMON cmp.b #%10,d1 bne.w failBMON swap d0 bsr.b assea15BMON swap d0 bra.b assea15BMON assea13BMON:cmp.l #$ff,d0 bhi.w failBMON assea14BMON:cmp.l #$ffff,d0 bhi.w failBMON assea15BMON:bra.w storewordBMON assea3BMON: cmp.b #"(",(a3)+ ;(x.l),(x.w),(d,ax,rx.x) bne.w failBMON sf d2 cmp.b #"-",(a3) ;sign? bne.b assea19BMON addq.w #1,a3 st d2 assea19BMON:move.w d2,-(a7) cmp.b #"$",(a3) beq.b assea24BMON bsr.w atodlongBMON bra.b assea23BMON assea24BMON:bsr.w atolong_BMON assea23BMON:move.w (a7)+,d2 cmp.b #",",(a3) ;d( !(d, ? bne.w assea4BMON tst.b d2 beq.b assea20BMON neg.l d0 assea20BMON:addq.w #1,a3 cmp.b #"a",(a3) ;d(ax !(d,ax bne.w assea5BMON move.l d0,-(a7) bsr.w assax02BMON move.l (a7)+,d0 move.l d0,d1 bpl.b assea21BMON neg.l d1 assea21BMON:cmp.b #")",(a3)+ ;d(ax) !(d,ax) bne.b assea6BMON or.w #$0028,op68000 cmp.l #$ffff,d1 ;abs(d0) bhi.w failBMON bra.w storewordBMON assea6BMON: cmp.b #",",-1(a3) ; !(d,ax,rx.x) bne.w failBMON or.w #$0030,op68000 cmp.l #$ff,d1 ;abs(d0) bhi.w failBMON assea9BMON: and.w #$ff,d0 cmp.b #"d",(a3)+ beq.b assea7BMON cmp.b #"a",-1(a3) bne.w failBMON bset #15,d0 assea7BMON: move.b (a3)+,d1 sub.b #"0",d1 bcs.w failBMON cmp.b #7,d1 bhi.w failBMON ext.w d1 ror.w #4,d1 or.w d1,d0 cmp.b #".",(a3)+ bne.w failBMON cmp.b #"w",(a3)+ beq.b assea8BMON cmp.b #"l",-1(a3) bne.w failBMON bset #11,d0 assea8BMON: cmp.b #"*",(a3) bne.b assea8bBMON addq.w #1,a3 moveq #-"1",d1 add.b (a3)+,d1 beq.b assea8bBMON or.w #%01000000000,d0 subq.b #1,d1 beq.b assea8bBMON eor.w #%11000000000,d0 subq.b #2,d1 beq.b assea8bBMON eor.w #%01000000000,d0 subq.b #4,d1 bne.w failBMON assea8bBMON:cmp.b #")",(a3)+ ;d(ax,rx.x) !(d,ax,rx.x) bne.w failBMON bra.w storewordBMON assea5BMON: cmp.b #"p",(a3)+ bne.w failBMON cmp.b #"c",(a3)+ bne.w failBMON cmp.b #")",(a3)+ ;d(pc) !(d,pc) bne.b assea10BMON or.w #$003a,op68000 subq.l #2,d0 ;fixed instrBMON len sub.l lginstrBMON,d0 ;extension (mulx.l,cas2...) sub.l paraBMON,d0 bsr.w storewordBMON move.l d0,d1 ext.l d1 cmp.l d0,d1 bne.w failBMON rts assea10BMON:or.w #$003b,op68000 subq.l #2,d0 ;fixed instrBMON len sub.l lginstrBMON,d0 ;extension (mulx.l,cas2...) sub.l paraBMON,d0 move.b d0,d1 ext.w d1 ext.l d1 cmp.l d1,d0 bne.b assfailBMON cmp.b #",",-1(a3) beq.w assea9BMON ;d(pc,rx.x) !(d,pc,rx.x) assfailBMON:sf d7 rts assea4BMON: cmp.b #")",(a3)+ bne.w failBMON cmp.b #".",(a3) beq.b assea11BMON or.w #$0039,op68000 swap d0 bsr.w storewordBMON swap d0 bra.w storewordBMON assea11BMON:addq.w #1,a3 cmp.b #"w",(a3)+ bne.w failBMON or.w #$0038,op68000 cmp.l #$ffff,d0 bhi.w failBMON bra.w storewordBMON ;--------------------------------------------------------------- ifnd ccodetxtBMON ccodetxtBMON: dc.b "t",0,"f",0,"hilscccsneeqvcvsplmigeltgtle" ;even! pccodetxtBMON: dc.b "bsbclslcssscasacwswcisicgsgccscc" ;even! fccodetxtBMON: dc.l "f"<<24 ;fpu condition codes dc.l "eq"<<16 dc.l "ogt"<<8 dc.l "oge"<<8 dc.l "olt"<<8 dc.l "ole"<<8 dc.l "ogl"<<8 dc.l "or"<<16 dc.l "un"<<16 dc.l "ueq"<<8 dc.l "ugt"<<8 dc.l "uge"<<8 dc.l "ult"<<8 dc.l "ule"<<8 dc.l "ne"<<16 dc.l "t"<<24 dc.l "sf"<<16 dc.l "seq"<<8 dc.l "gt"<<16 dc.l "ge"<<16 dc.l "lt"<<16 dc.l "le"<<16 dc.l "gl"<<16 dc.l "gle"<<8 dc.l "ngle" dc.l "ngl"<<8 dc.l "nle"<<8 dc.l "nlt"<<8 dc.l "nge"<<8 dc.l "ngt"<<8 dc.l "sne"<<8 dc.l "st"<<16 fmconstBMON:dc.b "1","E"+$80,"P","i"+$80,"Log10(2",")"+$80,"e"+$80,"Log2(e",")"+$80 dc.b "Log10(e",")"+$80,"0.","0"+$80,"ln(2",")"+$80,"ln(10",")"+$80 dc.b "1"+$80,"1","0"+$80,"10","0"+$80 usptxtBMON: dc.b "us","p"+$80 toccrtxtBMON: dc.b "," ccrtxtBMON: dc.b "cc","r"+$80 tosrtxtBMON: dc.b "," srtxtBMON: dc.b "s","r"+$80 xbcdtxtBMON: dc.b "),-","("+$80 cmpmtxtBMON: dc.b ")+,","("+$80 even cregsBMON: dc.b $08,$08,"pcr",0 ;68060 dc.b $08,$07,"srp",0 ;68040 dc.b $08,$06,"urp",0 ;68040 dc.b $08,$05,"mmur" ;68040 dc.b $08,$04,"isp",0 dc.b $08,$03,"msp",0 dc.b $08,$02,"caar" ;68020/30 only dc.b $08,$01,"vbr",0 dc.b $08,$00,"usp",0 dc.b $00,$08,"busr" ;68060 dc.b $00,$07,"dtt1" ;68040 dc.b $00,$06,"dtt0" ;68040 dc.b $00,$05,"itt1" ;68040 dc.b $00,$04,"itt0" ;68040 dc.b $00,$03,"tc",0,0 ;68040 dc.b $00,$02,"cacr" dc.b $00,$01,"dfc",0 dc.b $00,$00,"sfc",0 dc.b $80 pregsBMON: dc.b $08,"tt","0"+$80 dc.b $0c,"tt","1"+$80 dc.b $40,"t","c"+$80 dc.b $44,"dr","p"+$80 ;68851 only dc.b $48,"sr","p"+$80 dc.b $4c,"cr","p"+$80 dc.b $50,"ca","l"+$80 ;68851 only dc.b $58,"sc","c"+$80 ;68851 only dc.b $5c,"a","c"+$80 ;68851 only dc.b $60,"mmus","r"+$80 ;68030 mmusr = 68851 psr dc.b $60,"ps","r"+$80 ;68030 mmusr = 68851 psr dc.b $64,"pcs","r"+$80 ;68851 only dc.b $ac,"va","l"+$80,0 ;68851 only sizemovBMON: dc.b "*blw",%11,%00,%10,%01 dcbtxtBMON: dc.b "dc.b "!$80 idctxBMON: dc.l "ndib" ;nc,dc,ic,bc endc paraBMON dc.l 0 ;address lineendBMON dc.l 0 lginstrBMON dc.l 0 oplen dc.w 0 ;nb word for instrBMON. op68000 dc.w 0,0,0,0,0,0,0 ;assembled instrBMON. here !! ifnd imsizeBMON imsizeBMON dc.b 0 even endc