
	PAGE

;********************************************************
;*							*
;*		SIOテスト初期設定			*
;*							*
;********************************************************

SIO_TEST_INIT
		CALL	LCDC_OFF

		BGCLR	$00,VBK_1
		BGCLR	SPACE,VBK_0
		BGSET	SIOBG,VBK_0

		OBJCLR

		VECTOR	VBLK,SIO_TEST_VBLK_INT
		VECTOR	SIO,SIO_TEST_SIO_INT

		XOR	A
		LD	(SIO_INT_FLG),A		; 通信割り込み用カウンタ

		LD	(SC),A
		LD	(SB),A

		LD	(R0),A			; オートテストモードフラグ

		NEXT_MAIN	SIO_TEST

		LD	HL,IE_BUF		; 通信割り込み OFF
		RES	IE_SIO_BIT,(HL)
		CALL	IE_SET

		CALL	LCDC_ON

		RET


;********************************************************
;*							*
;*		SIOテスト SIO割り込み			*
;*							*
;********************************************************

SIO_TEST_SIO_INT
		DI
		PUSH	AF

		LD	A,(SIO_INT_FLG)
		INC	A
		LD	(SIO_INT_FLG),A

		POP	AF
		EI
		RETI


;********************************************************
;*							*
;*		SIOテスト				*
;*							*
;********************************************************

SIO_TEST
		LD	A,(SC)
		BIT	SC_START_BIT,A		; SCのD7=1の時は SBへのR/W禁止
		JR	NZ,_30

		LD	A,(CNT1)
		BIT	A_KEY_BIT,A
		JR	Z,_10
		LD	A,(TRG1)

_10		LD	HL,SB			; SB++
		BIT	U_KEY_BIT,A
		JR	Z,_20
		INC	(HL)

_20		BIT	D_KEY_BIT,A		; SB--
		JR	Z,_30
		DEC	(HL)

_30		LD	A,(TRG1)
		LD	B,A
		LD	HL,SC

		BIT	SE_KEY_BIT,B		; クロックモード切替
		JR	Z,_40
		LD	A,(HL)
		INC	A
		AND	$03
		LD	(HL),A

_40		BIT	ST_KEY_BIT,B		; 転送スタート
		JR	Z,_50
		LD	A,(R0)
		AND	A
		JR	Z,_41
		NEXT_MAIN	SIO_AUTO_TEST
		RET
_41		LD	A,(HL)
		XOR	SC_START
		LD	(HL),A

_50		BIT	B_KEY_BIT,B		; 通信割り込み ON/OFF
		JR	Z,_60
		LD	A,(IE_BUF)
		XOR	IE_SIO
		LD	(IE_BUF),A
		CALL	IE_SET

_60		BIT	R_KEY_BIT,B		; オートテストモード ON/OFF
		JR	Z,_70
		LD	A,(R0)
		XOR	1
		LD	(R0),A

;--------------------------------------------------------

_70		LD	A,(CNT1)
		CP	A_KEY | B_KEY
		RET	NZ

		XOR	A			; 通信不許可
		LD	(SC),A

		LD	HL,IE_BUF		; SIO割り込み OFF
		RES	IE_SIO_BIT,(HL)
		CALL	IE_SET

		NEXT_MAIN	SET_BG_TITLE
		RET


SIO_AUTO_TEST
		LD	A,(SC)
		BIT	SC_START_BIT,A		; SCのD7=1の時は SBへのR/W禁止
		JR	NZ,_20

		BIT	SC_CLOCK_BIT,A
		JR	Z,_10

		LD	A,(SB)
		INC	A
		LD	(SB),A

_10		LD	A,(SC)
		SET	SC_START_BIT,A
		LD	(SC),A

_20		LD	A,(CNT1)
		CP	B_KEY
		RET	NZ

		XOR	A
		LD	(R0),A

		NEXT_MAIN	SIO_TEST
		RET


;********************************************************
;*							*
;*		SIOテスト V-BLANK割り込み		*
;*							*
;********************************************************

SIO_TEST_SB_DSP_ADDR		=	$98F1
SIO_TEST_SC_DSP_ADDR		=	$9931
SIO_TEST_INT_DSP_ADDR		=	$996F
SIO_TEST_INT_COUNT_DSP_ADDR	=	$9971
SIO_AUTO_TEST_DSP_ADDR		=	$99EF

SIO_TEST_VBLK_INT
		PUSH	AF
		PUSH	BC
		PUSH	DE
		PUSH	HL

		LD	A,(SC)			; SCのD7=1の時は SBへのR/W禁止
		BIT	SC_START_BIT,A
		JR	NZ,_00

		LD	BC,SIO_TEST_SB_DSP_ADDR
		LD	A,(SB)
		CALL	GET_NUM

_00		LD	BC,SIO_TEST_SC_DSP_ADDR
		LD	A,(SC)
		AND	SC_START | SC_SPEED | SC_CLOCK
		CALL	GET_NUM

		LD	BC,SIO_TEST_INT_COUNT_DSP_ADDR
		LD	A,(SIO_INT_FLG)
		CALL	GET_NUM

		LD	A,FONT_0
		LD	HL,IE_BUF
		BIT	IE_SIO_BIT,(HL)
		JR	Z,_10
		INC	A
_10		LD	(SIO_TEST_INT_DSP_ADDR),A

		LD	A,FONT_0
		LD	HL,R0
		BIT	0,(HL)
		JR	Z,_20
		INC	A
_20		LD	(SIO_AUTO_TEST_DSP_ADDR),A

;--------------------------------------------------------

		LD	HL,VBCOUNT
		INC	(HL)

		LD	A,1
		LD	(VBLK_FLG),A

		POP	HL
		POP	DE
		POP	BC
		POP	AF

		RETI


;********************************************************

	END
