Subversion Repositories Kolibri OS

Rev

Rev 214 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 214 Rev 227
Line 4... Line 4...
4
 
4
 
Line 5... Line 5...
5
 
5
 
Line 6... Line 6...
6
include 'proc32.inc'
6
include 'proc32.inc'
Line 7... Line 7...
7
 
7
 
Line -... Line 8...
-
 
8
DEBUG     equ 1
-
 
9
 
-
 
10
VID_ATI     equ 0x1002
-
 
11
 
-
 
12
LOAD_FROM_FILE  equ 0
-
 
13
LOAD_FROM_MEM   equ 1
-
 
14
LOAD_INDIRECT   equ 2
-
 
15
LOAD_SYSTEM     equ 3
-
 
16
 
-
 
17
struc BITMAPINFOHEADER {
-
 
18
  .biSize          dd ? ; DWORD
-
 
19
  .biWidth         dd ? ; LONG
-
 
20
  .biHeight        dd ? ; LONG
-
 
21
  .biPlanes        dw ? ; WORD
-
 
22
  .biBitCount      dw ? ; WORD
-
 
23
  .biCompression   dd ? ; DWORD
-
 
24
  .biSizeImage     dd ? ; DWORD
-
 
25
  .biXPelsPerMeter dd ? ; LONG
-
 
26
  .biYPelsPerMeter dd ? ; LONG
-
 
27
  .biClrUsed       dd ? ; DWORD
-
 
28
  .biClrImportant  dd ? ; DWORD
-
 
29
}
-
 
30
 
-
 
31
virtual at 0
-
 
32
  BI BITMAPINFOHEADER
-
 
33
end virtual
-
 
34
 
-
 
35
struc CURSOR
-
 
36
{  .magic       dd ?
-
 
37
   .size        dd ?
-
 
38
   .pid         dd ?
-
 
39
   .base        dd ?
-
 
40
   .hot_x       dd ?
-
 
41
   .hot_y       dd ?
-
 
42
}
-
 
43
virtual at 0
-
 
44
  CURSOR CURSOR
8
DEBUG     equ 0
45
end virtual
9
 
46
 
10
VID_ATI     equ 0x1002
47
CURSOR_SIZE     equ 24
11
 
48
 
12
R8500       equ 0x514C  ;R200
49
R8500       equ 0x514C  ;R200
Line 115... Line 152...
115
 
152
 
Line 116... Line 153...
116
 
153
 
117
public START
154
public START
-
 
155
public service_proc
Line 118... Line 156...
118
public service_proc
156
public version
119
 
157
 
120
extrn SysMsgBoardStr
158
extrn SysMsgBoardStr
121
extrn PciApi
159
extrn PciApi
122
extrn PciRead32
160
extrn PciRead32
123
extrn AllocKernelSpace
161
extrn AllocKernelSpace
124
extrn MapPage
162
extrn MapPage
-
 
163
extrn RegService
-
 
164
extrn SetHwCursor
125
extrn RegService
165
extrn HwCursorRestore
126
extrn SetHwCursor
166
extrn HwCursorCreate
Line 127... Line 167...
127
extrn LFBAddress
167
extrn LFBAddress
Line 135... Line 175...
135
section '.flat' code readable align 16
175
section '.flat' code readable align 16
Line 136... Line 176...
136
 
176
 
Line 137... Line -...
137
proc START stdcall, state:dword
-
 
138
 
177
proc START stdcall, state:dword
139
           mov eax, [state]
-
 
140
           cmp eax, 1
178
 
141
           je .entry
179
           cmp [state], 1
142
           jmp .exit
180
           jne .exit
143
.entry:
181
 
144
     if DEBUG
182
     if DEBUG
145
           mov esi, msgInit
183
           mov esi, msgInit
Line 146... Line 184...
146
           call SysMsgBoardStr
184
           call SysMsgBoardStr
147
     end if
185
     end if
148
 
186
 
Line 149... Line -...
149
           call detect_ati
-
 
150
	   test eax, eax
-
 
151
           jz .fail
-
 
152
 
-
 
153
           stdcall LoadFile, user_file
-
 
154
           test eax, eax
-
 
155
           jz @F
-
 
156
           mov [user_arrow], eax
187
           call detect_ati
157
@@:
188
           test eax, eax
158
           stdcall ati_init_cursor, [user_arrow]
189
           jz .fail
Line -... Line 190...
-
 
190
 
-
 
191
           call init_ati
-
 
192
           test eax, eax
-
 
193
           jz .fail
-
 
194
 
-
 
195
           xor eax, eax
-
 
196
           mov edi, cursors
-
 
197
           mov ecx, CURSOR_SIZE*16
-
 
198
           cld
-
 
