Subversion Repositories Kolibri OS

Rev

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