File:  [RetroPC.NET] / xmil / win9x / x86 / maketxtb.x86
Revision 1.1: download - view: text, annotated - select for diffs
Fri Aug 6 01:47:27 2004 JST (21 years, 2 months ago) by yui
Branches: MAIN
CVS tags: HEAD
fix...


section .text

	extern	_fontycnt
	extern	_x2left
	extern	_x2right


; ---- 8ライン ANK キャラクタ
;		esi = font face pointer
;		edi = dest
;		ecx = loop count (text height)

				align	4							; ノーマル
txt8_nor:		xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				mov		al, [esi + ebx]
				inc		ebx
				mov		[edi-1], al
				and		ebx, byte 7
				dec		ecx
				jne		short .lp
				ret

				align	4							; 横倍角左
txt8_x2left:	xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				movzx	eax, byte [esi + ebx]
				inc		ebx
				mov		al, [_x2left + eax]
				and		ebx, byte 7
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 横倍角右
txt8_x2right:	xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				movzx	eax, byte [esi + ebx]
				inc		ebx
				mov		al, [_x2right + eax]
				and		ebx, byte 7
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 縦倍角上
txt8_Yx2:		movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
.lp:			add		edi, byte 2
				mov		al, [esi + ebx]
				inc		ebx
				mov		[edi-2], al
				mov		[edi-1], al
				and		ebx, byte 7
				dec		ecx
				jne		short .lp
				ret

				align	4							; 4倍角左
txt8_x4left:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
				add		edi, byte 2
.lp:			movzx	eax, byte [esi + ebx]
				inc		ebx
				mov		al, [_x2left + eax]
				and		ebx, byte 7
				mov		[edi-2], al
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 4倍角右
txt8_x4right:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
.lp:			add		edi, byte 2
				movzx	eax, byte [esi + ebx]
				inc		ebx
				mov		al, [_x2right + eax]
				and		ebx, byte 7
				mov		[edi-2], al
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 右4ドット
txt8_right4dot:	xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				mov		al, [esi + ebx]
				inc		ebx
				shl		al, 4
				and		ebx, byte 7
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰れ右4ドット
txt8_right4half:movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
				je		short .lp
				mov		al, [esi + ebx]				; 最初の1回だけ…
				xor		ebx, ebx
				jmp		short .faceout
.lp:			mov		al, [esi + ebx]
				add		ebx, byte 2
.faceout:		shl		al, 4
				and		ebx, byte 7
				mov		[edi], al
				mov		[edi+1], al
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret

				align	4							; 右4ドット縦倍角上
txt8_right4x2:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
.lp:			add		edi, byte 2
				mov		al, [esi + ebx]
				inc		ebx
				shl		al, 4
				and		ebx, 7
				mov		[edi-2], al
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰して縦倍角
txt8_halfx2:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
				je		short .lp
				mov		al, [esi + ebx]				; 最初の1回だけ
				xor		ebx, ebx
				jmp		short .faceout
.lp:			mov		al, [esi + ebx]
				add		ebx, byte 2
.faceout:		mov		[edi], al
				mov		[edi+1], al
				and		ebx, byte 7
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰して4倍角左
txt8_halfx4left:movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
				je		short .lp
				movzx	eax, byte [esi + ebx]		; 最初の1回
				xor		ebx, ebx
				jmp		short .faceout
.lp:			movzx	eax, byte [esi + ebx]
				add		ebx, byte 2
.faceout:		mov		al, [_x2left + eax]
				and		ebx, byte 7
				mov		[edi], al
				mov		[edi+1], al
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰して4倍角右
txt8_halfx4right:
				movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				shr		ebx, 1
				je		short .lp
				movzx	eax, byte [esi + ebx]		; 最初の1回
				xor		ebx, ebx
				jmp		short .faceout
.lp:			movzx	eax, byte [esi + ebx]
				add		ebx, byte 2
.faceout:		mov		al, [_x2right + eax]
				and		ebx, byte 7
				mov		[edi], al
				mov		[edi+1], al
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret


; ---- 8ライン 漢字キャラクタ
;		esi = font face pointer
;		edi = dest
;		ecx = loop count (text height)

				align	4							; ノーマル
knj8_nor:		xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				mov		al, [esi + ebx]
				add		ebx, byte 2
				mov		[edi-1], al
				and		ebx, byte 15
				dec		ecx
				jne		short .lp
				ret

				align	4							; 横倍角左
knj8_x2left:	xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				movzx	eax, byte [esi + ebx]
				add		ebx, byte 2
				mov		al, [_x2left + eax]
				and		ebx, byte 15
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 横倍角右
knj8_x2right:	xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				movzx	eax, byte [esi + ebx]
				add		ebx, byte 2
				mov		al, [_x2right + eax]
				and		ebx, byte 15
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 縦倍角
knj8_Yx2:		movzx	ebx, byte [_fontycnt]		; カウンタレジューム
.lp:			inc		edi
				mov		al, [esi + ebx]
				inc		ebx
				mov		[edi-1], al
				and		ebx, byte 15
				dec		ecx
				jne		short .lp

				align	4							; 4倍角左