199
           rep stosd
-
 
200
 
-
 
201
           not eax
-
 
202
           mov [cursor_map], eax
-
 
203
           mov [cursor_map+4], eax
159
 
204
           mov edx, cursor_map
160
           call init_ati
205
           mov [cursor_start], edx
161
           test eax, eax
206
           add edx, 4
-
 
207
           mov [cursor_end], edx
162
           jz .fail
208
 
163
 
209
           stdcall RegService, sz_ati_srv, service_proc
164
           stdcall RegService, sz_ati_srv, service_proc
210
           test eax, eax
165
           test eax, eax
211
           jz .fail
166
           jz .fail
212
           mov dword [SetHwCursor], drvCursorPos ;enable hardware cursor
167
           mov ebx, SetHwCursor
213
           mov dword [HwCursorRestore], drv_restore
168
           mov dword [ebx], drvCursorPos ;enable hardware cursor
214
           mov dword [HwCursorCreate], ati_cursor
169
	   ret
215
           ret
Line 170... Line 216...
170
.fail:
216
.fail:
171
     if DEBUG
217
     if DEBUG
172
	   mov esi, msgFail
218
           mov esi, msgFail
173
           call SysMsgBoardStr
219
           call SysMsgBoardStr
174
     end if
220
     end if
175
 
221
 
Line 176... Line 222...
176
.exit:
222
.exit:
177
           xor eax, eax
223
           xor eax, eax
Line 238... Line 284...
238
	   je .found
284
           je .found
239
           add edi, 4
285
           add edi, 4
240
	   jmp @B
286
           jmp @B
241
 
287
 
Line -... Line 288...
-
 
288
.next:
242
.next:	   inc [devfn]
289
           inc [devfn]
243
	   cmp [devfn], 256
290
           cmp [devfn], 256
244
	   jb  .next_dev
291
           jb  .next_dev
245
	   mov eax, [bus]
292
           mov eax, [bus]
246
	   inc eax
293
           inc eax
247
	   mov [bus], eax
294
           mov [bus], eax
Line 294... Line 341...
294
           shl ebx,20
341
           shl ebx,20
295
           or eax, ebx
342
           or eax, ebx
296
           mov [edi+0x50], eax
343
           mov [edi+0x50], eax
297
 
344
 
Line 298... Line -...
298
           pushd 0
-
 
299
           pushd 0
-
 
300
           call drvCursorPos
-
 
301
           call drvShowCursor
345
           call drvShowCursor
302
           xor eax, eax
346
           xor eax, eax
303
           inc eax
347
           inc eax
304
.fail:
348
.fail:
305
           ret
349
           ret
306
endp
350
endp
Line 307... Line 351...
307
 
351
 
-
 
352
align 4
-
 
353
drv_restore:
-
 
354
           ret 8
-
 
355
 
308
align 4
356
align 4
309
drvShowCursor:
357
drvShowCursor:
Line 310... Line 358...
310
           mov edi, [ati_io]
358
           mov edi, [ati_io]
311
 
359
 
312
           mov eax, [edi+RD_CRTC_GEN_CNTL]
360
           mov eax, [edi+RD_CRTC_GEN_CNTL]
313
           bts eax,16
361
           bts eax,16
Line 314... Line 362...
314
           mov [edi+RD_CRTC_GEN_CNTL], eax
362
           mov [edi+RD_CRTC_GEN_CNTL], eax
315
           ret
-
 
316
 
-
 
317
align 4
363
           ret
-
 
364
 
318
drvCursorPos:
365
align 4
319
           push ebp
366
proc drvCursorPos stdcall, hcursor:dword, x:dword, y:dword
Line 320... Line 367...
320
           mov ebp, esp
367
 
321
           mov eax, 80000000h
368
           mov eax, 80000000h
322
           wrr CUR_HORZ_VERT_OFF, eax
369
           wrr CUR_HORZ_VERT_OFF, eax
323
 
370
 
324
           mov eax, [ebp+8]
371
           mov eax, [x]
Line -... Line 372...
-
 
372
           shl eax, 16
325
           shl eax, 16
373
           or eax, [y]
-
 
374
           or eax, 80000000h
326
           or eax, [ebp+12]
375
           wrr CUR_HORZ_VERT_POSN, eax
-
 
376
 
-
 
377
           mov esi, [hcursor]
-
 
378
           mov eax, [esi+CURSOR.base]
-
 
379
           sub eax, LFBAddress 
-
 
380
           wrr CUR_OFFSET, eax
-
 
381
           ret
-
 
382
endp
-
 
383
 
-
 
384
align 4
-
 
385
proc video_alloc
-
 
386
 
-
 
387
           pushfd
-
 
388
           cli
-
 
