Subversion Repositories Kolibri OS

Rev

Rev 9172 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
8210 maxcodehac 1
;
2
; x86 format converters for HERMES
3
; Some routines Copyright (c) 1998 Christian Nentwich (brn@eleet.mcb.at)
4
; This source code is licensed under the GNU LGPL
5
;
6
; Please refer to the file COPYING.LIB contained in the distribution for
7
; licensing conditions
8
;
9
; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission
10
;
11
 
12
BITS 32
13
 
14
GLOBAL _ConvertX86
15
GLOBAL _x86return
16
 
17
GLOBAL _Hermes_X86_CPU
18
 
19
 
20
SECTION .data
21
 
22
cpu_flags dd 0
23
 
24
 
25
SECTION .text
26
 
27
;; _ConvertX86:
28
;; [ESP+8] ConverterInfo*
29
;; --------------------------------------------------------------------------
30
;; ConverterInfo (ebp+..)
31
;;   0:	void *s_pixels
32
;;   4:	int s_width
33
;;   8:	int s_height
34
;;  12:	int s_add
35
;;  16:	void *d_pixels
36
;;  20:	int d_width
37
;;  24:	int d_height
38
;;  28:	int d_add
39
;;  32:	void (*converter_function)()
40
;;  36: int32 *lookup
41
 
42
_ConvertX86:
43
	push ebp
44
	mov ebp,esp
45
 
46
; Save the registers used by the blitters, necessary for optimized code
47
	pusha
48
 
49
	mov eax,[ebp+8]
50
 
51
        cmp dword [eax+4],BYTE 0
52
	je endconvert
53
 
54
	mov ebp,eax
55
 
56
	mov esi,[ebp+0]
57
	mov edi,[ebp+16]
58
 
59
y_loop:
60
	mov ecx,[ebp+4]
61
 
62
	jmp [ebp+32]
63
 
64
_x86return:
65
	add esi,[ebp+12]
66
	add edi,[ebp+28]
67
 
68
	dec dword  [ebp+8]
69
	jnz y_loop
70
 
71
; Restore the registers used by the blitters, necessary for optimized code
72
	popa
73
 
74
	pop ebp
75
 
76
endconvert:
77
	ret
78
 
79
 
80
 
81
;; Hermes_X86_CPU returns the CPUID flags in eax
82
 
83
_Hermes_X86_CPU:
84
	pushfd
85
	pop eax
86
 
87
	mov ecx,eax
88
 
89
	xor eax,040000h
90
	push eax
91
 
92
	popfd
93
	pushfd
94
 
95
	pop eax
96
	xor eax,ecx
97
	jz .L1			; Processor is 386
98
 
99
	push ecx
100
	popfd
101
 
102
	mov eax,ecx
103
	xor eax,200000h
104
 
105
	push eax
106
	popfd
107
	pushfd
108
 
109
	pop eax
110
	xor eax,ecx
111
	je .L1
112
 
113
	pusha
114
 
115
	mov eax,1
116
	cpuid
117
 
118
	mov [cpu_flags],edx
119
 
120
	popa
121
 
122
	mov eax,[cpu_flags]
123
 
124
.L1:
125
	xor eax,eax
126
	ret