www.pudn.com > ngcd080s.zip > draw_fix.asm


; ******************************************* 
; **** Fixed Text Layer Drawing Routines **** 
; ******************************************* 
 
	%include ".\src\helper.asm"	 
 
	BITS	32 
	 
	GLOBAL	_video_draw_fix 
	 
	EXTERN	_video_vidram 
	EXTERN	_video_fix_usage 
	EXTERN	_video_line_ptr 
	EXTERN	_video_paletteram_pc 
	EXTERN	_neogeo_fix_memory 
	 
	%macro	PUT_FIX 0 
	mov	ebp, edx 
	shr	edx, 4 
	and	ebp, 0Fh 
	jz	%%no_fix 
	mov	bp, [eax + ebp * 2] 
	mov	[edi], bp 
%%no_fix 
	add	edi, 2 
	%endmacro 
 
	SECTION	.text 
 
	AlignFunc 
	 
_video_draw_fix: 
	pushad 
	 
	mov	ecx, 28 
	mov	edi, [_video_line_ptr] 
	add	edi, 16 
	mov	esi, [_video_vidram] 
	add	esi, 0xE044 
 
	AlignFunc 
		 
draw_fix_loop1: 
	push	ecx 
	mov	ecx, 38 
 
	AlignFunc 
 
draw_fix_loop2: 
	mov	ax, [esi] 
	add	esi, 0x40 
	mov	bx, ax 
	and	eax, 0F000h 
	and	ebx, 0FFFh 
	mov	edx, ebx 
	add	edx, _video_fix_usage 
	test	byte [edx], 0FFh 
	jnz	thing_to_do 
	add	edi, 16 
	jmp	nothing_to_do 
thing_to_do: 
	shl	ebx, 5 
	add	ebx, [_neogeo_fix_memory] 
	shr	eax, 7 
	add	eax, [_video_paletteram_pc] 
 
	%rep	8 
	mov	edx, [ebx] 
 
	PUT_FIX 
	PUT_FIX 
	PUT_FIX 
	PUT_FIX 
	PUT_FIX 
	PUT_FIX 
	PUT_FIX 
	PUT_FIX 
 
	add	ebx, 4 
	add	edi, 624 
	%endrep 
 
	sub	edi, 5104 
nothing_to_do: 
	dec	ecx 
	jz	suite 
	jmp	draw_fix_loop2 
 
suite: 
	pop	ecx 
	add	edi, 4512 
	sub	esi, 2430 ;2558 
	dec	ecx 
	jz	termine 
	jmp	draw_fix_loop1 
termine: 
	popad 
	ret 
 
	AlignFunc