
	PAGE

;********************************************************
;*							*
;*		BGテスト初期設定			*
;*							*
;********************************************************

BG_TEST_INIT
		CALL	LCDC_OFF

		LD	A,VBK_1			; バンク1 キャラクタデータセット
		LD	(VBK),A
		MOV	CHR_DATA +$0A00,$8800,416
		MOV	CHR_DATA +$0800,$8E00,128
		MOV	CHR_DATA +$1000,$9000,160

		BGCLR	$00,VBK_1		; BGアトリビュートセット
		BGSET	BGATRB1,VBK_1
		BGSET	BGATRB2,VBK_1

		LD	HL,$9862		; カラーパレット指定
		LD	DE,$0010
		LD	C,4
_00		LD	B,$10
		LD	A,0
_01		LD	(HLI),A
		INC	A
		AND	$07
		DEC	B
		JR	NZ,_01
		ADD	HL,DE
		DEC	C
		JR	NZ,_00

		LD	HL,$9C62
		LD	DE,$0010
		LD	C,4
_02		LD	B,$10
		LD	A,0
_03		LD	(HLI),A
		INC	A
		AND	$07
		DEC	B
		JR	NZ,_03
		ADD	HL,DE
		DEC	C
		JR	NZ,_02

		BGCLR	SPACE,VBK_0		; BG CHRコードセット
		BGSET	BGBG1,VBK_0
		BGSET	BGBG2,VBK_0

		OBJCLR				; OBJ原簿セット
		MOV	BGOBJ,OBJRAM,128

		XOR	A
		LD	(R0),A			; BGRAMエリア記録用
		LD	(R1),A			; 優先表示フラグ記録用

		VECTOR	VBLK,BG_TEST_VBLK_INT	; V-BLANK割り込みベクタセット

		NEXT_MAIN	BG_TEST

		CALL	LCDC_ON

		RET


;********************************************************
;*							*
;*		BGテスト				*
;*							*
;********************************************************

BG_TEST
		LD	A,VBK_1			; BGアトリビュートエリア選択
		LD	(VBK),A

		LD	A,(LCDC)		; BGRAMエリア記録
		BIT	LCDC_BG_SCREEN_BIT,A
		JR	NZ,_01
		LD	A,$98
		JR	_02
_01		LD	A,$9C
_02		LD	(R0),A

		DI

		LD	A,(CNT1)
		BIT	B_KEY_BIT,A
		JR	NZ,_30

		BIT	A_KEY_BIT,A		; 画面スクロール
		JR	Z,_10
		LD	A,(TRG1)

_10		LD	HL,SCY_BUF
		BIT	D_KEY_BIT,A		; SCY++
		JR	Z,_11
		INC	(HL)

_11		BIT	U_KEY_BIT,A		; SCY--
		JR	Z,_12
		DEC	(HL)

_12		LD	HL,SCX_BUF
		BIT	R_KEY_BIT,A		; SCX++
		JR	Z,_13
		INC	(HL)

_13		BIT	L_KEY_BIT,A		; SCX--
		JR	Z,_20
		DEC	(HL)

_20		LD	A,(TRG1)		; カラーパレット切替
		BIT	ST_KEY_BIT,A
		LD	L,$00
		LD	A,(R0)
		LD	H,A
		CALL	NZ,CHG_BG_PLT

		LD	A,(TRG1)		; VRAMバンク切替
		BIT	SE_KEY_BIT,A
		LD	L,$00
		LD	A,(R0)
		LD	H,A
		CALL	NZ,CHG_BG_VBK
		JR	_40

_30		LD	A,(TRG1)		; BG上下左右反転
		BIT	R_KEY_BIT,A
		LD	L,$00
		LD	A,(R0)
		LD	H,A
		CALL	NZ,HV_FLIP_BG

		LD	A,(TRG1)		; BG/OBJ表示優先順位切替
		BIT	L_KEY_BIT,A
		LD	L,$00
		LD	A,(R0)
		LD	H,A
		CALL	NZ,CHG_BG_PRI

		LD	A,(TRG1)		; BGRAMエリア切替
		BIT	U_KEY_BIT,A
		JR	Z,_40
		LD	A,(LCDC_BUF)
		XOR	LCDC_BG_SCREEN
		LD	(LCDC_BUF),A

;--------------------------------------------------------

_40		EI

		LD	A,(CNT1)
		CP	A_KEY | B_KEY
		RET	NZ

		LD	A,LCDC_START | LCDC_OBJ_ON | LCDC_BG_ON
		LD	(LCDC_BUF),A

		XOR	A
		LD	(SCY_BUF),A
		LD	(SCX_BUF),A

		NEXT_MAIN	SET_BG_TITLE
		RET


;********************************************************
;*							*
;*		BGコントロール				*
;*							*
;********************************************************

CHG_BG_PLT
		LD	B,$20

_10		LD	A,(LY)			; V-BLANK待ち
		CP	145
		JR	NZ,_10

		LD	C,$20
_11		LD	A,(HL)
		LD	D,A
		AND	$F8			; E = %*****000
		LD	E,A
		LD	A,D
		INC	A
		AND	$07			; A = %00000***
		OR	E
		LD	(HLI),A
		DEC	C
		JR	NZ,_11

		DEC	B
		JR	NZ,_10
		RET


CHG_BG_VBK
		LD	B,$08

_10		LD	A,(LY)			; V-BLANK待ち
		CP	145
		JR	NZ,_10

		LD	C,$20
