Rev 254 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 254 | Rev 281 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | format MS COFF |
1 | format MS COFF |
Line 2... | Line 2... | ||
2 | 2 | ||
- | 3 | include 'proc32.inc' |
|
Line 3... | Line 4... | ||
3 | include 'proc32.inc' |
4 | include 'imports.inc' |
Line 4... | Line 5... | ||
4 | 5 | ||
Line 31... | Line 32... | ||
31 | BI BITMAPINFOHEADER |
32 | BI BITMAPINFOHEADER |
32 | end virtual |
33 | end virtual |
33 | 34 | ||
Line 34... | Line 35... | ||
34 | struc CURSOR |
35 | struc CURSOR |
- | 36 | {;common object header |
|
35 | { .magic dd ? |
37 | .magic dd ? ;'CURS' |
- | 38 | .destroy dd ? ;internal destructor |
|
- | 39 | .fd dd ? ;next object in list |
|
36 | .size dd ? |
40 | .bk dd ? ;prev object in list |
37 | .pid dd ? |
41 | .pid dd ? ;owner id |
- | 42 | ||
- | 43 | ;cursor data |
|
38 | .base dd ? |
44 | .base dd ? ;allocated memory |
39 | .hot_x dd ? |
45 | .hot_x dd ? ;hotspot coords |
40 | .hot_y dd ? |
46 | .hot_y dd ? |
41 | } |
47 | } |
42 | virtual at 0 |
48 | virtual at 0 |
43 | CURSOR CURSOR |
49 | CURSOR CURSOR |
44 | end virtual |
50 | end virtual |
Line 45... | Line 51... | ||
45 | 51 | ||
Line 46... | Line 52... | ||
46 | CURSOR_SIZE equ 24 |
52 | CURSOR_SIZE equ 32 |
47 | 53 | ||
48 | R8500 equ 0x514C ;R200 |
54 | R8500 equ 0x514C ;R200 |
49 | R9000 equ 0x4966 ;RV250 |
55 | R9000 equ 0x4966 ;RV250 |
Line 153... | Line 159... | ||
153 | public START |
159 | public START |
154 | public service_proc |
160 | public service_proc |
155 | public version |
161 | public version |
Line 156... | Line -... | ||
156 | - | ||
157 | extrn SysMsgBoardStr |
- | |
158 | extrn PciApi |
- | |
159 | extrn PciRead32 |
- | |
160 | extrn AllocKernelSpace |
- | |
161 | extrn MapPage |
- | |
162 | extrn RegService |
- | |
163 | extrn SetHwCursor |
- | |
164 | extrn HwCursorRestore |
- | |
165 | extrn HwCursorCreate |
- | |
166 | extrn LFBAddress |
- | |
167 | extrn LoadFile |
- | |
168 | 162 | ||
Line 169... | Line 163... | ||
169 | CURSOR_IMAGE_OFFSET equ 0x00500000 |
163 | CURSOR_IMAGE_OFFSET equ 0x00500000 |
170 | 164 | ||
Line 190... | Line 184... | ||
190 | call init_ati |
184 | call init_ati |
191 | test eax, eax |
185 | test eax, eax |
192 | jz .fail |
186 | jz .fail |
Line 193... | Line 187... | ||
193 | 187 | ||
194 | xor eax, eax |
- | |
195 | mov edi, cursors |
- | |
196 | mov ecx, CURSOR_SIZE*16 |
- | |
197 | cld |
- | |
198 | rep stosd |
- | |
199 | - | ||
200 | not eax |
188 | or eax, -1 |
201 | mov [cursor_map], eax |
189 | mov [cursor_map], eax |
202 | mov [cursor_map+4], eax |
190 | mov [cursor_map+4], eax |
203 | mov edx, cursor_map |
191 | mov edx, cursor_map |
204 | mov [cursor_start], edx |
192 | mov [cursor_start], edx |
205 | add edx, 4 |
193 | add edx, 8 |
Line 206... | Line 194... | ||
206 | mov [cursor_end], edx |
194 | mov [cursor_end], edx |
207 | 195 | ||
208 | stdcall RegService, sz_ati_srv, service_proc |
196 | stdcall RegService, sz_ati_srv, service_proc |
Line 455... | Line 443... | ||
455 | mov [cursor_start], eax |
443 | mov [cursor_start], eax |
456 | popfd |
444 | popfd |
457 | ret |
445 | ret |
458 | 446 | ||
Line -... | Line 447... | ||
- | 447 | ; param |
|
- | 448 | ; eax= pid |
|
- | 449 | ; ebx= src |
|
- | 450 | ; ecx= flags |
|
- | 451 | ||
459 | align 4 |
452 | align 4 |
- | 453 | ati_cursor: |
|
- | 454 | .src equ esp |
|
- | 455 | .flags equ esp+4 |
|
- | 456 | .hcursor equ esp+8 |
|
- | 457 | ||
460 | proc ati_cursor stdcall, hcursor:dword, src:dword, flags:dword |
458 | sub esp, 4 ;space for .hcursor |
- | 459 | push ecx |
|
- | 460 | push ebx |
|
- | 461 | ||
- | 462 | mov ebx, eax |
|
- | 463 | mov eax, CURSOR_SIZE |
|
- | 464 | call CreateObject |
|
- | 465 | test eax, eax |
|
- | 466 | jz .fail |
|
Line 461... | Line 467... | ||
461 | 467 | ||
- | 468 | mov [.hcursor],eax |
|
- | 469 | ||
- | 470 | xor ebx, ebx |
|
- | 471 | mov [eax+CURSOR.magic], 'CURS' |
|
- | 472 | mov [eax+CURSOR.destroy], destroy_cursor |
|
- | 473 | mov [eax+CURSOR.hot_x], ebx |
|
Line -... | Line 474... | ||
- | 474 | mov [eax+CURSOR.hot_y], ebx |
|
462 | stdcall video_alloc |
475 | |
463 | 476 | call video_alloc |
|
Line 464... | Line 477... | ||
464 | mov edi, [hcursor] |
477 | mov edi, [.hcursor] |
465 | mov [edi+CURSOR.base], eax |
478 | mov [edi+CURSOR.base], eax |
466 | 479 | ||
467 | mov esi, [src] |
480 | mov esi, [.src] |
Line 468... | Line 481... | ||
468 | mov ebx, [flags] |
481 | mov ebx, [.flags] |
469 | cmp bx, LOAD_INDIRECT |
482 | cmp bx, LOAD_INDIRECT |
470 | je .indirect |
483 | je .indirect |
471 | 484 | ||
Line 472... | Line 485... | ||
472 | movzx ecx, word [esi+10] |
485 | movzx ecx, word [esi+10] |
473 | movzx edx, word [esi+12] |
486 | movzx edx, word [esi+12] |
474 | mov [edi+CURSOR.hot_x], ecx |
487 | mov [edi+CURSOR.hot_x], ecx |
- | 488 | mov [edi+CURSOR.hot_y], edx |
|
475 | mov [edi+CURSOR.hot_y], edx |
489 | |
476 | 490 | stdcall ati_init_cursor, eax, esi |
|
477 | stdcall ati_init_cursor, eax, esi |
491 | mov eax, [.hcursor] |
478 | mov eax, [hcursor] |
492 | .fail: |
479 | .fail: |
493 | add esp, 12 |
480 | ret |
494 | ret |
481 | .indirect: |
495 | .indirect: |
Line 482... | Line 496... | ||
482 | shr ebx, 16 |
496 | shr ebx, 16 |
483 | movzx ecx, bh |
497 | movzx ecx, bh |
484 | movzx edx, bl |
498 | movzx edx, bl |
485 | mov [edi+CURSOR.hot_x], ecx |
499 | mov [edi+CURSOR.hot_x], ecx |
- | 500 | mov [edi+CURSOR.hot_y], edx |
|
486 | mov [edi+CURSOR.hot_y], edx |
501 | |
- | 502 | mov edi, eax |
|
Line 487... | Line 503... | ||
487 | 503 | mov ebx, eax |
|
488 | xchg edi, eax |
- | |
489 | push edi |
504 | mov ecx, 64*64 |
490 | mov ecx, 64*64 |
505 | xor eax,eax |
491 | xor eax,eax |
506 | cld |
492 | rep stosd |
507 | rep stosd |
493 | 508 | mov edi, ebx |
|
494 | mov esi, [src] |
509 | |
495 | pop edi |
510 | mov esi, [.src] |
496 | mov ebx, 32 |
511 | mov ebx, 32 |
497 | cld |
512 | cld |
- | 513 | @@: |
|
- | 514 | mov ecx, 32 |
|
- | 515 | rep movsd |
|
- | 516 | add edi, 128 |
|
- | 517 | dec ebx |
|
- | 518 | jnz @B |
|
- | 519 | mov eax, [.hcursor] |
|
- | 520 | add esp, 12 |
|
- | 521 | ret |
|
- | 522 | ||
- | 523 | align 4 |
|
- | 524 | destroy_cursor: |
|
498 | @@: |
525 | |
499 | mov ecx, 32 |
- | |
Line 500... | Line 526... | ||
500 | rep movsd |
526 | push eax |
501 | add edi, 128 |
527 | mov eax, [eax+CURSOR.base] |
502 | dec ebx |
528 | call video_free |
503 | jnz @B |
529 | pop eax |
Line 953... | Line 979... | ||
953 | dd (R9800P shl 16)+VID_ATI |
979 | dd (R9800P shl 16)+VID_ATI |
954 | dd (R9800XT shl 16)+VID_ATI |
980 | dd (R9800XT shl 16)+VID_ATI |
955 | dd 0 ;terminator |
981 | dd 0 ;terminator |
956 | 982 | ||
Line 957... | Line 983... | ||
957 | version dd 0x00010001 |
983 | version dd 0x00020002 |
Line 958... | Line 984... | ||
958 | 984 | ||
Line 959... | Line 985... | ||
959 | sz_ati_srv db 'HWCURSOR',0 |
985 | sz_ati_srv db 'HWCURSOR',0 |
960 | 986 | ||
Line 968... | Line 994... | ||
968 | section '.data' data readable writable align 16 |
994 | section '.data' data readable writable align 16 |
Line 969... | Line 995... | ||
969 | 995 | ||
Line 970... | Line -... | ||
970 | pCursor db 4096 dup(?) |
- | |
971 | 996 | pCursor db 4096 dup(?) |
|
972 | cursors rb CURSOR_SIZE*64 |
997 | |
973 | cursor_map rd 2 |
998 | cursor_map rd 2 |
Line 974... | Line 999... | ||
974 | cursor_start rd 1 |
999 | cursor_start rd 1 |