******************************************************
* 左回転（半角は回転不可）
******************************************************
*	a1	font buffer(必ず偶数アドレスから始まること)
*	d1.w	xdot
*	d2.w	ylines-1
*　一旦ワークエリア内に回転フォントを作ってそれを転送する
******************************************************
	.if	0
	.text
	.include	defines.mac
FNTTEST	macro	size,code,wx,wy,x,call
	lea	work(pc),a1
	move.l	#size.shl.16+code,d1
	IOCS	_FNTGET
	lea	work+4(pc),a1
	move.w	#wy,d2
	move.w	#wx,d1
	bsr	call
	lea	work(pc),a1
	move.w	#x*8,d1
	move.w	#430,d2
	IOCS	_TEXTPUT
	endm

	* 8*16
	FNTTEST	8,'R',8,15,0,lrot0
	* 12*24
	FNTTEST	12,'R',12,23,4,lrot1
	* 16*16
	FNTTEST	8,'Ｒ',16,15,8,lrot1
	* 24*24
	FNTTEST	12,'Ｒ',24,23,16,lrot2
	clr.w	-(sp)
	DOS	_EXIT2

work:	.ds.w	2
	.ds.b	3*24
fontwork:
	.ds.b	4*24		* 高速化のためlongword単位処理をするから
	.even
	.else
	.xref	fontwork	* フォント加工ワークエリア（外部）
	.endif
******************************************************

	.text
	.xdef	lrot1
lrot1:				* x=12/16
	cmp.w	#12,d1
	beq	lrot0		* x=12:半角は回転できない
	
	move.l	a1,a0		* buffer address copy
l_r11:	* 16*16
	lea	fontwork+2*16,a2 * ワークエリアの最終アドレス:(pc)では届かないことがある
	move.w	(a0)+,d0
	rept	16		* 16bit分処理
	add.w	d0,d0
	roxl.w	-(a2)
	endm
	dbf	d2,l_r11
	* ここに来た時にはa2=fontwork
	moveq.l	#16/2-1,d0
ltw1:	move.l	(a2)+,(a1)+
	dbf	d0,ltw1
	.xdef	lrot0
lrot0:				* x=8/12:半角は回転できない
	rts

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

	.xdef	lrot2
lrot2:				* x=24
	lsr.w	#1,d2		* 2line単位処理
	move.l	a1,a0		* buffer address copy
l_r21:	* line 0
	lea	fontwork+4*24,a2	* ワークエリアの最終アドレス
	move.w	(a0)+,d0
	swap	d0
	move.b	(a0)+,d0
	lsl.w	#8,d0
	rept	24		* 24bit分処理
	add.l	d0,d0
	*addx.l	-(a2),(a2)
	roxl.w	-(a2)
	roxl.w	-(a2)
	endm
	* line 1
	lea	fontwork+4*24,a2	* ワークエリアの最終アドレス
	move.b	(a0)+,d0
	swap	d0
	move.w	(a0)+,d0
	lsl.l	#8,d0
	rept	24		* 24bit分処理
	add.l	d0,d0
	*addx.l	-(a2),(a2)
	roxl.w	-(a2)
	roxl.w	-(a2)
	endm
	dbf	d2,l_r21
	* ここに来た時にはa2=fontwork
	* ワークエリアからバッファーへ転送
	moveq.l	#24/2-1,d0	* 2line単位転送
ltw2:	* line 0
	addq.w	#1,a2
	move.b	(a2)+,(a1)+
	move.b	(a2)+,(a1)+
	move.b	(a2)+,(a1)+
	* line 1
	addq.w	#1,a2
	move.b	(a2)+,(a1)+
	move.w	(a2)+,(a1)+
	dbf	d0,ltw2
	rts

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