
;---------------------------------------------------------------------
;		ＣＲＡＭ上に４色キャラクタデータを展開
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		入力：
;		R0 <= データバンク
;		R1 <= データアドレス
;		R3 <= 展開ライン数 ( ドット単位 1 - 128 )
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;		破壊：
;		ＲＯＭバンクレジスタ
;		プロットオプションレジスタ
;		ＣＲＡＭ 0000h - 0081h
;		ＣＲＡＭ スクリーンベース
;---------------------------------------------------------------------
DEF_CHR

RomBank_WK	equ	080h	;偶数番地であればどこでも

;Color_RG	rgs	2
;Ymax_RG		rgs	3
;Temp_RG		rgs	4
;Flag_RG		rgs	4
;StartX_RG	rgs	5
;StartY_RG	rgs	6
;DataAdd_RG	rgs	7
;Line_RG		rgs	8
;Sentaku_RG	rgs	9
;BitCount_RG	rgs	10


		romb
		sm	(RomBank_WK),r0
		move	r14,r1

		ibt	r0,#00001b
		cmode

		ibt	r8,#0

;		プロットバッファの初期化
;---------------------------------------
		sub	r0
		ibt	r7,#0
		ibt	r12,#64

		cache

		move	r13,r15

		stw	(r7)
		inc	r7
		loop
		inc	r7

		dec	r7	; <= 127

;		ビットデータの初期化
;---------------------------------------
		ibt	r10,#1

		iwt	r15,#START_LINE
		nop

;		区間処理フラグ読み込み
;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
FLAG_X1
		bne	Read$
		lsr

		link	#4
		iwt	r15,#GET_DATA
		getb
Read$
		move	r4,r0			;ビットデータ退避

		to	r2
		ldb	(r7)

		bcs	FLAG_11
		dec	r7

;		X ドット区間を伸ばす
;-------------------------------------------------------
FLAG_01
		ldb	(r7)
		cmp	r2
		beq	FLAG_01
		dec	r7
		inc	r7

		move	r13,r15

		from	r2
		stb	(r7)
		loop
		dec	r7

		bpl	SET_GOMA
		alt1
		nop

		iwt	r15,#PLOT_BUFF2
		inc	r7	;<= 0

;		X ドット区間を縮ます
;-------------------------------------------------------
Zero11
		and	r1
		bra	Loop11
		sub	r0
FLAG_11
		bmi	Zero11
		ldb	(r7)
		cmp	r2
		beq	FLAG_11
		dec	r7
		inc	r7
Loop11
		with	r7
		add	r12

;		ゴマを置く
;- - - - - - - - - - - - - - - - - - - - - - - - - - - -
		alt1
SET_GOMA
		stw	(r7)
		move	r0,r4

		db	0ACh		;ibt	LoopCount_RG,#0

;		カウント読み込み
;-------------------------------------------------------
READ_COUNT
		db	0
		ibt	r4,#1
		bra	ReadF$
		dec	r10

;		有効ビット読み込み
;- - - - - - - - - - - - - - - - - - - -
ReadX$
		dec	r10
		bne	Readn$
		lsr

		link	#4
		iwt	r15,#GET_DATA
		getb
Readn$
		bcc	NextBit$

		with	r12
		or	r4

;		次のビット
;- - - - - - - - - - - - - - - - - - - -
NextBit$
		with	r4
		add	r4

;		次のビットが有効か判断
;- - - - - - - - - - - - - - - - - - - -
		dec	r10
ReadF$
		bne	Read$
		lsr

		link	#4
		iwt	r15,#GET_DATA
		getb
Read$
		bcs	ReadX$

;		カウント決定
;- - - - - - - - - - - - - - - - - - - -
SetCount$
		with	r12
		or	r4

;		区間処理フラグ読み込み
;-------------------------------------------------------
READ_FLAG
		moves	r9,r9
		bpl	SHINKUKAN

		dec	r10
		bne	Read$
		lsr

		link	#4
		iwt	r15,#GET_DATA
		getb
Read$
		bcs	FLAG_X1
		dec	r10
FLAG_X0
		bne	Read$
		lsr

		link	#4
		iwt	r15,#GET_DATA
		getb
Read$
		bcs	FLAG_10

;		X 個の区間をそのままにする
;-------------------------------------------------------
FLAG_00
		move	r4,r0

		move	r13,r15

		to	r2
		ldb	(r7)
		dec	r7
Loop$
		bmi	PLOT_BUFF1
		ldb	(r7)
		cmp	r2
		beq	Loop$
		dec	r7

		loop
		inc	r7

		move	r0,r4

		bra	READ_COUNT
		db	0ACh		;ibt	LoopCount_RG,#0

;		色をセット
;---------------------------------------
SET_COLOR
		with	r15
SET_COLOR1
		to	r13

		from	r2
		stb	(r7)
		loop
		dec	r7

		bpl	READ_COUNT
		ibt	r12,#0

		bra	PLOT_BUFF0
		with	r0		;move

;		ライン描画開始
;---------------------------------------------------------------------
NEXT_LINE
		with	r4		;move	;ビットデータ復帰
NEXT_LINE1
		to	r0

		ibt	r7,#127
START_LINE
		with	r9
		rol

		dec	r10
		bne	Read$
		lsr

		link	#3
		bra	GET_DATA
		getb
Read$
		with	r9
		ror

		iwt	r15,#READ_COUNT
		db	0ACh		;ibt	LoopCount_RG,#0

;		新区間作成
;-------------------------------------------------------
FLAG_10
		dec	r10
SHINKUKAN
		ibt	r2,#0

		bne	c2$
		lsr

		link	#3
		bra	GET_DATA
		getb
c2$
		with	r2
		rol

		dec	r10
		bne	c1$
		lsr

		link	#3
		bra	GET_DATA
		getb
c1$
		with	r2
		rol
		bra	SET_COLOR1
		with	r15

;		ＲＡＭのデータをプロット
;---------------------------------------------------------------------
PLOT_BUFF0
		to	r4		;move
PLOT_BUFF1
		inc	r7	;<= 0
PLOT_BUFF2
		from	r8
		to	r5
		bic	#7

		from	r8
		to	r6
		and	#7

		iwt	r12,#16
		move	r13,r15

		move	r1,r5

		from	r7
		bic	#7
		to	r2
		or	r6

		ldb	(r7)
		inc	r7
		color
		plot
		ldb	(r7)
		inc	r7
		color
		plot
		ldb	(r7)
		inc	r7
		color
		plot
		ldb	(r7)
		inc	r7
		color
		plot
		ldb	(r7)
		inc	r7
		color
		plot
		ldb	(r7)
		inc	r7
		color
		plot
		ldb	(r7)
		inc	r7
		color
		plot
		ldb	(r7)
		inc	r7
		color

		loop
		plot

		inc	r8
		from	r8
		cmp	r3
		bcc	NEXT_LINE1
		with	r4

		rpix
		stop
		nop


;		ＲＯＭからデータを読む
;-------------------------------------------------------
GET_DATA
		inc	r14
		bne	OK$
		ibt	r10,#8

		lm	r10,(RomBank_WK)
		inc	r10
		from	r10
		sbk

		from	r10
		romb
		ibt	r14,#0
		db	0AAh		;ibt	BitCount_RG,#8
OK$
		db	8

		move	r15,r11
		lsr


;=====================================================================