389
           mov ebx, [cursor_start]
-
 
390
           mov ecx, [cursor_end]
-
 
391
.l1:
-
 
392
           bsf eax,[ebx];
-
 
393
           jnz .found
-
 
394
           add ebx,4
-
 
395
           cmp ebx, ecx
-
 
396
           jb .l1
-
 
397
           popfd
-
 
398
           xor eax,eax
-
 
399
           ret
-
 
400
.found:
-
 
401
           btr [ebx], eax
-
 
402
           popfd
-
 
403
 
-
 
404
           mov [cursor_start],ebx
-
 
405
           sub ebx, cursor_map
-
 
406
           shl ebx, 3
-
 
407
           add eax,ebx
-
 
408
 
-
 
409
           shl eax,14
-
 
410
           add eax, LFBAddress+CURSOR_IMAGE_OFFSET
-
 
411
           ret
-
 
412
endp
-
 
413
 
-
 
414
align 4
-
 
415
proc ati_cursor stdcall, hcursor:dword, src:dword, flags:dword
-
 
416
 
-
 
417
           stdcall video_alloc
-
 
418
 
-
 
419
           mov edi, [hcursor]
-
 
420
           mov [edi+CURSOR.base], eax
-
 
421
 
-
 
422
           mov esi, [src]
-
 
423
           mov ebx, [flags]
-
 
424
           cmp bx, LOAD_INDIRECT
-
 
425
           je .indirect
-
 
426
 
-
 
427
           movzx ecx, word [esi+10]
-
 
428
           movzx edx, word [esi+12]
-
 
429
           mov [edi+CURSOR.hot_x], ecx
327
           or eax, 80000000h
430
           mov [edi+CURSOR.hot_y], edx
-
 
431
 
-
 
432
           stdcall ati_init_cursor, eax, esi
-
 
433
           mov eax, [hcursor]
-
 
434
.fail:
-
 
435
           ret
-
 
436
.indirect:
-
 
437
           shr ebx, 16
-
 
438
           movzx ecx, bh
-
 
439
           movzx edx, bl
-
 
440
           mov [eax+CURSOR.hot_x], ecx
-
 
441
           mov [eax+CURSOR.hot_y], edx
-
 
442
 
-
 
443
           xchg edi, eax
-
 
444
           push edi
-
 
445
           mov ecx, 64*64
-
 
446
           xor eax,eax
-
 
447
           rep stosd
-
 
448
 
-
 
449
           mov esi, [src]
-
 
450
           pop edi
-
 
451
           mov ebx, 32
-
 
452
           cld
-
 
453
@@:
-
 
454
           mov ecx, 32
328
           wrr CUR_HORZ_VERT_POSN, eax
455
           rep movsd
-
 
456
           add edi, 128
Line 329... Line 457...
329
 
457
           dec ebx
330
           mov eax, CURSOR_IMAGE_OFFSET
458
           jnz @B
331
           wrr CUR_OFFSET, eax
459
           mov eax, [hcursor]
332
           leave
460
           ret
333
           ret 8
461
endp
334
 
462
 
335
align 4
463
align 4
336
proc ati_init_cursor stdcall, arrow:dword
464
proc ati_init_cursor stdcall, dst:dword, src:dword
337
           locals
465
           locals
338
             rBase    dd ?
466
             rBase    dd ?
339
             pQuad    dd ?
467
             pQuad    dd ?
Line 340... Line -...
340
             pBits    dd ?
-
 
341
             pAnd     dd ?
-
 
342
             width    dd ?
468
             pBits    dd ?
343
             height   dd ?
469
             pAnd     dd ?
344
             counter  dd ?
-
 
345
           endl
470
             width    dd ?
-
 
471
             height   dd ?
-
 
472
             counter  dd ?
-
 
473
           endl
-
 
474
 
346
 
475
           mov esi, [src]
347
           cld
476
           add esi,[esi+18]
348
 
477
           mov eax,esi
349
           mov esi, [arrow]
478
 
350
           add esi,[esi+18d]
479
           cmp [esi+BI.biBitCount], 24
Line 413... Line 542...
413
           sub edi,128
542
           sub edi,128
414
           mov [rBase],edi
543
           mov [rBase],edi
415
           sub [height],1
544
           sub [height],1
416
           jnz .l1
545
           jnz .l1
417
 
546
           jmp .copy
-
 
547
 
-
 
548
.img_24:
-
 
549
           add eax, [esi]
-
 
550
           mov [pQuad],eax
-
 
551
           add eax, 0xC00
-
 
552
           mov [pAnd],eax
-
 
553
           mov eax,[esi+BI.biWidth]
-
 
554
           mov [width],eax
-
 
555
           mov ebx,[esi+BI.biHeight]
