
	PAGE

;********************************************************
;*							*
;*		OBJテスト初期設定			*
;*							*
;********************************************************

OBJ_TEST_INIT
		CALL	LCDC_OFF

		LD	A,VBK_1			; バンク1 キャラクタデータセット
		LD	(VBK),A
		MOV	CHR_DATA +$0030,$8000,160

		BGCLR	$00,VBK_1		; BGアトリビュートセット
		BGSET	OBJATRB,VBK_1

		BGCLR	SPACE,VBK_0		; BG CHRコードセット
		BGSET	OBJBG,VBK_0

		OBJCLR				; OBJ原簿セット
		MOV	OBJOBJ,OBJRAM,160

		VECTOR	VBLK,OBJ_TEST_VBLK_INT	; V-BLANK割り込みベクタセット

		NEXT_MAIN	OBJ_TEST

		CALL	LCDC_ON

		RET


;********************************************************
;*							*
;*		OBJテスト				*
;*							*
;********************************************************

OBJ_TEST
		LD	A,(CNT1)
		BIT	B_KEY_BIT,A
		JR	NZ,_20

		BIT	A_KEY_BIT,A
		JR	Z,_10
		LD	A,(TRG1)

_10		BIT	D_KEY_BIT,A		; OBJ Y座標++
		LD	HL,OBJRAM
		CALl	NZ,INC_OBJ_POS

		BIT	U_KEY_BIT,A		; OBJ Y座標--
		LD	HL,OBJRAM
		CALL	NZ,DEC_OBJ_POS

		BIT	R_KEY_BIT,A		; OBJ X座標++
		LD	HL,OBJRAM +1
		CALL	NZ,INC_OBJ_POS

		BIT	L_KEY_BIT,A		; OBJ X座標--
		LD	HL,OBJRAM +1
		CALL	NZ,DEC_OBJ_POS

		LD	A,(TRG1)		; カラーパレット切替
		BIT	ST_KEY_BIT,A
		LD	HL,OBJRAM +3
		CALL	NZ,CHG_OBJ_PLT

		LD	A,(TRG1)		; VRAMバンク切替
		BIT	SE_KEY_BIT,A
		LD	HL,OBJRAM +3
		CALL	NZ,CHG_OBJ_VBK
		JR	_30

_20		LD	A,(TRG1)		; OBJ上下左右反転
		BIT	R_KEY_BIT,A
		LD	HL,OBJRAM +3
		CALL	NZ,HV_FLIP_OBJ

		LD	A,(TRG1)		; BG/OBJ表示優先順位切替
		BIT	L_KEY_BIT,A
		LD	HL,OBJRAM +3
		CALL	NZ,CHG_OBJ_PRI

		LD	A,(TRG1)		; DMG/MGBモード時のパレット切替
		BIT	D_KEY_BIT,A
		LD	HL,OBJRAM +3
		CALL	NZ,CHG_OBP

		LD	A,(TRG1)		; OBJサイズ切替
		BIT	U_KEY_BIT,A
		JR	Z,_30
		LD	A,(LCDC_BUF)
		XOR	LCDC_OBJ_SIZE
		LD	(LCDC_BUF),A
		RET

;--------------------------------------------------------

_30		LD	A,(CNT1)
		CP	A_KEY | B_KEY
		RET	NZ

		LD	A,LCDC_START | LCDC_OBJ_ON | LCDC_BG_ON
		LD	(LCDC_BUF),A

		NEXT_MAIN	SET_BG_TITLE
		RET


;********************************************************
;*							*
;*		OBJコントロール				*
;*							*
;********************************************************

INC_OBJ_POS
		LD	D,0
		LD	E,4
		LD	B,20
_10		INC	(HL)
		ADD	HL,DE
		DEC	B
		JR	NZ,_10
		LD	B,20
_11		DEC	(HL)
		ADD	HL,DE
		DEC	B
		JR	NZ,_11
		RET


DEC_OBJ_POS
		LD	D,0
		LD	E,4
		LD	B,20
_10		DEC	(HL)
		ADD	HL,DE
		DEC	B
		JR	NZ,_10
		LD	B,20
_11		INC	(HL)
		ADD	HL,DE
		DEC	B
		JR	NZ,_11
		RET


CHG_OBJ_PLT
		LD	B,40
_10		LD	A,(HL)
		LD	C,A
		AND	$F8			; D = %*****000
		LD	D,A
		LD	A,C
		INC	A
		AND	$07			; A = %00000***
		OR	D
		LD	(HLI),A
		INC	HL
		INC	HL
		INC	HL
		DEC	B
		JR	NZ,_10
		RET


CHG_OBJ_VBK
		LD	B,40
