| Line | |
|---|
| 1 | ; asmutil.asm Color key bit blitting for DirectDraw
|
|---|
| 2 | ;
|
|---|
| 3 | ; Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl)
|
|---|
| 4 | ; *
|
|---|
| 5 | ; * Project Odin Software License can be found in LICENSE.TXT
|
|---|
| 6 | ; *
|
|---|
| 7 | ;
|
|---|
| 8 |
|
|---|
| 9 | .386p
|
|---|
| 10 | NAME asmutil
|
|---|
| 11 |
|
|---|
| 12 | CODE32 SEGMENT DWORD PUBLIC USE32 'CODE'
|
|---|
| 13 | ASSUME CS:FLAT ,DS:FLAT,SS:FLAT
|
|---|
| 14 |
|
|---|
| 15 | PUBLIC _BlitColorKey8
|
|---|
| 16 |
|
|---|
| 17 | ; endpos = destbuf + blitlinesize;
|
|---|
| 18 | ; while(destbuf < endpos) {
|
|---|
| 19 | ; if(*srcbuf == colorkey) {
|
|---|
| 20 | ; destbuf++;
|
|---|
| 21 | ; }
|
|---|
| 22 | ; else *destbuf++ = *srcbuf;
|
|---|
| 23 | ; srcbuf++;
|
|---|
| 24 | ; }
|
|---|
| 25 | ; destbuf += (destscanlinesize-blitlinesize);
|
|---|
| 26 | ; srcbuf += (srcscanlinesize-blitlinesize);
|
|---|
| 27 | ;void BlitColorKey8(char *dest, char *src, ULONG key, ULONG linesize)
|
|---|
| 28 | _BlitColorKey8 PROC NEAR
|
|---|
| 29 | push ebp
|
|---|
| 30 | mov ebp, esp
|
|---|
| 31 | push edi
|
|---|
| 32 | push esi
|
|---|
| 33 | push eax
|
|---|
| 34 | push ebx
|
|---|
| 35 | push ecx
|
|---|
| 36 | push edx
|
|---|
| 37 |
|
|---|
| 38 | mov edi, dword ptr [ebp+8] ;dest
|
|---|
| 39 | mov esi, dword ptr [ebp+12] ;src
|
|---|
| 40 | mov ecx, dword ptr [ebp+20] ;linesize
|
|---|
| 41 | mov edx, dword ptr [ebp+16] ;colorkey
|
|---|
| 42 |
|
|---|
| 43 | and ecx, 3
|
|---|
| 44 | push ecx ;do the remaining bytes afterwards
|
|---|
| 45 | mov ecx, dword ptr [ebp+20] ;linesize
|
|---|
| 46 | shr ecx, 2 ;linesize in dwords
|
|---|
| 47 |
|
|---|
| 48 | ALIGN 16
|
|---|
| 49 |
|
|---|
| 50 | blitloop:
|
|---|
| 51 | mov ebx, dword ptr [esi]
|
|---|
| 52 | mov eax, dword ptr [edi]
|
|---|
| 53 | cmp bl, dl
|
|---|
| 54 | je skipbyte1
|
|---|
| 55 | mov al, bl
|
|---|
| 56 |
|
|---|
| 57 | skipbyte1:
|
|---|
| 58 | cmp bh, dl
|
|---|
| 59 | je skipbyte2
|
|---|
| 60 | mov ah, bh
|
|---|
| 61 | skipbyte2:
|
|---|
| 62 | ror eax, 16
|
|---|
| 63 | ror ebx, 16
|
|---|
| 64 | cmp bl, dl
|
|---|
| 65 | je skipbyte3
|
|---|
| 66 | mov al, bl
|
|---|
| 67 | skipbyte3:
|
|---|
| 68 | cmp bh, dl
|
|---|
| 69 | je skipbyte4
|
|---|
| 70 | mov ah, bh
|
|---|
| 71 | skipbyte4:
|
|---|
| 72 | ror eax, 16
|
|---|
| 73 | dec ecx
|
|---|
| 74 | mov dword ptr [edi], eax
|
|---|
| 75 | add esi, 4
|
|---|
| 76 | add edi, 4
|
|---|
| 77 |
|
|---|
| 78 | cmp ecx, 0
|
|---|
| 79 | jne blitloop
|
|---|
| 80 |
|
|---|
| 81 | pop ecx
|
|---|
| 82 | cmp ecx, 0
|
|---|
| 83 | je endofblit
|
|---|
| 84 |
|
|---|
| 85 | blitperbyte:
|
|---|
| 86 | mov al, byte ptr [esi]
|
|---|
| 87 | dec ecx
|
|---|
| 88 | cmp al, dl
|
|---|
| 89 | je skipsinglebyte
|
|---|
| 90 | mov byte ptr [edi], al
|
|---|
| 91 | skipsinglebyte:
|
|---|
| 92 | inc esi
|
|---|
| 93 | inc edi
|
|---|
| 94 | cmp ecx, 0
|
|---|
| 95 | jne blitperbyte
|
|---|
| 96 |
|
|---|
| 97 | endofblit:
|
|---|
| 98 | pop edx
|
|---|
| 99 | pop ecx
|
|---|
| 100 | pop ebx
|
|---|
| 101 | pop eax
|
|---|
| 102 | pop esi
|
|---|
| 103 | pop edi
|
|---|
| 104 | pop ebp
|
|---|
| 105 | ret
|
|---|
| 106 | _BlitColorKey8 ENDP
|
|---|
| 107 |
|
|---|
| 108 | CODE32 ENDS
|
|---|
| 109 |
|
|---|
| 110 | END
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.