19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; 29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; x86 format converters for HERMES 39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at) 49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; This source code is licensed under the GNU LGPL 59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; 69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Please refer to the file COPYING.LIB contained in the distribution for 79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; licensing conditions 89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; 99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission 109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; 119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallBITS 32 139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall%include "common.inc" 159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallSDL_FUNC _ConvertX86 179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallSECTION .text 199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; _ConvertX86: 219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; [ESP+8] ConverterInfo* 229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; -------------------------------------------------------------------------- 239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; ConverterInfo (ebp+..) 249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 0: void *s_pixels 259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 4: int s_width 269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 8: int s_height 279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 12: int s_add 289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 16: void *d_pixels 299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 20: int d_width 309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 24: int d_height 319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 28: int d_add 329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 32: void (*converter_function)() 339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall;; 36: int32 *lookup 349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall_ConvertX86: 369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall push ebp 379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall mov ebp,esp 389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Save the registers used by the blitters, necessary for optimized code 409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pusha 419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall mov eax,[ebp+8] 439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall cmp dword [eax+4],BYTE 0 459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall je endconvert 469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall mov ebp,eax 489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall mov esi,[ebp+0] 509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall mov edi,[ebp+16] 519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hally_loop: 539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall mov ecx,[ebp+4] 549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall call [ebp+32] 569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall add esi,[ebp+12] 589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall add edi,[ebp+28] 599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall dec dword [ebp+8] 619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall jnz y_loop 629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall; Restore the registers used by the blitters, necessary for optimized code 649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall popa 659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pop ebp 679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallendconvert: 699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ret 709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall%ifidn __OUTPUT_FORMAT__,elf32 749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallsection .note.GNU-stack noalloc noexec nowrite progbits 759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall%endif 76