Rev 799 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 799 | Rev 801 | ||
---|---|---|---|
1 | format MS COFF |
1 | format MS COFF |
2 | 2 | ||
3 | include "proc32.inc" |
3 | include "proc32.inc" |
4 | 4 | ||
5 | section '.text' align 16 code readable executable |
5 | section '.text' align 16 code readable executable |
6 | 6 | ||
7 | public _InitHeap@4 |
7 | public _InitHeap@4 |
8 | public _UserAlloc@4 |
8 | public _UserAlloc@4 |
9 | public _UserFree@4 |
9 | public _UserFree@4 |
10 | 10 | ||
11 | public _GetNotify@4 |
11 | public _GetNotify@4 |
12 | public _CreateThread@8 |
12 | public _CreateThread@8 |
13 | public _GetMousePos@4 |
13 | public _GetMousePos@4 |
14 | 14 | ||
15 | public _get_fileinfo@8 |
15 | public _get_fileinfo@8 |
16 | public _create_file@4 |
16 | public _create_file@4 |
17 | public _read_file@20 |
17 | public _read_file@20 |
18 | public _write_file@20 |
18 | public _write_file@20 |
19 | 19 | ||
20 | public _get_key@4 |
20 | public _get_key@4 |
21 | public _remap_key@4 |
21 | public _remap_key@4 |
22 | public _get_button_id |
22 | public _get_button_id |
23 | 23 | ||
24 | public _GetScreenSize@8 |
24 | public _GetScreenSize@8 |
25 | 25 | ||
26 | public _DrawWindow@36 |
26 | public _DrawWindow@36 |
27 | public _make_button@24 |
27 | public _make_button@24 |
28 | public _draw_bar@20 |
28 | public _draw_bar@20 |
29 | 29 | ||
30 | public _write_text@20 |
30 | public _write_text@20 |
31 | public _debug_out@4 |
31 | public _debug_out@4 |
32 | public _debug_out_hex@4 |
32 | public _debug_out_hex@4 |
33 | public _create_thread@12 |
33 | public _create_thread@12 |
34 | 34 | ||
35 | 35 | ||
36 | public _memset |
36 | public _memset |
37 | 37 | ||
38 | struc FILEIO |
38 | struc FILEIO |
39 | { .cmd dd ? |
39 | { .cmd dd ? |
40 | .offset dd ? |
40 | .offset dd ? |
41 | dd ? |
41 | dd ? |
42 | .count dd ? |
42 | .count dd ? |
43 | .buff dd ? |
43 | .buff dd ? |
44 | db ? |
44 | db ? |
45 | .name dd ? |
45 | .name dd ? |
46 | }; |
46 | }; |
47 | 47 | ||
48 | struc CTRL_INFO |
48 | struc CTRL_INFO |
49 | { .pci_cmd dd ? |
49 | { .pci_cmd dd ? |
50 | .irq dd ? |
50 | .irq dd ? |
51 | .glob_cntrl dd ? |
51 | .glob_cntrl dd ? |
52 | .glob_sta dd ? |
52 | .glob_sta dd ? |
53 | .codec_io_base dd ? |
53 | .codec_io_base dd ? |
54 | .ctrl_io_base dd ? |
54 | .ctrl_io_base dd ? |
55 | .codec_mem_base dd ? |
55 | .codec_mem_base dd ? |
56 | .ctrl_mem_base dd ? |
56 | .ctrl_mem_base dd ? |
57 | .codec_id dd ? |
57 | .codec_id dd ? |
58 | } |
58 | } |
59 | CTRL_INFO_SIZE equ 9*4 |
59 | CTRL_INFO_SIZE equ 9*4 |
60 | 60 | ||
61 | align 4 |
61 | align 4 |
62 | _GetScreenSize@8: |
62 | _GetScreenSize@8: |
63 | .x equ esp+12 |
63 | .x equ esp+12 |
64 | .y equ esp+16 |
64 | .y equ esp+16 |
65 | 65 | ||
66 | push ebx |
66 | push ebx |
67 | push ecx |
67 | push ecx |
68 | mov eax, 14 |
68 | mov eax, 14 |
69 | int 0x40 |
69 | int 0x40 |
70 | mov ebx, [.y] |
70 | mov ebx, [.y] |
71 | movzx ecx, ax |
71 | movzx ecx, ax |
72 | inc ecx |
72 | inc ecx |
73 | mov [ebx], ecx |
73 | mov [ebx], ecx |
74 | mov ebx, [.x] |
74 | mov ebx, [.x] |
75 | shr eax, 16 |
75 | shr eax, 16 |
76 | inc eax |
76 | inc eax |
77 | mov [ebx], eax |
77 | mov [ebx], eax |
78 | pop ecx |
78 | pop ecx |
79 | pop ebx |
79 | pop ebx |
80 | ret 8 |
80 | ret 8 |
81 | 81 | ||
82 | align 4 |
82 | align 4 |
83 | _create_thread@12: |
83 | _create_thread@12: |
84 | .thr_proc equ esp+8 |
84 | .thr_proc equ esp+8 |
85 | .param equ esp+12 |
85 | .param equ esp+12 |
86 | .stack_size equ esp+16 |
86 | .stack_size equ esp+16 |
87 | 87 | ||
88 | push ebx |
88 | push ebx |
89 | 89 | ||
90 | mov eax, 68 |
90 | mov eax, 68 |
91 | mov ebx, 12 |
91 | mov ebx, 12 |
92 | mov ecx, [.stack_size] |
92 | mov ecx, [.stack_size] |
93 | add ecx, 4095 |
93 | add ecx, 4095 |
94 | and ecx, -4096 |
94 | and ecx, -4096 |
95 | int 0x40 |
95 | int 0x40 |
96 | test eax, eax |
96 | test eax, eax |
97 | jz .fail |
97 | jz .fail |
98 | 98 | ||
99 | lea edx, [eax+ecx-12] |
99 | lea edx, [eax+ecx-12] |
100 | mov [edx], dword .exit_point |
100 | mov [edx], dword .exit_point |
101 | mov ebx, [.param] |
101 | mov ebx, [.param] |
102 | mov [edx+4], ebx |
102 | mov [edx+4], ebx |
103 | mov [edx+8], ecx |
103 | mov [edx+8], ecx |
104 | 104 | ||
105 | mov eax, 51 |
105 | mov eax, 51 |
106 | mov ebx, 1 |
106 | mov ebx, 1 |
107 | mov ecx, [.thr_proc] |
107 | mov ecx, [.thr_proc] |
108 | int 0x40 |
108 | int 0x40 |
109 | pop ebx |
109 | pop ebx |
110 | ret 12 |
110 | ret 12 |
111 | .fail: |
111 | .fail: |
112 | not eax |
112 | not eax |
113 | pop ebx |
113 | pop ebx |
114 | ret 12 |
114 | ret 12 |
115 | align 4 |
115 | align 4 |
116 | .exit_point: |
116 | .exit_point: |
117 | pop ecx |
117 | pop ecx |
118 | mov eax, 68 |
118 | mov eax, 68 |
119 | mov ebx, 13 |
119 | mov ebx, 13 |
120 | int 0x40 |
120 | int 0x40 |
121 | mov eax, -1 |
121 | mov eax, -1 |
122 | int 0x40 |
122 | int 0x40 |
123 | 123 | ||
124 | restore .thr_proc |
124 | restore .thr_proc |
125 | restore .param |
125 | restore .param |
126 | restore .stack_size |
126 | restore .stack_size |
127 | 127 | ||
128 | align 4 |
128 | align 4 |
129 | proc _get_button_id |
129 | proc _get_button_id |
130 | mov eax,17 |
130 | mov eax,17 |
131 | int 0x40 |
131 | int 0x40 |
132 | test al,al |
132 | test al,al |
133 | jnz @F |
133 | jnz @F |
134 | shr eax,8 |
134 | shr eax,8 |
135 | ret |
135 | ret |
136 | @@: |
136 | @@: |
137 | xor eax,eax |
137 | xor eax,eax |
138 | dec eax |
138 | dec eax |
139 | ret |
139 | ret |
140 | endp |
140 | endp |
141 | 141 | ||
142 | align 4 |
142 | align 4 |
143 | proc _get_fileinfo@8 stdcall, name:dword, info:dword |
143 | proc _get_fileinfo@8 stdcall, name:dword, info:dword |
144 | push ebx |
144 | push ebx |
145 | push ecx |
145 | push ecx |
146 | push esi |
146 | push esi |
147 | push edi |
147 | push edi |
148 | xor eax, eax |
148 | xor eax, eax |
149 | mov ebx, [name] |
149 | mov ebx, [name] |
150 | mov ecx, [info] |
150 | mov ecx, [info] |
151 | 151 | ||
152 | mov [fileio.cmd], 5 |
152 | mov [fileio.cmd], 5 |
153 | mov [fileio.offset], eax |
153 | mov [fileio.offset], eax |
154 | mov [fileio.offset+4], eax |
154 | mov [fileio.offset+4], eax |
155 | mov [fileio.count], eax |
155 | mov [fileio.count], eax |
156 | mov [fileio.buff], ecx |
156 | mov [fileio.buff], ecx |
157 | mov byte [fileio.buff+4], al |
157 | mov byte [fileio.buff+4], al |
158 | mov [fileio.name], ebx |
158 | mov [fileio.name], ebx |
159 | 159 | ||
160 | mov eax, 70 |
160 | mov eax, 70 |
161 | lea ebx, [fileio] |
161 | lea ebx, [fileio] |
162 | int 0x40 |
162 | int 0x40 |
163 | pop edi |
163 | pop edi |
164 | pop esi |
164 | pop esi |
165 | pop ecx |
165 | pop ecx |
166 | pop ebx |
166 | pop ebx |
167 | ret |
167 | ret |
168 | endp |
168 | endp |
169 | 169 | ||
170 | align 4 |
170 | align 4 |
171 | proc _create_file@4 stdcall, name:dword |
171 | proc _create_file@4 stdcall, name:dword |
172 | push ebx |
172 | push ebx |
173 | xor eax, eax |
173 | xor eax, eax |
174 | mov ebx, [name] |
174 | mov ebx, [name] |
175 | 175 | ||
176 | mov [fileio.cmd], 2 |
176 | mov [fileio.cmd], 2 |
177 | mov [fileio.offset], eax |
177 | mov [fileio.offset], eax |
178 | mov [fileio.offset+4], eax |
178 | mov [fileio.offset+4], eax |
179 | mov [fileio.count], eax |
179 | mov [fileio.count], eax |
180 | mov [fileio.buff], eax |
180 | mov [fileio.buff], eax |
181 | mov byte [fileio.buff+4], al |
181 | mov byte [fileio.buff+4], al |
182 | mov [fileio.name], ebx |
182 | mov [fileio.name], ebx |
183 | 183 | ||
184 | mov eax, 70 |
184 | mov eax, 70 |
185 | lea ebx, [fileio] |
185 | lea ebx, [fileio] |
186 | int 0x40 |
186 | int 0x40 |
187 | pop ebx |
187 | pop ebx |
188 | ret |
188 | ret |
189 | endp |
189 | endp |
190 | 190 | ||
191 | align 4 |
191 | align 4 |
192 | proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\ |
192 | proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\ |
193 | count:dword,reads:dword |
193 | count:dword,reads:dword |
194 | push ebx |
194 | push ebx |
195 | push esi |
195 | push esi |
196 | push edi |
196 | push edi |
197 | push edx |
197 | push edx |
198 | xor eax, eax |
198 | xor eax, eax |
199 | mov ebx, [name] |
199 | mov ebx, [name] |
200 | mov edx, [offset] |
200 | mov edx, [offset] |
201 | mov esi, [buff] |
201 | mov esi, [buff] |
202 | mov edi, [count] |
202 | mov edi, [count] |
203 | 203 | ||
204 | mov [fileio.cmd], eax |
204 | mov [fileio.cmd], eax |
205 | mov [fileio.offset], edx |
205 | mov [fileio.offset], edx |
206 | mov [fileio.offset+4], eax |
206 | mov [fileio.offset+4], eax |
207 | mov [fileio.count], edi |
207 | mov [fileio.count], edi |
208 | mov [fileio.buff], esi |
208 | mov [fileio.buff], esi |
209 | mov byte [fileio.buff+4], al |
209 | mov byte [fileio.buff+4], al |
210 | mov [fileio.name], ebx |
210 | mov [fileio.name], ebx |
211 | 211 | ||
212 | mov eax, 70 |
212 | mov eax, 70 |
213 | lea ebx, [fileio] |
213 | lea ebx, [fileio] |
214 | int 0x40 |
214 | int 0x40 |
215 | mov esi, [reads] |
215 | mov esi, [reads] |
216 | test esi, esi |
216 | test esi, esi |
217 | jz @f |
217 | jz @f |
218 | mov [esi], ebx |
218 | mov [esi], ebx |
219 | @@: |
219 | @@: |
220 | pop edx |
220 | pop edx |
221 | pop edi |
221 | pop edi |
222 | pop esi |
222 | pop esi |
223 | pop ebx |
223 | pop ebx |
224 | ret |
224 | ret |
225 | endp |
225 | endp |
226 | 226 | ||
227 | 227 | ||
228 | align 4 |
228 | align 4 |
229 | proc _write_file@20 stdcall,name:dword, buff:dword, offset:dword,\ |
229 | proc _write_file@20 stdcall,name:dword, buff:dword, offset:dword,\ |
230 | count:dword,writes:dword |
230 | count:dword,writes:dword |
231 | push ebx |
231 | push ebx |
232 | push esi |
232 | push esi |
233 | push edi |
233 | push edi |
234 | push edx |
234 | push edx |
235 | xor eax, eax |
235 | xor eax, eax |
236 | mov ebx, [name] |
236 | mov ebx, [name] |
237 | mov edx, [offset] |
237 | mov edx, [offset] |
238 | mov esi, [buff] |
238 | mov esi, [buff] |
239 | mov edi, [count] |
239 | mov edi, [count] |
240 | 240 | ||
241 | mov [fileio.cmd], 3 |
241 | mov [fileio.cmd], 3 |
242 | mov [fileio.offset], edx |
242 | mov [fileio.offset], edx |
243 | mov [fileio.offset+4], eax |
243 | mov [fileio.offset+4], eax |
244 | mov [fileio.count], edi |
244 | mov [fileio.count], edi |
245 | mov [fileio.buff], esi |
245 | mov [fileio.buff], esi |
246 | mov byte [fileio.buff+4], al |
246 | mov byte [fileio.buff+4], al |
247 | mov [fileio.name], ebx |
247 | mov [fileio.name], ebx |
248 | 248 | ||
249 | mov eax, 70 |
249 | mov eax, 70 |
250 | lea ebx, [fileio] |
250 | lea ebx, [fileio] |
251 | int 0x40 |
251 | int 0x40 |
252 | mov esi, [writes] |
252 | mov esi, [writes] |
253 | test esi, esi |
253 | test esi, esi |
254 | jz @f |
254 | jz @f |
255 | mov [esi], ebx |
255 | mov [esi], ebx |
256 | @@: |
256 | @@: |
257 | pop edx |
257 | pop edx |
258 | pop edi |
258 | pop edi |
259 | pop esi |
259 | pop esi |
260 | pop ebx |
260 | pop ebx |
261 | ret |
261 | ret |
262 | endp |
262 | endp |
263 | 263 | ||
264 | align 4 |
264 | align 4 |
265 | proc _get_key@4 stdcall, key:dword |
265 | proc _get_key@4 stdcall, key:dword |
266 | push ebx |
266 | push ebx |
267 | push ecx |
267 | push ecx |
268 | mov eax, 2 |
268 | mov eax, 2 |
269 | int 0x40 |
269 | int 0x40 |
270 | mov ebx, [key] |
270 | mov ebx, [key] |
271 | mov ecx, eax |
271 | mov ecx, eax |
272 | shr ecx, 8 |
272 | shr ecx, 8 |
273 | mov [ebx], ecx |
273 | mov [ebx], ecx |
274 | movzx eax, al |
274 | movzx eax, al |
275 | pop ecx |
275 | pop ecx |
276 | pop ebx |
276 | pop ebx |
277 | ret |
277 | ret |
278 | endp |
278 | endp |
279 | 279 | ||
280 | align 4 |
280 | align 4 |
281 | proc _InitHeap@4 stdcall, heap_size:dword |
281 | proc _InitHeap@4 stdcall, heap_size:dword |
282 | push ebx |
282 | push ebx |
283 | push ecx |
283 | push ecx |
284 | mov eax, 68 |
284 | mov eax, 68 |
285 | mov ebx, 11 |
285 | mov ebx, 11 |
286 | mov ecx, [heap_size] |
286 | mov ecx, [heap_size] |
287 | int 0x40 |
287 | int 0x40 |
288 | pop ecx |
288 | pop ecx |
289 | pop ebx |
289 | pop ebx |
290 | ret |
290 | ret |
291 | endp |
291 | endp |
292 | 292 | ||
293 | align 4 |
293 | align 4 |
294 | proc _UserAlloc@4 stdcall, alloc_size:dword |
294 | proc _UserAlloc@4 stdcall, alloc_size:dword |
295 | push ebx |
295 | push ebx |
296 | push ecx |
296 | push ecx |
297 | mov eax, 68 |
297 | mov eax, 68 |
298 | mov ebx, 12 |
298 | mov ebx, 12 |
299 | mov ecx, [alloc_size] |
299 | mov ecx, [alloc_size] |
300 | int 0x40 |
300 | int 0x40 |
301 | pop ecx |
301 | pop ecx |
302 | pop ebx |
302 | pop ebx |
303 | ret |
303 | ret |
304 | endp |
304 | endp |
305 | 305 | ||
306 | align 4 |
306 | align 4 |
307 | proc _UserFree@4 stdcall, pmem:dword |
307 | proc _UserFree@4 stdcall, pmem:dword |
308 | push ebx |
308 | push ebx |
309 | push ecx |
309 | push ecx |
310 | mov eax, 68 |
310 | mov eax, 68 |
311 | mov ebx, 13 |
311 | mov ebx, 13 |
312 | mov ecx, [pmem] |
312 | mov ecx, [pmem] |
313 | int 0x40 |
313 | int 0x40 |
314 | pop ecx |
314 | pop ecx |
315 | pop ebx |
315 | pop ebx |
316 | ret |
316 | ret |
317 | endp |
317 | endp |
318 | 318 | ||
319 | align 4 |
319 | align 4 |
320 | proc _GetNotify@4 stdcall, p_ev:dword |
320 | proc _GetNotify@4 stdcall, p_ev:dword |
321 | push ebx |
321 | push ebx |
322 | push ecx |
322 | push ecx |
323 | mov eax, 68 |
323 | mov eax, 68 |
324 | mov ebx, 14 |
324 | mov ebx, 14 |
325 | mov ecx, [p_ev] |
325 | mov ecx, [p_ev] |
326 | int 0x40 |
326 | int 0x40 |
327 | pop ecx |
327 | pop ecx |
328 | pop ebx |
328 | pop ebx |
329 | ret |
329 | ret |
330 | endp |
330 | endp |
331 | 331 | ||
332 | align 4 |
332 | align 4 |
333 | proc _CreateThread@8 stdcall, fn:dword, p_stack:dword |
333 | proc _CreateThread@8 stdcall, fn:dword, p_stack:dword |
334 | push ebx |
334 | push ebx |
335 | push ecx |
335 | push ecx |
336 | push edx |
336 | push edx |
337 | mov eax, 51 |
337 | mov eax, 51 |
338 | mov ebx, 1 |
338 | mov ebx, 1 |
339 | mov ecx, [fn] |
339 | mov ecx, [fn] |
340 | mov edx,[p_stack] |
340 | mov edx,[p_stack] |
341 | int 0x40 |
341 | int 0x40 |
342 | pop edx |
342 | pop edx |
343 | pop ecx |
343 | pop ecx |
344 | pop ebx |
344 | pop ebx |
345 | ret |
345 | ret |
346 | endp |
346 | endp |
347 | 347 | ||
348 | align 4 |
348 | align 4 |
349 | proc _GetMousePos@4 stdcall,rel_type:dword |
349 | proc _GetMousePos@4 stdcall,rel_type:dword |
350 | push ebx |
350 | push ebx |
351 | mov eax, 37 |
351 | mov eax, 37 |
352 | mov ebx, [rel_type] |
352 | mov ebx, [rel_type] |
353 | int 0x40 |
353 | int 0x40 |
354 | pop ebx |
354 | pop ebx |
355 | ret |
355 | ret |
356 | endp |
356 | endp |
357 | 357 | ||
358 | align 4 |
358 | align 4 |
359 | proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\ |
359 | proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\ |
360 | workcolor:dword, style:dword, captioncolor:dword,\ |
360 | workcolor:dword, style:dword, captioncolor:dword,\ |
361 | windowtype:dword, bordercolor:dword |
361 | windowtype:dword, bordercolor:dword |
362 | push ebx |
362 | push ebx |
363 | push ecx |
363 | push ecx |
364 | push edx |
364 | push edx |
365 | push edi |
365 | push edi |
366 | push esi |
366 | push esi |
367 | 367 | ||
368 | mov ebx, [x] |
368 | mov ebx, [x] |
369 | mov ecx, [y] |
369 | mov ecx, [y] |
370 | shl ebx, 16 |
370 | shl ebx, 16 |
371 | shl ecx, 16 |
371 | shl ecx, 16 |
372 | mov bx, word [sx] |
372 | mov bx, word [sx] |
373 | mov cx, word [sy] |
373 | mov cx, word [sy] |
374 | mov edx,[style] |
374 | mov edx,[style] |
375 | shl edx,24 |
375 | shl edx,24 |
376 | add edx,[workcolor] |
376 | add edx,[workcolor] |
377 | mov esi,[windowtype] |
377 | mov esi,[windowtype] |
378 | shl esi,24 |
378 | shl esi,24 |
379 | add esi,[captioncolor] |
379 | add esi,[captioncolor] |
380 | mov edi,[bordercolor] |
380 | mov edi,[bordercolor] |
381 | xor eax,eax |
381 | xor eax,eax |
382 | int 0x40 |
382 | int 0x40 |
383 | pop esi |
383 | pop esi |
384 | pop edi |
384 | pop edi |
385 | pop edx |
385 | pop edx |
386 | pop ecx |
386 | pop ecx |
387 | pop ebx |
387 | pop ebx |
388 | ret |
388 | ret |
389 | endp |
389 | endp |
390 | 390 | ||
391 | align 4 |
391 | align 4 |
392 | _make_button@24: |
392 | proc _make_button@24 stdcall,x:dword, y:dword, \ |
393 | ;arg1 - x |
- | |
394 | ;arg2 - y |
- | |
395 | ;arg3 - xsize |
393 | xsize:dword, ysize:dword, \ |
396 | ;arg4 - ysize |
- | |
397 | ;arg5 - id |
- | |
398 | ;arg6 - color |
394 | id:dword, color:dword |
399 | 395 | ||
400 | push ebx |
- | |
401 | push ecx |
396 | push ebx |
- | 397 | push esi |
|
402 | push esi |
398 | |
- | 399 | mov ebx,[x] |
|
403 | mov ebx,[esp+12] |
400 | mov ecx,[y] |
404 | shl ebx,16 |
- | |
405 | mov bx,[esp+20] |
- | |
406 | mov ecx,[esp+16] |
401 | shl ebx,16 |
- | 402 | shl ecx,16 |
|
407 | shl ecx,16 |
403 | mov bx, word [xsize] |
- | 404 | mov cx, word [ysize] |
|
408 | mov cx,[esp+24] |
405 | |
409 | mov edx,[esp+28] |
406 | mov edx,[id] |
- | 407 | mov esi,[color] |
|
410 | mov esi,[esp+32] |
408 | |
411 | mov eax,8 |
409 | mov eax,8 |
- | 410 | int 0x40 |
|
412 | int 0x40 |
411 | pop esi |
413 | pop esi ecx ebx |
412 | pop ebx |
- | 413 | ret |
|
414 | ret 24 |
414 | endp |
415 | 415 | ||
416 | align 4 |
416 | align 4 |
417 | _draw_bar@20: |
417 | _draw_bar@20: |
418 | ;arg1 - x |
418 | ;arg1 - x |
419 | ;arg2 - y |
419 | ;arg2 - y |
420 | ;arg3 - xsize |
420 | ;arg3 - xsize |
421 | ;arg4 - ysize |
421 | ;arg4 - ysize |
422 | ;arg5 - color |
422 | ;arg5 - color |
423 | push ebx ecx |
423 | push ebx ecx |
424 | mov eax,13 |
424 | mov eax,13 |
425 | mov ebx,[esp+12] |
425 | mov ebx,[esp+12] |
426 | shl ebx,16 |
426 | shl ebx,16 |
427 | mov bx,[esp+20] |
427 | mov bx,[esp+20] |
428 | mov ecx,[esp+16] |
428 | mov ecx,[esp+16] |
429 | shl ecx,16 |
429 | shl ecx,16 |
430 | mov cx,[esp+24] |
430 | mov cx,[esp+24] |
431 | mov edx,[esp+28] |
431 | mov edx,[esp+28] |
432 | int 0x40 |
432 | int 0x40 |
433 | pop ecx ebx |
433 | pop ecx ebx |
434 | ret 20 |
434 | ret 20 |
435 | 435 | ||
436 | _write_text@20: |
436 | _write_text@20: |
437 | ;arg1 - x |
437 | ;arg1 - x |
438 | ;arg2 - y |
438 | ;arg2 - y |
439 | ;arg3 - color |
439 | ;arg3 - color |
440 | ;arg4 - text |
440 | ;arg4 - text |
441 | ;arg5 - len |
441 | ;arg5 - len |
442 | push ebx ecx esi |
442 | push ebx ecx esi |
443 | mov eax,4 |
443 | mov eax,4 |
444 | mov ebx,[esp+16] |
444 | mov ebx,[esp+16] |
445 | shl ebx,16 |
445 | shl ebx,16 |
446 | mov bx,[esp+20] |
446 | mov bx,[esp+20] |
447 | mov ecx,[esp+24] |
447 | mov ecx,[esp+24] |
448 | mov edx,[esp+28] |
448 | mov edx,[esp+28] |
449 | mov esi,[esp+32] |
449 | mov esi,[esp+32] |
450 | int 0x40 |
450 | int 0x40 |
451 | pop esi ecx ebx |
451 | pop esi ecx ebx |
452 | ret 20 |
452 | ret 20 |
453 | 453 | ||
454 | align 4 |
454 | align 4 |
455 | proc _debug_out@4 stdcall, val:dword |
455 | proc _debug_out@4 stdcall, val:dword |
456 | push ebx |
456 | push ebx |
457 | push ecx |
457 | push ecx |
458 | mov ecx,[val] |
458 | mov ecx,[val] |
459 | mov ebx,1 |
459 | mov ebx,1 |
460 | mov eax,63 |
460 | mov eax,63 |
461 | int 0x40 |
461 | int 0x40 |
462 | pop ecx |
462 | pop ecx |
463 | pop ebx |
463 | pop ebx |
464 | ret |
464 | ret |
465 | endp |
465 | endp |
466 | 466 | ||
467 | align 4 |
467 | align 4 |
468 | proc _debug_out_hex@4 stdcall val:dword |
468 | proc _debug_out_hex@4 stdcall val:dword |
469 | locals |
469 | locals |
470 | count dd ? |
470 | count dd ? |
471 | endl |
471 | endl |
472 | 472 | ||
473 | mov [count], 8 |
473 | mov [count], 8 |
474 | .new_char: |
474 | .new_char: |
475 | rol [val], 4 |
475 | rol [val], 4 |
476 | mov ecx, [val] |
476 | mov ecx, [val] |
477 | and ecx, 0x0f |
477 | and ecx, 0x0f |
478 | mov cl,byte [__hexdigits+ecx] |
478 | mov cl,byte [__hexdigits+ecx] |
479 | mov eax, 63 |
479 | mov eax, 63 |
480 | mov ebx, 1 |
480 | mov ebx, 1 |
481 | int 0x40 |
481 | int 0x40 |
482 | dec [count] |
482 | dec [count] |
483 | jnz .new_char |
483 | jnz .new_char |
484 | ret |
484 | ret |
485 | endp |
485 | endp |
486 | 486 | ||
487 | align 4 |
487 | align 4 |
488 | proc _remap_key@4 stdcall, key:dword |
488 | proc _remap_key@4 stdcall, key:dword |
489 | 489 | ||
490 | mov eax, [key] |
490 | mov eax, [key] |
491 | and eax, 0x7F |
491 | and eax, 0x7F |
492 | movzx eax, byte [keymap+eax] |
492 | movzx eax, byte [keymap+eax] |
493 | ret |
493 | ret |
494 | endp |
494 | endp |
495 | 495 | ||
496 | align 4 |
496 | align 4 |
497 | _memset: |
497 | _memset: |
498 | mov edx,[esp + 0ch] |
498 | mov edx,[esp + 0ch] |
499 | mov ecx,[esp + 4] |
499 | mov ecx,[esp + 4] |
500 | 500 | ||
501 | test edx,edx |
501 | test edx,edx |
502 | jz short toend |
502 | jz short toend |
503 | 503 | ||
504 | xor eax,eax |
504 | xor eax,eax |
505 | mov al,[esp + 8] |
505 | mov al,[esp + 8] |
506 | 506 | ||
507 | push edi |
507 | push edi |
508 | mov edi,ecx |
508 | mov edi,ecx |
509 | 509 | ||
510 | cmp edx,4 |
510 | cmp edx,4 |
511 | jb tail |
511 | jb tail |
512 | 512 | ||
513 | neg ecx |
513 | neg ecx |
514 | and ecx,3 |
514 | and ecx,3 |
515 | jz short dwords |
515 | jz short dwords |
516 | 516 | ||
517 | sub edx,ecx |
517 | sub edx,ecx |
518 | adjust_loop: |
518 | adjust_loop: |
519 | mov [edi],al |
519 | mov [edi],al |
520 | add edi,1 |
520 | add edi,1 |
521 | sub ecx,1 |
521 | sub ecx,1 |
522 | jnz adjust_loop |
522 | jnz adjust_loop |
523 | 523 | ||
524 | dwords: |
524 | dwords: |
525 | mov ecx,eax |
525 | mov ecx,eax |
526 | shl eax,8 |
526 | shl eax,8 |
527 | add eax,ecx |
527 | add eax,ecx |
528 | mov ecx,eax |
528 | mov ecx,eax |
529 | shl eax,10h |
529 | shl eax,10h |
530 | add eax,ecx |
530 | add eax,ecx |
531 | 531 | ||
532 | mov ecx,edx |
532 | mov ecx,edx |
533 | and edx,3 |
533 | and edx,3 |
534 | shr ecx,2 |
534 | shr ecx,2 |
535 | jz tail |
535 | jz tail |
536 | 536 | ||
537 | cld |
537 | cld |
538 | rep stosd |
538 | rep stosd |
539 | main_loop_tail: |
539 | main_loop_tail: |
540 | test edx,edx |
540 | test edx,edx |
541 | jz finish |
541 | jz finish |
542 | 542 | ||
543 | 543 | ||
544 | tail: |
544 | tail: |
545 | mov [edi],al |
545 | mov [edi],al |
546 | add edi,1 |
546 | add edi,1 |
547 | 547 | ||
548 | sub edx,1 |
548 | sub edx,1 |
549 | jnz tail |
549 | jnz tail |
550 | 550 | ||
551 | finish: |
551 | finish: |
552 | mov eax,[esp + 8] |
552 | mov eax,[esp + 8] |
553 | pop edi |
553 | pop edi |
554 | 554 | ||
555 | ret |
555 | ret |
556 | 556 | ||
557 | toend: |
557 | toend: |
558 | mov eax,[esp + 4] |
558 | mov eax,[esp + 4] |
559 | 559 | ||
560 | ret |
560 | ret |
561 | 561 | ||
562 | ;public __allmul |
562 | ;public __allmul |
563 | 563 | ||
564 | __allmul: |
564 | __allmul: |
565 | mov eax, [esp+8] |
565 | mov eax, [esp+8] |
566 | mov ecx, [esp+16] |
566 | mov ecx, [esp+16] |
567 | or ecx,eax |
567 | or ecx,eax |
568 | mov ecx, [esp+12] |
568 | mov ecx, [esp+12] |
569 | jnz .hard |
569 | jnz .hard |
570 | mov eax, [esp+4] |
570 | mov eax, [esp+4] |
571 | mul ecx |
571 | mul ecx |
572 | ret 16 |
572 | ret 16 |
573 | .hard: |
573 | .hard: |
574 | push ebx |
574 | push ebx |
575 | mul ecx |
575 | mul ecx |
576 | mov ebx,eax |
576 | mov ebx,eax |
577 | mov eax, [esp+8] |
577 | mov eax, [esp+8] |
578 | mul dword [esp+20] |
578 | mul dword [esp+20] |
579 | add ebx,eax |
579 | add ebx,eax |
580 | mov eax,[esp+8] |
580 | mov eax,[esp+8] |
581 | mul ecx |
581 | mul ecx |
582 | add edx,ebx |
582 | add edx,ebx |
583 | pop ebx |
583 | pop ebx |
584 | ret 16 |
584 | ret 16 |
585 | 585 | ||
586 | ;public __allshr |
586 | ;public __allshr |
587 | 587 | ||
588 | align 4 |
588 | align 4 |
589 | __allshr: |
589 | __allshr: |
590 | cmp cl,64 |
590 | cmp cl,64 |
591 | jae .sign |
591 | jae .sign |
592 | 592 | ||
593 | cmp cl, 32 |
593 | cmp cl, 32 |
594 | jae .MORE32 |
594 | jae .MORE32 |
595 | shrd eax,edx,cl |
595 | shrd eax,edx,cl |
596 | sar edx,cl |
596 | sar edx,cl |
597 | ret |
597 | ret |
598 | .MORE32: |
598 | .MORE32: |
599 | mov eax,edx |
599 | mov eax,edx |
600 | sar edx,31 |
600 | sar edx,31 |
601 | and cl,31 |
601 | and cl,31 |
602 | sar eax,cl |
602 | sar eax,cl |
603 | ret |
603 | ret |
604 | .sign: |
604 | .sign: |
605 | sar edx,31 |
605 | sar edx,31 |
606 | mov eax,edx |
606 | mov eax,edx |
607 | ret |
607 | ret |
608 | 608 | ||
609 | 609 | ||
610 | ;public _scalbn |
610 | ;public _scalbn |
611 | 611 | ||
612 | align 4 |
612 | align 4 |
613 | proc _scalbn |
613 | proc _scalbn |
614 | fild dword [esp+12] |
614 | fild dword [esp+12] |
615 | fld qword [esp+4] |
615 | fld qword [esp+4] |
616 | fscale |
616 | fscale |
617 | fstp st1 |
617 | fstp st1 |
618 | ret |
618 | ret |
619 | endp |
619 | endp |
620 | 620 | ||
621 | 621 | ||
622 | ;public __alloca_probe_8 |
622 | ;public __alloca_probe_8 |
623 | ;public __alloca_probe_16 |
623 | ;public __alloca_probe_16 |
624 | 624 | ||
625 | __alloca_probe_16: ; 16 byte aligned alloca |
625 | __alloca_probe_16: ; 16 byte aligned alloca |
626 | 626 | ||
627 | push ecx |
627 | push ecx |
628 | lea ecx, [esp + 8] ; TOS before entering this function |
628 | lea ecx, [esp + 8] ; TOS before entering this function |
629 | sub ecx, eax ; New TOS |
629 | sub ecx, eax ; New TOS |
630 | and ecx, (16 - 1) ; Distance from 16 bit align (align down) |
630 | and ecx, (16 - 1) ; Distance from 16 bit align (align down) |
631 | add eax, ecx ; Increase allocation size |
631 | add eax, ecx ; Increase allocation size |
632 | sbb ecx, ecx ; ecx = 0xFFFFFFFF if size wrapped around |
632 | sbb ecx, ecx ; ecx = 0xFFFFFFFF if size wrapped around |
633 | or eax, ecx ; cap allocation size on wraparound |
633 | or eax, ecx ; cap allocation size on wraparound |
634 | pop ecx ; Restore ecx |
634 | pop ecx ; Restore ecx |
635 | jmp __chkstk |
635 | jmp __chkstk |
636 | 636 | ||
637 | alloca_8: ; 8 byte aligned alloca |
637 | alloca_8: ; 8 byte aligned alloca |
638 | __alloca_probe_8: |
638 | __alloca_probe_8: |
639 | 639 | ||
640 | push ecx |
640 | push ecx |
641 | lea ecx, [esp+8] ; TOS before entering this function |
641 | lea ecx, [esp+8] ; TOS before entering this function |
642 | sub ecx, eax ; New TOS |
642 | sub ecx, eax ; New TOS |
643 | and ecx, (8 - 1) ; Distance from 8 bit align (align down) |
643 | and ecx, (8 - 1) ; Distance from 8 bit align (align down) |
644 | add eax, ecx ; Increase allocation Size |
644 | add eax, ecx ; Increase allocation Size |
645 | sbb ecx, ecx ; ecx = 0xFFFFFFFF if size wrapped around |
645 | sbb ecx, ecx ; ecx = 0xFFFFFFFF if size wrapped around |
646 | or eax, ecx ; cap allocation size on wraparound |
646 | or eax, ecx ; cap allocation size on wraparound |
647 | pop ecx ; Restore ecx |
647 | pop ecx ; Restore ecx |
648 | jmp __chkstk |
648 | jmp __chkstk |
649 | 649 | ||
650 | ;public __chkstk |
650 | ;public __chkstk |
651 | ;public _alloca_probe |
651 | ;public _alloca_probe |
652 | 652 | ||
653 | align 4 |
653 | align 4 |
654 | ;_alloca_probe: |
654 | ;_alloca_probe: |
655 | __chkstk: |
655 | __chkstk: |
656 | push ecx |
656 | push ecx |
657 | lea ecx, [esp+8-4] ; TOS before entering function + size for ret value |
657 | lea ecx, [esp+8-4] ; TOS before entering function + size for ret value |
658 | sub ecx, eax ; new TOS |
658 | sub ecx, eax ; new TOS |
659 | 659 | ||
660 | ; Handle allocation size that results in wraparound. |
660 | ; Handle allocation size that results in wraparound. |
661 | ; Wraparound will result in StackOverflow exception. |
661 | ; Wraparound will result in StackOverflow exception. |
662 | 662 | ||
663 | sbb eax, eax ; 0 if CF==0, ~0 if CF==1 |
663 | sbb eax, eax ; 0 if CF==0, ~0 if CF==1 |
664 | not eax ; ~0 if TOS did not wrapped around, 0 otherwise |
664 | not eax ; ~0 if TOS did not wrapped around, 0 otherwise |
665 | and ecx, eax ; set to 0 if wraparound |
665 | and ecx, eax ; set to 0 if wraparound |
666 | 666 | ||
667 | mov eax, esp ; current TOS |
667 | mov eax, esp ; current TOS |
668 | and eax, -4096 ; Round down to current page boundary |
668 | and eax, -4096 ; Round down to current page boundary |
669 | 669 | ||
670 | cs10: |
670 | cs10: |
671 | cmp ecx, eax ; Is new TOS |
671 | cmp ecx, eax ; Is new TOS |
672 | jb short cs20 ; in probed page? |
672 | jb short cs20 ; in probed page? |
673 | mov eax, ecx ; yes. |
673 | mov eax, ecx ; yes. |
674 | pop ecx |
674 | pop ecx |
675 | xchg esp, eax ; update esp |
675 | xchg esp, eax ; update esp |
676 | mov eax, [eax] ; get return address |
676 | mov eax, [eax] ; get return address |
677 | mov [esp], eax ; and put it at new TOS |
677 | mov [esp], eax ; and put it at new TOS |
678 | ret |
678 | ret |
679 | 679 | ||
680 | ; Find next lower page and probe |
680 | ; Find next lower page and probe |
681 | cs20: |
681 | cs20: |
682 | sub eax, 4096 ; decrease by PAGESIZE |
682 | sub eax, 4096 ; decrease by PAGESIZE |
683 | test [eax],eax ; probe page. |
683 | test [eax],eax ; probe page. |
684 | jmp short cs10 |
684 | jmp short cs10 |
685 | 685 | ||
686 | public __ftol2_sse |
686 | public __ftol2_sse |
687 | 687 | ||
688 | align 4 |
688 | align 4 |
689 | __ftol2_sse: |
689 | __ftol2_sse: |
690 | push ebp |
690 | push ebp |
691 | mov ebp, esp |
691 | mov ebp, esp |
692 | sub esp, 20 |
692 | sub esp, 20 |
693 | and esp, 0xFFFFFFF0 |
693 | and esp, 0xFFFFFFF0 |
694 | fld st0 |
694 | fld st0 |
695 | fst dword [esp+18] |
695 | fst dword [esp+18] |
696 | fistp qword [esp+10] |
696 | fistp qword [esp+10] |
697 | fild qword [esp+10] |
697 | fild qword [esp+10] |
698 | mov edx, [esp+18] |
698 | mov edx, [esp+18] |
699 | mov eax, [esp+10] |
699 | mov eax, [esp+10] |
700 | test eax, eax |
700 | test eax, eax |
701 | jz .QnaNZ |
701 | jz .QnaNZ |
702 | 702 | ||
703 | .not_QnaNZ: |
703 | .not_QnaNZ: |
704 | fsubp st1, st0 |
704 | fsubp st1, st0 |
705 | test edx, edx |
705 | test edx, edx |
706 | jns .pos |
706 | jns .pos |
707 | fstp dword [esp] |
707 | fstp dword [esp] |
708 | mov ecx, [esp] |
708 | mov ecx, [esp] |
709 | xor ecx, 0x80000000 |
709 | xor ecx, 0x80000000 |
710 | add ecx, 0x7FFFFFFF |
710 | add ecx, 0x7FFFFFFF |
711 | adc eax, 0 |
711 | adc eax, 0 |
712 | mov edx, [esp+14] |
712 | mov edx, [esp+14] |
713 | adc edx, 0 |
713 | adc edx, 0 |
714 | jmp .exit |
714 | jmp .exit |
715 | .pos: |
715 | .pos: |
716 | fstp dword [esp] |
716 | fstp dword [esp] |
717 | mov ecx, [esp] |
717 | mov ecx, [esp] |
718 | add ecx, 0x7FFFFFFF |
718 | add ecx, 0x7FFFFFFF |
719 | sbb eax, 0 |
719 | sbb eax, 0 |
720 | jmp .exit |
720 | jmp .exit |
721 | .QnaNZ: |
721 | .QnaNZ: |
722 | mov edx, [esp+14] |
722 | mov edx, [esp+14] |
723 | test edx, 0x7FFFFFFF |
723 | test edx, 0x7FFFFFFF |
724 | jne .not_QnaNZ |
724 | jne .not_QnaNZ |
725 | fstp dword [esp+18] |
725 | fstp dword [esp+18] |
726 | fstp dword [esp+18] |
726 | fstp dword [esp+18] |
727 | .exit: |
727 | .exit: |
728 | leave |
728 | leave |
729 | ret |
729 | ret |
730 | 730 | ||
731 | section '.data' align 16 data readable writable |
731 | section '.data' align 16 data readable writable |
732 | 732 | ||
733 | align 16 |
733 | align 16 |
734 | __hexdigits db '0123456789ABCDEF' |
734 | __hexdigits db '0123456789ABCDEF' |
735 | 735 | ||
736 | ; 0 1 2 3 4 5 6 7 |
736 | ; 0 1 2 3 4 5 6 7 |
737 | ; 8 9 a b c d e f |
737 | ; 8 9 a b c d e f |
738 | 738 | ||
739 | keymap: |
739 | keymap: |
740 | db 0, 27, '1', '2', '3', '4', '5', '6' ;00 |
740 | db 0, 27, '1', '2', '3', '4', '5', '6' ;00 |
741 | db '7', '8', '9', '0', '-', '=',0x7F, 0x9 ;08 |
741 | db '7', '8', '9', '0', '-', '=',0x7F, 0x9 ;08 |
742 | db 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i' ;10 |
742 | db 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i' ;10 |
743 | db 'o', 'p', '[', ']', 13,0x9D, 'a', 's' ;18 |
743 | db 'o', 'p', '[', ']', 13,0x9D, 'a', 's' ;18 |
744 | db 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';' ;20 |
744 | db 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';' ;20 |
745 | db 0, '~',0xB6, '|',0x7A,0x87, 'c', 'v' ;28 |
745 | db 0, '~',0xB6, '|',0x7A,0x87, 'c', 'v' ;28 |
746 | db 'b', 'n', 'm', ',', '.', '/',0xB6, '*' ;30 |
746 | db 'b', 'n', 'm', ',', '.', '/',0xB6, '*' ;30 |
747 | db 0xB8, ' ', 0,0xBB,0xBC,0xBD,0xBE,0xBF ;38 |
747 | db 0xB8, ' ', 0,0xBB,0xBC,0xBD,0xBE,0xBF ;38 |
748 | db 0xC0,0xC1,0xC2,0xC3,0xC4, 0, 0, 0 ;40 |
748 | db 0xC0,0xC1,0xC2,0xC3,0xC4, 0, 0, 0 ;40 |
749 | db 0xAD, 0, 0,0xAC, 0,0xAE, 0, 0 ;48 |
749 | db 0xAD, 0, 0,0xAC, 0,0xAE, 0, 0 ;48 |
750 | db 0xAF, 0, 0, 0, 0, 0, 0, 0 ;50 |
750 | db 0xAF, 0, 0, 0, 0, 0, 0, 0 ;50 |
751 | db 0, 0, 0, 0, 0, 0, 0, 0 ;58 |
751 | db 0, 0, 0, 0, 0, 0, 0, 0 ;58 |
752 | db 0, 0, 0, 0, 0, 0, 0, 0 ;60 |
752 | db 0, 0, 0, 0, 0, 0, 0, 0 ;60 |
753 | db 0, 0, 0, 0, 0, 0, 0, 0 ;68 |
753 | db 0, 0, 0, 0, 0, 0, 0, 0 ;68 |
754 | db 0, 0, 0, 0, 0, 0, 0, 0 ;70 |
754 | db 0, 0, 0, 0, 0, 0, 0, 0 ;70 |
755 | db 0, 0, 0, 0, 0, 0, 0, 0 ;78 |
755 | db 0, 0, 0, 0, 0, 0, 0, 0 ;78 |
756 | 756 | ||
757 | public ___sse2_available |
757 | public ___sse2_available |
758 | ___sse2_available dd 0 |
758 | ___sse2_available dd 0 |
759 | 759 | ||
760 | public __fltused |
760 | public __fltused |
761 | __fltused dd 0 |
761 | __fltused dd 0 |
762 | 762 | ||
763 | align 4 |
763 | align 4 |
764 | fileio FILEIO |
764 | fileio FILEIO |