knj8_x4left:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
.lp:			inc		edi
				movzx	eax, byte [esi + ebx]
				inc		ebx
				mov		al, [_x2left + eax]
				and		ebx, byte 15
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 4倍角右
knj8_x4right:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
.lp:			inc		edi
				movzx	eax, byte [esi + ebx]
				inc		ebx
				mov		al, [_x2right + eax]
				and		ebx, byte 15
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 右4ドット
knj8_right4dot:	xor		ebx, ebx					; カウンタは戻る
.lp:			inc		edi
				mov		al, [esi + ebx]
				add		ebx, byte 2
				shl		al, 4
				and		ebx, byte 15
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰れ右4ドット
knj8_right4half:movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				or		ebx, ebx
				je		short .lp
				mov		al, [esi + ebx]				; 最初の1回だけ…
				xor		ebx, ebx
				jmp		short .faceout
.lp:			mov		al, [esi + ebx]
				add		ebx, byte 4
.faceout:		shl		al, 4
				and		ebx, byte 15
				mov		[edi], al
				mov		[edi+1], al
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret

				align	4							; 右4ドット縦倍角
knj8_right4x2:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
.lp:			inc		edi
				mov		al, [esi + ebx]
				inc		ebx
				shl		al, 4
				and		ebx, byte 15
				mov		[edi-1], al
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰して縦倍角
knj8_halfx2:	movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				or		ebx, ebx
				je		short .lp
				mov		al, [esi + ebx]				; 最初の1回だけ…
				xor		ebx, ebx
				jmp		short .faceout
.lp:			mov		al, [esi + ebx]
				add		ebx, byte 4
.faceout:		mov		[edi], al
				mov		[edi+1], al
				and		ebx, byte 15
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰して4倍角左
knj8_halfx4left:movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				or		ebx, ebx
				je		short .lp
				movzx	eax, byte [esi + ebx]		; 最初の1回だけ…
				xor		ebx, ebx
				jmp		short .faceout
.lp:			movzx	eax, byte [esi + ebx]
				add		ebx, byte 4
.faceout:		mov		al, [_x2left + eax]
				and		ebx, byte 15
				mov		[edi], al
				mov		[edi+1], al
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret

				align	4							; 潰して4倍角右
knj8_halfx4right:
				movzx	ebx, byte [_fontycnt]		; カウンタレジューム
				shr		ecx, 1
				or		ebx, ebx
				je		short .lp
				movzx	eax, byte [esi + ebx]		; 最初の1回だけ…
				xor		ebx, ebx
				jmp		short .faceout
.lp:			movzx	eax, byte [esi + ebx]
				add		ebx, byte 4
.faceout:		mov		al, [_x2right + eax]
				and		ebx, byte 15
				mov		[edi], al
				mov		[edi+1], al
				add		edi, byte 2
				dec		ecx
				jne		short .lp
				ret

				align	4
draw_nop:		ret


; ----

section .rdata

	global	_txtbeffects
	global	_knjbeffects

				align	16
_txtbeffects	dd	txt8_nor					; ノーマル
				dd	txt8_halfx2					; 潰して縦倍角
				dd	txt8_right4dot				; 右4ドット
				dd	txt8_right4half				; 潰れ右4ドット

				dd	txt8_Yx2					; 縦倍角
				dd	draw_nop					; ありえない
				dd	txt8_right4x2				; 右4ドット縦倍角
				dd	draw_nop					; ありえない

				dd	txt8_x2left					; 横倍角左
				dd	txt8_halfx4left				; 潰して4倍角左
				dd	txt8_x2right				; 横倍角右
				dd	txt8_halfx4right			; 潰して4倍角右

				dd	txt8_x4left					; 4倍角左
				dd	draw_nop					; ありえない
				dd	txt8_x4right				; 4倍角右
				dd	draw_nop					; ありえない


_knjbeffects	dd	knj8_nor					; ノーマル
				dd	knj8_halfx2					; 潰して縦倍角
				dd	knj8_right4dot				; 右4ドット
				dd	knj8_right4half				; 潰れ右4ドット

				dd	knj8_Yx2					; 縦倍角
				dd	draw_nop					; 
				dd	knj8_right4x2				; 右4ドット縦倍角
				dd	draw_nop					;

				dd	knj8_x2left					; 横倍角左
				dd	knj8_halfx4left				; 潰して4倍角左
				dd	knj8_x2right				; 横倍角右
				dd	knj8_halfx4right			; 潰して4倍角右

				dd	knj8_x4left					; 4倍角左
				dd	draw_nop					;
				dd	knj8_x4right				; 4倍角右
				dd	draw_nop					;

	ends


RetroPC.NET-CVS <cvs@retropc.net>