Rev 384 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
129 | mikedld | 1 | ;----------------------------------------------------------------------------- |
2 | func vm_mike_draw_rect.32 ;/////////////////////////////////////////////////// |
||
3 | ;----------------------------------------------------------------------------- |
||
4 | ; eax - x start |
||
5 | ; ebx - y start |
||
6 | ; ecx - x end |
||
7 | ; edx - y end |
||
8 | ; edi - color |
||
9 | ;----------------------------------------------------------------------------- |
||
10 | ;- eax(ebx) [x start]*65536 + [x size] |
||
11 | ;- ebx(ecx) [y start]*65536 + [y size] |
||
12 | ;- ecx(edx) color 0x00RRGGBB |
||
13 | ;----------------------------------------------------------------------------- |
||
14 | begin |
||
15 | pushad |
||
16 | cli |
||
17 | jif eax,e,ecx,.exit |
||
18 | jif ebx,e,edx,.exit |
||
19 | |||
20 | call get_cursor_rect |
||
21 | |||
384 | mikedld | 22 | mov ebp,[TASK_BASE] |
23 | movsx esi,word[ebp-CURRENT_TASK+0] |
||
129 | mikedld | 24 | add eax,esi |
25 | add ecx,esi |
||
384 | mikedld | 26 | movsx esi,word[ebp-CURRENT_TASK+4] |
129 | mikedld | 27 | add ebx,esi |
28 | add edx,esi |
||
384 | mikedld | 29 | ; add eax,[ebp-CURRENT_TASK+0] |
30 | ; add ebx,[ebp-CURRENT_TASK+4] |
||
31 | ; add ecx,[ebp-CURRENT_TASK+0] |
||
32 | ; add edx,[ebp-CURRENT_TASK+4] |
||
129 | mikedld | 33 | |
384 | mikedld | 34 | mov esi,[CURRENT_TASK] |
129 | mikedld | 35 | mov esi,[CLIP_RECTS+esi*4] |
36 | mov ebp,[esi] |
||
37 | or ebp,ebp |
||
38 | jz .exit |
||
39 | add esi,4 |
||
40 | .nx: jif ecx,l,[rr.left],.skip |
||
41 | jif eax,ge,[rr.right],.skip |
||
42 | jif edx,l,[rr.top],.skip |
||
43 | jif ebx,ge,[rr.bottom],.skip |
||
44 | pushad |
||
45 | jif eax,ge,[rr.left],@f |
||
46 | mov eax,[rr.left] |
||
47 | @@: jif ebx,ge,[rr.top],@f |
||
48 | mov ebx,[rr.top] |
||
49 | @@: jif ecx,l,[rr.right],@f |
||
50 | mov ecx,[rr.right] |
||
51 | @@: jif edx,l,[rr.bottom],@f |
||
52 | mov edx,[rr.bottom] |
||
53 | @@: call is_intersect_rc |
||
54 | jc .put |
||
384 | mikedld | 55 | cmp byte[MOUSE_VISIBLE],0 |
56 | je .put |
||
129 | mikedld | 57 | call [SF.draw_mouse_under] |
384 | mikedld | 58 | mov byte[MOUSE_VISIBLE],0 |
59 | .put: mov ebp,[BytesPerScanLine] |
||
129 | mikedld | 60 | imul ebp,ebx |
61 | lea ebp,[ebp+eax*4] |
||
384 | mikedld | 62 | add ebp,[LFBAddress] |
129 | mikedld | 63 | .xxx: push eax ebp |
64 | @@: push ebp |
||
65 | call [set_bank] |
||
66 | mov [ebp],edi |
||
67 | pop ebp |
||
384 | mikedld | 68 | ; mov [ebp],edi |
129 | mikedld | 69 | add ebp,4 |
70 | inc eax |
||
71 | cmp eax,ecx |
||
72 | jl @b |
||
73 | pop ebp eax |
||
384 | mikedld | 74 | add ebp,[BytesPerScanLine] |
129 | mikedld | 75 | inc ebx |
76 | cmp ebx,edx |
||
77 | jl .xxx |
||
78 | popad |
||
79 | .skip: |
||
80 | add esi,SR |
||
81 | dec ebp |
||
82 | jnz .nx |
||
83 | |||
84 | .exit: |
||
85 | sti |
||
86 | popad |
||
87 | retn |
||
88 | endf |
||
89 | |||
90 | ;----------------------------------------------------------------------------- |
||
91 | func vm_mike_draw_line.32 ;/////////////////////////////////////////////////// |
||
92 | ;----------------------------------------------------------------------------- |
||
93 | ; eax(ebx) [x start] shl 16 + [x end] |
||
94 | ; ebx(ecx) [y start] shl 16 + [y end] |
||
95 | ; ecx(edx) colour 0x00RRGGBB |
||
96 | ; edi = 0x00000001 force |
||
97 | ;----------------------------------------------------------------------------- |
||
98 | begin |
||
99 | pushad |
||
100 | cli |
||
101 | |||
102 | call get_cursor_rect |
||
103 | |||
104 | movsx eax,word[esp+4*7] ; x end |
||
105 | cmp ax,[esp+4*7+2] ; x start |
||
106 | je dl.32.vert_line |
||
107 | movsx eax,word[esp+4*4] ; y end |
||
108 | cmp ax,[esp+4*4+2] ; y start |
||
109 | je dl.32.horz_line |
||
110 | |||
111 | sti |
||
112 | popad |
||
113 | retn |
||
114 | |||
115 | dl.32.vert_line: |
||
116 | test edi,1 |
||
117 | jnz .forced |
||
384 | mikedld | 118 | mov esi,[CURRENT_TASK] |
129 | mikedld | 119 | mov esi,[CLIP_RECTS+esi*4] |
120 | mov edi,[esi] |
||
121 | or edi,edi |
||
122 | jz .exit |
||
123 | add esi,4 |
||
124 | .nx: movsx ebx,word[esp+4*4+2] ; y start |
||
125 | movsx edx,word[esp+4*4] ; y end |
||
126 | cmp ebx,edx |
||
127 | je .exit |
||
128 | jl @f |
||
129 | xchg ebx,edx |
||
130 | @@: jif eax,l,[rr.left],.skip |
||
131 | jif eax,ge,[rr.right],.skip |
||
132 | jif edx,l,[rr.top],.skip |
||
133 | jif ebx,ge,[rr.bottom],.skip |
||
134 | jif ebx,ge,[rr.top],@f |
||
135 | mov ebx,[rr.top] |
||
136 | @@: jif edx,l,[rr.bottom],@f |
||
137 | mov edx,[rr.bottom] |
||
138 | dec edx |
||
139 | .draw: |
||
140 | @@: call is_intersect_vln |
||
141 | jc .put |
||
384 | mikedld | 142 | cmp byte[MOUSE_VISIBLE],0 |
143 | je .put |
||
129 | mikedld | 144 | call [SF.draw_mouse_under] |
384 | mikedld | 145 | mov byte[MOUSE_VISIBLE],0 |
146 | .put: mov ebp,[BytesPerScanLine] |
||
129 | mikedld | 147 | imul ebp,ebx |
148 | lea ebp,[ebp+eax*4] |
||
384 | mikedld | 149 | add ebp,[LFBAddress] |
129 | mikedld | 150 | @@: push ebp |
151 | call [set_bank] |
||
152 | test ecx,0x01000000 |
||
153 | jz .dr |
||
154 | mov ecx,[ebp] |
||
155 | not ecx |
||
156 | or ecx,0x01000000 |
||
157 | .dr: mov [ebp],ecx |
||
158 | pop ebp |
||
384 | mikedld | 159 | ; test ecx,0x01000000 |
160 | ; jz .dr |
||
161 | ; mov ecx,[ebp] |
||
162 | ; not ecx |
||
163 | ; or ecx,0x01000000 |
||
164 | ; .dr: mov [ebp],ecx |
||
165 | add ebp,[BytesPerScanLine] |
||
129 | mikedld | 166 | inc ebx |
167 | cmp ebx,edx |
||
168 | jle @b |
||
169 | .skip: |
||
170 | add esi,SR |
||
171 | dec edi |
||
172 | jnz .nx |
||
173 | .exit: |
||
174 | sti |
||
175 | popad |
||
176 | retn |
||
177 | .forced: |
||
178 | jif eax,l,[viewport.left],.exit |
||
179 | jif eax,ge,[viewport.right],.exit |
||
180 | movsx ebx,word[esp+4*4+2] ; y start |
||
181 | movsx edx,word[esp+4*4] ; y end |
||
182 | jif ebx,e,edx,.exit |
||
183 | jl @f |
||
184 | xchg ebx,edx |
||
185 | @@: jif edx,l,[viewport.top],.exit |
||
186 | jif ebx,ge,[viewport.bottom],.exit |
||
187 | jif ebx,ge,[viewport.top],@f |
||
188 | mov ebx,[viewport.top] |
||
189 | @@: jif edx,l,[viewport.bottom],@f |
||
190 | mov edx,[viewport.bottom] |
||
191 | dec edx |
||
192 | @@: mov edi,1 |
||
193 | jmp .draw |
||
194 | |||
195 | dl.32.horz_line: |
||
196 | test edi,1 |
||
197 | jnz .forced |
||
384 | mikedld | 198 | mov esi,[CURRENT_TASK] |
129 | mikedld | 199 | mov esi,[CLIP_RECTS+esi*4] |
200 | mov edi,[esi] |
||
201 | or edi,edi |
||
202 | jz .exit |
||
203 | add esi,4 |
||
204 | .nx: movsx ebx,word[esp+4*7+2] ; x start |
||
205 | movsx edx,word[esp+4*7] ; x end |
||
206 | cmp ebx,edx |
||
207 | je .exit |
||
208 | jl @f |
||
209 | xchg ebx,edx |
||
210 | @@: jif eax,l,[rr.top],.skip |
||
211 | jif eax,ge,[rr.bottom],.skip |
||
212 | jif edx,l,[rr.left],.skip |
||
213 | jif ebx,ge,[rr.right],.skip |
||
214 | jif ebx,ge,[rr.left],@f |
||
215 | mov ebx,[rr.left] |
||
216 | @@: jif edx,l,[rr.right],@f |
||
217 | mov edx,[rr.right] |
||
218 | dec edx |
||
219 | .draw: |
||
220 | @@: call is_intersect_hln |
||
221 | jc .put |
||
384 | mikedld | 222 | cmp byte[MOUSE_VISIBLE],0 |
223 | je .put |
||
129 | mikedld | 224 | call [SF.draw_mouse_under] |
384 | mikedld | 225 | mov byte[MOUSE_VISIBLE],0 |
226 | .put: mov ebp,[BytesPerScanLine] |
||
129 | mikedld | 227 | imul ebp,eax |
228 | lea ebp,[ebp+ebx*4] |
||
384 | mikedld | 229 | add ebp,[LFBAddress] |
129 | mikedld | 230 | @@: push ebp |
231 | call [set_bank] |
||
232 | test ecx,0x01000000 |
||
233 | jz .dr |
||
234 | mov ecx,[ebp] |
||
235 | not ecx |
||
236 | or ecx,0x01000000 |
||
237 | .dr: mov [ebp],ecx |
||
238 | pop ebp |
||
384 | mikedld | 239 | ; test ecx,0x01000000 |
240 | ; jz .dr |
||
241 | ; mov ecx,[ebp] |
||
242 | ; not ecx |
||
243 | ; or ecx,0x01000000 |
||
244 | ; .dr: mov [ebp],ecx |
||
129 | mikedld | 245 | add ebp,4 |
246 | inc ebx |
||
247 | cmp ebx,edx |
||
248 | jle @b |
||
249 | .skip: |
||
250 | add esi,SR |
||
251 | dec edi |
||
252 | jnz .nx |
||
253 | .exit: |
||
254 | sti |
||
255 | popad |
||
256 | retn |
||
257 | .forced: |
||
258 | jif eax,l,[viewport.top],.exit |
||
259 | jif eax,ge,[viewport.bottom],.exit |
||
260 | movsx ebx,word[esp+4*7+2] ; x start |
||
261 | movsx edx,word[esp+4*7] ; x end |
||
262 | cmp ebx,edx |
||
263 | je .exit |
||
264 | jl @f |
||
265 | xchg ebx,edx |
||
266 | @@: jif edx,l,[viewport.left],.exit |
||
267 | jif ebx,ge,[viewport.right],.exit |
||
268 | jif ebx,ge,[viewport.left],@f |
||
269 | mov ebx,[viewport.left] |
||
270 | @@: jif edx,l,[viewport.right],@f |
||
271 | mov edx,[viewport.right] |
||
272 | dec edx |
||
273 | @@: mov edi,1 |
||
274 | jmp .draw |
||
275 | endf |
||
276 | |||
277 | ;----------------------------------------------------------------------------- |
||
278 | func vm_mike_put_pixel.32 ;/////////////////////////////////////////////////// |
||
279 | ;----------------------------------------------------------------------------- |
||
280 | ; eax = x coordinate |
||
281 | ; ebx = y coordinate |
||
282 | ; ecx = ?? RR GG BB ; 0x01000000 negation |
||
283 | ; edi = 0x00000001 force |
||
284 | ;----------------------------------------------------------------------------- |
||
285 | begin |
||
286 | pushad |
||
287 | cli |
||
384 | mikedld | 288 | mov edx,[BytesPerScanLine] |
129 | mikedld | 289 | imul edx,ebx |
290 | lea edx,[edx+eax*4] |
||
384 | mikedld | 291 | add edx,[LFBAddress] |
292 | ; test ecx,0x01000000 |
||
293 | ; jz @f |
||
294 | ; mov ecx,[edx] |
||
295 | ; not ecx |
||
129 | mikedld | 296 | @@: test edi,1 |
297 | jnz .forced |
||
384 | mikedld | 298 | mov esi,[CURRENT_TASK] |
129 | mikedld | 299 | mov esi,[CLIP_RECTS+esi*4] |
300 | mov edi,[esi] |
||
301 | or edi,edi |
||
302 | jz .exit |
||
303 | add esi,4 |
||
304 | @@: jif eax,l,[rr.left],.skip |
||
305 | jif eax,ge,[rr.right],.skip |
||
306 | jif ebx,l,[rr.top],.skip |
||
307 | jif ebx,ge,[rr.bottom],.skip |
||
308 | call get_cursor_rect |
||
309 | call is_intersect_pt |
||
310 | jc .put |
||
384 | mikedld | 311 | cmp byte[MOUSE_VISIBLE],0 |
312 | je .put |
||
129 | mikedld | 313 | call [SF.draw_mouse_under] |
384 | mikedld | 314 | mov byte[MOUSE_VISIBLE],0 |
129 | mikedld | 315 | .put: push edx |
316 | call [set_bank] |
||
317 | pop edx |
||
318 | test ecx,0x01000000 |
||
319 | jz .lp1 |
||
320 | not dword[ebp] |
||
321 | jmp .exit |
||
322 | .lp1: mov [ebp],ecx |
||
323 | .exit: |
||
324 | sti |
||
325 | popad |
||
326 | retn |
||
327 | .skip: |
||
328 | add esi,SR |
||
329 | dec edi |
||
330 | jnz @b |
||
331 | jmp .exit |
||
332 | .forced: |
||
333 | jif eax,l,[viewport.left],.exit |
||
334 | jif ebx,l,[viewport.top],.exit |
||
335 | jif eax,ge,[viewport.right],.exit |
||
336 | jif ebx,ge,[viewport.bottom],.exit |
||
337 | push edx |
||
338 | call [set_bank] |
||
339 | pop edx |
||
340 | test ecx,0x01000000 |
||
341 | jz .lp2 |
||
342 | not dword[ebp] |
||
343 | jmp .exit |
||
344 | .lp2: mov [ebp],ecx |
||
345 | jmp .exit |
||
346 | endf |
||
347 | |||
348 | ;----------------------------------------------------------------------------- |
||
349 | func vm_mike_get_pixel.32 ;/////////////////////////////////////////////////// |
||
350 | ;----------------------------------------------------------------------------- |
||
351 | ; eax = x coordinate |
||
352 | ; ebx = y coordinate |
||
353 | ;----------------------------------------------------------------------------- |
||
354 | begin |
||
355 | pushad |
||
356 | cli |
||
384 | mikedld | 357 | imul ebx,[BytesPerScanLine] |
129 | mikedld | 358 | shl eax,2 |
359 | add eax,ebx |
||
384 | mikedld | 360 | add eax,[LFBAddress] |
129 | mikedld | 361 | push eax |
362 | call [set_bank] |
||
363 | pop eax |
||
364 | mov eax,[ebp] |
||
365 | and eax,0x00FFFFFF |
||
366 | mov [esp+4*6],eax |
||
367 | sti |
||
368 | popad |
||
369 | retn |
||
370 | endf |
||
371 | |||
372 | ;----------------------------------------------------------------------------- |
||
373 | func vm_mike_put_image.32 ;/////////////////////////////////////////////////// |
||
374 | ;----------------------------------------------------------------------------- |
||
375 | ; eax(ebx) pointer to image in memory - RRGGBBRRGGBB.. |
||
376 | ; ebx(ecx) image size [x]*65536+[y] |
||
377 | ; ecx(edx) image position in window [x]*65536+[y] |
||
378 | ; ret: eax 0 succesful, 1 overlapped |
||
379 | ;----------------------------------------------------------------------------- |
||
380 | begin |
||
381 | mov eax,ebx |
||
382 | mov ebx,ecx |
||
383 | mov ecx,edx |
||
384 | |||
385 | .direct: |
||
386 | pushad |
||
387 | cli |
||
388 | jif ebx,z,0x0000FFFF,.exit,test |
||
389 | jif ebx,z,0xFFFF0000,.exit,test |
||
390 | |||
391 | call get_cursor_rect |
||
392 | |||
393 | mov ebp,eax |
||
394 | movsx eax,word[esp+4*6+2] |
||
395 | movsx ebx,word[esp+4*6] |
||
396 | movsx ecx,word[esp+4*4+2] |
||
397 | movsx edx,word[esp+4*4] |
||
398 | |||
399 | lea edi,[ecx*3] |
||
400 | push edi |
||
401 | add ecx,eax |
||
402 | add edx,ebx |
||
384 | mikedld | 403 | mov edi,[TASK_BASE] |
404 | movsx esi,word[edi-CURRENT_TASK+0] |
||
129 | mikedld | 405 | add eax,esi |
406 | add ecx,esi |
||
384 | mikedld | 407 | movsx esi,word[edi-CURRENT_TASK+4] |
129 | mikedld | 408 | add ebx,esi |
409 | add edx,esi |
||
384 | mikedld | 410 | ; add eax,[esi-CURRENT_TASK+0] |
411 | ; add ebx,[esi-CURRENT_TASK+4] |
||
412 | ; add ecx,[esi-CURRENT_TASK+0] |
||
413 | ; add edx,[esi-CURRENT_TASK+4] |
||
129 | mikedld | 414 | |
384 | mikedld | 415 | ; cmp eax,640 |
416 | ; jb @f |
||
417 | ; SHFLOW '%x %x %x %x',eax,ebx,ecx,edx |
||
129 | mikedld | 418 | ; @@: |
419 | |||
384 | mikedld | 420 | mov esi,[CURRENT_TASK] |
129 | mikedld | 421 | mov esi,[CLIP_RECTS+esi*4] |
422 | mov edi,[esi] |
||
423 | or edi,edi |
||
424 | jz .exit |
||
425 | add esi,4 |
||
426 | cld |
||
427 | .nx: jif ecx,l,[rr.left],.skip |
||
428 | jif eax,ge,[rr.right],.skip |
||
429 | jif edx,l,[rr.top],.skip |
||
430 | jif ebx,ge,[rr.bottom],.skip |
||
431 | pushad |
||
432 | jif eax,ge,[rr.left],@f |
||
433 | mov eax,[rr.left] |
||
434 | @@: jif ebx,ge,[rr.top],@f |
||
435 | mov ebx,[rr.top] |
||
436 | @@: jif ecx,l,[rr.right],@f |
||
437 | mov ecx,[rr.right] |
||
438 | @@: jif edx,l,[rr.bottom],@f |
||
439 | mov edx,[rr.bottom] |
||
440 | @@: call is_intersect_rc |
||
441 | jc .put |
||
384 | mikedld | 442 | cmp byte[MOUSE_VISIBLE],0 |
443 | je .put |
||
129 | mikedld | 444 | call [SF.draw_mouse_under] |
384 | mikedld | 445 | mov byte[MOUSE_VISIBLE],0 |
129 | mikedld | 446 | .put: mov esi,ebx |
447 | sub esi,[esp+4*4] |
||
448 | imul esi,[esp+4*8] |
||
449 | mov edi,eax |
||
450 | sub edi,[esp+4*7] |
||
451 | lea edi,[edi*3] |
||
452 | add esi,edi |
||
453 | add esi,ebp |
||
384 | mikedld | 454 | mov edi,[BytesPerScanLine] |
129 | mikedld | 455 | imul edi,ebx |
456 | lea edi,[edi+eax*4] |
||
384 | mikedld | 457 | add edi,[LFBAddress] |
129 | mikedld | 458 | .xxx: push eax esi edi eax |
459 | @@: lodsd |
||
460 | |||
461 | push ebp edi |
||
462 | call [set_bank] |
||
463 | mov [ebp],eax |
||
464 | pop edi ebp |
||
465 | add edi,4 |
||
466 | |||
467 | dec esi |
||
468 | inc dword[esp] |
||
469 | cmp [esp],ecx |
||
470 | jl @b |
||
471 | pop eax edi esi eax |
||
472 | add esi,[esp+4*8] |
||
384 | mikedld | 473 | add edi,[BytesPerScanLine] |
129 | mikedld | 474 | inc ebx |
475 | cmp ebx,edx |
||
476 | jl .xxx |
||
477 | popad |
||
478 | .skip: |
||
479 | add esi,SR |
||
480 | dec edi |
||
481 | jnz .nx |
||
482 | |||
483 | .exit: |
||
384 | mikedld | 484 | add esp,4 |
129 | mikedld | 485 | sti |
486 | popad |
||
487 | xor eax,eax |
||
488 | retn |
||
489 | endf |
||
490 | |||
491 | ;----------------------------------------------------------------------------- |
||
492 | func vm_mike_draw_bg.32 ;///////////////////////////////////////////////////// |
||
493 | ;----------------------------------------------------------------------------- |
||
494 | begin |
||
495 | pushad |
||
496 | |||
497 | cmp byte[bg_type],BGT_TILE |
||
498 | je .tiled |
||
499 | |||
500 | mov eax,[bg_width] |
||
384 | mikedld | 501 | cmp eax,[ScreenWidth] |
129 | mikedld | 502 | jne @f |
503 | mov eax,[bg_height] |
||
384 | mikedld | 504 | cmp eax,[ScreenHeight] |
129 | mikedld | 505 | je .tiled |
506 | @@: |
||
507 | imul eax,[bg_width],3 |
||
384 | mikedld | 508 | mov [bg_BytesPerScanLine],eax |
129 | mikedld | 509 | |
510 | mov eax,[viewport.left] |
||
511 | mov ebx,[viewport.top] |
||
512 | mov ecx,[viewport.right] |
||
513 | mov edx,[viewport.bottom] |
||
514 | |||
515 | cmp [bg_width],1 |
||
516 | jne @f |
||
517 | cmp [bg_height],1 |
||
518 | je .color |
||
519 | @@: |
||
520 | cli |
||
521 | |||
522 | call [SF.draw_mouse_under] |
||
384 | mikedld | 523 | mov byte[MOUSE_VISIBLE],0 |
129 | mikedld | 524 | |
525 | mov esi,[CLIP_RECTS+4] |
||
526 | mov ebp,[esi] |
||
527 | or ebp,ebp |
||
528 | jz .exit |
||
529 | add esi,4 |
||
530 | .nx: jif ecx,l,[rr.left],.skip |
||
531 | jif eax,ge,[rr.right],.skip |
||
532 | jif edx,l,[rr.top],.skip |
||
533 | jif ebx,ge,[rr.bottom],.skip |
||
534 | pushad |
||
535 | jif eax,ge,[rr.left],@f |
||
536 | mov eax,[rr.left] |
||
537 | @@: jif ebx,ge,[rr.top],@f |
||
538 | mov ebx,[rr.top] |
||
539 | @@: jif ecx,l,[rr.right],@f |
||
540 | mov ecx,[rr.right] |
||
541 | @@: jif edx,l,[rr.bottom],@f |
||
542 | mov edx,[rr.bottom] |
||
384 | mikedld | 543 | @@: ;call is_intersect_rc |
544 | ;jc .put |
||
545 | ;cmp [mouse_invisible],0 |
||
546 | ;jne .put |
||
547 | ;call [SF.draw_mouse_under] |
||
548 | ;mov [mouse_invisible],1 |
||
549 | .put: mov ebp,[BytesPerScanLine] |
||
129 | mikedld | 550 | imul ebp,ebx |
551 | lea ebp,[ebp+eax*4] |
||
384 | mikedld | 552 | add ebp,[LFBAddress] |
129 | mikedld | 553 | .xxx: push eax ebp |
554 | @@: push ebp |
||
555 | call [set_bank] |
||
556 | push eax edx |
||
557 | mul [bg_width] |
||
384 | mikedld | 558 | div dword[ScreenWidth] |
129 | mikedld | 559 | lea edi,[eax*3] |
560 | mov eax,ebx |
||
561 | mul [bg_height] |
||
384 | mikedld | 562 | div dword[ScreenHeight] |
563 | mul [bg_BytesPerScanLine] |
||
129 | mikedld | 564 | add edi,eax |
384 | mikedld | 565 | add edi,IMG_BACKGROUND |
129 | mikedld | 566 | mov eax,[edi] |
567 | mov [ebp],eax |
||
384 | mikedld | 568 | pop edx eax |
129 | mikedld | 569 | pop ebp |
570 | add ebp,4 |
||
571 | inc eax |
||
572 | cmp eax,ecx |
||
573 | jl @b |
||
574 | pop ebp eax |
||
384 | mikedld | 575 | add ebp,[BytesPerScanLine] |
129 | mikedld | 576 | inc ebx |
577 | cmp ebx,edx |
||
578 | jl .xxx |
||
579 | popad |
||
580 | .skip: |
||
581 | add esi,SR |
||
582 | dec ebp |
||
583 | jnz .nx |
||
584 | |||
585 | .exit: |
||
586 | sti |
||
587 | popad |
||
588 | retn |
||
589 | |||
590 | .tiled: |
||
384 | mikedld | 591 | mov eax,IMG_BACKGROUND |
129 | mikedld | 592 | mov ebx,[bg_width-2] |
593 | mov bx,word[bg_height] |
||
594 | xor ecx,ecx |
||
595 | .lp1: push eax |
||
596 | call vm_mike_put_image.32.direct |
||
597 | pop eax |
||
598 | rol ecx,16 |
||
599 | add cx,word[bg_width] |
||
384 | mikedld | 600 | cmp cx,word[ScreenWidth] |
129 | mikedld | 601 | jae @f |
602 | rol ecx,16 |
||
603 | jmp .lp1 |
||
604 | @@: shr ecx,16 |
||
605 | add ecx,[bg_height] |
||
384 | mikedld | 606 | cmp ecx,[ScreenHeight] |
129 | mikedld | 607 | jb .lp1 |
608 | popad |
||
609 | retn |
||
610 | |||
611 | .color: |
||
384 | mikedld | 612 | mov edi,[IMG_BACKGROUND] |
129 | mikedld | 613 | and edi,0x00FFFFFF |
614 | call vm_mike_draw_rect.32 |
||
615 | popad |
||
616 | retn |
||
617 | endf |