146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; x86 format converters for HERMES 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at) 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; This source code is licensed under the GNU LGPL 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; Please refer to the file COPYING.LIB contained in the distribution for 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; licensing conditions 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1246be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerBITS 32 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner%include "common.inc" 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1646be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSDL_FUNC _ConvertX86 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1846be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerSECTION .text 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; _ConvertX86: 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; [ESP+8] ConverterInfo* 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; -------------------------------------------------------------------------- 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; ConverterInfo (ebp+..) 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 0: void *s_pixels 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 4: int s_width 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 8: int s_height 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 12: int s_add 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 16: void *d_pixels 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 20: int d_width 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 24: int d_height 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 28: int d_add 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 32: void (*converter_function)() 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner;; 36: int32 *lookup 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner_ConvertX86: 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner push ebp 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mov ebp,esp 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; Save the registers used by the blitters, necessary for optimized code 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner pusha 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mov eax,[ebp+8] 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner cmp dword [eax+4],BYTE 0 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner je endconvert 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mov ebp,eax 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mov esi,[ebp+0] 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mov edi,[ebp+16] 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turnery_loop: 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner mov ecx,[ebp+4] 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner call [ebp+32] 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner add esi,[ebp+12] 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner add edi,[ebp+28] 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner dec dword [ebp+8] 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner jnz y_loop 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner; Restore the registers used by the blitters, necessary for optimized code 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner popa 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner pop ebp 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerendconvert: 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner ret 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner%ifidn __OUTPUT_FORMAT__,elf 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turnersection .note.GNU-stack noalloc noexec nowrite progbits 7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner%endif 76