www.pudn.com > ngcd080s.zip > blit.asm
; *************************************** ; **** Blitting Routines **** ; *************************************** %include ".\src\helper.asm" BITS 32 GLOBAL _neogeo_fast_clear GLOBAL _neogeo_fast_copy GLOBAL _neogeo_fast_copy_scanlines SECTION .text _neogeo_fast_clear: BEGIN PUSHL eax PUSHL edi PUSHL ecx mov edi, [esp + ARGS] mov eax, [esp + ARGS + 4] mov cx, ax shl eax, 16 mov ax, cx cld %rep 224 mov ecx, 168 rep stosd %endrep pop ecx pop edi pop eax ret %define BMP_SEG [edx + 60] %define BMP_WBANK [edx + 32] %define BMP_RBANK [edx + 36] %define B_SOURCE [esp + ARGS + 0] %define B_DEST [esp + ARGS + 4] %define B_SOURCE_X [esp + ARGS + 8] %define B_SOURCE_Y [esp + ARGS + 12] %define B_DEST_X [esp + ARGS + 16] %define B_DEST_Y [esp + ARGS + 20] %define B_WIDTH [esp + ARGS + 24] %define B_HEIGHT [esp + ARGS + 28] AlignFunc _neogeo_fast_copy: BEGIN PUSHL es PUSHL edi PUSHL esi PUSHL ebx mov edx, B_DEST mov es, BMP_SEG mov bx, ds cld shr dword B_WIDTH, 1 AlignFunc blit_loop: mov edx, B_DEST mov eax, B_DEST_Y call BMP_WBANK mov edi, B_DEST_X lea edi, [eax + edi * 2] mov edx, B_SOURCE mov eax, B_SOURCE_Y call BMP_RBANK mov esi, B_SOURCE_X lea esi, [eax + esi * 2] mov ecx, B_WIDTH mov ds, BMP_SEG rep movsd mov ds, bx inc dword B_SOURCE_Y inc dword B_DEST_Y dec dword B_HEIGHT jg blit_loop pop ebx pop esi pop edi pop es ret AlignFunc _neogeo_fast_copy_scanlines: BEGIN PUSHL es PUSHL edi PUSHL esi PUSHL ebx mov edx, B_DEST mov es, BMP_SEG mov bx, ds cld shr dword B_WIDTH, 1 AlignFunc blit_loop2: mov edx, B_DEST mov eax, B_DEST_Y call BMP_WBANK mov edi, B_DEST_X lea edi, [eax + edi * 2] mov edx, B_SOURCE mov eax, B_SOURCE_Y call BMP_RBANK mov esi, B_SOURCE_X lea esi, [eax + esi * 2] mov ecx, B_WIDTH mov ds, BMP_SEG rep movsd mov ds, bx inc dword B_SOURCE_Y add dword B_DEST_Y, 2 dec dword B_HEIGHT jg blit_loop2 pop ebx pop esi pop edi pop es ret AlignFunc