
	PAGE

;********************************************************
;*							*
;*		サウンドテスト初期設定			*
;*							*
;********************************************************

SOUND_TEST_INIT

		CALL	LCDC_OFF

		BGCLR	$00,VBK_1		; BGアトリビュートクリア
		BGCLR	SPACE,VBK_0		; BG CHRコードセット
		BGSET	SOUNDBG,VBK_0

		OBJCLR

		VECTOR	VBLK,SOUND_TEST_VBLK_INT

		NEXT_MAIN	SOUND_TEST

		CALL	LCDC_ON

		FARCALL	SOUCLR

		LD	A,5			; マリオのBGM
		LD	(R0),A			; R0 == MUSIC No.保存用
		XOR	A
		LD	(R1),A			; R1 == EFECT No.保存用
		LD	(NR52),A		; ALL SOUND OFF

		RET


;********************************************************
;*							*
;*		サウンドテスト				*
;*							*
;********************************************************

SOUND_TEST
		LD	A,(TRG1)
		LD	B,A

		BIT	A_KEY_BIT,B		; VIN TEST
		JR	Z,_00
		XOR	A
		LD	(NR52),A
		NEXT_MAIN	SOUND_VIN_TEST_INIT
		RET

_00		BIT	ST_KEY_BIT,B
		JR	Z,_20

		LD	A,(NR52)
		BIT	7,A			; サウンド ON/OFF
		JR	NZ, _10

		LD	A,$80
		LD	(NR52),A		; ALL SOUND ON
		LD	A,$077			; VOLUME MAX & EXT IN OFF
		LD	(NR50),A		; TOTAL LEVEL
		LD	A,$0FF
		LD	(NR51),A		; SOUND RIGHT/LEFT
		LD	A,(R0)
		LD	(MUSIC),A
		JR	_60

_10		XOR	A
		LD	(NR52),A		; ALL SOUND OFF
		RET

_20		LD	HL,R0
		BIT	U_KEY_BIT,B		; MUSIC No.++
		JR	Z,_30
		INC	(HL)
		JR	_31

_30		BIT	D_KEY_BIT,B		; MUSIC No.--
		JR	Z, _40
		DEC	(HL)
_31		LD	A,(HL)
		LD	(MUSIC),A

_40		LD	HL,R1			; EFECT No.++
		BIT	R_KEY_BIT,B
		JR	Z,_50
		INC	(HL)
		JR	_51
_50
		BIT	L_KEY_BIT,B		; EFECT No.--
		JR	Z,_60
		DEC	(HL)
_51		LD	A,(HL)
		LD	(EFECT),A

_60		FARCALL	SOUND

;--------------------------------------------------------

		LD	A,(CNT1)
		CP	A_KEY | B_KEY
		RET	NZ

		XOR	A
		LD	(NR52),A		; ALL SOUND OFF

		NEXT_MAIN	SET_BG_TITLE
		RET


;********************************************************
;*							*
;*		サウンドテスト V-BLANK割り込み		*
;*							*
;********************************************************

SOUND_TEST_MNUM_DSP_ADDR	=	$98EE

SOUND_TEST_VBLK_INT
		PUSH	AF
		PUSH	BC
		PUSH	DE
		PUSH	HL

		LD	BC,SOUND_TEST_MNUM_DSP_ADDR
		LD	A,(R0)
		CALL	GET_NUM

		POP	HL
		POP	DE
		POP	BC
		POP	AF
		RETI


;********************************************************
;*							*
;*		サウンド VIN テスト			*
;*							*
;********************************************************

VIN_TEST_OBJ_DATA
		DEFB	$58,$70,$00,$01,$58,$38,$00,$01

SOUND_VIN_TEST_INIT
		CALL	LCDC_OFF

		BGCLR	SPACE,VBK_0
		BGSET	SOUVINBG,VBK_0

		OBJCLR
		MOVB	VIN_TEST_OBJ_DATA,OBJRAM,8

		VECTOR	VBLK,SOUND_VIN_TEST_VBLK_INT

		CALL	LCDC_ON

		LD	A,$80
		LD	(NR52),A		; ALL SOUND ON
		LD	A,$77			; VOLUME MAX & EXT IN OFF
		LD	(NR50),A		; TOTAL LEVEL
		LD	A,$FF			; SOUND RIGHT/LEFT
		LD	(NR51),A

		NEXT_MAIN	SOUND_VIN_TEST

		RET


SOUND_VIN_TEST
		LD	A,(TRG1)
		LD	B,A

		LD	HL,NR50
		BIT	A_KEY_BIT,B
		JR	Z,_10
		LD	A,(HL)
		XOR	$08
		LD	(HL),A
		JR	_20

_10		BIT	B_KEY_BIT,B
		JR	Z,_20
		LD	A,(HL)
		XOR	$80
		LD	(HL),A

;--------------------------------------------------------

_20		LD	A,(CNT1)
		CP	A_KEY | B_KEY
		RET	NZ

		XOR	A
		LD	(NR52),A		; ALL SOUND OFF

		NEXT_MAIN	SOUND_TEST_INIT
		RET


;********************************************************
;*							*
;*		VIN テスト V-BLANK割り込み		*
;*							*
;********************************************************

SOUND_VIN_TEST_VBLK_INT
		PUSH	AF
		PUSH	BC
		PUSH	DE
		PUSH	HL

		LD	DE,NR50
		LD	A,(DE)
		LD	B,A

		LD	HL,OBJRAM+2
		BIT	3,B
		JR	Z,_10
		LD	A,$03
		JR	_11
_10		LD	A,$00
_11		LD	(HL),A

		LD	HL,OBJRAM+6
		BIT	7,B
		JR	Z,_20
		LD	A,$03
		JR	_21
_20		LD	A,$00
_21		LD	(HL),A

		POP	HL
		POP	DE
		POP	BC
		POP	AF
		RETI


;********************************************************

	END
