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