-
 
556
           shr ebx,1
-
 
557
           mov [height],ebx
-
 
558
 
-
 
559
           mov edi, pCursor
-
 
560
           add edi, 32*31*4
-
 
561
           mov [rBase],edi
-
 
562
 
-
 
563
           mov esi,[pAnd]
-
 
564
           mov ebx, [pQuad]
-
 
565
.row_24:
-
 
566
           mov eax, [esi]
-
 
567
           bswap eax
-
 
568
           mov [counter], 32
-
 
569
@@:
-
 
570
           xor edx, edx
-
 
571
           shl eax,1
-
 
572
           setc dl
-
 
573
           dec edx
-
 
574
 
-
 
575
           mov ecx, [ebx]
-
 
576
           and ecx, 0x00FFFFFF
-
 
577
           and ecx, edx
-
 
578
           and edx, 0xFF000000
-
 
579
           or edx, ecx
-
 
580
           mov [edi], edx
-
 
581
           add ebx, 3
-
 
582
           add edi, 4
-
 
583
           dec [counter]
-
 
584
           jnz @B
-
 
585
 
Line -... Line 586...
-
 
586
           add esi, 4
418
           mov edi, LFBAddress
587
           mov edi,[rBase]
-
 
588
           sub edi,128
-
 
589
           mov [rBase],edi
-
 
590
           sub [height],1
-
 
591
           jnz .row_24
-
 
592
.copy:
419
           add edi, CURSOR_IMAGE_OFFSET
593
           mov edi, [dst]
420
           mov ecx, 64*64
594
           mov ecx, 64*64
421
           xor eax,eax
595
           xor eax,eax
422
           rep stosd
596
           rep stosd
Line 423... Line 597...
423
 
597
 
424
           mov esi, pCursor
598
           mov esi, pCursor
425
           mov edi, LFBAddress
-
 
426
           add edi, CURSOR_IMAGE_OFFSET
599
           mov edi, [dst]
-
 
600
           mov ebx, 32
427
           mov ebx, 32
601
           cld
428
lc:
602
@@:
429
           mov ecx, 32
-
 
430
lb:
-
 
431
           mov eax, [esi]
-
 
432
           mov [edi], eax
-
 
433
           add esi, 4
-
 
434
           add edi, 4
-
 
435
           sub ecx, 1
603
           mov ecx, 32
436
           jnz lb
-
 
437
 
604
           rep movsd
438
           add edi, 128
605
           add edi, 128
439
           sub ebx, 1
606
           dec ebx
Line 440... Line 607...
440
           jnz lc
607
           jnz @B
441
 
608
 
Line 442... Line 609...
442
           ret
609
           ret
Line 570... Line 737...
570
 
737
 
Line 571... Line 738...
571
           ret
738
           ret
572
endp
739
endp
Line 573... Line -...
573
 
-
 
574
 
740
 
575
align 4
741
align 4
576
engSetupSolidFill:
742
engSetupSolidFill:
577
           push ebp
743
           push ebp
Line 639... Line 805...
639
        dd (R9800P  shl 16)+VID_ATI
805
        dd (R9800P  shl 16)+VID_ATI
640
        dd (R9800XT shl 16)+VID_ATI
806
        dd (R9800XT shl 16)+VID_ATI
641
        dd 0    ;terminator
807
        dd 0    ;terminator
642
 
808
 
Line 643... Line -...
643
;szKernel     db 'KERNEL', 0
-
 
644
sz_ati_srv   db 'ATI2D',0
809
version dd 0x00010001
645
user_file    db '/rd/1/user.cur',0
-
 
Line -... Line 810...
-
 
810
 
Line 646... Line 811...
646
 
811
sz_ati_srv   db 'HWCURSOR',0
647
 
812
 
648
msgInit      db 'detect hardware...',13,10,0
813
msgInit      db 'detect hardware...',13,10,0
Line 649... Line -...
649
msgPCI       db 'PCI accsess not supported',13,10,0
-
 
650
msgFail      db 'device not found',13,10,0
-
 
651
 
-
 
652
user_arrow   dd pArrow
-
 
653
 
-
 
Line 654... Line 814...
654
align 16
814
msgPCI       db 'PCI accsess not supported',13,10,0
Line 655... Line 815...
655
pArrow:
815
msgFail      db 'device not found',13,10,0
Line -... Line 816...
-
 
816
 
-
 
817
 
-
 
818
section '.data' data readable writable align 16
-
 
819
 
-
 
820
pCursor  db 4096 dup(?)
656
  file 'arrow.cur'
821
 
657
 
822
cursors        rb CURSOR_SIZE*64
658
section '.data' data readable writable align 16
823
cursor_map     rd 2