
	PAGE

;********************************************************
;*							*
;*		Aレジスタの値をCHRコードに変換		*
;*							*
;********************************************************

GET_NUM
		PUSH	AF
		SWAP	A
		AND	15
		CP	10			; A < 9 ?
		JR	NC,_10
		ADD	A,FONT_0
		JR	_11
_10		ADD	A,FONT_A -10
_11		LD	(BC),A			; B = Aの下位4ビットの文字コード
		INC	BC

		POP	AF
		AND	15
		CP	10
		JR	NC,_12
		ADD	A,FONT_0
		JR	_13
_12		ADD	A,FONT_A -10
_13		LD	(BC),A			; A = Aの上位4ビットの文字コード
		INC	BC

		RET


;********************************************************
;*							*
;*		アドレス配列の初期値設定		*
;*							*
;********************************************************

INIT_DEBUG_ADDR
		LD	DE,WRAMH
;		LD	DE,BGRAM1

INIT_DEBUG_ADDR_00
		LD	HL,DEBUG_ADDR_ARRAY
		LD	C,DSP_MAX

_10		LD	A,E
		LD	(HLI),A
		LD	A,D
		LD	(HLI),A
		INC	DE

		DEC	C
		JR	NZ,_10
		RET


;********************************************************
;*							*
;*		データ表示				*
;*							*
;********************************************************

DATA_DSP_VRAM_ADDR	=	$9869

DSP_DATA	MACRO	VRAM
		LD	BC,VRAM
		LD	A,(HLI)
		LD	E,A
		LD	A,(HLI)
		LD	D,A
		LD	A,(VBK_BUF)
		LD	(VBK),A
		LD	A,(DE)
		PUSH	AF
		LD	A,VBK_0
		LD	(VBK),A
		POP	AF
		CALL	GET_NUM			; A -> '(BC):(BC+1)'
		ENDM

DEBUGMODE_DATA_DISPLAY
		LD	HL,DEBUG_ADDR_ARRAY
		DSP_DATA	DATA_DSP_VRAM_ADDR + $00
		DSP_DATA	DATA_DSP_VRAM_ADDR + $20
		DSP_DATA	DATA_DSP_VRAM_ADDR + $40
		DSP_DATA	DATA_DSP_VRAM_ADDR + $60
		DSP_DATA	DATA_DSP_VRAM_ADDR + $80
		DSP_DATA	DATA_DSP_VRAM_ADDR + $A0
		DSP_DATA	DATA_DSP_VRAM_ADDR + $C0
		DSP_DATA	DATA_DSP_VRAM_ADDR + $E0
		RET


;********************************************************
;*							*
;*		アドレス表示 (1行のみ表示)		*
;*			IN: A = CURSOR_Y		*
;*							*
;********************************************************

ADDR_DSP_VRAM_ADDR	=	$9862
DSP_SET_OFFSET		=	$0008

ADDR_DSP_VADDR_ARRAY
		DW	ADDR_DSP_VRAM_ADDR + $00
		DW	ADDR_DSP_VRAM_ADDR + $20
		DW	ADDR_DSP_VRAM_ADDR + $40
		DW	ADDR_DSP_VRAM_ADDR + $60
		DW	ADDR_DSP_VRAM_ADDR + $80
		DW	ADDR_DSP_VRAM_ADDR + $A0
		DW	ADDR_DSP_VRAM_ADDR + $C0
		DW	ADDR_DSP_VRAM_ADDR + $E0

DEBUGMODE_ADDR_DISPLAY				; A = CURSOR_Y
		PUSH	AF
		PUSH	AF

		LDE_ARRAY	ADDR_DSP_VADDR_ARRAY
		LD	C,E
		LD	B,D

		POP	AF
		LDE_ARRAY	DEBUG_ADDR_ARRAY

		LD	A,D
		CALL	GET_NUM			; D -> '(BC):(BC+1)'
		LD	A,E
		CALL	GET_NUM			; E -> '(BC+2):(BC+3)'

		POP	AF			; SET DATAの表示
		LD_ARRAY	DEBUG_SETDATA_ARRAY
		LD	HL,DSP_SET_OFFSET
		ADD	HL,BC
		LD	C,L
		LD	B,H
		CALL	GET_NUM			; A -> '(BC+4+OFFSET):(BC+5+OFFSET)'

		RET