_11		LD	A,(HL)
		XOR	$08			; A = %****X***
		LD	(HLI),A
		DEC	C
		JR	NZ,_11

		DEC	B
		JR	NZ,_10
		RET


HV_FLIP_BG
		LD	B,$08

_10		LD	A,(LY)			; V-BLANK待ち
		CP	145
		JR	NZ,_10

		LD	C,$20
_11		LD	A,(HL)
		LD	D,A
		AND	$9F			; E = %*00*****
		LD	E,A
		LD	A,D
		ADD	A,$20
		AND	$60			; A = %0**00000
		OR	E
		LD	(HLI),A
		DEC	C
		JR	NZ,_11

		DEC	B
		JR	NZ,_10
		RET


CHG_BG_PRI
		LD	B,$08

		LD	A,(R1)			; 優先フラグ状態読み込み
		DEC	A
		JR	Z,_10			; R1 = 01 ?
		DEC	A
		JR	Z,_20			; R1 = 10 ?
		DEC	A
		JR	Z,_10			; R1 = 11 ?
		JR	_20

_10		LD	A,(LY)			; V-BLANK 待ち
		CP	145
		JR	NZ,_10

		LD	C,$20			; BG側アトリビュートフラグ反転
_11		LD	A,(HL)
		XOR	$80			; A = %X*******
		LD	(HLI),A
		DEC	C
		JR	NZ,_11
		DEC	B
		JR	NZ,_10

_20		LD	HL,OBJRAM +3		; OBJ側アトリビュートフラグ反転
		LD	C,40
_21		LD	A,(HL)
		XOR	$80			; A = %X*******
		LD	(HLI),A
		INC	HL
		INC	HL
		INC	HL
		DEC	C
		JR	NZ,_21

		LD	A,(R1)			; 優先フラグ状態セーブ
		INC	A
		AND	$03
		LD	(R1),A
		RET


;********************************************************
;*							*
;*		BGテスト V-BLANK割り込み		*
;*							*
;********************************************************

BG_SCY_DSP_ADDR		=	$C04A
BG_SCX_DSP_ADDR		=	$C052
BG_PLT_DSP_ADDR		= 	$C05A
BG_VBK_DSP_ADDR		=	$C05E
BG_FLIP_DSP_ADDR	=	$C062
BG_PRI_DSP_ADDR		=	$C06A
BG_SCR_DSP_ADDR		=	$C07E

BG_TEST_VBLK_INT
		PUSH	AF
		PUSH	BC
		PUSH	DE
		PUSH	HL

		LD	BC,BG_SCY_DSP_ADDR	; SCY表示
		LD	A,(SCY)
		CALL	GET_NUM
		LD	A,(BG_SCY_DSP_ADDR +1)
		LD	(BG_SCY_DSP_ADDR +4),A
		XOR	A
		LD	(BG_SCY_DSP_ADDR +1),A

		LD	BC,BG_SCX_DSP_ADDR	; SCX表示
		LD	A,(SCX)
		CALL	GET_NUM
		LD	A,(BG_SCX_DSP_ADDR +1)
		LD	(BG_SCX_DSP_ADDR +4),A
		XOR	A
		LD	(BG_SCX_DSP_ADDR +1),A

		LD	A,VBK_1			; BGアトリビュートエリア選択
		LD	(VBK),A

		LD	E,$00			; アトリビュート読み込み
		LD	A,(R0)
		LD	D,A
		LD	A,(DE)
		LD	B,A

		LD	HL,BG_PLT_DSP_ADDR	; カラーパレットNO.表示
		AND	$07			; A = %00000***
		OR	$E0
		LD	(HL),A

		LD	HL,BG_VBK_DSP_ADDR	; VRAMバンク表示
		BIT	3,B
		JR	NZ,_10
		LD	A,FONT_0
		JR	_11
_10		LD	A,FONT_1
_11		LD	(HL),A

		LD	HL,BG_FLIP_DSP_ADDR	; BG反転状態を表示
		BIT	5,B			; 左右反転 ?
		JR	NZ,_20
		LD	A,SPACE
		JR	_21
_20		LD	A,FONT_H
_21		LD	(HL),A
		LD	HL,BG_FLIP_DSP_ADDR +4
		BIT	6,B			; 上下反転 ?
		JR	NZ,_22
		LD	A,SPACE
		JR	_23
_22		LD	A,FONT_V
_23		LD	(HL),A

		LD	HL,BG_PRI_DSP_ADDR	; 表示優先状態を表示
		BIT	7,B
		JR	NZ,_30
		LD	A,FONT_0		; OBJ側フラグに従う
		JR	_31
_30		LD	A,FONT_1		; BG最優先
_31		LD	(HL),A
		LD	HL,BG_PRI_DSP_ADDR +4
		LD	A,(OBJRAM +3)
		BIT	7,A
		JR	NZ,_32
		LD	A,FONT_0		; OBJ優先
		JR	_33
_32		LD	A,FONT_1		; BG優先
_33		LD	(HL),A

		LD	HL,BG_SCR_DSP_ADDR	; BGRAMエリアを表示
		LD	A,(LCDC_BUF)
		BIT	LCDC_BG_SCREEN_BIT,A
		JR	NZ,_40
		LD	A,FONT_8
		JR	_41
_40		LD	A,FONT_C
_41		LD	(HL),A

;--------------------------------------------------------

		LD	HL,VBCOUNT
		INC	(HL)

		LD	A,1
		LD	(VBLK_FLG),A

		POP	HL
		POP	DE
		POP	BC
		POP	AF

		RETI


;********************************************************

	END
