;------------------------------------------------
; CopyROM for SHARP PC-G801 V1.2
; Usage MON USER1250 and call from BASIC
; Create 2013/01/01 Modify 2013/03/06
; Written by POKOKEN
;------------------------------------------------
;------------------------------------------------
; DATA ON RESERVE AREA
;------------------------------------------------
			ORG		00040H		;BLANK SPACE
X2STABLE:
			DB		"01234567"	;BIN->HEX table
			DB		"89ABCDEF"	;BIN->HEX table
;------------------------------------------------
; CODE ON RESERVE AREA FA,FB,FC
;------------------------------------------------
			ORG		000FAH			;CALL ADDRESS FROM BASIC
BASICCALL:							;"CALL 250"
			JP		X2S8BIT			;FA FB FC

;------------------------------------------------
; WORK AREA FD,FE,FF
;------------------------------------------------
ARG1		EQU		000FEH			;値受け渡しワーク１
ARG2		EQU		000FFH			;値受け渡しワーク２

;------------------------------------------------
; BASIC WORK AREA
;------------------------------------------------
VAL1CHR		EQU		01800H			;一文字変数ワークエリアトップ

;------------------------------------------------
; CALL256 ROMの指定バンクを指定の4KBごとにRAMに転送
; POKE254,バンク番号:POKE255,ページ番号:CALL256
;------------------------------------------------
			ORG		0100H			;
			DI						;割り込み禁止
			IN		A,(19H)			;現在のROMバンクを得る
			PUSH	AF				;保存
			LD		A,(ARG1)		;ROMバンク番号指定(0~3)
			OUT		(19H),A			;ROMバンク変更
			LD		A,(ARG2)		;４KBごとのページを指定(0~3)
			SLA		A
			SLA		A
			SLA		A
			SLA		A				;A*16
			ADD		A,0C0H
			LD		H,A				;HL=転送元アドレス
			LD		L,000H			;ページ番号によりHL=X000H(X=C~F)
			LD		DE,00200H		;DE=転送先アドレス
			LD		BC,01000H		;BC=転送バイト数(4KB)
			LDIR					;転送
			POP		AF					
			OUT		(19H),A			;ROMバンクを復帰
			EI						;割り込み許可
			RET

;-------------------------------------------------
; １バイトの数値を16進２桁の文字列に変換 一文字変数に入れる
; set:			ARG1 = 8bit binary
; out:			一文字変数Z$
; destroy:		A,H,L,IX,IY
; usage:		POKE 254,数値:CALL250
;-------------------------------------------------
X2S8BIT:
			LD		IY,VAL1CHR		;一文字変数領域トップ
			LD		A,0F5H			;文字列の場合先頭がF5
			LD		(IY+0),A		;ZをZ$として使用

			LD		IX,X2STABLE		;変換テーブル
			LD		HL,ARG1
			RLD						;A:b3-b0 <- (HL):b7-b4
			AND		00FH
			LD		(X2S_LBL03+2),A	;REWRITE OPELAND
X2S_LBL03:
			LD		A,(IX+0)		;REWRITTEN d
			LD		(IY+1),A		;上位ニブル

			RLD						;A:b3-b0 <- (HL):b7-b4
			AND		00FH
			LD		(X2S_LBL04+2),A	;REWRITE OPELAND
X2S_LBL04:
			LD		A,(IX+0)		;REWRITTEN d
			LD		(IY+2),A		;下位ニブル
			XOR		A				;0終端
			LD		(IY+3),A		;STRING END
			RET

;-------------------------------------------------
; file end
;-------------------------------------------------
			END
