mirror of
https://github.com/ZDoom/Raze.git
synced 2024-12-16 07:31:23 +00:00
1f9c37517a
git-svn-id: https://svn.eduke32.com/eduke32@4730 1a8010ca-5511-0410-912e-c29ae57300e0
2781 lines
59 KiB
Text
2781 lines
59 KiB
Text
; "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
|
|
; Ken Silverman's official web site: "http://www.advsys.net/ken"
|
|
; See the included license file "BUILDLIC.TXT" for license info.
|
|
|
|
.586P
|
|
;.8087
|
|
;include mmx.inc ;Include this if using < WATCOM 11.0 WASM
|
|
|
|
;Warning: IN THIS FILE, ALL SEGMENTS ARE REMOVED. THIS MEANS THAT DS:[]
|
|
;MUST BE ADDED FOR ALL SELF-MODIFIES FOR MASM TO WORK.
|
|
;
|
|
;WASM PROBLEMS:
|
|
; 1. Requires all scaled registers (*1,*2,*4,*8) to be last thing on line
|
|
; 2. Using 'DATA' is nice for self-mod. code, but WDIS only works with 'CODE'
|
|
;
|
|
;MASM PROBLEMS:
|
|
; 1. Requires DS: to be written out for self-modifying code to work
|
|
; 2. Doesn't encode short jumps automatically like WASM
|
|
; 3. Stupidly adds wait prefix to ffree's
|
|
|
|
EXTRN _asm1 : dword
|
|
EXTRN _asm2 : dword
|
|
EXTRN _asm3 : dword
|
|
EXTRN _asm4 : dword
|
|
EXTRN _reciptable : near
|
|
EXTRN _fpuasm : dword
|
|
EXTRN _globalx3 : dword
|
|
EXTRN _globaly3 : dword
|
|
EXTRN _ylookup : dword
|
|
|
|
EXTRN _vplce : near
|
|
EXTRN _vince : near
|
|
EXTRN _palookupoffse : near
|
|
EXTRN _bufplce : near
|
|
|
|
EXTRN _ebpbak : dword
|
|
EXTRN _espbak : dword
|
|
|
|
EXTRN _pow2char : near
|
|
EXTRN _pow2long : near
|
|
|
|
EXTRN _globaltilesizy : dword
|
|
|
|
; Some macros to help make cdecl calling easier to manage
|
|
CDECLBEGIN MACRO noi:=<0>
|
|
IF noi GE 2
|
|
push ebx
|
|
ENDIF
|
|
IF noi GE 3
|
|
push ecx
|
|
ENDIF
|
|
IF noi GE 4
|
|
push edx
|
|
ENDIF
|
|
IF noi GE 5
|
|
push esi
|
|
ENDIF
|
|
IF noi GE 6
|
|
push edi
|
|
ENDIF
|
|
ENDM
|
|
|
|
CDECLEND MACRO noi:=<0>
|
|
IF noi GE 6
|
|
pop edi
|
|
ENDIF
|
|
IF noi GE 5
|
|
pop esi
|
|
ENDIF
|
|
IF noi GE 4
|
|
pop edx
|
|
ENDIF
|
|
IF noi GE 3
|
|
pop ecx
|
|
ENDIF
|
|
IF noi GE 2
|
|
pop ebx
|
|
ENDIF
|
|
ENDM
|
|
|
|
CDECLPARAM MACRO registername:REQ,paramnumber:REQ,offsetted:REQ
|
|
; mov registername, dword ptr [esp + (paramnumber*4+16)]
|
|
mov registername, dword ptr [esp + ((paramnumber+offsetted)*4+4)]
|
|
ENDM
|
|
|
|
CDECLBEGINSET MACRO numparams:REQ
|
|
CDECLBEGIN numparams
|
|
|
|
% _offsetted = numparams - 1
|
|
|
|
IF numparams GE 1
|
|
CDECLPARAM eax,0,%_offsetted
|
|
ENDIF
|
|
IF numparams GE 2
|
|
CDECLPARAM ebx,1,%_offsetted
|
|
ENDIF
|
|
IF numparams GE 3
|
|
CDECLPARAM ecx,2,%_offsetted
|
|
ENDIF
|
|
IF numparams GE 4
|
|
CDECLPARAM edx,3,%_offsetted
|
|
ENDIF
|
|
IF numparams GE 5
|
|
CDECLPARAM esi,4,%_offsetted
|
|
ENDIF
|
|
IF numparams GE 6
|
|
CDECLPARAM edi,5,%_offsetted
|
|
ENDIF
|
|
ENDM
|
|
|
|
CDECLENDSET MACRO numparams:REQ
|
|
CDECLEND numparams
|
|
ENDM
|
|
|
|
code segment 'CODE' PUBLIC USE32
|
|
ASSUME cs:CODE,ds:CODE
|
|
PUBLIC _dep_begin
|
|
_dep_begin:
|
|
|
|
ALIGN 16
|
|
PUBLIC _sethlinesizes
|
|
_sethlinesizes:
|
|
CDECLBEGINSET 3
|
|
|
|
mov byte ptr [machxbits1+2], al
|
|
mov byte ptr [machxbits2+2], al
|
|
mov byte ptr [machxbits3+2], al
|
|
neg al
|
|
mov byte ptr [hxsiz1+2], al
|
|
mov byte ptr [hxsiz2+2], al
|
|
mov byte ptr [hxsiz3+2], al
|
|
mov byte ptr [hxsiz4+2], al
|
|
mov byte ptr [machnegxbits1+2], al
|
|
|
|
mov byte ptr [hysiz1+3], bl
|
|
mov byte ptr [hysiz2+3], bl
|
|
mov byte ptr [hysiz3+3], bl
|
|
mov byte ptr [hysiz4+3], bl
|
|
mov byte ptr [hmach3a+2], bl
|
|
mov byte ptr [hmach3b+2], bl
|
|
mov byte ptr [hmach3c+2], bl
|
|
mov byte ptr [hmach3d+2], bl
|
|
|
|
mov dword ptr [hoffs1+2], ecx
|
|
mov dword ptr [hoffs2+2], ecx
|
|
mov dword ptr [hoffs3+2], ecx
|
|
mov dword ptr [hoffs4+2], ecx
|
|
mov dword ptr [hoffs5+2], ecx
|
|
mov dword ptr [hoffs6+2], ecx
|
|
mov dword ptr [hoffs7+2], ecx
|
|
mov dword ptr [hoffs8+2], ecx
|
|
|
|
push edx ;JBF
|
|
mov edx, -1
|
|
mov cl, al
|
|
sub cl, bl
|
|
shr edx, cl
|
|
mov dword ptr [hmach2a+1], edx
|
|
mov dword ptr [hmach2b+1], edx
|
|
mov dword ptr [hmach2c+1], edx
|
|
mov dword ptr [hmach2d+1], edx
|
|
pop edx ;JBF
|
|
|
|
CDECLENDSET 3
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _prosethlinesizes
|
|
_prosethlinesizes:
|
|
CDECLBEGINSET 3
|
|
|
|
mov dword ptr [prohbuf-4], ecx
|
|
neg eax
|
|
mov ecx, eax
|
|
sub eax, ebx
|
|
mov byte ptr [prohshru-1], al ;bl = 32-al-bl
|
|
mov eax, -1
|
|
shr eax, cl
|
|
mov ecx, ebx
|
|
shl eax, cl
|
|
mov dword ptr [prohand-4], eax ;((-1>>(-oal))<<obl)
|
|
neg ebx
|
|
mov byte ptr [prohshrv-1], bl ;bl = 32-bl
|
|
|
|
CDECLENDSET 3
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _setvlinebpl
|
|
_setvlinebpl:
|
|
CDECLBEGINSET 1
|
|
mov dword ptr [np2_fixchain1a+2], eax
|
|
mov dword ptr [np2_fixchain1b+2], eax
|
|
|
|
mov dword ptr [mnp2_fixchain1b+2], eax
|
|
mov dword ptr [tnp2_fixchain1b+2], eax
|
|
|
|
mov dword ptr [fixchain1a+2], eax
|
|
mov dword ptr [fixchain1b+2], eax
|
|
mov dword ptr [fixchain1m+2], eax
|
|
mov dword ptr [fixchain1t+2], eax
|
|
mov dword ptr [fixchain1s+2], eax
|
|
mov dword ptr [mfixchain1s+2], eax
|
|
mov dword ptr [tfixchain1s+2], eax
|
|
mov dword ptr [fixchain2a+2], eax
|
|
mov dword ptr [profixchain2a+2], eax
|
|
mov dword ptr [fixchain2ma+2], eax
|
|
mov dword ptr [fixchain2mb+2], eax
|
|
mov dword ptr [fixchaint2a+1], eax
|
|
mov dword ptr [fixchaint2b+2], eax
|
|
mov dword ptr [fixchaint2c+2], eax
|
|
mov dword ptr [fixchaint2d+2], eax
|
|
mov dword ptr [fixchaint2e+2], eax
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _setpalookupaddress
|
|
_setpalookupaddress:
|
|
CDECLBEGINSET 1
|
|
mov dword ptr [pal1+2], eax
|
|
mov dword ptr [pal2+2], eax
|
|
mov dword ptr [pal3+2], eax
|
|
mov dword ptr [pal4+2], eax
|
|
mov dword ptr [pal5+2], eax
|
|
mov dword ptr [pal6+2], eax
|
|
mov dword ptr [pal7+2], eax
|
|
mov dword ptr [pal8+2], eax
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _prosetpalookupaddress
|
|
_prosetpalookupaddress:
|
|
CDECLBEGINSET 1
|
|
mov dword ptr [prohpala-4], eax
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _setuphlineasm4
|
|
_setuphlineasm4:
|
|
CDECLBEGINSET 2
|
|
|
|
machxbits3: rol eax, 6 ;xbits
|
|
mov dword ptr [hmach4a+2], eax
|
|
mov dword ptr [hmach4b+2], eax
|
|
mov bl, al
|
|
mov dword ptr [hmach4c+2], eax
|
|
mov dword ptr [hmach4d+2], eax
|
|
mov dword ptr [hmach1a+2], ebx
|
|
mov dword ptr [hmach1b+2], ebx
|
|
mov dword ptr [hmach1c+2], ebx
|
|
mov dword ptr [hmach1d+2], ebx
|
|
|
|
CDECLENDSET 2
|
|
ret
|
|
|
|
;Non-256-stuffed ceiling&floor method with NO SHLD!:
|
|
;yinc&0xffffff00 lea eax, [edx+88888800h] 1 1/2
|
|
;ybits...xbits and edx, 88000088h 1 1/2
|
|
;ybits rol edx, 6 2 1/2
|
|
;xinc<<xbits add esi, 88888888h 1 1/2
|
|
;xinc>>(32-xbits) adc al, 88h 1 1/2
|
|
;bufplc mov cl, byte ptr [edx+88888888h] 1 1/2
|
|
;paloffs&255 mov bl, byte ptr [ecx+88888888h] 1 1/2
|
|
ALIGN 16
|
|
PUBLIC _hlineasm4
|
|
_hlineasm4:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
|
|
lea ebp, [eax+1]
|
|
|
|
cmp ebp, 8
|
|
jle shorthline
|
|
|
|
test edi, 1
|
|
jnz short skipthe1byte
|
|
|
|
mov eax, esi
|
|
hxsiz1: shr eax, 26
|
|
hysiz1: shld eax, edx, 6
|
|
hoffs1: mov cl, byte ptr [eax+88888888h]
|
|
pal1: mov bl, byte ptr [ecx+88888888h]
|
|
sub esi, _asm1
|
|
sub edx, _asm2
|
|
mov byte ptr [edi], bl
|
|
dec edi
|
|
dec ebp
|
|
|
|
skipthe1byte:
|
|
test edi, 2
|
|
jnz short skipthe2byte
|
|
|
|
mov eax, esi
|
|
hxsiz2: shr eax, 26
|
|
hysiz2: shld eax, edx, 6
|
|
hoffs2: mov cl, byte ptr [eax+88888888h]
|
|
pal2: mov bh, byte ptr [ecx+88888888h]
|
|
sub esi, _asm1
|
|
sub edx, _asm2
|
|
|
|
mov eax, esi
|
|
hxsiz3: shr eax, 26
|
|
hysiz3: shld eax, edx, 6
|
|
hoffs3: mov cl, byte ptr [eax+88888888h]
|
|
pal3: mov bl, byte ptr [ecx+88888888h]
|
|
sub esi, _asm1
|
|
sub edx, _asm2
|
|
mov word ptr [edi-1], bx
|
|
sub edi, 2
|
|
sub ebp, 2
|
|
|
|
skipthe2byte:
|
|
|
|
mov eax, esi
|
|
machxbits1: shl esi, 6 ;xbits
|
|
machnegxbits1: shr eax, 32-6 ;32-xbits
|
|
mov dl, al
|
|
|
|
inc edi
|
|
|
|
add ebx, ebx
|
|
mov eax, edx
|
|
jc beginhline64
|
|
|
|
mov eax, _asm1
|
|
machxbits2: rol eax, 6 ;xbits
|
|
mov dword ptr [hmach4a+2], eax
|
|
mov dword ptr [hmach4b+2], eax
|
|
mov dword ptr [hmach4c+2], eax
|
|
mov dword ptr [hmach4d+2], eax
|
|
mov ebx, eax
|
|
mov eax, _asm2
|
|
mov al, bl
|
|
mov dword ptr [hmach1a+2], eax
|
|
mov dword ptr [hmach1b+2], eax
|
|
mov dword ptr [hmach1c+2], eax
|
|
mov dword ptr [hmach1d+2], eax
|
|
|
|
mov eax, edx
|
|
jmp beginhline64
|
|
ALIGN 16
|
|
prebeginhline64:
|
|
mov dword ptr [edi], ebx
|
|
beginhline64:
|
|
|
|
hmach3a: rol eax, 6
|
|
hmach2a: and eax, 00008888h
|
|
hmach4a: sub esi, 88888888h
|
|
hmach1a: sbb edx, 88888888h
|
|
sub edi, 4
|
|
hoffs4: mov cl, byte ptr [eax+88888888h]
|
|
mov eax, edx
|
|
|
|
hmach3b: rol eax, 6
|
|
hmach2b: and eax, 00008888h
|
|
hmach4b: sub esi, 88888888h
|
|
hmach1b: sbb edx, 88888888h
|
|
pal4: mov bh, byte ptr [ecx+88888888h]
|
|
hoffs5: mov cl, byte ptr [eax+88888888h]
|
|
mov eax, edx
|
|
|
|
hmach3c: rol eax, 6
|
|
pal5: mov bl, byte ptr [ecx+88888888h]
|
|
hmach2c: and eax, 00008888h
|
|
shl ebx, 16
|
|
hmach4c: sub esi, 88888888h
|
|
hmach1c: sbb edx, 88888888h
|
|
hoffs6: mov cl, byte ptr [eax+88888888h]
|
|
|
|
mov eax, edx
|
|
;(
|
|
|
|
hmach3d: rol eax, 6
|
|
hmach2d: and eax, 00008888h
|
|
hmach4d: sub esi, 88888888h
|
|
hmach1d: sbb edx, 88888888h
|
|
pal6: mov bh, byte ptr [ecx+88888888h]
|
|
hoffs7: mov cl, byte ptr [eax+88888888h]
|
|
mov eax, edx
|
|
sub ebp, 4
|
|
nop
|
|
pal7: mov bl, byte ptr [ecx+88888888h]
|
|
jnc prebeginhline64
|
|
skipthe4byte:
|
|
|
|
test ebp, 2
|
|
jz skipdrawthe2
|
|
rol ebx, 16
|
|
mov word ptr [edi+2], bx
|
|
sub edi, 2
|
|
skipdrawthe2:
|
|
test ebp, 1
|
|
jz skipdrawthe1
|
|
shr ebx, 24
|
|
mov byte ptr [edi+3], bl
|
|
skipdrawthe1:
|
|
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
shorthline:
|
|
test ebp, ebp
|
|
jz endshorthline
|
|
begshorthline:
|
|
mov eax, esi
|
|
hxsiz4: shr eax, 26
|
|
hysiz4: shld eax, edx, 6
|
|
hoffs8: mov cl, byte ptr [eax+88888888h]
|
|
pal8: mov bl, byte ptr [ecx+88888888h]
|
|
sub esi, _asm1
|
|
sub edx, _asm2
|
|
mov byte ptr [edi], bl
|
|
dec edi
|
|
dec ebp
|
|
jnz begshorthline
|
|
endshorthline:
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
;eax: 00000000 00000000 00000000 temp----
|
|
;ebx: 00000000 00000000 00000000 temp----
|
|
;ecx: UUUUUUuu uuuuuuuu uuuuuuuu uuuuuuuu
|
|
;edx: VVVVVVvv vvvvvvvv vvvvvvvv vvvvvvvv
|
|
;esi: cnt----- -------- -------- --------
|
|
;edi: vid----- -------- -------- --------
|
|
;ebp: paloffs- -------- -------- --------
|
|
;esp: ???????? ???????? ???????? ????????
|
|
ALIGN 16
|
|
PUBLIC _prohlineasm4
|
|
_prohlineasm4:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
|
|
lea ebp, [ecx+88888888h]
|
|
prohpala:
|
|
mov ecx, esi
|
|
lea esi, [eax+1]
|
|
sub edi, esi
|
|
|
|
prohbeg:
|
|
mov eax, ecx
|
|
shr eax, 20
|
|
prohshru:
|
|
mov ebx, edx
|
|
shr ebx, 26
|
|
prohshrv:
|
|
and eax, 88888888h
|
|
prohand:
|
|
movzx eax, byte ptr [eax+ebx+88888888h]
|
|
prohbuf:
|
|
mov al, [eax+ebp]
|
|
sub ecx, _asm1
|
|
sub edx, _asm2
|
|
mov [edi+esi], al
|
|
dec esi
|
|
jnz prohbeg
|
|
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
|
|
ALIGN 16
|
|
PUBLIC _setupvlineasm
|
|
_setupvlineasm:
|
|
CDECLBEGINSET 1
|
|
;First 2 lines for VLINEASM1, rest for VLINEASM4
|
|
mov byte ptr [premach3a+2], al
|
|
mov byte ptr [mach3a+2], al
|
|
|
|
push ecx
|
|
mov byte ptr [machvsh1+2], al ;32-shy
|
|
mov byte ptr [machvsh3+2], al ;32-shy
|
|
mov byte ptr [machvsh5+2], al ;32-shy
|
|
mov byte ptr [machvsh6+2], al ;32-shy
|
|
mov ah, al
|
|
sub ah, 16
|
|
mov byte ptr [machvsh8+2], ah ;16-shy
|
|
neg al
|
|
mov byte ptr [machvsh7+2], al ;shy
|
|
mov byte ptr [machvsh9+2], al ;shy
|
|
mov byte ptr [machvsh10+2], al ;shy
|
|
mov byte ptr [machvsh11+2], al ;shy
|
|
mov byte ptr [machvsh12+2], al ;shy
|
|
mov cl, al
|
|
mov eax, 1
|
|
shl eax, cl
|
|
dec eax
|
|
mov dword ptr [machvsh2+2], eax ;(1<<shy)-1
|
|
mov dword ptr [machvsh4+2], eax ;(1<<shy)-1
|
|
pop ecx
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _prosetupvlineasm
|
|
_prosetupvlineasm:
|
|
CDECLBEGINSET 1
|
|
;First 2 lines for VLINEASM1, rest for VLINEASM4
|
|
mov byte ptr [premach3a+2], al
|
|
mov byte ptr [mach3a+2], al
|
|
|
|
push ecx
|
|
mov byte ptr [promachvsh1+2], al ;32-shy
|
|
mov byte ptr [promachvsh3+2], al ;32-shy
|
|
mov byte ptr [promachvsh5+2], al ;32-shy
|
|
mov byte ptr [promachvsh6+2], al ;32-shy
|
|
mov ah, al
|
|
sub ah, 16
|
|
mov byte ptr [promachvsh8+2], ah ;16-shy
|
|
neg al
|
|
mov byte ptr [promachvsh7+2], al ;shy
|
|
mov byte ptr [promachvsh9+2], al ;shy
|
|
mov byte ptr [promachvsh10+2], al ;shy
|
|
mov byte ptr [promachvsh11+2], al ;shy
|
|
mov byte ptr [promachvsh12+2], al ;shy
|
|
mov cl, al
|
|
mov eax, 1
|
|
shl eax, cl
|
|
dec eax
|
|
mov dword ptr [promachvsh2+2], eax ;(1<<shy)-1
|
|
mov dword ptr [promachvsh4+2], eax ;(1<<shy)-1
|
|
pop ecx
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _setupmvlineasm
|
|
_setupmvlineasm:
|
|
CDECLBEGINSET 1
|
|
mov byte ptr [maskmach3a+2], al
|
|
mov byte ptr [machmv13+2], al
|
|
mov byte ptr [machmv14+2], al
|
|
mov byte ptr [machmv15+2], al
|
|
mov byte ptr [machmv16+2], al
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _setuptvlineasm
|
|
_setuptvlineasm:
|
|
CDECLBEGINSET 1
|
|
mov byte ptr [transmach3a+2], al
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _prevlineasm1
|
|
_prevlineasm1:
|
|
CDECLBEGINSET 6
|
|
test ecx, ecx
|
|
jnz short _vlineasm1_nosetup
|
|
|
|
add eax, edx
|
|
premach3a: shr edx, 32
|
|
mov dl, byte ptr [esi+edx]
|
|
mov cl, byte ptr [ebx+edx]
|
|
mov byte ptr [edi], cl
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _vlineasm1
|
|
_vlineasm1:
|
|
CDECLBEGINSET 6
|
|
_vlineasm1_nosetup:
|
|
push ebp
|
|
mov ebp, ebx
|
|
inc ecx
|
|
fixchain1a: sub edi, 320
|
|
beginvline:
|
|
mov ebx, edx
|
|
mach3a: shr ebx, 32
|
|
fixchain1b: add edi, 320
|
|
mov bl, byte ptr [esi+ebx]
|
|
add edx, eax
|
|
dec ecx
|
|
mov bl, byte ptr [ebp+ebx]
|
|
mov byte ptr [edi], bl
|
|
jnz short beginvline
|
|
pop ebp
|
|
mov eax, edx
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _vlineasm1nonpow2
|
|
_vlineasm1nonpow2:
|
|
CDECLBEGINSET 6
|
|
mov dword ptr [np2_do_palookup+2], ebx
|
|
push ebp
|
|
mov ebp, edx ; ebp: vertical place
|
|
mov ebx, eax ; ebx: vertical increment
|
|
mov eax, dword ptr [_globaltilesizy]
|
|
mov dword ptr [np2_beginvline+1], eax
|
|
inc ecx
|
|
np2_fixchain1a: sub edi, 320
|
|
np2_beginvline: ; +1: y tile size
|
|
mov eax, 00000123h
|
|
mul ebp
|
|
np2_fixchain1b: add edi, 320
|
|
and eax, 000000ffh
|
|
mov al, byte ptr [esi+edx]
|
|
add ebp, ebx
|
|
dec ecx
|
|
np2_do_palookup: ; +2: addr
|
|
mov al, byte ptr [eax+0000beefh]
|
|
mov byte ptr [edi], al
|
|
jnz short np2_beginvline
|
|
mov eax, ebp
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _mvlineasm1 ;Masked vline
|
|
_mvlineasm1:
|
|
CDECLBEGINSET 6
|
|
push ebp
|
|
mov ebp, ebx
|
|
beginmvline:
|
|
mov ebx, edx
|
|
maskmach3a: shr ebx, 32
|
|
mov bl, byte ptr [esi+ebx]
|
|
cmp bl, 255
|
|
je short skipmask1
|
|
maskmach3c: mov bl, [ebp+ebx]
|
|
mov byte ptr [edi], bl
|
|
skipmask1:
|
|
add edx, eax
|
|
fixchain1m: add edi, 320
|
|
sub ecx, 1
|
|
jnc short beginmvline
|
|
|
|
pop ebp
|
|
mov eax, edx
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _mvlineasm1nonpow2
|
|
_mvlineasm1nonpow2:
|
|
CDECLBEGINSET 6
|
|
mov dword ptr [mnp2_do_palookup+2], ebx
|
|
push ebp
|
|
mov ebp, edx ; ebp: vertical place
|
|
mov ebx, eax ; ebx: vertical increment
|
|
mov eax, dword ptr [_globaltilesizy]
|
|
mov dword ptr [mnp2_beginvline+1], eax
|
|
mnp2_beginvline: ; +1: y tile size
|
|
mov eax, 00000123h
|
|
mul ebp
|
|
and eax, 000000ffh
|
|
mov al, byte ptr [esi+edx]
|
|
cmp al, 255
|
|
je short mskipmask1
|
|
mnp2_do_palookup: ; +2: addr
|
|
mov al, byte ptr [eax+0000beefh]
|
|
mov byte ptr [edi], al
|
|
mskipmask1:
|
|
add ebp, ebx
|
|
mnp2_fixchain1b: add edi, 320
|
|
sub ecx, 1
|
|
jnc short mnp2_beginvline
|
|
mov eax, ebp
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _fixtransluscence
|
|
_fixtransluscence:
|
|
CDECLBEGINSET 1
|
|
mov dword ptr [transmach4+2], eax
|
|
mov dword ptr [tmach1+2], eax
|
|
mov dword ptr [tmach2+2], eax
|
|
mov dword ptr [tmach3+2], eax
|
|
mov dword ptr [tmach4+2], eax
|
|
mov dword ptr [tran2traa+2], eax
|
|
mov dword ptr [tran2trab+2], eax
|
|
mov dword ptr [tran2trac+2], eax
|
|
mov dword ptr [tran2trad+2], eax
|
|
|
|
mov dword ptr [tnmach4+2], eax
|
|
CDECLENDSET 1
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _settransnormal
|
|
_settransnormal:
|
|
mov byte ptr [transrev0+1], 83h
|
|
mov byte ptr [transrev1+1], 27h
|
|
mov byte ptr [transrev2+1], 3fh
|
|
mov byte ptr [transrev3+1], 98h
|
|
mov byte ptr [transrev4+1], 90h
|
|
mov byte ptr [transrev5+1], 37h
|
|
mov byte ptr [transrev6+1], 90h
|
|
mov word ptr [transrev7+0], 0f38ah
|
|
mov byte ptr [transrev8+1], 90h
|
|
mov word ptr [transrev9+0], 0f78ah
|
|
mov byte ptr [transrev10+1], 0a7h
|
|
mov byte ptr [transrev11+1], 81h
|
|
mov byte ptr [transrev12+2], 9fh
|
|
mov word ptr [transrev13+0], 0dc88h
|
|
mov byte ptr [transrev14+1], 81h
|
|
mov byte ptr [transrev15+1], 9ah
|
|
mov byte ptr [transrev16+1], 0a7h
|
|
mov byte ptr [transrev17+1], 82h
|
|
|
|
mov byte ptr [ntransrev0+1], 80h
|
|
mov byte ptr [ntransrev1+1], 27h
|
|
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _settransreverse
|
|
_settransreverse:
|
|
mov byte ptr [transrev0+1], 0a3h
|
|
mov byte ptr [transrev1+1], 7h
|
|
mov byte ptr [transrev2+1], 1fh
|
|
mov byte ptr [transrev3+1], 0b8h
|
|
mov byte ptr [transrev4+1], 0b0h
|
|
mov byte ptr [transrev5+1], 17h
|
|
mov byte ptr [transrev6+1], 0b0h
|
|
mov word ptr [transrev7+0], 0d38ah
|
|
mov byte ptr [transrev8+1], 0b0h
|
|
mov word ptr [transrev9+0], 0d78ah
|
|
mov byte ptr [transrev10+1], 87h
|
|
mov byte ptr [transrev11+1], 0a1h
|
|
mov byte ptr [transrev12+2], 87h
|
|
mov word ptr [transrev13+0], 0e388h
|
|
mov byte ptr [transrev14+1], 0a1h
|
|
mov byte ptr [transrev15+1], 0bah
|
|
mov byte ptr [transrev16+1], 87h
|
|
mov byte ptr [transrev17+1], 0a2h
|
|
|
|
mov byte ptr [ntransrev0+1], 0a0h
|
|
mov byte ptr [ntransrev1+1], 7h
|
|
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _tvlineasm1 ;Masked & transluscent vline
|
|
_tvlineasm1:
|
|
CDECLBEGINSET 6
|
|
push ebp
|
|
mov ebp, eax
|
|
xor eax, eax
|
|
inc ecx
|
|
mov dword ptr [transmach3c+2], ebx
|
|
jmp short begintvline
|
|
ALIGN 16
|
|
begintvline:
|
|
mov ebx, edx
|
|
transmach3a: shr ebx, 32
|
|
mov bl, byte ptr [esi+ebx]
|
|
cmp bl, 255
|
|
je short skiptrans1
|
|
transrev0:
|
|
transmach3c: mov al, [ebx+88888888h]
|
|
transrev1:
|
|
mov ah, byte ptr [edi]
|
|
transmach4: mov al, byte ptr [eax+88888888h] ;_transluc[eax]
|
|
mov byte ptr [edi], al
|
|
skiptrans1:
|
|
add edx, ebp
|
|
fixchain1t: add edi, 320
|
|
dec ecx
|
|
jnz short begintvline
|
|
|
|
pop ebp
|
|
mov eax, edx
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _tvlineasm1nonpow2
|
|
_tvlineasm1nonpow2:
|
|
CDECLBEGINSET 6
|
|
mov dword ptr [tnp2_do_palookup+2], ebx
|
|
push ebp
|
|
mov ebp, edx ; ebp: vertical place
|
|
mov ebx, eax ; ebx: vertical increment
|
|
inc ecx
|
|
mov eax, dword ptr [_globaltilesizy]
|
|
mov dword ptr [tnp2_beginvline+1], eax
|
|
tnp2_beginvline: ; +1: y tile size
|
|
mov eax, 00000123h
|
|
mul ebp
|
|
and eax, 000000ffh
|
|
mov al, byte ptr [esi+edx]
|
|
cmp al, 255
|
|
je short tskipmask1
|
|
ntransrev0:
|
|
tnp2_do_palookup: ; +2: addr
|
|
mov al, byte ptr [eax+0000beefh]
|
|
ntransrev1:
|
|
mov ah, byte ptr [edi]
|
|
tnmach4: mov al, byte ptr [eax+88888888h] ;_luc[eax]
|
|
mov byte ptr [edi], al
|
|
tskipmask1:
|
|
add ebp, ebx
|
|
tnp2_fixchain1b: add edi, 320
|
|
dec ecx
|
|
jnz short tnp2_beginvline
|
|
mov eax, ebp
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
;eax: -------temp1-------
|
|
;ebx: -------temp2-------
|
|
;ecx: dat dat dat dat
|
|
;edx: ylo2 ylo4
|
|
;esi: yhi1 yhi2
|
|
;edi: ---videoplc/cnt----
|
|
;ebp: yhi3 yhi4
|
|
;esp:
|
|
ALIGN 16
|
|
PUBLIC _vlineasm4
|
|
_vlineasm4:
|
|
CDECLBEGIN 6
|
|
CDECLPARAM ecx,0,5
|
|
CDECLPARAM edi,1,5
|
|
|
|
push ebp
|
|
|
|
mov eax, _ylookup
|
|
mov eax, [eax+ecx*4]
|
|
add eax, edi
|
|
mov dword ptr [machvline4end+2], eax
|
|
sub edi, eax
|
|
|
|
mov eax, dword ptr _bufplce[0]
|
|
mov ebx, dword ptr _bufplce[4]
|
|
mov ecx, dword ptr _bufplce[8]
|
|
mov edx, dword ptr _bufplce[12]
|
|
mov dword ptr [machvbuf1+2], ecx
|
|
mov dword ptr [machvbuf2+2], edx
|
|
mov dword ptr [machvbuf3+2], eax
|
|
mov dword ptr [machvbuf4+2], ebx
|
|
|
|
mov eax, dword ptr _palookupoffse[0]
|
|
mov ebx, dword ptr _palookupoffse[4]
|
|
mov ecx, dword ptr _palookupoffse[8]
|
|
mov edx, dword ptr _palookupoffse[12]
|
|
mov dword ptr [machvpal1+2], ecx
|
|
mov dword ptr [machvpal2+2], edx
|
|
mov dword ptr [machvpal3+2], eax
|
|
mov dword ptr [machvpal4+2], ebx
|
|
|
|
; +---------------+---------------+
|
|
;edx: |v3lo |v1lo |
|
|
; +---------------+-------+-------+
|
|
;esi: |v2hi v2lo | v3hi|
|
|
; +-----------------------+-------+
|
|
;ebp: |v0hi v0lo | v1hi|
|
|
; +-----------------------+-------+
|
|
|
|
mov ebp, dword ptr _vince[0]
|
|
mov ebx, dword ptr _vince[4]
|
|
mov esi, dword ptr _vince[8]
|
|
mov eax, dword ptr _vince[12]
|
|
and esi, 0fffffe00h
|
|
and ebp, 0fffffe00h
|
|
machvsh9: rol eax, 88h ;sh
|
|
machvsh10: rol ebx, 88h ;sh
|
|
mov edx, eax
|
|
mov ecx, ebx
|
|
shr ecx, 16
|
|
and edx, 0ffff0000h
|
|
add edx, ecx
|
|
and eax, 000001ffh
|
|
and ebx, 000001ffh
|
|
add esi, eax
|
|
add ebp, ebx
|
|
;
|
|
mov eax, edx
|
|
and eax, 0ffff0000h
|
|
mov dword ptr [machvinc1+2], eax
|
|
mov dword ptr [machvinc2+2], esi
|
|
mov byte ptr [machvinc3+2], dl
|
|
mov byte ptr [machvinc4+2], dh
|
|
mov dword ptr [machvinc5+2], ebp
|
|
|
|
mov ebp, dword ptr _vplce[0]
|
|
mov ebx, dword ptr _vplce[4]
|
|
mov esi, dword ptr _vplce[8]
|
|
mov eax, dword ptr _vplce[12]
|
|
and esi, 0fffffe00h
|
|
and ebp, 0fffffe00h
|
|
machvsh11: rol eax, 88h ;sh
|
|
machvsh12: rol ebx, 88h ;sh
|
|
mov edx, eax
|
|
mov ecx, ebx
|
|
shr ecx, 16
|
|
and edx, 0ffff0000h
|
|
add edx, ecx
|
|
and eax, 000001ffh
|
|
and ebx, 000001ffh
|
|
add esi, eax
|
|
add ebp, ebx
|
|
|
|
mov ecx, esi
|
|
jmp short beginvlineasm4
|
|
ALIGN 16
|
|
nop
|
|
nop
|
|
nop
|
|
beginvlineasm4:
|
|
machvsh1: shr ecx, 88h ;32-sh
|
|
mov ebx, esi
|
|
machvsh2: and ebx, 00000088h ;(1<<sh)-1
|
|
machvinc1: add edx, 88880000h
|
|
machvinc2: adc esi, 88888088h
|
|
machvbuf1: mov cl, byte ptr [ecx+88888888h]
|
|
machvbuf2: mov bl, byte ptr [ebx+88888888h]
|
|
mov eax, ebp
|
|
machvsh3: shr eax, 88h ;32-sh
|
|
machvpal1: mov cl, byte ptr [ecx+88888888h]
|
|
machvpal2: mov ch, byte ptr [ebx+88888888h]
|
|
mov ebx, ebp
|
|
shl ecx, 16
|
|
machvsh4: and ebx, 00000088h ;(1<<sh)-1
|
|
machvinc3: add dl, 88h
|
|
machvbuf3: mov al, byte ptr [eax+88888888h]
|
|
machvinc4: adc dh, 88h
|
|
machvbuf4: mov bl, byte ptr [ebx+88888888h]
|
|
machvinc5: adc ebp, 88888088h
|
|
machvpal3: mov cl, byte ptr [eax+88888888h]
|
|
machvpal4: mov ch, byte ptr [ebx+88888888h]
|
|
machvline4end: mov dword ptr [edi+88888888h], ecx
|
|
fixchain2a: add edi, 88888888h
|
|
mov ecx, esi
|
|
jnc short beginvlineasm4
|
|
|
|
; +---------------+---------------+
|
|
;edx: |v3lo |v1lo |
|
|
; +---------------+-------+-------+
|
|
;esi: |v2hi v2lo | v3hi|
|
|
; +-----------------------+-------+
|
|
;ebp: |v0hi v0lo | v1hi|
|
|
; +-----------------------+-------+
|
|
|
|
mov dword ptr _vplce[8], esi
|
|
mov dword ptr _vplce[0], ebp
|
|
;vplc2 = (esi<<(32-sh))+(edx>>sh)
|
|
;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh))
|
|
machvsh5: shl esi, 88h ;32-sh
|
|
mov eax, edx
|
|
machvsh6: shl ebp, 88h ;32-sh
|
|
and edx, 0000ffffh
|
|
machvsh7: shr eax, 88h ;sh
|
|
add esi, eax
|
|
machvsh8: shl edx, 88h ;16-sh
|
|
add ebp, edx
|
|
mov dword ptr _vplce[12], esi
|
|
mov dword ptr _vplce[4], ebp
|
|
|
|
pop ebp
|
|
|
|
CDECLEND 6
|
|
ret
|
|
|
|
;eax: -------temp1-------
|
|
;ebx: -------temp2-------
|
|
;ecx: ylo4 ---------
|
|
;edx: ylo2 ---------
|
|
;esi: yhi1 yhi2
|
|
;edi: ---videoplc/cnt----
|
|
;ebp: yhi3 yhi4
|
|
;esp:
|
|
ALIGN 16
|
|
PUBLIC _provlineasm4
|
|
_provlineasm4:
|
|
CDECLBEGIN 6
|
|
CDECLPARAM ecx,0,5
|
|
CDECLPARAM edi,1,5
|
|
|
|
push ebp
|
|
|
|
mov eax, _ylookup
|
|
mov eax, [eax+ecx*4]
|
|
add eax, edi
|
|
mov dword ptr [promachvline4end1+2], eax
|
|
inc eax
|
|
mov dword ptr [promachvline4end2+2], eax
|
|
inc eax
|
|
mov dword ptr [promachvline4end3+2], eax
|
|
inc eax
|
|
mov dword ptr [promachvline4end4+2], eax
|
|
sub eax, 3
|
|
sub edi, eax
|
|
|
|
mov eax, dword ptr _bufplce[0]
|
|
mov ebx, dword ptr _bufplce[4]
|
|
mov ecx, dword ptr _bufplce[8]
|
|
mov edx, dword ptr _bufplce[12]
|
|
mov dword ptr [promachvbuf1+3], ecx
|
|
mov dword ptr [promachvbuf2+3], edx
|
|
mov dword ptr [promachvbuf3+3], eax
|
|
mov dword ptr [promachvbuf4+3], ebx
|
|
|
|
mov eax, dword ptr _palookupoffse[0]
|
|
mov ebx, dword ptr _palookupoffse[4]
|
|
mov ecx, dword ptr _palookupoffse[8]
|
|
mov edx, dword ptr _palookupoffse[12]
|
|
mov dword ptr [promachvpal1+2], ecx
|
|
mov dword ptr [promachvpal2+2], edx
|
|
mov dword ptr [promachvpal3+2], eax
|
|
mov dword ptr [promachvpal4+2], ebx
|
|
|
|
; +---------------+---------------+
|
|
;edx: |v3lo |v1lo |
|
|
; +---------------+-------+-------+
|
|
;esi: |v2hi v2lo | v3hi|
|
|
; +-----------------------+-------+
|
|
;ebp: |v0hi v0lo | v1hi|
|
|
; +-----------------------+-------+
|
|
|
|
mov ebp, dword ptr _vince[0]
|
|
mov ebx, dword ptr _vince[4]
|
|
mov esi, dword ptr _vince[8]
|
|
mov eax, dword ptr _vince[12]
|
|
and esi, 0fffffe00h
|
|
and ebp, 0fffffe00h
|
|
promachvsh9: rol eax, 88h ;sh
|
|
promachvsh10: rol ebx, 88h ;sh
|
|
mov edx, eax
|
|
mov ecx, ebx
|
|
shr ecx, 16
|
|
and edx, 0ffff0000h
|
|
add edx, ecx
|
|
and eax, 000001ffh
|
|
and ebx, 000001ffh
|
|
add esi, eax
|
|
add ebp, ebx
|
|
;
|
|
mov eax, edx
|
|
and eax, 0ffff0000h
|
|
mov dword ptr [promachvinc1+2], eax
|
|
mov dword ptr [promachvinc2+2], esi
|
|
shl edx, 16
|
|
mov dword ptr [promachvinc3+2], edx
|
|
mov dword ptr [promachvinc5+2], ebp
|
|
|
|
mov ebp, dword ptr _vplce[0]
|
|
mov ebx, dword ptr _vplce[4]
|
|
mov esi, dword ptr _vplce[8]
|
|
mov eax, dword ptr _vplce[12]
|
|
and esi, 0fffffe00h
|
|
and ebp, 0fffffe00h
|
|
promachvsh11: rol eax, 88h ;sh
|
|
promachvsh12: rol ebx, 88h ;sh
|
|
mov edx, eax
|
|
mov ecx, ebx
|
|
shr ecx, 16
|
|
and edx, 0ffff0000h
|
|
add edx, ecx
|
|
and eax, 000001ffh
|
|
and ebx, 000001ffh
|
|
add esi, eax
|
|
add ebp, ebx
|
|
|
|
mov eax, esi
|
|
mov ecx, edx
|
|
shl ecx, 16
|
|
jmp short probeginvlineasm4
|
|
ALIGN 16
|
|
nop
|
|
nop
|
|
nop
|
|
probeginvlineasm4:
|
|
promachvsh1: shr eax, 88h ;32-sh
|
|
mov ebx, esi
|
|
promachvsh2: and ebx, 00000088h ;(1<<sh)-1
|
|
promachvinc1: add edx, 88880000h
|
|
promachvinc2: adc esi, 88888088h
|
|
promachvbuf1: movzx eax, byte ptr [eax+88888888h]
|
|
promachvbuf2: movzx ebx, byte ptr [ebx+88888888h]
|
|
promachvpal1: mov al, byte ptr [eax+88888888h]
|
|
promachvline4end3: mov byte ptr [edi+88888888h], al
|
|
mov eax, ebp
|
|
promachvsh3: shr eax, 88h ;32-sh
|
|
promachvpal2: mov bl, byte ptr [ebx+88888888h]
|
|
promachvline4end4: mov byte ptr [edi+88888888h], bl
|
|
mov ebx, ebp
|
|
promachvsh4: and ebx, 00000088h ;(1<<sh)-1
|
|
promachvbuf3: movzx eax, byte ptr [eax+88888888h]
|
|
promachvinc3: add ecx, 88888888h
|
|
promachvbuf4: movzx ebx, byte ptr [ebx+88888888h]
|
|
promachvinc5: adc ebp, 88888088h
|
|
promachvpal3: mov al, byte ptr [eax+88888888h]
|
|
promachvline4end1: mov byte ptr [edi+88888888h], al
|
|
promachvpal4: mov bl, byte ptr [ebx+88888888h]
|
|
promachvline4end2: mov byte ptr [edi+88888888h], bl
|
|
profixchain2a: add edi, 88888888h
|
|
mov eax, esi
|
|
jnc probeginvlineasm4
|
|
|
|
; +---------------+---------------+
|
|
;edx: |v3lo |v1lo |
|
|
; +---------------+-------+-------+
|
|
;esi: |v2hi v2lo | v3hi|
|
|
; +-----------------------+-------+
|
|
;ebp: |v0hi v0lo | v1hi|
|
|
; +-----------------------+-------+
|
|
|
|
mov dword ptr _vplce[8], esi
|
|
mov dword ptr _vplce[0], ebp
|
|
;vplc2 = (esi<<(32-sh))+(edx>>sh)
|
|
;vplc3 = (ebp<<(32-sh))+((edx&65535)<<(16-sh))
|
|
promachvsh5: shl esi, 88h ;32-sh
|
|
mov eax, edx
|
|
promachvsh6: shl ebp, 88h ;32-sh
|
|
and edx, 0000ffffh
|
|
promachvsh7: shr eax, 88h ;sh
|
|
add esi, eax
|
|
promachvsh8: shl edx, 88h ;16-sh
|
|
add ebp, edx
|
|
mov dword ptr _vplce[12], esi
|
|
mov dword ptr _vplce[4], ebp
|
|
|
|
pop ebp
|
|
|
|
CDECLEND 6
|
|
ret
|
|
|
|
|
|
ALIGN 16
|
|
PUBLIC _mvlineasm4
|
|
_mvlineasm4:
|
|
CDECLBEGIN 6
|
|
CDECLPARAM ecx,0,5
|
|
CDECLPARAM edi,1,5
|
|
|
|
push ebp
|
|
|
|
mov eax, dword ptr _bufplce[0]
|
|
mov ebx, dword ptr _bufplce[4]
|
|
mov dword ptr [machmv1+2], eax
|
|
mov dword ptr [machmv4+2], ebx
|
|
mov eax, dword ptr _bufplce[8]
|
|
mov ebx, dword ptr _bufplce[12]
|
|
mov dword ptr [machmv7+2], eax
|
|
mov dword ptr [machmv10+2], ebx
|
|
|
|
mov eax, dword ptr _palookupoffse[0]
|
|
mov ebx, dword ptr _palookupoffse[4]
|
|
mov dword ptr [machmv2+2], eax
|
|
mov dword ptr [machmv5+2], ebx
|
|
mov eax, dword ptr _palookupoffse[8]
|
|
mov ebx, dword ptr _palookupoffse[12]
|
|
mov dword ptr [machmv8+2], eax
|
|
mov dword ptr [machmv11+2], ebx
|
|
|
|
mov eax, dword ptr _vince[0] ;vince
|
|
mov ebx, dword ptr _vince[4]
|
|
xor al, al
|
|
xor bl, bl
|
|
mov dword ptr [machmv3+2], eax
|
|
mov dword ptr [machmv6+2], ebx
|
|
mov eax, dword ptr _vince[8]
|
|
mov ebx, dword ptr _vince[12]
|
|
mov dword ptr [machmv9+2], eax
|
|
mov dword ptr [machmv12+2], ebx
|
|
|
|
mov ebx, ecx
|
|
mov ecx, dword ptr _vplce[0]
|
|
mov edx, dword ptr _vplce[4]
|
|
mov esi, dword ptr _vplce[8]
|
|
mov ebp, dword ptr _vplce[12]
|
|
mov cl, bl
|
|
inc cl
|
|
inc bh
|
|
mov byte ptr _asm3[0], bh
|
|
fixchain2ma: sub edi, 320
|
|
|
|
jmp short beginmvlineasm4
|
|
ALIGN 16
|
|
beginmvlineasm4:
|
|
dec cl
|
|
jz endmvlineasm4
|
|
beginmvlineasm42:
|
|
mov eax, ebp
|
|
mov ebx, esi
|
|
machmv16: shr eax, 32
|
|
machmv15: shr ebx, 32
|
|
machmv12: add ebp, 88888888h ;vince[3]
|
|
machmv9: add esi, 88888888h ;vince[2]
|
|
machmv10: mov al, byte ptr [eax+88888888h] ;bufplce[3]
|
|
machmv7: mov bl, byte ptr [ebx+88888888h] ;bufplce[2]
|
|
cmp al, 255
|
|
adc dl, dl
|
|
cmp bl, 255
|
|
adc dl, dl
|
|
machmv8: mov bl, byte ptr [ebx+88888888h] ;palookupoffs[2]
|
|
machmv11: mov bh, byte ptr [eax+88888888h] ;palookupoffs[3]
|
|
|
|
mov eax, edx
|
|
machmv14: shr eax, 32
|
|
shl ebx, 16
|
|
machmv4: mov al, byte ptr [eax+88888888h] ;bufplce[1]
|
|
cmp al, 255
|
|
adc dl, dl
|
|
machmv6: add edx, 88888888h ;vince[1]
|
|
machmv5: mov bh, byte ptr [eax+88888888h] ;palookupoffs[1]
|
|
|
|
mov eax, ecx
|
|
machmv13: shr eax, 32
|
|
machmv3: add ecx, 88888888h ;vince[0]
|
|
machmv1: mov al, byte ptr [eax+88888888h] ;bufplce[0]
|
|
cmp al, 255
|
|
adc dl, dl
|
|
machmv2: mov bl, byte ptr [eax+88888888h] ;palookupoffs[0]
|
|
|
|
shl dl, 4
|
|
xor eax, eax
|
|
fixchain2mb: add edi, 320
|
|
mov al, dl
|
|
add eax, offset mvcase0
|
|
jmp eax ;16 byte cases
|
|
|
|
ALIGN 16
|
|
endmvlineasm4:
|
|
dec byte ptr _asm3[0]
|
|
jnz beginmvlineasm42
|
|
|
|
mov dword ptr _vplce[0], ecx
|
|
mov dword ptr _vplce[4], edx
|
|
mov dword ptr _vplce[8], esi
|
|
mov dword ptr _vplce[12], ebp
|
|
pop ebp
|
|
CDECLEND 6
|
|
ret
|
|
|
|
;5,7,8,8,11,13,12,14,11,13,14,14,12,14,15,7
|
|
ALIGN 16
|
|
mvcase0:
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase1:
|
|
mov byte ptr [edi], bl
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase2:
|
|
mov byte ptr [edi+1], bh
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase3:
|
|
mov word ptr [edi], bx
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase4:
|
|
shr ebx, 16
|
|
mov byte ptr [edi+2], bl
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase5:
|
|
mov byte ptr [edi], bl
|
|
shr ebx, 16
|
|
mov byte ptr [edi+2], bl
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase6:
|
|
shr ebx, 8
|
|
mov word ptr [edi+1], bx
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase7:
|
|
mov word ptr [edi], bx
|
|
shr ebx, 16
|
|
mov byte ptr [edi+2], bl
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase8:
|
|
shr ebx, 16
|
|
mov byte ptr [edi+3], bh
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase9:
|
|
mov byte ptr [edi], bl
|
|
shr ebx, 16
|
|
mov byte ptr [edi+3], bh
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase10:
|
|
mov byte ptr [edi+1], bh
|
|
shr ebx, 16
|
|
mov byte ptr [edi+3], bh
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase11:
|
|
mov word ptr [edi], bx
|
|
shr ebx, 16
|
|
mov byte ptr [edi+3], bh
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase12:
|
|
shr ebx, 16
|
|
mov word ptr [edi+2], bx
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase13:
|
|
mov byte ptr [edi], bl
|
|
shr ebx, 16
|
|
mov word ptr [edi+2], bx
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase14:
|
|
mov byte ptr [edi+1], bh
|
|
shr ebx, 16
|
|
mov word ptr [edi+2], bx
|
|
jmp beginmvlineasm4
|
|
ALIGN 16
|
|
mvcase15:
|
|
mov dword ptr [edi], ebx
|
|
jmp beginmvlineasm4
|
|
|
|
ALIGN 16
|
|
PUBLIC _setupspritevline
|
|
_setupspritevline:
|
|
CDECLBEGINSET 6
|
|
|
|
mov dword ptr [spal+2], eax
|
|
|
|
mov eax, esi ;xinc's
|
|
shl eax, 16
|
|
mov dword ptr [smach1+2], eax
|
|
mov dword ptr [smach4+2], eax
|
|
mov eax, esi
|
|
sar eax, 16
|
|
add eax, ebx ;watch out with ebx - it's passed
|
|
mov dword ptr [smach2+2], eax
|
|
add eax, edx
|
|
mov dword ptr [smach5+2], eax
|
|
|
|
mov dword ptr [smach3+2], ecx ;yinc's
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _spritevline
|
|
_spritevline:
|
|
CDECLBEGINSET 6
|
|
jmp short _spritevline_start
|
|
;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p
|
|
prestartsvline:
|
|
smach1: add ebx, 88888888h ;xincshl16
|
|
mov al, byte ptr [esi]
|
|
smach2: adc esi, 88888888h ;xincshr16+yalwaysinc
|
|
|
|
startsvline:
|
|
spal: mov al, [eax+88888888h] ;palookup
|
|
mov byte ptr [edi], al
|
|
fixchain1s: add edi, 320
|
|
|
|
_spritevline_start:
|
|
smach3: add edx, 88888888h ;dayinc
|
|
dec ecx
|
|
ja short prestartsvline ;jump if (no carry (add)) and (not zero (dec))!
|
|
jz short endsvline
|
|
smach4: add ebx, 88888888h ;xincshl16
|
|
mov al, byte ptr [esi]
|
|
smach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime
|
|
jmp short startsvline
|
|
endsvline:
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _msetupspritevline
|
|
_msetupspritevline:
|
|
CDECLBEGINSET 6
|
|
|
|
mov dword ptr [mspal+2], eax
|
|
|
|
mov eax, esi ;xinc's
|
|
shl eax, 16
|
|
mov dword ptr [msmach1+2], eax
|
|
mov dword ptr [msmach4+2], eax
|
|
mov eax, esi
|
|
sar eax, 16
|
|
add eax, ebx ;watch out with ebx - it's passed
|
|
mov dword ptr [msmach2+2], eax
|
|
add eax, edx
|
|
mov dword ptr [msmach5+2], eax
|
|
|
|
mov dword ptr [msmach3+2], ecx ;yinc's
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _mspritevline
|
|
_mspritevline:
|
|
CDECLBEGINSET 6
|
|
jmp short _mspritevline_start
|
|
;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p
|
|
mprestartsvline:
|
|
msmach1: add ebx, 88888888h ;xincshl16
|
|
mov al, byte ptr [esi]
|
|
msmach2: adc esi, 88888888h ;xincshr16+yalwaysinc
|
|
|
|
mstartsvline:
|
|
cmp al, 255
|
|
je short mskipsvline
|
|
mspal: mov al, [eax+88888888h] ;palookup
|
|
mov byte ptr [edi], al
|
|
mskipsvline:
|
|
mfixchain1s: add edi, 320
|
|
|
|
_mspritevline_start:
|
|
msmach3: add edx, 88888888h ;dayinc
|
|
dec ecx
|
|
ja short mprestartsvline ;jump if (no carry (add)) and (not zero (dec))!
|
|
jz short mendsvline
|
|
msmach4: add ebx, 88888888h ;xincshl16
|
|
mov al, byte ptr [esi]
|
|
msmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime
|
|
jmp short mstartsvline
|
|
mendsvline:
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _tsetupspritevline
|
|
_tsetupspritevline:
|
|
CDECLBEGINSET 6
|
|
mov dword ptr [tspal+2], eax
|
|
|
|
mov eax, esi ;xinc's
|
|
shl eax, 16
|
|
mov dword ptr [tsmach1+2], eax
|
|
mov dword ptr [tsmach4+2], eax
|
|
mov eax, esi
|
|
sar eax, 16
|
|
add eax, ebx ;watch out with ebx - it's passed
|
|
mov dword ptr [tsmach2+2], eax
|
|
add eax, edx
|
|
mov dword ptr [tsmach5+2], eax
|
|
|
|
mov dword ptr [tsmach3+2], ecx ;yinc's
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _tspritevline
|
|
_tspritevline:
|
|
CDECLBEGINSET 6
|
|
;eax = 0, ebx = x, ecx = cnt, edx = y, esi = yplc, edi = p
|
|
push ebp
|
|
mov ebp, ebx
|
|
xor ebx, ebx
|
|
jmp tenterspritevline
|
|
ALIGN 16
|
|
tprestartsvline:
|
|
tsmach1: add ebp, 88888888h ;xincshl16
|
|
mov al, byte ptr [esi]
|
|
tsmach2: adc esi, 88888888h ;xincshr16+yalwaysinc
|
|
|
|
tstartsvline:
|
|
cmp al, 255
|
|
je short tskipsvline
|
|
transrev2:
|
|
mov bh, byte ptr [edi]
|
|
transrev3:
|
|
tspal: mov bl, [eax+88888888h] ;palookup
|
|
tmach4: mov al, byte ptr [ebx+88888888h] ;_transluc
|
|
mov byte ptr [edi], al
|
|
tskipsvline:
|
|
tfixchain1s: add edi, 320
|
|
|
|
tenterspritevline:
|
|
tsmach3: add edx, 88888888h ;dayinc
|
|
dec ecx
|
|
ja short tprestartsvline ;jump if (no carry (add)) and (not zero (dec))!
|
|
jz short tendsvline
|
|
tsmach4: add ebp, 88888888h ;xincshl16
|
|
mov al, byte ptr [esi]
|
|
tsmach5: adc esi, 88888888h ;xincshr16+yalwaysinc+daydime
|
|
jmp short tstartsvline
|
|
tendsvline:
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _msethlineshift
|
|
_msethlineshift:
|
|
CDECLBEGINSET 2
|
|
neg al
|
|
mov byte ptr [msh1d+2], al
|
|
mov byte ptr [msh2d+3], bl
|
|
mov byte ptr [msh3d+2], al
|
|
mov byte ptr [msh4d+3], bl
|
|
mov byte ptr [msh5d+2], al
|
|
mov byte ptr [msh6d+3], bl
|
|
CDECLENDSET 2
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _mhline
|
|
_mhline:
|
|
CDECLBEGINSET 6
|
|
;_asm1 = bxinc
|
|
;_asm2 = byinc
|
|
;_asm3 = shadeoffs
|
|
;eax = picoffs
|
|
;ebx = bx
|
|
;ecx = cnt
|
|
;edx = ?
|
|
;esi = by
|
|
;edi = p
|
|
|
|
mov dword ptr [mmach1d+2], eax
|
|
mov dword ptr [mmach5d+2], eax
|
|
mov dword ptr [mmach9d+2], eax
|
|
mov eax, _asm3
|
|
mov dword ptr [mmach2d+2], eax
|
|
mov dword ptr [mmach2da+2], eax
|
|
mov dword ptr [mmach2db+2], eax
|
|
mov dword ptr [mmach6d+2], eax
|
|
mov dword ptr [mmach10d+2], eax
|
|
mov eax, _asm1
|
|
mov dword ptr [mmach3d+2], eax
|
|
mov dword ptr [mmach7d+2], eax
|
|
mov eax, _asm2
|
|
mov dword ptr [mmach4d+2], eax
|
|
mov dword ptr [mmach8d+2], eax
|
|
jmp short _mhlineskipmodify_nosetup
|
|
|
|
ALIGN 16
|
|
PUBLIC _mhlineskipmodify
|
|
_mhlineskipmodify:
|
|
CDECLBEGINSET 6
|
|
_mhlineskipmodify_nosetup:
|
|
|
|
push ebp
|
|
|
|
xor eax, eax
|
|
mov ebp, ebx
|
|
|
|
test ecx, 00010000h
|
|
jnz short mbeghline
|
|
|
|
msh1d: shr ebx, 26
|
|
msh2d: shld ebx, esi, 6
|
|
add ebp, _asm1
|
|
mmach9d: mov al, byte ptr [ebx+88888888h] ;picoffs
|
|
add esi, _asm2
|
|
cmp al, 255
|
|
je mskip5
|
|
|
|
mmach10d: mov cl, byte ptr [eax+88888888h] ;shadeoffs
|
|
mov byte ptr [edi], cl
|
|
mskip5:
|
|
inc edi
|
|
sub ecx, 65536
|
|
jc mendhline
|
|
jmp short mbeghline
|
|
|
|
ALIGN 16
|
|
mpreprebeghline: ;1st only
|
|
mov al, cl
|
|
mmach2d: mov al, byte ptr [eax+88888888h] ;shadeoffs
|
|
mov byte ptr [edi], al
|
|
|
|
mprebeghline:
|
|
add edi, 2
|
|
sub ecx, 131072
|
|
jc short mendhline
|
|
mbeghline:
|
|
mmach3d: lea ebx, [ebp+88888888h] ;bxinc
|
|
msh3d: shr ebp, 26
|
|
msh4d: shld ebp, esi, 6
|
|
mmach4d: add esi, 88888888h ;byinc
|
|
mmach1d: mov cl, byte ptr [ebp+88888888h] ;picoffs
|
|
mmach7d: lea ebp, [ebx+88888888h] ;bxinc
|
|
|
|
msh5d: shr ebx, 26
|
|
msh6d: shld ebx, esi, 6
|
|
mmach8d: add esi, 88888888h ;byinc
|
|
mmach5d: mov ch, byte ptr [ebx+88888888h] ;picoffs
|
|
|
|
cmp cl, 255
|
|
je short mskip1
|
|
cmp ch, 255
|
|
je short mpreprebeghline
|
|
|
|
mov al, cl ;BOTH
|
|
mmach2da: mov bl, byte ptr [eax+88888888h] ;shadeoffs
|
|
mov al, ch
|
|
mmach2db: mov bh, byte ptr [eax+88888888h] ;shadeoffs
|
|
mov word ptr [edi], bx
|
|
add edi, 2
|
|
sub ecx, 131072
|
|
jnc short mbeghline
|
|
jmp mendhline
|
|
mskip1: ;2nd only
|
|
cmp ch, 255
|
|
je short mprebeghline
|
|
|
|
mov al, ch
|
|
mmach6d: mov al, byte ptr [eax+88888888h] ;shadeoffs
|
|
mov byte ptr [edi+1], al
|
|
add edi, 2
|
|
sub ecx, 131072
|
|
jnc short mbeghline
|
|
mendhline:
|
|
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _tsethlineshift
|
|
_tsethlineshift:
|
|
CDECLBEGINSET 2
|
|
neg al
|
|
mov byte ptr [tsh1d+2], al
|
|
mov byte ptr [tsh2d+3], bl
|
|
mov byte ptr [tsh3d+2], al
|
|
mov byte ptr [tsh4d+3], bl
|
|
mov byte ptr [tsh5d+2], al
|
|
mov byte ptr [tsh6d+3], bl
|
|
CDECLENDSET 2
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _thline
|
|
_thline:
|
|
CDECLBEGINSET 6
|
|
;_asm1 = bxinc
|
|
;_asm2 = byinc
|
|
;_asm3 = shadeoffs
|
|
;eax = picoffs
|
|
;ebx = bx
|
|
;ecx = cnt
|
|
;edx = ?
|
|
;esi = by
|
|
;edi = p
|
|
|
|
mov dword ptr [tmach1d+2], eax
|
|
mov dword ptr [tmach5d+2], eax
|
|
mov dword ptr [tmach9d+2], eax
|
|
mov eax, _asm3
|
|
mov dword ptr [tmach2d+2], eax
|
|
mov dword ptr [tmach6d+2], eax
|
|
mov dword ptr [tmach10d+2], eax
|
|
mov eax, _asm1
|
|
mov dword ptr [tmach3d+2], eax
|
|
mov dword ptr [tmach7d+2], eax
|
|
mov eax, _asm2
|
|
mov dword ptr [tmach4d+2], eax
|
|
mov dword ptr [tmach8d+2], eax
|
|
jmp short _thlineskipmodify_nosetup
|
|
|
|
ALIGN 16
|
|
PUBLIC _thlineskipmodify
|
|
_thlineskipmodify:
|
|
CDECLBEGINSET 6
|
|
_thlineskipmodify_nosetup:
|
|
|
|
push ebp
|
|
|
|
xor eax, eax
|
|
xor edx, edx
|
|
mov ebp, ebx
|
|
|
|
test ecx, 00010000h
|
|
jnz short tbeghline
|
|
|
|
tsh1d: shr ebx, 26
|
|
tsh2d: shld ebx, esi, 6
|
|
add ebp, _asm1
|
|
tmach9d: mov al, byte ptr [ebx+88888888h] ;picoffs
|
|
add esi, _asm2
|
|
cmp al, 255
|
|
je tskip5
|
|
|
|
transrev4:
|
|
tmach10d: mov dl, byte ptr [eax+88888888h] ;shadeoffs
|
|
transrev5:
|
|
mov dh, byte ptr [edi]
|
|
tmach1: mov al, byte ptr [edx+88888888h] ;_transluc
|
|
mov byte ptr [edi], al
|
|
tskip5:
|
|
inc edi
|
|
sub ecx, 65536
|
|
jc tendhline
|
|
jmp short tbeghline
|
|
|
|
ALIGN 16
|
|
tprebeghline:
|
|
add edi, 2
|
|
sub ecx, 131072
|
|
jc short tendhline
|
|
tbeghline:
|
|
tmach3d: lea ebx, [ebp+88888888h] ;bxinc
|
|
tsh3d: shr ebp, 26
|
|
tsh4d: shld ebp, esi, 6
|
|
tmach4d: add esi, 88888888h ;byinc
|
|
tmach1d: mov cl, byte ptr [ebp+88888888h] ;picoffs
|
|
tmach7d: lea ebp, [ebx+88888888h] ;bxinc
|
|
|
|
tsh5d: shr ebx, 26
|
|
tsh6d: shld ebx, esi, 6
|
|
tmach8d: add esi, 88888888h ;byinc
|
|
tmach5d: mov ch, byte ptr [ebx+88888888h] ;picoffs
|
|
|
|
cmp cx, 0ffffh
|
|
je short tprebeghline
|
|
|
|
mov bx, word ptr [edi]
|
|
|
|
cmp cl, 255
|
|
je short tskip1
|
|
mov al, cl
|
|
transrev6:
|
|
tmach2d: mov dl, byte ptr [eax+88888888h] ;shadeoffs
|
|
transrev7:
|
|
mov dh, bl
|
|
tmach2: mov al, byte ptr [edx+88888888h] ;_transluc
|
|
mov byte ptr [edi], al
|
|
|
|
cmp ch, 255
|
|
je short tskip2
|
|
tskip1:
|
|
mov al, ch
|
|
transrev8:
|
|
tmach6d: mov dl, byte ptr [eax+88888888h] ;shadeoffs
|
|
transrev9:
|
|
mov dh, bh
|
|
tmach3: mov al, byte ptr [edx+88888888h] ;_transluc
|
|
mov byte ptr [edi+1], al
|
|
tskip2:
|
|
|
|
add edi, 2
|
|
sub ecx, 131072
|
|
jnc tbeghline
|
|
tendhline:
|
|
|
|
pop ebp
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
;eax=shiftval, ebx=palookup1, ecx=palookup2
|
|
ALIGN 16
|
|
PUBLIC _setuptvlineasm2
|
|
_setuptvlineasm2:
|
|
CDECLBEGINSET 3
|
|
mov byte ptr [tran2shra+2], al
|
|
mov byte ptr [tran2shrb+2], al
|
|
mov dword ptr [tran2pala+2], ebx
|
|
mov dword ptr [tran2palb+2], ecx
|
|
mov dword ptr [tran2palc+2], ebx
|
|
mov dword ptr [tran2pald+2], ecx
|
|
CDECLENDSET 3
|
|
ret
|
|
|
|
;Pass: eax=vplc2, ebx=vinc1, ecx=bufplc1, edx=bufplc2, esi=vplc1, edi=p
|
|
; _asm1=vinc2, _asm2=pend
|
|
;Return: _asm1=vplc1, _asm2=vplc2
|
|
ALIGN 16
|
|
PUBLIC _tvlineasm2
|
|
_tvlineasm2:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
|
|
mov ebp, eax
|
|
|
|
mov dword ptr [tran2inca+2], ebx
|
|
mov eax, _asm1
|
|
mov dword ptr [tran2incb+2], eax
|
|
|
|
mov dword ptr [tran2bufa+2], ecx ;bufplc1
|
|
mov dword ptr [tran2bufb+2], edx ;bufplc2
|
|
|
|
mov eax, _asm2
|
|
sub edi, eax
|
|
mov dword ptr [tran2edia+3], eax
|
|
mov dword ptr [tran2edic+2], eax
|
|
inc eax
|
|
mov dword ptr [tran2edie+2], eax
|
|
fixchaint2a: sub eax, 320
|
|
mov dword ptr [tran2edif+2], eax
|
|
dec eax
|
|
mov dword ptr [tran2edib+3], eax
|
|
mov dword ptr [tran2edid+2], eax
|
|
|
|
xor ecx, ecx
|
|
xor edx, edx
|
|
jmp short begintvline2
|
|
|
|
;eax 0000000000 temp temp
|
|
;ebx 0000000000 odat2 odat1
|
|
;ecx 0000000000000000 ndat1
|
|
;edx 0000000000000000 ndat2
|
|
;esi vplc1
|
|
;edi videoplc--------------
|
|
;ebp vplc2
|
|
|
|
ALIGN 16
|
|
;LEFT ONLY
|
|
skipdraw2:
|
|
transrev10:
|
|
tran2edic: mov ah, byte ptr [edi+88888888h] ;getpixel
|
|
transrev11:
|
|
tran2palc: mov al, byte ptr [ecx+88888888h] ;palookup1
|
|
fixchaint2d: add edi, 320
|
|
tran2trac: mov bl, byte ptr [eax+88888888h] ;_transluc
|
|
tran2edid: mov byte ptr [edi+88888888h-320], bl ;drawpixel
|
|
jnc short begintvline2
|
|
jmp endtvline2
|
|
|
|
skipdraw1:
|
|
cmp dl, 255
|
|
jne short skipdraw3
|
|
fixchaint2b: add edi, 320
|
|
jc short endtvline2
|
|
|
|
begintvline2:
|
|
mov eax, esi
|
|
tran2shra: shr eax, 88h ;globalshift
|
|
mov ebx, ebp
|
|
tran2shrb: shr ebx, 88h ;globalshift
|
|
tran2inca: add esi, 88888888h ;vinc1
|
|
tran2incb: add ebp, 88888888h ;vinc2
|
|
tran2bufa: mov cl, byte ptr [eax+88888888h] ;bufplc1
|
|
cmp cl, 255
|
|
tran2bufb: mov dl, byte ptr [ebx+88888888h] ;bufplc2
|
|
je short skipdraw1
|
|
cmp dl, 255
|
|
je short skipdraw2
|
|
|
|
;mov ax The transluscent reverse of both!
|
|
;mov bl, ah
|
|
;mov ah
|
|
;mov bh
|
|
|
|
;BOTH
|
|
transrev12:
|
|
tran2edia: mov bx, word ptr [edi+88888888h] ;getpixels
|
|
transrev13:
|
|
mov ah, bl
|
|
transrev14:
|
|
tran2pala: mov al, byte ptr [ecx+88888888h] ;palookup1
|
|
transrev15:
|
|
tran2palb: mov bl, byte ptr [edx+88888888h] ;palookup2
|
|
fixchaint2c: add edi, 320
|
|
tran2traa: mov al, byte ptr [eax+88888888h] ;_transluc
|
|
tran2trab: mov ah, byte ptr [ebx+88888888h] ;_transluc
|
|
tran2edib: mov word ptr [edi+88888888h-320], ax ;drawpixels
|
|
jnc short begintvline2
|
|
jmp short endtvline2
|
|
|
|
;RIGHT ONLY
|
|
skipdraw3:
|
|
transrev16:
|
|
tran2edie: mov ah, byte ptr [edi+88888889h] ;getpixel
|
|
transrev17:
|
|
tran2pald: mov al, byte ptr [edx+88888888h] ;palookup2
|
|
fixchaint2e: add edi, 320
|
|
tran2trad: mov bl, byte ptr [eax+88888888h] ;_transluc
|
|
tran2edif: mov byte ptr [edi+88888889h-320], bl ;drawpixel
|
|
jnc short begintvline2
|
|
|
|
endtvline2:
|
|
mov _asm1, esi
|
|
mov _asm2, ebp
|
|
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
BITSOFPRECISION equ 3
|
|
BITSOFPRECISIONPOW equ 8
|
|
|
|
;Double-texture mapping with palette lookup
|
|
;eax: ylo1------------|----dat|----dat
|
|
;ebx: ylo2--------------------|----cnt
|
|
;ecx: 000000000000000000000000|---temp
|
|
;edx: xhi1-xlo1---------------|---yhi1
|
|
;esi: xhi2-xlo2---------------|---yhi2
|
|
;edi: ------------------------videopos
|
|
;ebp: ----------------------------temp
|
|
|
|
ALIGN 16
|
|
PUBLIC _setupslopevlin2
|
|
_setupslopevlin2:
|
|
CDECLBEGINSET 6
|
|
|
|
mov dword ptr [slop3+2], edx ;ptr
|
|
mov dword ptr [slop7+2], edx ;ptr
|
|
mov dword ptr [slop4+2], esi ;tptr
|
|
mov dword ptr [slop8+2], esi ;tptr
|
|
mov byte ptr [slop2+2], ah ;ybits
|
|
mov byte ptr [slop6+2], ah ;ybits
|
|
mov dword ptr [slop9+2], edi ;pinc
|
|
|
|
mov edx, 1
|
|
mov cl, al
|
|
add cl, ah
|
|
shl edx, cl
|
|
dec edx
|
|
mov cl, ah
|
|
ror edx, cl
|
|
|
|
mov dword ptr [slop1+2], edx ;ybits...xbits
|
|
mov dword ptr [slop5+2], edx ;ybits...xbits
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _slopevlin2
|
|
_slopevlin2:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
xor ecx, ecx
|
|
|
|
slopevlin2begin:
|
|
mov ebp, edx
|
|
slop1: and ebp, 88000088h ;ybits...xbits
|
|
slop2: rol ebp, 6 ;ybits
|
|
add eax, _asm1 ;xinc1<<xbits
|
|
adc edx, _asm2 ;(yinc1&0xffffff00)+(xinc1>>(32-xbits))
|
|
slop3: mov cl, byte ptr [ebp+88888888h] ;bufplc
|
|
|
|
mov ebp, esi
|
|
slop4: mov al, byte ptr [ecx+88888888h] ;paloffs
|
|
slop5: and ebp, 88000088h ;ybits...xbits
|
|
slop6: rol ebp, 6 ;ybits
|
|
add ebx, _asm3 ;xinc2<<xbits
|
|
slop7: mov cl, byte ptr [ebp+88888888h] ;bufplc
|
|
adc esi, _asm4 ;(yinc2&0xffffff00)+(xinc2>>(32-xbits))
|
|
slop8: mov ah, byte ptr [ecx+88888888h] ;paloffs
|
|
|
|
dec bl
|
|
mov word ptr [edi], ax
|
|
slop9: lea edi, [edi+88888888h] ;pinc
|
|
jnz short slopevlin2begin
|
|
|
|
pop ebp
|
|
mov eax, edi
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
ALIGN 16
|
|
PUBLIC _setupslopevlin
|
|
_setupslopevlin:
|
|
CDECLBEGINSET 3
|
|
|
|
mov dword ptr [slopmach3+3], ebx ;ptr
|
|
mov dword ptr [slopmach5+2], ecx ;pinc
|
|
neg ecx
|
|
mov dword ptr [slopmach6+2], ecx ;-pinc
|
|
|
|
mov edx, 1
|
|
mov cl, al
|
|
shl edx, cl
|
|
dec edx
|
|
mov cl, ah
|
|
shl edx, cl
|
|
mov dword ptr [slopmach7+2], edx
|
|
|
|
neg ah
|
|
mov byte ptr [slopmach2+2], ah
|
|
|
|
sub ah, al
|
|
mov byte ptr [slopmach1+2], ah
|
|
|
|
fild dword ptr _asm1
|
|
fstp dword ptr _asm2
|
|
|
|
CDECLENDSET 3
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _slopevlin
|
|
_slopevlin:
|
|
CDECLBEGINSET 6
|
|
|
|
mov _ebpbak, ebp
|
|
mov _espbak, esp
|
|
|
|
sub ecx, esp
|
|
mov dword ptr [slopmach4+3], ecx
|
|
|
|
fild dword ptr _asm3
|
|
slopmach6: lea ebp, [eax+88888888h]
|
|
fadd dword ptr _asm2
|
|
|
|
mov _asm1, ebx
|
|
shl ebx, 3
|
|
|
|
mov eax, _globalx3
|
|
mov ecx, _globaly3
|
|
imul eax, ebx
|
|
imul ecx, ebx
|
|
add esi, eax
|
|
add edi, ecx
|
|
|
|
mov ebx, edx
|
|
jmp short bigslopeloop
|
|
ALIGN 16
|
|
bigslopeloop:
|
|
fst dword ptr _fpuasm
|
|
|
|
mov eax, _fpuasm
|
|
add eax, eax
|
|
sbb edx, edx
|
|
mov ecx, eax
|
|
shr ecx, 24
|
|
and eax, 00ffe000h
|
|
shr eax, 11
|
|
sub cl, 2
|
|
mov eax, dword ptr _reciptable[eax]
|
|
shr eax, cl
|
|
xor eax, edx
|
|
mov edx, _asm1
|
|
mov ecx, _globalx3
|
|
mov _asm1, eax
|
|
sub eax, edx
|
|
mov edx, _globaly3
|
|
imul ecx, eax
|
|
imul eax, edx
|
|
|
|
fadd dword ptr _asm2
|
|
|
|
cmp ebx, BITSOFPRECISIONPOW
|
|
mov _asm4, ebx
|
|
mov cl, bl
|
|
jl short slopeskipmin
|
|
mov cl, BITSOFPRECISIONPOW
|
|
slopeskipmin:
|
|
|
|
;eax: yinc.............
|
|
;ebx: 0 0 0 ?
|
|
;ecx: xinc......... cnt
|
|
;edx: ?
|
|
;esi: xplc.............
|
|
;edi: yplc.............
|
|
;ebp: videopos
|
|
|
|
mov ebx, esi
|
|
mov edx, edi
|
|
|
|
beginnerslopeloop:
|
|
slopmach1: shr ebx, 20
|
|
add esi, ecx
|
|
slopmach2: shr edx, 26
|
|
slopmach7: and ebx, 88888888h
|
|
add edi, eax
|
|
slopmach5: add ebp, 88888888h ;pinc
|
|
slopmach3: mov dl, byte ptr [ebx+edx+88888888h] ;ptr
|
|
slopmach4: mov ebx, dword ptr [esp+88888888h]
|
|
sub esp, 4
|
|
dec cl
|
|
mov al, byte ptr [ebx+edx] ;tptr
|
|
mov ebx, esi
|
|
mov [ebp], al
|
|
mov edx, edi
|
|
jnz short beginnerslopeloop
|
|
|
|
mov ebx, _asm4
|
|
sub ebx, BITSOFPRECISIONPOW
|
|
jg bigslopeloop
|
|
|
|
ffree st(0)
|
|
|
|
mov esp, _espbak
|
|
mov ebp, _ebpbak
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
ALIGN 16
|
|
PUBLIC _setuprhlineasm4
|
|
_setuprhlineasm4:
|
|
CDECLBEGINSET 6
|
|
|
|
mov dword ptr [rmach1a+2], eax
|
|
mov dword ptr [rmach1b+2], eax
|
|
mov dword ptr [rmach1c+2], eax
|
|
mov dword ptr [rmach1d+2], eax
|
|
mov dword ptr [rmach1e+2], eax
|
|
|
|
mov dword ptr [rmach2a+2], ebx
|
|
mov dword ptr [rmach2b+2], ebx
|
|
mov dword ptr [rmach2c+2], ebx
|
|
mov dword ptr [rmach2d+2], ebx
|
|
mov dword ptr [rmach2e+2], ebx
|
|
|
|
mov dword ptr [rmach3a+2], ecx
|
|
mov dword ptr [rmach3b+2], ecx
|
|
mov dword ptr [rmach3c+2], ecx
|
|
mov dword ptr [rmach3d+2], ecx
|
|
mov dword ptr [rmach3e+2], ecx
|
|
|
|
mov dword ptr [rmach4a+2], edx
|
|
mov dword ptr [rmach4b+2], edx
|
|
mov dword ptr [rmach4c+2], edx
|
|
mov dword ptr [rmach4d+2], edx
|
|
mov dword ptr [rmach4e+2], edx
|
|
|
|
mov dword ptr [rmach5a+2], esi
|
|
mov dword ptr [rmach5b+2], esi
|
|
mov dword ptr [rmach5c+2], esi
|
|
mov dword ptr [rmach5d+2], esi
|
|
mov dword ptr [rmach5e+2], esi
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
;Non power of 2, non masking, with palookup method #1 (6 clock cycles)
|
|
;eax: dat dat dat dat
|
|
;ebx: bufplc
|
|
;ecx: 0 dat
|
|
;edx: xlo
|
|
;esi: ylo
|
|
;edi: videopos/cnt
|
|
;ebp: tempvar
|
|
;esp:
|
|
ALIGN 16
|
|
PUBLIC _rhlineasm4
|
|
_rhlineasm4:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
|
|
cmp eax, 0
|
|
jle endrhline
|
|
|
|
lea ebp, [edi-4]
|
|
sub ebp, eax
|
|
mov dword ptr [rmach6a+2], ebp
|
|
add ebp, 3
|
|
mov dword ptr [rmach6b+2], ebp
|
|
mov edi, eax
|
|
test edi, 3
|
|
jz short begrhline
|
|
jmp short startrhline1
|
|
|
|
ALIGN 16
|
|
startrhline1:
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
rmach1e: sub edx, 88888888h ;xlo
|
|
sbb ebp, ebp
|
|
rmach2e: sub esi, 88888888h ;ylo
|
|
rmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
rmach4e: mov al, byte ptr [ecx+88888888h] ;palookup
|
|
rmach5e: and ebp, 88888888h ;tilesizy
|
|
rmach6b: mov byte ptr [edi+88888888h], al ;vidcntoffs
|
|
sub ebx, ebp
|
|
dec edi
|
|
test edi, 3
|
|
jnz short startrhline1
|
|
test edi, edi
|
|
jz endrhline
|
|
|
|
begrhline:
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
rmach1a: sub edx, 88888888h ;xlo
|
|
sbb ebp, ebp
|
|
rmach2a: sub esi, 88888888h ;ylo
|
|
rmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
rmach5a: and ebp, 88888888h ;tilesizy
|
|
sub ebx, ebp
|
|
|
|
rmach1b: sub edx, 88888888h ;xlo
|
|
sbb ebp, ebp
|
|
rmach4a: mov ah, byte ptr [ecx+88888888h] ;palookup
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
rmach2b: sub esi, 88888888h ;ylo
|
|
rmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
rmach5b: and ebp, 88888888h ;tilesizy
|
|
rmach4b: mov al, byte ptr [ecx+88888888h] ;palookup
|
|
sub ebx, ebp
|
|
|
|
shl eax, 16
|
|
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
rmach1c: sub edx, 88888888h ;xlo
|
|
sbb ebp, ebp
|
|
rmach2c: sub esi, 88888888h ;ylo
|
|
rmach3c: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
rmach5c: and ebp, 88888888h ;tilesizy
|
|
sub ebx, ebp
|
|
|
|
rmach1d: sub edx, 88888888h ;xlo
|
|
sbb ebp, ebp
|
|
rmach4c: mov ah, byte ptr [ecx+88888888h] ;palookup
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
rmach2d: sub esi, 88888888h ;ylo
|
|
rmach3d: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
rmach5d: and ebp, 88888888h ;tilesizy
|
|
rmach4d: mov al, byte ptr [ecx+88888888h] ;palookup
|
|
sub ebx, ebp
|
|
|
|
rmach6a: mov dword ptr [edi+88888888h], eax ;vidcntoffs
|
|
sub edi, 4
|
|
jnz begrhline
|
|
endrhline:
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _setuprmhlineasm4
|
|
_setuprmhlineasm4:
|
|
CDECLBEGINSET 6
|
|
mov dword ptr [rmmach1+2], eax
|
|
mov dword ptr [rmmach2+2], ebx
|
|
mov dword ptr [rmmach3+2], ecx
|
|
mov dword ptr [rmmach4+2], edx
|
|
mov dword ptr [rmmach5+2], esi
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _rmhlineasm4
|
|
_rmhlineasm4:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
|
|
cmp eax, 0
|
|
jle short endrmhline
|
|
|
|
lea ebp, [edi-1]
|
|
sub ebp, eax
|
|
mov dword ptr [rmmach6+2], ebp
|
|
mov edi, eax
|
|
jmp short begrmhline
|
|
|
|
ALIGN 16
|
|
begrmhline:
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
rmmach1: sub edx, 88888888h ;xlo
|
|
sbb ebp, ebp
|
|
rmmach2: sub esi, 88888888h ;ylo
|
|
rmmach3: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
rmmach5: and ebp, 88888888h ;tilesizy
|
|
cmp cl, 255
|
|
je short rmskip
|
|
rmmach4: mov al, byte ptr [ecx+88888888h] ;palookup
|
|
rmmach6: mov byte ptr [edi+88888888h], al ;vidcntoffs
|
|
rmskip:
|
|
sub ebx, ebp
|
|
dec edi
|
|
jnz short begrmhline
|
|
endrmhline:
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _setupqrhlineasm4
|
|
_setupqrhlineasm4:
|
|
CDECLBEGINSET 6
|
|
|
|
mov dword ptr [qrmach2e+2], ebx
|
|
mov dword ptr [qrmach3e+2], ecx
|
|
xor edi, edi
|
|
sub edi, ecx
|
|
mov dword ptr [qrmach7a+2], edi
|
|
mov dword ptr [qrmach7b+2], edi
|
|
|
|
add ebx, ebx
|
|
adc ecx, ecx
|
|
mov dword ptr [qrmach2a+2], ebx
|
|
mov dword ptr [qrmach2b+2], ebx
|
|
mov dword ptr [qrmach3a+2], ecx
|
|
mov dword ptr [qrmach3b+2], ecx
|
|
|
|
mov dword ptr [qrmach4a+2], edx
|
|
mov dword ptr [qrmach4b+2], edx
|
|
mov dword ptr [qrmach4c+2], edx
|
|
mov dword ptr [qrmach4d+2], edx
|
|
mov dword ptr [qrmach4e+2], edx
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
;Non power of 2, non masking, with palookup method (FASTER BUT NO SBB'S)
|
|
;eax: dat dat dat dat
|
|
;ebx: bufplc
|
|
;ecx: 0 dat
|
|
;edx: 0 dat
|
|
;esi: ylo
|
|
;edi: videopos/cnt
|
|
;ebp: ?
|
|
;esp:
|
|
ALIGN 16
|
|
PUBLIC _qrhlineasm4 ;4 pixels in 9 cycles! 2.25 cycles/pixel
|
|
_qrhlineasm4:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
|
|
cmp eax, 0
|
|
jle endqrhline
|
|
|
|
mov ebp, eax
|
|
test ebp, 3
|
|
jz short skipqrhline1
|
|
jmp short startqrhline1
|
|
|
|
ALIGN 16
|
|
startqrhline1:
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
dec edi
|
|
qrmach2e: sub esi, 88888888h ;ylo
|
|
dec ebp
|
|
qrmach3e: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
qrmach4e: mov al, byte ptr [ecx+88888888h] ;palookup
|
|
mov byte ptr [edi], al ;vidcntoffs
|
|
test ebp, 3
|
|
jnz short startqrhline1
|
|
test ebp, ebp
|
|
jz short endqrhline
|
|
|
|
skipqrhline1:
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
jmp short begqrhline
|
|
ALIGN 16
|
|
begqrhline:
|
|
qrmach7a: mov dl, byte ptr [ebx+88888888h] ;bufplc
|
|
qrmach2a: sub esi, 88888888h ;ylo
|
|
qrmach3a: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
qrmach4a: mov ah, byte ptr [ecx+88888888h] ;palookup
|
|
qrmach4b: mov al, byte ptr [edx+88888888h] ;palookup
|
|
sub edi, 4
|
|
shl eax, 16
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
qrmach7b: mov dl, byte ptr [ebx+88888888h] ;bufplc
|
|
qrmach2b: sub esi, 88888888h ;ylo
|
|
qrmach3b: sbb ebx, 88888888h ;xhi*tilesizy + yhi+ycarry
|
|
qrmach4c: mov ah, byte ptr [ecx+88888888h] ;palookup
|
|
qrmach4d: mov al, byte ptr [edx+88888888h] ;palookup
|
|
mov cl, byte ptr [ebx] ;bufplc
|
|
mov dword ptr [edi], eax
|
|
sub ebp, 4
|
|
jnz short begqrhline
|
|
|
|
endqrhline:
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
PUBLIC _setupdrawslab
|
|
_setupdrawslab:
|
|
CDECLBEGINSET 2
|
|
|
|
mov dword ptr [voxbpl1+2], eax
|
|
mov dword ptr [voxbpl2+2], eax
|
|
mov dword ptr [voxbpl3+2], eax
|
|
mov dword ptr [voxbpl4+2], eax
|
|
mov dword ptr [voxbpl5+2], eax
|
|
mov dword ptr [voxbpl6+2], eax
|
|
mov dword ptr [voxbpl7+2], eax
|
|
mov dword ptr [voxbpl8+2], eax
|
|
|
|
mov dword ptr [voxpal1+2], ebx
|
|
mov dword ptr [voxpal2+2], ebx
|
|
mov dword ptr [voxpal3+2], ebx
|
|
mov dword ptr [voxpal4+2], ebx
|
|
mov dword ptr [voxpal5+2], ebx
|
|
mov dword ptr [voxpal6+2], ebx
|
|
mov dword ptr [voxpal7+2], ebx
|
|
mov dword ptr [voxpal8+2], ebx
|
|
|
|
CDECLENDSET 2
|
|
ret
|
|
|
|
ALIGN 16
|
|
PUBLIC _drawslab
|
|
_drawslab:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
cmp eax, 2
|
|
je voxbegdraw2
|
|
ja voxskip2
|
|
xor eax, eax
|
|
voxbegdraw1:
|
|
mov ebp, ebx
|
|
shr ebp, 16
|
|
add ebx, edx
|
|
dec ecx
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal1: mov al, byte ptr [eax+88888888h]
|
|
mov byte ptr [edi], al
|
|
voxbpl1: lea edi, [edi+88888888h]
|
|
jnz voxbegdraw1
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
voxbegdraw2:
|
|
mov ebp, ebx
|
|
shr ebp, 16
|
|
add ebx, edx
|
|
xor eax, eax
|
|
dec ecx
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal2: mov al, byte ptr [eax+88888888h]
|
|
mov ah, al
|
|
mov word ptr [edi], ax
|
|
voxbpl2: lea edi, [edi+88888888h]
|
|
jnz voxbegdraw2
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
voxskip2:
|
|
cmp eax, 4
|
|
jne voxskip4
|
|
xor eax, eax
|
|
voxbegdraw4:
|
|
mov ebp, ebx
|
|
add ebx, edx
|
|
shr ebp, 16
|
|
xor eax, eax
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal3: mov al, byte ptr [eax+88888888h]
|
|
mov ah, al
|
|
shl eax, 8
|
|
mov al, ah
|
|
shl eax, 8
|
|
mov al, ah
|
|
mov dword ptr [edi], eax
|
|
voxbpl3: add edi, 88888888h
|
|
dec ecx
|
|
jnz voxbegdraw4
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
voxskip4:
|
|
add eax, edi
|
|
|
|
test edi, 1
|
|
jz voxskipslab1
|
|
cmp edi, eax
|
|
je voxskipslab1
|
|
|
|
push eax
|
|
push ebx
|
|
push ecx
|
|
push edi
|
|
voxbegslab1:
|
|
mov ebp, ebx
|
|
add ebx, edx
|
|
shr ebp, 16
|
|
xor eax, eax
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal4: mov al, byte ptr [eax+88888888h]
|
|
mov byte ptr [edi], al
|
|
voxbpl4: add edi, 88888888h
|
|
dec ecx
|
|
jnz voxbegslab1
|
|
pop edi
|
|
pop ecx
|
|
pop ebx
|
|
pop eax
|
|
inc edi
|
|
|
|
voxskipslab1:
|
|
push eax
|
|
test edi, 2
|
|
jz voxskipslab2
|
|
dec eax
|
|
cmp edi, eax
|
|
jge voxskipslab2
|
|
|
|
push ebx
|
|
push ecx
|
|
push edi
|
|
voxbegslab2:
|
|
mov ebp, ebx
|
|
add ebx, edx
|
|
shr ebp, 16
|
|
xor eax, eax
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal5: mov al, byte ptr [eax+88888888h]
|
|
mov ah, al
|
|
mov word ptr [edi], ax
|
|
voxbpl5: add edi, 88888888h
|
|
dec ecx
|
|
jnz voxbegslab2
|
|
pop edi
|
|
pop ecx
|
|
pop ebx
|
|
add edi, 2
|
|
|
|
voxskipslab2:
|
|
mov eax, [esp]
|
|
|
|
sub eax, 3
|
|
cmp edi, eax
|
|
jge voxskipslab3
|
|
|
|
voxprebegslab3:
|
|
push ebx
|
|
push ecx
|
|
push edi
|
|
voxbegslab3:
|
|
mov ebp, ebx
|
|
add ebx, edx
|
|
shr ebp, 16
|
|
xor eax, eax
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal6: mov al, byte ptr [eax+88888888h]
|
|
mov ah, al
|
|
shl eax, 8
|
|
mov al, ah
|
|
shl eax, 8
|
|
mov al, ah
|
|
mov dword ptr [edi], eax
|
|
voxbpl6: add edi, 88888888h
|
|
dec ecx
|
|
jnz voxbegslab3
|
|
pop edi
|
|
pop ecx
|
|
pop ebx
|
|
add edi, 4
|
|
|
|
mov eax, [esp]
|
|
|
|
sub eax, 3
|
|
cmp edi, eax
|
|
jl voxprebegslab3
|
|
|
|
voxskipslab3:
|
|
mov eax, [esp]
|
|
|
|
dec eax
|
|
cmp edi, eax
|
|
jge voxskipslab4
|
|
|
|
push ebx
|
|
push ecx
|
|
push edi
|
|
voxbegslab4:
|
|
mov ebp, ebx
|
|
add ebx, edx
|
|
shr ebp, 16
|
|
xor eax, eax
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal7: mov al, byte ptr [eax+88888888h]
|
|
mov ah, al
|
|
mov word ptr [edi], ax
|
|
voxbpl7: add edi, 88888888h
|
|
dec ecx
|
|
jnz voxbegslab4
|
|
pop edi
|
|
pop ecx
|
|
pop ebx
|
|
add edi, 2
|
|
|
|
voxskipslab4:
|
|
pop eax
|
|
|
|
cmp edi, eax
|
|
je voxskipslab5
|
|
|
|
voxbegslab5:
|
|
mov ebp, ebx
|
|
add ebx, edx
|
|
shr ebp, 16
|
|
xor eax, eax
|
|
mov al, byte ptr [esi+ebp]
|
|
voxpal8: mov al, byte ptr [eax+88888888h]
|
|
mov byte ptr [edi], al
|
|
voxbpl8: add edi, 88888888h
|
|
dec ecx
|
|
jnz voxbegslab5
|
|
|
|
voxskipslab5:
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
;modify: loinc
|
|
;eax: | dat | dat | dat | dat |
|
|
;ebx: | loplc1 |
|
|
;ecx: | loplc2 | cnthi | cntlo |
|
|
;edx: |--------|--------|--------| hiplc1 |
|
|
;esi: |--------|--------|--------| hiplc2 |
|
|
;edi: |--------|--------|--------| vidplc |
|
|
;ebp: |--------|--------|--------| hiinc |
|
|
|
|
PUBLIC _stretchhline
|
|
_stretchhline:
|
|
CDECLBEGINSET 6
|
|
|
|
push ebp
|
|
|
|
mov eax, ebx
|
|
shl ebx, 16
|
|
sar eax, 16
|
|
and ecx, 0000ffffh
|
|
or ecx, ebx
|
|
|
|
add esi, eax
|
|
mov eax, edx
|
|
mov edx, esi
|
|
|
|
mov ebp, eax
|
|
shl eax, 16
|
|
sar ebp, 16
|
|
|
|
add ecx, eax
|
|
adc esi, ebp
|
|
|
|
add eax, eax
|
|
adc ebp, ebp
|
|
mov dword ptr [loinc1+2], eax
|
|
mov dword ptr [loinc2+2], eax
|
|
mov dword ptr [loinc3+2], eax
|
|
mov dword ptr [loinc4+2], eax
|
|
|
|
inc ch
|
|
|
|
jmp begloop
|
|
|
|
begloop:
|
|
mov al, [edx]
|
|
loinc1: sub ebx, 88888888h
|
|
sbb edx, ebp
|
|
mov ah, [esi]
|
|
loinc2: sub ecx, 88888888h
|
|
sbb esi, ebp
|
|
sub edi, 4
|
|
shl eax, 16
|
|
loinc3: sub ebx, 88888888h
|
|
mov al, [edx]
|
|
sbb edx, ebp
|
|
mov ah, [esi]
|
|
loinc4: sub ecx, 88888888h
|
|
sbb esi, ebp
|
|
mov [edi], eax
|
|
dec cl
|
|
jnz begloop
|
|
dec ch
|
|
jnz begloop
|
|
|
|
pop ebp
|
|
|
|
CDECLENDSET 6
|
|
ret
|
|
|
|
|
|
PUBLIC _mmxoverlay
|
|
_mmxoverlay:
|
|
push ebx ;JBF
|
|
push ecx ;JBF
|
|
push edx ;JBF
|
|
|
|
pushfd ;Check if CPUID is available
|
|
pop eax
|
|
mov ebx, eax
|
|
xor eax, 00200000h
|
|
push eax
|
|
popfd
|
|
pushfd
|
|
pop eax
|
|
cmp eax, ebx
|
|
je pentium
|
|
xor eax, eax
|
|
dw 0a20fh
|
|
test eax, eax
|
|
jz pentium
|
|
mov eax, 1
|
|
dw 0a20fh
|
|
and eax, 00000f00h
|
|
test edx, 00800000h ;Check if MMX is available
|
|
jz nommx
|
|
cmp eax, 00000600h ;Check if P6 Family or not
|
|
jae pentiumii
|
|
jmp pentiummmx
|
|
nommx:
|
|
cmp eax, 00000600h ;Check if P6 Family or not
|
|
jae pentiumpro
|
|
pentium:
|
|
|
|
pop edx ;JBF
|
|
pop ecx ;JBF
|
|
pop ebx ;JBF
|
|
ret
|
|
|
|
;+--------------------------------------------------------------+
|
|
;| PENTIUM II Overlays |
|
|
;+--------------------------------------------------------------+
|
|
pentiumii:
|
|
;Hline overlay (MMX doens't help)
|
|
mov byte ptr [_sethlinesizes], 0e9h
|
|
mov dword ptr [_sethlinesizes+1], (offset _prosethlinesizes)-(offset _sethlinesizes)-5
|
|
mov byte ptr [_setpalookupaddress], 0e9h
|
|
mov dword ptr [_setpalookupaddress+1], (offset _prosetpalookupaddress)-(offset _setpalookupaddress)-5
|
|
mov byte ptr [_setuphlineasm4], 0c3h ;ret (no code required)
|
|
mov byte ptr [_hlineasm4], 0e9h
|
|
mov dword ptr [_hlineasm4+1], (offset _prohlineasm4)-(offset _hlineasm4)-5
|
|
|
|
;Vline overlay
|
|
mov byte ptr [_setupvlineasm], 0e9h
|
|
mov dword ptr [_setupvlineasm+1], (offset _prosetupvlineasm)-(offset _setupvlineasm)-5
|
|
mov byte ptr [_vlineasm4], 0e9h
|
|
mov dword ptr [_vlineasm4+1], (offset _provlineasm4)-(offset _vlineasm4)-5
|
|
|
|
pop edx ;JBF
|
|
pop ecx ;JBF
|
|
pop ebx ;JBF
|
|
ret
|
|
|
|
;+--------------------------------------------------------------+
|
|
;| PENTIUM MMX Overlays |
|
|
;+--------------------------------------------------------------+
|
|
pentiummmx:
|
|
pop edx ;JBF
|
|
pop ecx ;JBF
|
|
pop ebx ;JBF
|
|
ret
|
|
|
|
;+--------------------------------------------------------------+
|
|
;| PENTIUM PRO Overlays |
|
|
;+--------------------------------------------------------------+
|
|
pentiumpro:
|
|
;Hline overlay (MMX doens't help)
|
|
mov byte ptr [_sethlinesizes], 0e9h
|
|
mov dword ptr [_sethlinesizes+1], (offset _prosethlinesizes)-(offset _sethlinesizes)-5
|
|
mov byte ptr [_setpalookupaddress], 0e9h
|
|
mov dword ptr [_setpalookupaddress+1], (offset _prosetpalookupaddress)-(offset _setpalookupaddress)-5
|
|
mov byte ptr [_setuphlineasm4], 0c3h ;ret (no code required)
|
|
mov byte ptr [_hlineasm4], 0e9h
|
|
mov dword ptr [_hlineasm4+1], (offset _prohlineasm4)-(offset _hlineasm4)-5
|
|
|
|
;Vline overlay
|
|
mov byte ptr [_setupvlineasm], 0e9h
|
|
mov dword ptr [_setupvlineasm+1], (offset _prosetupvlineasm)-(offset _setupvlineasm)-5
|
|
mov byte ptr [_vlineasm4], 0e9h
|
|
mov dword ptr [_vlineasm4+1], (offset _provlineasm4)-(offset _vlineasm4)-5
|
|
|
|
pop edx ;JBF
|
|
pop ecx ;JBF
|
|
pop ebx ;JBF
|
|
ret
|
|
|
|
PUBLIC _dep_end
|
|
_dep_end:
|
|
code ends
|
|
END
|