
	PAGE

;********************************************************
;*							*
;*		タイマーテスト 初期設定			*
;*							*
;********************************************************

TIMER_TEST_INIT
		CALL	LCDC_OFF

		BGCLR	$00,VBK_1
		BGCLR	SPACE,VBK_0
		BGSET	TIMERBG,VBK_0

		OBJCLR

		VECTOR	VBLK,TIMER_TEST_VBLK_INT
		VECTOR	TIMER,TIMER_TEST_TIMER_INT

		XOR	A
		LD	(TIMER_INT_FLG),A	; TIMER割り込み用カウンタ
		LD	(TIMER_INT_FLG+1),A

		LD	(TIMA),A
		LD	(TMA),A
		LD	(TAC),A

		NEXT_MAIN	TIMER_TEST

		LD	HL,IE_BUF
		RES	IE_TIMER_BIT,(HL)	; TIMER割り込み OFF
		LD	(IE_BUF),A
		CALL	IE_SET

		CALL	LCDC_ON

		RET


;********************************************************
;*							*
;*		タイマーテスト TIMER割り込み		*
;*							*
;********************************************************

TIMER_TEST_TIMER_INT
		DI
		PUSH	AF
		PUSH	HL

		LD	HL,TIMER_INT_FLG	; TIMER_INT_FLG++
		INC	(HL)
		JR	NZ,_10
		INC	HL
		INC	(HL)

_10		POP	HL
		POP	AF
		EI
		RETI


;********************************************************
;*							*
;*		タイマーテスト				*
;*							*
;********************************************************

TIMER_TEST
		LD	A,(CNT1)
		BIT	A_KEY_BIT,A
		JR	Z,_10
		LD	A,(TRG1)

_10		LD	HL,TMA
		BIT	U_KEY_BIT,A		; TMA++
		JR	Z,_20
		INC	(HL)
		JR	_60

_20		BIT	D_KEY_BIT,A
		JR	Z,_30
		DEC	(HL)			; TMA--
		JR	_60

_30		LD	A,(TRG1)
		LD	B,A

		BIT	B_KEY_BIT,B		; 入力クロック切替
		JR	Z,_40
		LD	A,(TAC)
		AND	TAC_START
		LD	C,A
		LD	A,(TAC)
		INC	A
		AND	$03
		OR	C
		LD	(TAC),A

_40		BIT	ST_KEY_BIT,B		; TIMER START/STOP
		JR	Z,_50
		LD	A,(TAC)
		XOR	TAC_START
		LD	(TAC),A

_50		BIT	SE_KEY_BIT,B		; TIMER割り込み ON/OFF
		JR	Z,_60
		LD	A,(IE_BUF)
		XOR	IE_TIMER
		LD	(IE_BUF),A
		CALL	IE_SET

;--------------------------------------------------------

_60		LD	A,(CNT1)
		CP	A_KEY | B_KEY
		RET	NZ

		LD	HL,TAC
		RES	TAC_START_BIT,(HL)	; TIMER STOP

		LD	HL,IE_BUF
		RES	IE_TIMER_BIT,(HL)	; TIMER割り込み OFF
		CALL	IE_SET

		NEXT_MAIN	SET_BG_TITLE
		RET


;********************************************************
;*							*
;*		タイマーテスト V-BLANK割り込み		*
;*							*
;********************************************************

TIMER_TEST_TAC_DSP_ADDR		=	$98F1
TIMER_TEST_TMA_DSP_ADDR		=	$9931
TIMER_TEST_TIMA_DSP_ADDR	=	$9971
TIMER_TEST_INT_DSP_ADDR		=	$99B2
TIMER_TEST_DIV_DSP_ADDR		=	$99F1

TIMER_TEST_VBLK_INT
		PUSH	AF
		PUSH	BC
		PUSH	DE
		PUSH	HL

		LD	A,(CNT1)		; DIVリード
		AND	$FF
		JR	Z,_10
		LD	(DIV),A			; DIVクリア (A:anything O.K.)

_10		LD	BC,TIMER_TEST_TAC_DSP_ADDR
		LD	A,(TAC)
		AND	$03
		CALL	GET_NUM

		LD	BC,TIMER_TEST_TMA_DSP_ADDR
		LD	A,(TMA)
		CALL	GET_NUM

		LD	BC,TIMER_TEST_TIMA_DSP_ADDR
		LD	A,(TIMA)
		CALL	GET_NUM

		LD	BC,TIMER_TEST_INT_DSP_ADDR
		LD	A,(TIMER_INT_FLG)
		CALL	GET_NUM
		LD	BC,TIMER_TEST_INT_DSP_ADDR -2
		LD	A,(TIMER_INT_FLG+1)
		CALL	GET_NUM

		LD	BC,TIMER_TEST_DIV_DSP_ADDR
		LD	A,(DIV)
		CALL	GET_NUM

;--------------------------------------------------------

		LD	HL,VBCOUNT
		INC	(HL)

		LD	A,1
		LD	(VBLK_FLG),A

		POP		HL
		POP		DE
		POP		BC
		POP		AF

		RETI


;********************************************************

	END
