*************************************************************************
* 512*512:65535色 -> 256*256:白黒変換（バッファー格納型）
* この中では画面の初期化はしないので外部で行なうこと
*************************************************************************
* void bbwconv_256(unchar buff[256*256])
*************************************************************************

	.include	defines.mac

	* 使用ワークエリア
	.xref		btonebuf0
	.xref		btonebuf1

	.include	bwhs0.ss
	.include	avgread.ss

*************************************************************************

READ2	macro				* ２ドット、２ライン平均読み出し
	move.l	d2,-(sp)
	AVGREAD				* 平均読み出し
	move.l	(sp)+,d2
	
	* 定数ロード
	move.w	#WHITE,d6		* 白になる明るさ
	move.w	#%111110,d7		* 色信号取り出しＡＮＤパターン
	endm

*************************************************************************

	.xdef	_bbwconv_256
_bbwconv_256:
	move.l	4(sp),a0		* buffer address
	movem.l	d3-d7/a3-a5,-(sp)
	
	SUPERMODE			* SuperVisor mode
	move.l	d0,-(sp)		* save user mode stack pointer
	
	* 行バッファークリア
	move.l	a0,a5			* buffer address（a0は使うので）
	move.l	#btonebuf0,a0		* btonebuf0/1はつながっているので連続で消す
	move.w	#SIZE_OF_X-1,d0		* -1 for dbra
gb1:
	clr.l	(a0)+			* .wのところを.lにすることで倍の領域を消す
	dbra	d0,gb1
	
	move.l	#GRAM,a2		* GRAM line top address
	move.l	#btonebuf0,a4		* a3=今のラインバッファー、a4=下のラインバッファー
	move.l	#btonebuf1,a3		* 最初のexgで入れ替わるから逆にしておく
	
	move.w	#(SIZE_OF_Y/2)-1,d1	* y
l2:
	swap	d1
	
	exg	a3,a4			* a3=今のラインバッファー、a4=下のラインバッファー
					* １行毎に入れ替える
	move.l	a4,a1
	move.l	a3,a0
	
	moveq.l	#0,d2			* carry=0
	
	* Ｘ方向展開
	* 行最初のドット
	READ2				* (GRAM+GRAM+1/2).w -> d0
	DOT_SUB				* ドット書き込み
	MAWARI1				* 周りへの配分
	
	* 中間の５１２−４ドット
	move.w	#(SIZE_OF_X-4)/2-1,d1	* -1 for dbra
gb4:
	READ2				* (GRAM+GRAM+1/2).w -> d0
	DOT_SUB				* ドット書き込み
	MAWARI				* 周りへの配分
	
	dbra	d1,gb4			* x - loop
	
	* 行最後のドット
	READ2				* (GRAM+GRAM+1/2).w -> d0
	DOT_SUB				* ドット書き込み
	MAWARI2				* 周りへの配分
	
	lea.l	2*512(a2),a2		* 次の１行を飛ばす
	swap	d1
	dbra	d1,l2			* y - loop
	
	move.l	(sp)+,a1
	USERMODE			* to user mode
	movem.l	(sp)+,d3-d7/a3-a5
	rts

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