;********************************************************
;*							*
;*		アドレス表示 (DSP_MAX個)		*
;*							*
;********************************************************

DEBUGMODE_ALL_ADDR_DISPLAY
		XOR	A
_10		PUSH	AF
		CALL	DEBUGMODE_ADDR_DISPLAY	; アドレス表示 (1行のみ表示)
		POP	AF
		INC	A
		CP	DSP_MAX
		JR	NZ,_10
		RET


;********************************************************
;*							*
;*		キー入力による値の設定			*
;*							*
;********************************************************

CHANGE_ADDR_AND_SETDATA
		LD	D,0

		LD	A,(CURSOR_X)
		LD	B,A
		CP	4			; ADDR < 4 , SETDATA >= 4
		JR	NC,_20

		LD	A,(CURSOR_Y)		; ADDR 領域
		SLA	A
		LD	E,A
		LD	HL,DEBUG_ADDR_ARRAY
		ADD	HL,DE			; HL = &DEBUGMODE_ADDR_ARRAY[A](上位)

		LD	A,B			; B = CURSOR_X
		CP	2
		JR	NC,_10			; ADDR下位 < 2, ADDR上位 >= 2
		INC	HL			; HL = &DEBUGMODE_ADDR_ARRAY[A] + 1(下位)
_10		JR	_100

_20		LD	A,(CURSOR_Y)		; SETDATA 領域
		LD	E,A
		LD	HL,DEBUG_SETDATA_ARRAY
		ADD	HL,DE			; HL = &DEBUGMODE_SETDATA_ARRAY[A]

_100		LD	A,(TRG1)		; A,Bキー入力による数値の可変
		BIT	A_KEY_BIT,A
		JR	Z,_200

		LD	A,(HL)
		BIT	0,B			; B = CURSOR_X -> 偶数 or 奇数 ?
		JR	NZ,_110

		ADD	A,$10			; CURSOR_X -> 偶数
		LD	(HL),A			; 上位4ビット++
		RET

_110		LD	B,A			; CURSOR_X -> 奇数
		INC	A			; 下位4ビット++
		LD	(HL),A
		RET

_200		BIT	B_KEY_BIT,A
		RET	Z

		LD	A,(HL)
		BIT	0,B			; B = CURSOR_X -> 偶数 or 奇数 ?
		JR	NZ,_210

		SUB	$10			; CURSOR_X -> 偶数
		LD	(HL),A			; 上位4ビット--
		RET

_210		LD	B,A			; CURSOR_X -> 奇数
		DEC	A			; 下位4ビット--
		LD	(HL),A
		RET


;********************************************************
;*							*
;*		SETDATAを(ADDR)に代入する		*
;*							*
;********************************************************

DEBUG_ADDR_ARRAY	=	$C0A0		; デバッグアドレス配列
DEBUG_SETDATA_ARRAY	=	$C0B0		; デバッグセットデータ配列
						; (DEBUG_ADDR_ARRAY + 2*DSP_MAX)
SET_SETDATA
		LD	A,(TRG1)
		BIT	ST_KEY_BIT,A		; START KEY ?
		RET	Z

		LD	A,(VBK_BUF)
		LD	(VBK),A

		LD	A,(CURSOR_Y)
		LD	B,A

		LD	E,A
		LD	D,0
		LD	HL,DEBUG_SETDATA_ARRAY
		ADD	HL,DE
		LD	C,(HL)			; C = DEBUG_SET_DATA[A]

		LD	A,B			; B = CURSOR_Y
		SLA	A
		LD	E,A
		LD	HL,DEBUG_ADDR_ARRAY
		ADD	HL,DE
		LD	A,(HLI)
		LD	E,A
		LD	A,(HLI)
		LD	D,A			; DE = DEBUG_ADDR_DATA[A]

		LD	A,C
		LD	(DE),A

		LD	A,VBK_0
		LD	(VBK),A
		RET


;********************************************************

	END
