/*****************************************************************************************/
// 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;
