******************************************************
* 拡張属性に基づくフォント加工
******************************************************
* void fontset(_FNTBUF *fnt)
* void fontset2(_FNTBUF *fnt,int col)

	.text
	.xref	EXCOLORS
	.xref	fontatrbs

	.xdef	_fontset2	* Ｃインターフェース
_fontset2:	* 指定属性による加工
	move.w	8+2(sp),d0	* d0.w = 拡張属性
	move.l	4(sp),a1	* a1.l = フォント構造体アドレス
	bra.s	font0

	.xdef	_fontset	* Ｃインターフェース
_fontset:	* 現在のEXCOLORによる拡張属性による加工
	move.l	4(sp),a1	* フォント構造体アドレス
	*
	.xdef	fontsets	* アセンブラーインターフェース
fontsets:
	moveq.l	#-1,d2
	jsr	EXCOLORS	* d0.l : BIOS属性を常に把握するため
font0:	* d0.w = 拡張属性
	* a1.l = フォント構造体アドレス
	cmp.w	#%11+1,d0	* 色のみ？
	bcs	f0		* Yes -> 処理無し
	movem.l	d3/a3-a4,-(sp)	* push registers
	move.l	a1,a3		* save font address
	move.w	d0,d3		* save color
	
	* フォント加工：優先順位順
	lea	table(pc),a4
f1:	move.b	(a4)+,d1	* BIT
	beq	f2		* 0=end
	btst.l	d1,d3		* BIT check
	beq	f1		* Not - Next
	moveq.l	#0,d0		* for .w
	move.b	12-1(a4),d0	* No. : テーブルを増やした時は12も増やすこと
				* 上で+1されているので-1している
	move.l	a3,a1		* a1.l=font adrs
	jsr	fontatrbs	* d0.w=mode
	bra.s	f1		* next
f2:	move.l	a3,a1		* load font address
	movem.l	(sp)+,d3/a3-a4	* pop registers
f0:
	rts

******************************************************
* 属性ビット番号->処理番号変換＆処理優先順位テーブル

table:	.dc.b	 2,11, 4, 5, 6, 7, 9,12, 3,10, 8, 0 * BIT
	.dc.b	 1, 9, 2, 3, 4, 5, 7,10, 0, 8, 6, 0 * No
* 属性名       HLIGHT KASEN UDREV LRREV LROT RROT SHAJI NAKA REVERSE KESI KASURE end of table
	.even

******************************************************
	.end
