File:  [RetroPC.NET] / xmil / z80aadv / z80a_io.s
Revision 1.1: download - view: text, annotated - select for diffs
Fri Feb 4 15:42:13 2005 JST (20 years, 8 months ago) by yui
Branches: MAIN
CVS tags: HEAD
RetroPC CVS restarting 2005/02/04 (T.Yui)


	.include	"./agb/ramptr.inc"
	.include	"../z80aadv/z80a.inc"
	.include	"./patch/iocore.inc"
	.include	"./vram/makescrn.inc"

	.global	_out_byte_a
	.global	_in_a_byte
	.global	_outx
	.global	_otxr
	.global	_out_c_0
	.global	_out_c_a
	.global	_out_c_r

	.global	fastioout
	.global	_fastioinp

	.extern	iocore
	.extern	crtc
	.extern	tram

@	AREA	.text, CODE, READONLY

	.section	.iwram.text
	.code	32
	.align	0


_out_byte_a:	Z80WORK	#7
				GETPC8
				and		r2, rAF, #(0xff << 8)
				mov		r1, r0
				orr		r0, r2, r0
				b		fastioout

_in_a_byte:		Z80WORK	#7
				GETPC8
				and		r1, rAF, #(0xff << 8)
				orr		r0, r1, r0
				Z80INP
				and		r1, rAF, #0xff
				orr		rAF, r1, r0, lsl #8
				mov		pc, r11


			; @	1010x011
_outx:			Z80WORK	#12
				ldrh	r2, [r4, #CPU_HL]
				ldrh	r3, [r4, #CPU_BC]
				MEMRD8	r1, r2
				tst		r0, #0x08
				addeq	r2, r2, #1
				subne	r2, r2, #1
				subs	r0, r3, #(1 << 8)
				addcc	r0, r0, #(0x100 << 8)
				strh	r2, [r4, #CPU_HL]
				strh	r0, [r4, #CPU_BC]
				and		rAF, rAF, #(0xff << 8)
				tst		r0, #0xff00
				orr		rAF, rAF, #N_FLAG
				orreq	rAF, rAF, #Z_FLAG
				b		fastioout

			; @	1011x011
_otxr:			Z80WORK	#12
				ldrh	r2, [r4, #CPU_HL]
				ldrh	r3, [r4, #CPU_BC]
				MEMRD8	r1, r2
				tst		r0, #0x08
				addeq	r2, r2, #1
				subne	r2, r2, #1
				subs	r0, r3, #(1 << 8)
				addcc	r0, r0, #(0x100 << 8)
				strh	r2, [r4, #CPU_HL]
				strh	r0, [r4, #CPU_BC]
				and		rAF, rAF, #(0xff << 8)
				tst		r0, #0xff00
				orr		rAF, rAF, #N_FLAG
				subne	rREMCLOCK, rREMCLOCK, #5
				orreq	rAF, rAF, #Z_FLAG
				subne	r8, r8, #(2 << 16)
				b		fastioout


_out_c_0:		Z80WORK	#8
				mov		r1, #0
				ldrh	r0, [r4, #CPU_BC]
				b		fastioout

_out_c_a:		Z80WORK	#8
				mov		r1, rAF, lsr #8
				ldrh	r0, [r4, #CPU_BC]
				b		fastioout

_out_c_r:		Z80WORK	#8
				eor		r2, r0, #0x49			; @ 01???001
				ldrh	r0, [r4, #CPU_BC]
				ldrb	r1, [r4, r2, lsr #3]

				; @ r0, r1, ret->r11
fastioout:		add		r2, r4, #IWRAM_IOCORE
				and		r12, r0, #0xff00
				ldrb	r3, [r2, #IOCORE_MODE]
				cmp		r3, #0
				bne		20f
				subs	r3, r0, #0x4000
				bcs		10f
				ldr		r3, [r2, r12, lsr #6]
				str		rREMCLOCK, [r4, #_CPU_REMCLOCK]
				mov		lr, pc
				mov		pc, r3
				ldr		rREMCLOCK, [r4, #_CPU_REMCLOCK]
				mov		pc, r11

10:				ldr		r0, [r2, #(IOCORE2CRTC + CRTCE_GRAMACC)]
				ldr		r12, [r2, #(IOCORE2CRTC + _CRTCE_UPDATEBIT)]
				strb	r1, [r0, r3]
				and		r3, r3, r12, lsr #16
				add		r0, r2, #IOCORE2VRAMUPD
				ldrb	r1, [r0, r3]
				orr		r1, r1, r12
				strb	r12, [r2, #(IOCORE2CRTC + CRTCE_SCRNFLASH)]
				strb	r1, [r0, r3]
				mov		pc, r11

20:				ldr		r12, [r2, #(IOCORE2CRTC + CRTCE_GRAMACC)]
				bic		r3, r0, #0xc000
				mov		r0, r0, lsr #14
				cmp		r0, #1
				strneb	r1, [r3, r12]
				add		r3, r3, #0x4000
				cmp		r0, #2
				strneb	r1, [r3, r12]
				add		r3, r3, #0x4000
				cmp		r0, #3
				strneb	r1, [r3, r12]
				ldr		r1, [r2, #(IOCORE2CRTC + _CRTCE_UPDATEBIT)]
				and		r12, r3, r1, lsr #16
				add		r3, r2, #IOCORE2VRAMUPD
				strb	r1, [r2, #(IOCORE2CRTC + CRTCE_SCRNFLASH)]
				ldrb	r0, [r3, r12]
				orr		r0, r0, r1
				strb	r0, [r3, r12]
				mov		pc, r11


_fastioinp:		add		r2, r4, #IWRAM_IOCORE
				strb	r4, [r2, #IOCORE_MODE]
				subs	r3, r0, #0x4000
				biccc	r3, r3, #0xff
				strcc	rREMCLOCK, [r4, #_CPU_REMCLOCK]
				ldrcc	pc, [r2, r3, asr #6]
				ldr		r1, [r2, #(IOCORE2CRTC + CRTCE_GRAMACC)]
				ldrb	r0, [r1, r3]
				add		pc, lr, #4

	.end


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