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

	.include	defines.mac

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

	.include	bwhs0.ss

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

	.xdef	_bbwconv
_bbwconv:
	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.w	#WHITE,d6	* 白になる明るさ
	move.w	#%111110,d7	* 色信号取り出しＡＮＤパターン
	move.l	#GRAM,a2	* GRAM line top address
	move.l	#btonebuf0,a4	* a3=今のラインバッファー、a4=下のラインバッファー
	move.l	#btonebuf1,a3	* 最初のexgで入れ替わるから逆にしておく
	
	move.w	#SIZE_OF_Y-1,d1	* y
gb2:
	exg	a3,a4		* a3=今のラインバッファー、a4=下のラインバッファー
				* １行毎に入れ替える
	move.l	a4,a1
	move.l	a3,a0
	
	moveq.l	#0,d2		* carry=0
	
	* Ｘ方向展開
	* 行最初のドット
	move.w	(a2)+,d0	* (GRAM).w -> d0
	DOT_SUB			* ドット書き込み
	MAWARI1			* 周りへの配分
	
	* 中間の５１２−２ドット
	swap	d1
	move.w	#SIZE_OF_X-2-1,d1	* -1 for dbra
gb4:
	move.w	(a2)+,d0	* (GRAM).w -> d0
	DOT_SUB			* ドット書き込み
	MAWARI			* 周りへの配分
	
	dbra	d1,gb4		* x - loop
	swap	d1
	
	* 行最後のドット
	move.w	(a2)+,d0	* (GRAM).w -> d0
	DOT_SUB			* ドット書き込み
	MAWARI2			* 周りへの配分
	
	dbra	d1,gb2		* y - loop
	
	move.l	(sp)+,a1
	USERMODE		* to user mode
	movem.l	(sp)+,d3-d7/a3-a5
	rts

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