File:  [RetroPC.NET] / xmil / z80awce / z80a_s.inc
Revision 1.1: download - view: text, annotated - select for diffs
Fri Feb 4 16:45:39 2005 JST (20 years, 8 months ago) by yui
Branches: MAIN
CVS tags: HEAD
add Z80core ARM9 version (T.Yui)


	MACRO
$label	MADC16	$r
$label		ldrh	r0, [r7, #CPU_HL]
			ldrh	r1, [r7, #$r]
			movs	r12, r8, lsr #1
			adc		r2, r1, r0
			and		r8, r8, #&ff00
			eor		r3, r2, r0				; r ^ b
			eor		r12, r2, r1				; r ^ A
			strh	r2, [r7, #CPU_HL]
			movs	r0, r2, lsl #16
			eor		r0, r3, r1				; r ^ b ^ A
			orrcs	r8, r8, #C_FLAG
			and		r3, r12, r3				; (r ^ b) & (r ^ A)
			orreq	r8, r8, #Z_FLAG
			and		r0, r0, #(H_FLAG << 8)
			orrmi	r8, r8, #S_FLAG
			and		r3, r3, #(V_FLAG << 13)
			orr		r8, r8, r0, lsr #8
			orr		r8, r8, r3, lsr #13
			mov		pc, r11
	MEND

	MACRO
$label	MADCHL2
$label		ldrh	r0, [r7, #CPU_HL]
			movs	r12, r8, lsr #1
			adc		r1, r0, r0
			and		r8, r8, #&ff00
			movs	r12, r1, lsl #16
			orrcs	r8, r8, #C_FLAG
			strh	r1, [r7, #CPU_HL]
			eor		r2, r1, r0
			orreq	r8, r8, #Z_FLAG
			and		r3, r2, #(V_FLAG << 13)
			and		r2, r1, #(H_FLAG << 8)
			orrmi	r8, r8, #S_FLAG
			orr		r8, r8, r3, lsr #13
			orr		r8, r8, r2, lsr #8
			mov		pc, r11
	MEND

	MACRO
$label	MADCSP
$label		ldrh	r0, [r7, #CPU_HL]
			mov		r1, r9, lsl #16
			and		r2, r8, #C_FLAG
			add		r2, r2, r0
			add		r2, r2, r1, lsr #16
			and		r8, r8, #&ff00
			eor		r3, r2, r0				; r ^ b
			eor		r12, r2, r9				; r ^ A
			strh	r2, [r7, #CPU_HL]
			movs	r0, r2, lsl #16
			eor		r0, r3, r9				; r ^ b ^ A
			orrcs	r8, r8, #C_FLAG
			and		r3, r12, r3				; (r ^ b) & (r ^ A)
			orreq	r8, r8, #Z_FLAG
			and		r0, r0, #(H_FLAG << 8)
			orrmi	r8, r8, #S_FLAG
			and		r3, r3, #(V_FLAG << 13)
			orr		r8, r8, r0, lsr #8
			orr		r8, r8, r3, lsr #13
			mov		pc, r11
	MEND


	MACRO
$label	MSBC16	$r
$label		ldrh	r0, [r7, #CPU_HL]
			ldrh	r1, [r7, #$r]
			and		r2, r8, #C_FLAG
			rsb		r2, r2, r0
			eor		r3, r1, r0				; A ^ b
			sub		r2, r2, r1
			eor		r0, r2, r0				; A ^ r
			eor		r1, r2, r3				; A ^ b ^ r
			movs	r12, r2, lsl #16
			and		r8, r8, #&ff00
			strh	r2, [r7, #CPU_HL]
			orr		r8, r8, #N_FLAG
			and		r0, r0, r3				; (A ^ b) & (A ^ r)
			orrcs	r8, r8, #C_FLAG
			and		r1, r1, #(H_FLAG << 8)
			orreq	r8, r8, #Z_FLAG
			and		r0, r0, #(V_FLAG << 13)
			orrmi	r8, r8, #S_FLAG
			orr		r8, r8, r1, lsr #8
			orr		r8, r8, r0, lsr #13
			mov		pc, r11
	MEND

	MACRO
$label	MSBCHL2
$label		mov		r0, #0
			tst		r8, #C_FLAG
			subne	r0, r0, #1
			and		r8, r8, #&ff00
			strh	r0, [r7, #CPU_HL]
			orreq	r8, r8, #(Z_FLAG + N_FLAG)
			orrne	r8, r8, #(S_FLAG + H_FLAG + N_FLAG + C_FLAG)
			mov		pc, r11
	MEND

	MACRO
$label	MSBCSP
$label		ldrh	r0, [r7, #CPU_HL]
			mov		r1, r9, lsl #16
			and		r2, r8, #C_FLAG
			rsb		r2, r2, r0
			eor		r3, r0, r9				; A ^ b
			sub		r2, r2, r1, lsr #16
			eor		r0, r2, r0				; A ^ r
			eor		r1, r2, r3				; A ^ b ^ r
			movs	r12, r2, lsl #16
			and		r8, r8, #&ff00
			strh	r2, [r7, #CPU_HL]
			orr		r8, r8, #N_FLAG
			and		r0, r0, r3				; (A ^ b) & (A ^ r)
			orrcs	r8, r8, #C_FLAG
			and		r1, r1, #(H_FLAG << 8)
			orreq	r8, r8, #Z_FLAG
			and		r0, r0, #(V_FLAG << 13)
			orrmi	r8, r8, #S_FLAG
			orr		r8, r8, r1, lsr #8
			orr		r8, r8, r0, lsr #13
			mov		pc, r11
			mov		pc, r11
	MEND


	MACRO
$label	OUT8
$label		ldrh	r0, [r7, #CPU_BC]
			str		r10, [r7, #CPU_REMCLOCK]
			bl		iocore_out
			ldr		r10, [r7, #CPU_REMCLOCK]
			mov		pc, r11
	MEND

	MACRO
$label	OUTR8	$r
$label		ldrb	r1, [r7, #$r]
			OUT8
	MEND

	MACRO
$label	INP8
$label		ldrh	r0, [r7, #CPU_BC]
			str		r10, [r7, #CPU_REMCLOCK]
			bl		iocore_inp
			ldrb	r1, [r0, r7]
			bic		r2, r8, #(&ff - C_FLAG)
			ldr		r10, [r7, #CPU_REMCLOCK]
			orr		r8, r2, r1
	MEND

	MACRO
$label	INPR8	$r
$label		INP8
			strb	r0, [r7, #$r]
			mov		pc, r11
	MEND

	END


RetroPC.NET-CVS <cvs@retropc.net>