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