-moved all includes into "include" directory -extracted "wait...()"-routines into separate files
264 lines
4.5 KiB
C
264 lines
4.5 KiB
C
/*****************************************************************************************/
|
|
// functionen macros: fehlende adressierungsarte (MCF nur Dx support) ohne ax
|
|
// zusammen mit op.h
|
|
/*****************************************************************************************/
|
|
ii_lset_opc:.macro
|
|
ii_lset_opeag \1,c // dx,ax
|
|
ii_lset_opea \1,d // (ax), (ax)+
|
|
ii_lset_opea \1,e // -(ax),d16(ax)
|
|
ii_lset_opeag \1,f // 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_opc:.macro // 1=code 2=operation 3 = normal oder immediat
|
|
opcdx \1,\2,l,c,\3 // dx,ax
|
|
opia \1,\2,l,d,\3 // (ax),(ax)+
|
|
opdia \1,\2,l,e,\3 // -(ax),d16(ax)
|
|
opd8a \1,\2,l,f,\3 // d8(ax),xxx
|
|
.endm
|
|
//*******************************************************************************3
|
|
/******************************************************/
|
|
// byt word long
|
|
/******************************************************/
|
|
opcdx: .macro //register: \1=code \2 = operation \3 = size \4=size and adressierungsart 5 = immediate oder normal
|
|
ii_0x\1\40:
|
|
#ifdef halten_opc
|
|
halt
|
|
#endif
|
|
.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
|
|
.endm
|
|
//-----------------------------------------------------
|
|
opcsmd:.macro // dx: 1=opieration 2=ea src 3=ea dest 4=size
|
|
#ifdef halten_opc
|
|
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
|
|
.ifc \1,eor.l d0
|
|
move.l d0_off(a7),d1
|
|
.endif
|
|
.ifc \1,eor.l d1
|
|
move.l d1_off(a7),d1
|
|
.endif
|
|
\1 d1
|
|
set_cc0
|
|
move.\4 d1,\3
|
|
ii_end
|
|
.endm;
|
|
|
|
opacsmd:.macro // ax: 1=opieration 2=ea src 3=ea dest 4=size
|
|
#ifdef halten_opc
|
|
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 d1
|
|
set_cc0
|
|
.ifc \3,usp
|
|
move.l d1,a1
|
|
move.l a1,usp
|
|
.else
|
|
move.l d1,\3
|
|
.endif
|
|
ii_end
|
|
.endm;
|
|
|
|
opcsia:.macro // (ax) (ax)+ -(ax): 1=opieration 2=adress register 3= src 4=dest 5=size
|
|
#ifdef halten_opc
|
|
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
|
|
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),d1
|
|
.endif
|
|
.ifc \1,eor.l d1
|
|
move.l d1_off(a7),d1
|
|
.endif
|
|
\1 d1
|
|
set_cc0
|
|
move.\5 d1,\4
|
|
ii_end
|
|
.endm;
|
|
|
|
opcsd16a:.macro // d16(ax): 1=opieration 2=adress register 3=size
|
|
#ifdef halten_opc
|
|
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
|
|
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),d1
|
|
.endif
|
|
.ifc \1,eor.l d1
|
|
move.l d1_off(a7),d1
|
|
.endif
|
|
\1 d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
|
|
opcsd8a:.macro // indirect: 1=opieration 2=adress register 3=size
|
|
#ifdef halten_opc
|
|
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
|
|
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),d1
|
|
.endif
|
|
.ifc \1,eor.l d1
|
|
move.l d1_off(a7),d1
|
|
.endif
|
|
\1 d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
|
|
opcsxx:.macro // indirect: 1=opieration 2=size 3=size adresse
|
|
#ifdef halten_opc
|
|
halt
|
|
#endif
|
|
|
|
.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
|
|
.ifc \1,eor.l d0
|
|
move.l d0_off(a7),d1
|
|
.endif
|
|
.ifc \1,eor.l d1
|
|
move.l d1_off(a7),d1
|
|
.endif
|
|
\1 d1
|
|
set_cc0
|
|
move.\2 d1,(a1)
|
|
ii_end
|
|
.endm;
|