_10		LD	A,(HL)
		XOR	$08			; A = %****X***
		LD	(HLI),A
		INC	HL
		INC	HL
		INC	HL
		DEC	B
		JR	NZ,_10
		RET


HV_FLIP_OBJ
		LD	B,40
_10		LD	A,(HL)
		LD	C,A
		AND	$9F			; D = %*00*****
		LD	D,A
		LD	A,C
		ADD	A,$20
		AND	$60			; A = %0**00000
		OR	D
		LD	(HLI),A
		INC	HL
		INC	HL
		INC	HL
		DEC	B
		JR	NZ,_10
		RET


CHG_OBJ_PRI
		LD	B,40
_10		LD	A,(HL)
		XOR	$80			; A = %X*******
		LD	(HLI),A
		INC	HL
		INC	HL
		INC	HL
		DEC	B
		JR	NZ,_10
		RET


CHG_OBP
		LD	B,40
_10		LD	A,(HL)
		XOR	$10			; A = %***X****
		LD	(HLI),A
		INC	HL
		INC	HL
		INC	HL
		DEC	B
		JR	NZ,_10
		RET


;********************************************************
;*							*
;*		OBJテスト V-BLANK割り込み		*
;*							*
;********************************************************

OBJ_YPOS_DSP_ADDR	=	$9952
OBJ_XPOS_DSP_ADDR	=	$9972
OBJ_PLT_DSP_ADDR	=	$9993
OBJ_VBK_DSP_ADDR	=	$99B3
OBJ_FLIP_DSP_ADDR	=	$99D2
OBJ_PRI_DSP_ADDR	=	$99F1
OBJ_SIZE_DSP_ADDR	=	$9A12
OBJ_OBP_DSP_ADDR	=	$9A33

OBJ_TEST_VBLK_INT
		PUSH	AF
		PUSH	BC
		PUSH	DE
		PUSH	HL

		LD	A,(VBCOUNT)		; 処理落ち回避
		BIT	0,A
		JR	NZ,_00

		LD	BC,OBJ_YPOS_DSP_ADDR	; OBJ YPOSを表示
		LD	HL,OBJRAM
		LD	A,(HL)
		CALL	GET_NUM

		LD	BC,OBJ_XPOS_DSP_ADDR	; OBJ XPOSを表示
		LD	HL,OBJRAM +1
		LD	A,(HL)
		CALL	GET_NUM

		JR	_100

_00		LD	DE,OBJRAM +3		; OBJアトリビュート読み込み
		LD	A,(DE)
		LD	B,A

		LD	HL,OBJ_PLT_DSP_ADDR	; カラーパレットNO.表示
		AND	$07			; A = %00000***
		OR	$E0
		LD	(HL),A

		LD	HL,OBJ_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,OBJ_FLIP_DSP_ADDR	; OBJ反転状態を表示
		BIT	5,B			; 左右反転 ?
		JR	NZ,_20
		LD	A,SPACE
		JR	_21
_20		LD	A,FONT_H
_21		LD	(HLI),A
		BIT	6,B			; 上下反転 ?
		JR	NZ,_22
		LD	A,SPACE
		JR	_23
_22		LD	A,FONT_V
_23		LD	(HL),A

		LD	HL,OBJ_PRI_DSP_ADDR	; 表示優先状態を表示
		BIT	7,B
		JR	NZ,_30
		LD	A,FONT_O		; OBJ 優先
		LD	(HLI),A
		INC	HL
		LD	A,FONT_J
		JR	_31
_30		LD	A,SPACE			; BG 優先
		LD	(HLI),A
		INC	HL
		LD	A,FONT_G
_31		LD	(HL),A

		LD	HL,OBJ_SIZE_DSP_ADDR	; OBJサイズを表示
		LD	A,(LCDC)
		BIT	LCDC_OBJ_SIZE_BIT,A
		JR	NZ,_40
		LD	A,SPACE			; 8×8 ドット
		LD	(HLI),A
		LD	A,FONT_8
		JR	_41
_40		LD	A,FONT_1		; 8×16 ドット
		LD	(HLI),A
		LD	A,FONT_6
_41		LD	(HL),A

		LD	HL,OBJ_OBP_DSP_ADDR	; DMG/MGBモード時のパレットNO.表示
		BIT	4,B
		JR	NZ,_50
		LD	A,FONT_0
		JR	_51
_50		LD	A,FONT_1
_51		LD	(HL),A

;--------------------------------------------------------

_100		LD	HL,VBCOUNT
		INC	(HL)

		LD	A,1
		LD	(VBLK_FLG),A

		POP	HL
		POP	DE
		POP	BC
		POP	AF

		RETI


;********************************************************

	END
