;*************************************************************************
;	_vramfill_dword
;	DWORD(32ビット)単位でVRAMを塗りつぶす
;*************************************************************************

		.386p
		assume	cs:SCN

para_s		STRUC
segVram		dd	?	;VRAM セグメント
adrVram		dd	?	;VRAM 書き込み開始アドレス	（破壊）
xbVram		dd	?	;VRAM 横バイト数
xb		dd	?	;パターン横ドット数÷４
yb		dd	?	;パターン縦ドット数
col0		dd	?	;色
col1		dd	?	;色
col2		dd	?	;色
para_s		ends

SCN		segment	dword 'CODE'


;*************************************************************************
;	_vramfill_dword
;	         +8
;*************************************************************************

		align	4
		public	_vramfill_dword
_vramfill_dword	proc	near
		push	EBP
		mov	EBP,ESP
		push	EBX
		push	ECX
		push	EDI
		push	ES

		mov	EBP,[EBP+8]		;EBP = para
		push	[EBP.segVram]
		pop	ES			;ES  = segVram
		mov	EBX,[EBP.yb];		;EBX = yb
		mov	EDI,[EBP.adrVram]	;EDI = adrVram
		align	4

_1y_lp:
		mov	EAX,[EBP.col0]		;EAX = col0
		mov	ECX,[EBP.xb]		;ECX = xb
		align	4
		rep stosd
		dec	EBX			;--yb
		je	_1lp_exit
		mov	EDI,[EBP.adrVram]		
		add	EDI,[EBP.xbVram]	;adr += vram_xb
		mov	[EBP.adrVram],EDI
		jmp	_1y_lp

		align	4
_1lp_exit:
		pop	ES
		pop	EDI
		pop	ECX
		pop	EBX
		pop	EBP
		ret

_vramfill_dword	endp

;*************************************************************************
;	_vramfill_dword24
;	         +8
;*************************************************************************

		align	4
		public	_vramfill_dword24
_vramfill_dword24	proc	near
		push	EBP
		mov	EBP,ESP
		push	EBX
		push	ECX
		push	EDI
		push	ES

		mov	EBP,[EBP+8]		;EBP = para
		push	[EBP.segVram]
		pop	ES			;ES  = segVram
		mov	EBX,[EBP.yb];		;EBX = yb
		mov	EDI,[EBP.adrVram]	;EDI = adrVram
		align	4

_2y_lp:
		mov	ECX,[EBP.xb]		;ECX = xb

		align	4
_2x_lp:
		mov	EAX,[EBP.col0]		;EAX = col0
		mov	ES:[EDI],EAX
		add	EDI,4

		mov	EAX,[EBP.col1]		;EAX = col1
		mov	ES:[EDI],EAX
		add	EDI,4

		mov	EAX,[EBP.col2]		;EAX = col2
		mov	ES:[EDI],EAX
		add	EDI,4

		dec	ECX
		jne	_2x_lp

		dec	EBX			;--yb
		je	_2lp_exit
		mov	EDI,[EBP.adrVram]		
		add	EDI,[EBP.xbVram]	;adr += vram_xb
		mov	[EBP.adrVram],EDI
		jmp	_2y_lp

		align	4
_2lp_exit:
		pop	ES
		pop	EDI
		pop	ECX
		pop	EBX
		pop	EBP
		ret

_vramfill_dword24	endp


SCN		ends

		end

