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