; Copyright (c) 1997-2005 Andrzej Okrutny, http://www.ceti.pl/~anok/ ; All rights reserved. ; ; ; THIS SOFTWARE IS FREE FOR NON-COMMERCIAL USE. ; ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are met: ; ; * Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; * Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in ; the documentation and/or other materials provided with the ; distribution. ; ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE ; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR ; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF ; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS ; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN ; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ; POSSIBILITY OF SUCH DAMAGE. ; ; ;***************************************************************************** ; ; SVGA - High Color, Linear Frame Buffer ; 16 bits per pixel ; ;***************************************************************************** ; ; SetMorphHC_ ; MorphHC_ ; IDEAL P386 MODEL FLAT LOCALS NOWARN BRK INCLUDE 'graph.inc' DATASEG MorphWidth DD 0 MorphHeight DD 0 MorphPtr1 DD 0 MorphPtr2 DD 0 MorphScreenWidth DD 0 MorphScreenHeight DD 0 MorphScreenPtr DD 0 MorphScreenDelta DD 0 CODESEG ;----------------------------------------------------------------------------; ; SVGA - HC Set Morph ; ;----------------------------------------------------------------------------; ; parm: ; eax - width ; ebx - height ; ecx - ptr1 ; edx - ptr2 ; esi - screenPtr ; ; modify: eax ; ; return: NONE ; PUBLIC SetMorphHC_ ALIGN 4 PROC SetMorphHC_ mov MorphWidth, eax mov MorphHeight, ebx mov MorphPtr1, ecx mov MorphPtr2, edx mov eax, [ (ITScreenParam esi).width ] mov MorphScreenWidth, eax mov eax, [ (ITScreenParam esi).height ] mov MorphScreenHeight, eax mov eax, [ (ITScreenParam esi).ptr ] mov MorphScreenPtr, eax mov eax, MorphScreenWidth sub eax, MorphWidth add eax, eax ; * 2 mov MorphScreenDelta, eax ret ENDP ;----------------------------------------------------------------------------; ; SVGA - HC Morph ; ;----------------------------------------------------------------------------; ; parm: ; ecx - X ; edx - Y ; ebx - phase ( 0 - 8 ) ; ; modify: eax, ebx, ecx, edx, esi, edi ; ; return: NONE ; PUBLIC MorphHC ALIGN 4 PROC C MorphHC LOCAL imgHeight:DWORD, scrWidthDelta:DWORD cmp ebx, 8 ; if( phase < 0 || 8 < phase ) then out ja @@LOUT mov eax, MorphScreenDelta mov scrWidthDelta, eax mov eax, MorphHeight ; imgHeight mov imgHeight, eax ; imgHeight mov esi, MorphPtr1 mov edi, MorphPtr2 imul edx, MorphScreenWidth ; y* ScreenWidht add edx, ecx ; + x add edx, edx ; *2 bo 2 bajty na pixel add edx, MorphScreenPtr jmp [ dword ptr cs: ebx*4 + @@_CASE_TAB ] @@_CASE_TAB: DD @@_CASE_0 DD @@_CASE_1 DD @@_CASE_2 DD @@_CASE_3 DD @@_CASE_4 DD @@_CASE_5 DD @@_CASE_6 DD @@_CASE_7 DD @@_CASE_8 ;;------------------------------- @@_CASE_0: mov edi, edx @@L00: mov ecx, MorphWidth ; img width shr ecx, 1 rep movsd add edi, scrWidthDelta dec imgHeight jnz @@L00 jmp @@LOUT ;;------------------------------- @@_CASE_1: @@L10: mov ecx, MorphWidth ; img width shr ecx, 1 push ebp @@L11: mov ebp, [esi] mov ebx, [edi] shr ebp, 4 shr ebx, 4 and ebp, 04210421h and ebx, 04210421h mov eax, [esi] sub eax, ebp add eax, ebx mov [ edx ], eax add esi, 4 ; imgBodyPtr1 add edi, 4 ; imgBodyPtr2 add edx, 4 ; videoPtr dec ecx jnz @@L11 pop ebp add edx, scrWidthDelta dec imgHeight jnz @@L10 jmp @@LOUT ;;------------------------------- @@_CASE_2: @@L20: mov ecx, MorphWidth ; img width shr ecx, 1 push ebp @@L21: mov ebp, [esi] mov ebx, [edi] shr ebp, 3 shr ebx, 3 and ebp, 0c630c63h and ebx, 0c630c63h mov eax, [esi] sub eax, ebp add eax, ebx mov [ edx ], eax add esi, 4 ; imgBodyPtr1 add edi, 4 ; imgBodyPtr2 add edx, 4 ; videoPtr dec ecx jnz @@L21 pop ebp add edx, scrWidthDelta dec imgHeight jnz @@L20 jmp @@LOUT ;;------------------------------- @@_CASE_3: @@L30: mov ecx, MorphWidth ; img width shr ecx, 1 push ebp @@L31: mov ebp, [esi] mov ebx, [edi] shr ebp, 2 shr ebx, 2 and ebp, 1ce71ce7h and ebx, 1ce71ce7h mov eax, [esi] sub eax, ebp add eax, ebx mov [ edx ], eax add esi, 4 ; imgBodyPtr1 add edi, 4 ; imgBodyPtr2 add edx, 4 ; videoPtr dec ecx jnz @@L31 pop ebp add edx, scrWidthDelta dec imgHeight jnz @@L30 jmp @@LOUT ;;------------------------------- @@_CASE_4: @@L40: mov ecx, MorphWidth ; img width shr ecx, 1 @@L41: mov eax, [esi] mov ebx, [edi] shr eax, 1 shr ebx, 1 and eax, 03def3defh and ebx, 03def3defh add eax, ebx mov [ edx ], eax add esi, 4 ; imgBodyPtr1 add edi, 4 ; imgBodyPtr2 add edx, 4 ; videoPtr dec ecx jnz @@L41 add edx, scrWidthDelta dec imgHeight jnz @@L40 jmp @@LOUT ;;------------------------------- @@_CASE_5: @@L50: mov ecx, MorphWidth ; img width shr ecx, 1 push ebp @@L51: mov eax, [esi] mov ebp, [edi] shr eax, 2 shr ebp, 2 and eax, 1ce71ce7h and ebp, 1ce71ce7h mov ebx, [edi] sub ebx, ebp add eax, ebx mov [ edx ], eax add esi, 4 ; imgBodyPtr1 add edi, 4 ; imgBodyPtr2 add edx, 4 ; videoPtr dec ecx jnz @@L51 pop ebp add edx, scrWidthDelta dec imgHeight jnz @@L50 jmp @@LOUT ;;------------------------------- @@_CASE_6: @@L60: mov ecx, MorphWidth ; img width shr ecx, 1 push ebp @@L61: mov eax, [esi] mov ebp, [edi] shr eax, 3 shr ebp, 3 and eax, 0c630c63h and ebp, 0c630c63h mov ebx, [edi] sub ebx, ebp add eax, ebx mov [ edx ], eax add esi, 4 ; imgBodyPtr1 add edi, 4 ; imgBodyPtr2 add edx, 4 ; videoPtr dec ecx jnz @@L61 pop ebp add edx, scrWidthDelta dec imgHeight jnz @@L60 jmp @@LOUT ;;------------------------------- @@_CASE_7: @@L70: mov ecx, MorphWidth ; img width shr ecx, 1 push ebp @@L71: mov eax, [esi] mov ebp, [edi] shr eax, 4 shr ebp, 4 and eax, 04210421h and ebp, 04210421h mov ebx, [edi] sub ebx, ebp add eax, ebx mov [ edx ], eax add esi, 4 ; imgBodyPtr1 add edi, 4 ; imgBodyPtr2 add edx, 4 ; videoPtr dec ecx jnz @@L71 pop ebp add edx, scrWidthDelta dec imgHeight jnz @@L70 jmp @@LOUT ;;------------------------------- @@_CASE_8: mov esi, edi mov edi, edx @@L80: mov ecx, MorphWidth ; img width shr ecx, 1 rep movsd add edi, scrWidthDelta dec imgHeight jnz @@L80 @@LOUT: ret ENDP END