mirror of
https://github.com/0ldsk00l/smsplus.git
synced 2025-04-02 10:32:07 -04:00
166 lines
7.2 KiB
ArmAsm
166 lines
7.2 KiB
ArmAsm
|
|
;----------------------------------------------------------------------------
|
|
; expand (vscale, usemmx, depth, dlwid)
|
|
;----------------------------------------------------------------------------
|
|
%macro expand 4
|
|
%define VSCALE %1
|
|
%define USEMMX %2
|
|
%define DEPTH %3
|
|
%define DLWID %4
|
|
%if(USEMMX == 1)
|
|
movq mm0, [ds:esi]
|
|
movq mm1, mm0
|
|
%if(DEPTH == 16)
|
|
punpcklwd mm0, mm0
|
|
punpckhwd mm1, mm1
|
|
%else
|
|
punpcklbw mm0, mm0
|
|
punpckhbw mm1, mm1
|
|
%endif
|
|
%if(VSCALE == 1)
|
|
movq [es:edi], mm0
|
|
movq [es:edi + DLWID], mm0
|
|
movq [es:edi + 8], mm1
|
|
movq [es:edi + 8 + DLWID], mm1
|
|
%else
|
|
movq [es:edi], mm0
|
|
movq [es:edi + 8], mm1
|
|
%endif
|
|
add esi, byte 8
|
|
add edi, byte 16
|
|
%else
|
|
mov eax, [ds:esi]
|
|
mov ebx, eax
|
|
%if(DEPTH == 16)
|
|
rol eax, 16
|
|
xchg ax, bx
|
|
%else
|
|
bswap eax
|
|
xchg ax, bx
|
|
rol eax, 8
|
|
ror ebx, 8
|
|
%endif
|
|
%if(VSCALE == 1)
|
|
mov [es:edi], eax
|
|
mov [es:edi + DLWID], eax
|
|
mov [es:edi + 4], ebx
|
|
mov [es:edi + 4 + DLWID], ebx
|
|
%else
|
|
mov [es:edi], eax
|
|
mov [es:edi + 4], ebx
|
|
%endif
|
|
add esi, byte 4
|
|
add edi, byte 8
|
|
%endif
|
|
%endm
|
|
|
|
;-----------------------------------------------------------------------------
|
|
; blit (label, width, height, srcofs, dstofs, slwid, dlwid, usemmx, vscale, scanlines, depth)
|
|
;-----------------------------------------------------------------------------
|
|
%macro blit 11
|
|
%define LABEL %1
|
|
%define WIDTH %2
|
|
%define HEIGHT %3
|
|
%define SRCOFS %4
|
|
%define DSTOFS %5
|
|
%define SLWID %6
|
|
%define DLWID %7
|
|
%define USEMMX %8
|
|
%define VSCALE %9
|
|
%define SCANLINES %10
|
|
%define DEPTH %11
|
|
|
|
align 4
|
|
global LABEL
|
|
LABEL:
|
|
|
|
pushad
|
|
push ds
|
|
push es
|
|
|
|
mov edx, [esp + 44]
|
|
mov ax, word [edx + 60]
|
|
mov ds, ax
|
|
mov esi, [edx + 64]
|
|
|
|
mov edx, [esp + 48]
|
|
mov ax, word [edx + 60]
|
|
mov es, ax
|
|
mov edi, [edx + 64]
|
|
%if(SRCOFS != 0)
|
|
lea esi, [esi + SRCOFS]
|
|
%endif
|
|
|
|
%if(DSTOFS != 0)
|
|
lea edi, [edi + DSTOFS]
|
|
%endif
|
|
mov edx, HEIGHT
|
|
.row
|
|
|
|
%if(USEMMX == 1)
|
|
mov ecx, (WIDTH / 8)
|
|
%else
|
|
mov ecx, (WIDTH / 4)
|
|
%endif
|
|
|
|
.column
|
|
expand VSCALE, USEMMX, DEPTH, DLWID
|
|
|
|
dec ecx
|
|
jnz .column
|
|
%if((SLWID != 0) && ((SLWID - WIDTH) != 0))
|
|
lea esi, [esi + (SLWID - WIDTH)]
|
|
%endif
|
|
|
|
%if(SCANLINES == 1 || VSCALE == 1)
|
|
%if(DLWID != 0)
|
|
lea edi, [edi + (DLWID - (WIDTH * 2)) + DLWID]
|
|
%endif
|
|
%else
|
|
%if(DLWID != 0)
|
|
lea edi, [edi + (DLWID - (WIDTH * 2))]
|
|
%endif
|
|
%endif
|
|
dec edx
|
|
jnz .row
|
|
|
|
pop es
|
|
pop ds
|
|
popad
|
|
%if (USEMMX == 1)
|
|
emms
|
|
%endif
|
|
ret
|
|
%endm
|
|
|
|
;-----------------------------------------------------------------------------
|
|
|
|
section .text
|
|
|
|
blit _blit_sms_expand_scanlines_mmx, 256, 192, 0, 0, 256, 512, 1, 0, 1, 8
|
|
blit _blit_sms_expand_scanlines, 256, 192, 0, 0, 256, 512, 0, 0, 1, 8
|
|
blit _blit_sms_expand_mmx_vs, 256, 192, 0, 0, 256, 512, 1, 1, 0, 8
|
|
blit _blit_sms_expand_mmx, 256, 192, 0, 0, 256, 512, 1, 0, 0, 8
|
|
blit _blit_sms_expand_vs, 256, 192, 0, 0, 256, 512, 0, 1, 0, 8
|
|
blit _blit_sms_expand, 256, 192, 0, 0, 256, 512, 0, 0, 0, 8
|
|
|
|
blit _blit_gg_expand_scanlines_mmx, 160, 144, 48+(24*256), 40+(6*512), 256, 512, 1, 0, 1, 8
|
|
blit _blit_gg_expand_scanlines, 160, 144, 48+(24*256), 40+(6*512), 256, 512, 0, 0, 1, 8
|
|
blit _blit_gg_expand_mmx_vs, 160, 144, 48+(24*256), 40+(6*256), 256, 512, 1, 1, 0, 8
|
|
blit _blit_gg_expand_mmx, 160, 144, 48+(24*256), 40+(6*256), 256, 512, 1, 0, 0, 8
|
|
blit _blit_gg_expand_vs, 160, 144, 48+(24*256), 40+(6*256), 256, 512, 0, 1, 0, 8
|
|
blit _blit_gg_expand, 160, 144, 48+(24*256), 40+(6*256), 256, 512, 0, 0, 0, 8
|
|
|
|
blit _blit_sms_expand_scanlines_mmx_16, 512, 192, 0, 0, 512, 1024, 1, 0, 1, 16
|
|
blit _blit_sms_expand_scanlines_16, 512, 192, 0, 0, 512, 1024, 0, 0, 1, 16
|
|
blit _blit_sms_expand_mmx_vs_16, 512, 192, 0, 0, 512, 1024, 1, 1, 0, 16
|
|
blit _blit_sms_expand_mmx_16, 512, 192, 0, 0, 512, 1024, 1, 0, 0, 16
|
|
blit _blit_sms_expand_vs_16, 512, 192, 0, 0, 512, 1024, 0, 1, 0, 16
|
|
blit _blit_sms_expand_16, 512, 192, 0, 0, 512, 1024, 0, 0, 0, 16
|
|
|
|
blit _blit_gg_expand_scanlines_mmx_16, 320, 144, 96+(24*512), 80+(6*1024), 512, 1024, 1, 0, 1, 16
|
|
blit _blit_gg_expand_scanlines_16, 320, 144, 96+(24*512), 80+(6*1024), 512, 1024, 0, 0, 1, 16
|
|
blit _blit_gg_expand_mmx_vs_16, 320, 144, 96+(24*512), 80+(6*512 ), 512, 1024, 1, 1, 0, 16
|
|
blit _blit_gg_expand_mmx_16, 320, 144, 96+(24*512), 80+(6*512 ), 512, 1024, 1, 0, 0, 16
|
|
blit _blit_gg_expand_vs_16, 320, 144, 96+(24*512), 80+(6*512 ), 512, 1024, 0, 1, 0, 16
|
|
blit _blit_gg_expand_16, 320, 144, 96+(24*512), 80+(6*512 ), 512, 1024, 0, 0, 0, 16
|