/*****************************************************************************************/ // opertionen /*****************************************************************************************/ ii_lset_op:.macro //byt ii_lset_opea \1,0 // dx,ax ii_lset_opea \1,1 // (ax), (ax)+ ii_lset_opea \1,2 // -(ax),d16(ax) ii_lset_opeag \1,3 // d8(ax,dy) lea table+0x\1\238*4,a0 move.l #ii_0x\138,(a0)+ // xxx.w move.l #ii_0x\139,(a0)+ // xxx.l //word ii_lset_opea \1,4 // dx,ax ii_lset_opea \1,5 // (ax), (ax)+ ii_lset_opea \1,6 // -(ax),d16(ax) ii_lset_opeag \1,7 // d8(ax,dy) lea table+0x\178*4,a0 move.l #ii_0x\178,(a0)+ // xxx.w move.l #ii_0x\179,(a0)+ // xxx.l //long ii_lset_opea \1,8 // dx,ax ii_lset_opea \1,9 // (ax), (ax)+ ii_lset_opea \1,a // -(ax),d16(ax) ii_lset_opeag \1,b // d8(ax,dy) lea table+0x\1b8*4,a0 move.l #ii_0x\1b8,(a0)+ // xxx.w move.l #ii_0x\1b9,(a0)+ // xxx.l .endm ii_lset_opeag:.macro // 0x1120-0x1127 lea table+0x\1\20*4,a0 move.l #ii_0x\1\20,(a0)+ move.l #ii_0x\1\21,(a0)+ move.l #ii_0x\1\22,(a0)+ move.l #ii_0x\1\23,(a0)+ move.l #ii_0x\1\24,(a0)+ move.l #ii_0x\1\25,(a0)+ move.l #ii_0x\1\26,(a0)+ move.l #ii_0x\1\27,(a0)+ .endm; ii_lset_opeau:.macro // 0x1128-0x112f lea table+0x\1\28*4,a0 move.l #ii_0x\1\28,(a0)+ move.l #ii_0x\1\29,(a0)+ move.l #ii_0x\1\2a,(a0)+ move.l #ii_0x\1\2b,(a0)+ move.l #ii_0x\1\2c,(a0)+ move.l #ii_0x\1\2d,(a0)+ move.l #ii_0x\1\2e,(a0)+ move.l #ii_0x\1\2f,(a0)+ .endm; ii_lset_opea:.macro ii_lset_opeag \1,\2 ii_lset_opeau \1,\2 .endm /******************************************************/ ii_op:.macro // 1=code 2=operation 3 = normal oder immediat/quick // byt opdx \1,\2,b,0,\3 // dx,ax opia \1,\2,b,1,\3 // (ax),(ax)+ opdia \1,\2,b,2,\3 // -(ax),d16(ax) opd8a \1,\2,b,3,\3 // d8(ax),xxx // word opdx \1,\2,w,4,\3 // dx,ax opia \1,\2,w,5,\3 // (ax),(ax)+ opdia \1,\2,w,6,\3 // -(ax),d16(ax) opd8a \1,\2,w,7,\3 // d8(ax),xxx // long opdx \1,\2,l,8,\3 // dx,ax opia \1,\2,l,9,\3 // (ax),(ax)+ opdia \1,\2,l,a,\3 // -(ax),d16(ax) opd8a \1,\2,l,b,\3 // d8(ax),xxx .endm /******************************************************/ // byt word long /******************************************************/ opdx: .macro //register: \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal ii_0x\1\40: .ifc \3,b op\5smd \2,d0_off+3(a7),d0_off+3(a7),\3 .else .ifc \3,w op\5smd \2,d0_off+2(a7),d0_off+2(a7),\3 .else op\5smd \2,d0_off(a7),d0_off(a7),\3 .endif .endif ii_0x\1\41: .ifc \3,b op\5smd \2,d1_off+3(a7),d1_off+3(a7),\3 .else .ifc \3,w op\5smd \2,d1_off+2(a7),d1_off+2(a7),\3 .else op\5smd \2,d1_off(a7),d1_off(a7),\3 .endif .endif ii_0x\1\42: op\5smd \2,d2,d2,\3 ii_0x\1\43: op\5smd \2,d3,d3,\3 ii_0x\1\44: op\5smd \2,d4,d4,\3 ii_0x\1\45: op\5smd \2,d5,d5,\3 ii_0x\1\46: op\5smd \2,d6,d6,\3 ii_0x\1\47: op\5smd \2,d7,d7,\3 //ax ii_0x\1\48: opa\5smd \2,a0_off(a7),a0_off(a7),\3 ii_0x\1\49: opa\5smd \2,a1_off(a7),a1_off(a7),\3 ii_0x\1\4a: opa\5smd \2,a2,a2,\3 ii_0x\1\4b: opa\5smd \2,a3,a3,\3 ii_0x\1\4c: opa\5smd \2,a4,a4,\3 ii_0x\1\4d: opa\5smd \2,a5,a5,\3 ii_0x\1\4e: opa\5smd \2,a6,a6,\3 ii_0x\1\4f: opa\5smd \2,usp,usp,\3 .endm; //----------------------------------------------- opia: .macro // (ax) \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal //(ax) ii_0x\1\40: op\5sia \2,a0_off(a7),(a1),(a1),\3 ii_0x\1\41: op\5sia \2,a1_off(a7),(a1),(a1),\3 ii_0x\1\42: op\5smd \2,(a2),(a2),\3 ii_0x\1\43: op\5smd \2,(a3),(a3),\3 ii_0x\1\44: op\5smd \2,(a4),(a4),\3 ii_0x\1\45: op\5smd \2,(a5),(a5),\3 ii_0x\1\46: op\5smd \2,(a6),(a6),\3 ii_0x\1\47: op\5sia \2,usp,(a1),(a1),\3 //(ax)+ ii_0x\1\48: op\5sia \2,a0_off(a7),(a1),(a1)+,\3 ii_0x\1\49: op\5sia \2,a1_off(a7),(a1),(a1)+,\3 ii_0x\1\4a: op\5smd \2,(a2),(a2)+,\3 ii_0x\1\4b: op\5smd \2,(a3),(a3)+,\3 ii_0x\1\4c: op\5smd \2,(a4),(a4)+,\3 ii_0x\1\4d: op\5smd \2,(a5),(a5)+,\3 ii_0x\1\4e: op\5smd \2,(a6),(a6)+,\3 ii_0x\1\4f: op\5sia \2,usp,(a1),(a1)+,\3 .endm; //----------------------------------------------- opdia: .macro // -(ax) \1=code \2 = operation \3 = size \4 size and adressierungsart 5 = immediate oder normal ii_0x\1\40: op\5sia \2,a0_off(a7),-(a1),(a1),\3 ii_0x\1\41: op\5sia \2,a1_off(a7),-(a1),(a1),\3 ii_0x\1\42: op\5smd \2,-(a2),(a2),\3 ii_0x\1\43: op\5smd \2,-(a3),(a3),\3 ii_0x\1\44: op\5smd \2,-(a4),(a4),\3 ii_0x\1\45: op\5smd \2,-(a5),(a5),\3 ii_0x\1\46: op\5smd \2,-(a6),(a6),\3 ii_0x\1\47: op\5sia \2,usp,-(a1),(a1),\3 ii_0x\1\48: op\5sd16a \2,a0_off(a7),\3 ii_0x\1\49: op\5sd16a \2,a1_off(a7),\3 ii_0x\1\4a: op\5sd16a \2,a2,\3 ii_0x\1\4b: op\5sd16a \2,a3,\3 ii_0x\1\4c: op\5sd16a \2,a4,\3 ii_0x\1\4d: op\5sd16a \2,a5,\3 ii_0x\1\4e: op\5sd16a \2,a6,\3 ii_0x\1\4f: op\5sd16a \2,usp,\3 .endm; //----------------------------------------------- opd8a: .macro // d8(ax,dy) \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal ii_0x\1\40: op\5sd8a \2,a0_off(a7),\3 ii_0x\1\41: op\5sd8a \2,a1_off(a7),\3 ii_0x\1\42: op\5sd8a \2,a2,\3 ii_0x\1\43: op\5sd8a \2,a3,\3 ii_0x\1\44: op\5sd8a \2,a4,\3 ii_0x\1\45: op\5sd8a \2,a5,\3 ii_0x\1\46: op\5sd8a \2,a6,\3 ii_0x\1\47: op\5sd8a \2,usp,\3 ii_0x\1\48: op\5sxx \2,\3,w ii_0x\1\49: op\5sxx \2,\3,l .endm; //----------------------------------------------- opnsmd:.macro // direct dx: 1=operation 2=ea src 3=ea dest 4=size #ifdef halten_op halt #endif .ifc \4,l move.l \2,d1 .else mvs.\4 \2,d1 .endif .ifc \1,negx move.b sr_off+1(a7),d1 //ccr holen move d1,ccr //setzen .endif \1 d1 set_cc0 move.\4 d1,\3 ii_end .endm; opansmd:.macro // direct ax: 1=operation 2=ea src 3=ea dest 4=size #ifdef halten_op halt #endif .ifc \2,usp move.l usp,a1 move.l a1,d1 .else move.l \2,d1 .endif \1 d1 .ifc \3,usp move.l d1,a1 move.l a1,usp .else move.l d1,\3 .endif ii_end .endm; opnsia:.macro // indirect: 1=operation 2=adress register 3= src 4=dest 5=size #ifdef halten_op halt #endif move.l \2,a1 .ifc \5,l move.l \3,d1 .else mvs.\5 \3,d1 .endif .ifc \1,negx move.b sr_off+1(a7),d1 //ccr holen move d1,ccr //setzen .endif \1 d1 set_cc0 move.\5 d1,\4 ii_end .endm; opnsd16a:.macro // indirect: 1=operation 2=adress register 3=size #ifdef halten_op halt #endif move.l \2,a1 mvs.w (a0)+,d1 add.l d1,a1 .ifc \3,l move.l (a1),d1 .else mvs.\3 (a1),d1 .endif .ifc \1,negx move.b sr_off+1(a7),d1 //ccr holen move d1,ccr //setzen .endif \1 d1 set_cc0 move.\3 d1,(a1) ii_end .endm; opnsd8a:.macro // indirect: 1=operation 2=adress register 3=size #ifdef halten_op halt #endif move.l \2,a1 jsr ewf .ifc \3,l move.l (a1),d1 .else mvs.\3 (a1),d1 .endif .ifc \1,negx move.b sr_off+1(a7),d1 //ccr holen move d1,ccr //setzen .endif \1 d1 set_cc0 move.\3 d1,(a1) ii_end .endm; opnsxx:.macro // indirect: 1=operation 2=size 3=size adresse #ifdef halten_op halt #endif .ifc \2,l move.l (a1),d1 .else mvs.\2 (a1),d1 .endif move.\3 (a0)+,a1 .ifc \1,negx move.b sr_off+1(a7),d1 //ccr holen move d1,ccr //setzen .endif \1 d1 set_cc0 move.\2 d1,(a1) ii_end .endm; //*******************************************************************************3 opismd:.macro // immediate dx: 1=opieration 2=ea src 3=ea dest 4=size #ifdef halten_op halt #endif .ifc \4,l move.l (a0)+,d0 .else .ifc \4,w mvs.w (a0)+,d0 .else move.w (a0)+,d0 extb.l d0 .endif .endif .ifc \4,l move.l \2,d1 .else mvs.\4 \2,d1 .endif \1 d0,d1 set_cc0 .ifnc \1,cmp.l move.\4 d1,\3 .endif ii_end .endm; opaismd:.macro // immediate ax: 1=opieration 2=ea src 3=ea dest 4=size #ifdef halten_op halt #endif .ifc \4,l move.l (a0)+,d0 .else .ifc \4,w mvs.w (a0)+,d0 .else move.w (a0)+,d0 extb.l d0 .endif .endif .ifc \2,usp move.l usp,a1 move.l a1,d1 .else move.l \2,d1 .endif \1 d0,d1 .ifnc \1,cmp.l .ifc \3,usp move.l d1,a1 move.l a1,usp .else move.l d1,\3 .endif .endif ii_end .endm; opisia:.macro // indirect: 1=opieration 2=adress register 3= src 4=dest 5=size #ifdef halten_op halt #endif .ifc \5,l move.l (a0)+,d0 .else .ifc \5,w mvs.w (a0)+,d0 .else move.w (a0)+,d0 extb.l d0 .endif .endif move.l \2,a1 .ifc \5,l move.l \3,d1 .else mvs.\5 \3,d1 .endif \1 d0,d1 set_cc0 .ifnc \1,cmp.l move.\5 d1,\4 .endif ii_end .endm; opisd16a:.macro // indirect: 1=opieration 2=adress register 3=size #ifdef halten_op halt #endif .ifc \3,l move.l (a0)+,d0 .else .ifc \3,w mvs.w (a0)+,d0 .else move.w (a0)+,d0 extb.l d0 .endif .endif move.l \2,a1 mvs.w (a0)+,d1 add.l d1,a1 .ifc \3,l move.l (a1),d1 .else mvs.\3 (a1),d1 .endif \1 d0,d1 set_cc0 .ifnc \1,cmp.l move.\3 d1,(a1) .endif ii_end .endm; opisd8a:.macro // indirect: 1=opieration 2=adress register 3=size #ifdef halten_op halt #endif .ifc \3,l move.l (a0)+,d0 .else .ifc \3,w mvs.w (a0)+,d0 .else move.w (a0)+,d0 extb.l d0 .endif .endif move.l d0,_d0_save move.l \2,a1 jsr ewf move.l _d0_save,d0 .ifc \3,l move.l (a1),d1 .else mvs.\3 (a1),d1 .endif \1 d0,d1 set_cc0 .ifnc \1,cmp.l move.\3 d1,(a1) .endif ii_end .endm; opisxx:.macro // immediate: 1=opieration 2=size 3=size adresse .ifc \2,l move.l (a0)+,d0 .else .ifc \2,w mvs.w (a0)+,d0 .else move.w (a0)+,d0 extb.l d0 .endif .endif move.\3 (a0)+,a1 .ifc \2,l move.l (a1),d1 .else mvs.\2 (a1),d1 .endif \1 d0,d1 set_cc0 .ifnc \1,cmp.l move.\2 d1,(a1) .endif ii_end .endm; //*******************************************************************************3 opqsmd:.macro // quick: 1=opieration 2=ea src 3=ea dest 4=size .ifc \4,l move.l \2,d1 .else mvs.\4 \2,d1 .endif .ifc \1,eor.l d0 move.l d0_off(a7),d0 .endif .ifc \1,eor.l d1 move.l d1_off(a7),d1 .endif \1 ,d1 set_cc0 move.\4 d1,\3 ii_end .endm; opaqsmd:.macro // quick: 1=opieration 2=ea src 3=ea dest 4=size .ifc \2,usp move.l usp,a1 move.l a1,d1 .else move.l \2,d1 .endif \1 ,d1 .ifc \3,usp move.l d1,a1 move.l a1,usp .else move.l d1,\3 .endif ii_end .endm; opqsia:.macro // indirect: 1=opieration 2=adress register 3= src 4=dest 5=size #ifdef halten_op halt #endif move.l \2,a1 .ifc \5,l move.l \3,d1 .else mvs.\5 \3,d1 .endif .ifc \1,eor.l d0 move.l d0_off(a7),d0 .endif .ifc \1,eor.l d1 move.l d1_off(a7),d1 .endif \1 ,d1 set_cc0 move.\5 d1,\4 ii_end .endm; opqsd16a:.macro // indirect: 1=opieration 2=adress register 3=size #ifdef halten_op halt #endif move.l \2,a1 mvs.w (a0)+,d1 add.l d1,a1 .ifc \3,l move.l (a1),d1 .else mvs.\3 (a1),d1 .endif .ifc \1,eor.l d0 move.l d0_off(a7),d0 .endif .ifc \1,eor.l d1 move.l d1_off(a7),d1 .endif \1 ,d1 set_cc0 move.\3 d1,(a1) ii_end .endm; opqsd8a:.macro // indirect: 1=opieration 2=adress register 3=size #ifdef halten_op halt #endif move.l d0,_d0_save move.l \2,a1 jsr ewf move.l _d0_save,d0 .ifc \3,l move.l (a1),d1 .else mvs.\3 (a1),d1 .endif .ifc \1,eor.l d0 move.l d0_off(a7),d0 .endif .ifc \1,eor.l d1 move.l d1_off(a7),d1 .endif \1 ,d1 set_cc0 move.\3 d1,(a1) ii_end .endm; opqsxx:.macro // quick: 1=opieration 2=size 3=size adresse #ifdef halten_op halt #endif move.\3 (a0)+,a1 .ifc \2,l move.l (a1),d1 .else mvs.\2 (a1),d1 .endif .ifc \1,eor.l d0 move.l d0_off(a7),d0 .endif .ifc \1,eor.l d1 move.l d1_off(a7),d1 .endif \1 ,d1 set_cc0 move.\2 d1,(a1) ii_end .endm;