Subversion Repositories Kolibri OS

Rev

Rev 380 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
214 serge 1
 
2
3
 
4
include 'imports.inc'
281 serge 5
214 serge 6
 
227 serge 7
214 serge 8
 
9
10
 
227 serge 11
LOAD_FROM_MEM   equ 1
12
LOAD_INDIRECT   equ 2
13
LOAD_SYSTEM     equ 3
14
15
 
233 serge 16
17
 
227 serge 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
 
32
  BI BITMAPINFOHEADER
33
end virtual
34
35
 
36
{;common object header
281 serge 37
   .magic       dd ?   ;'CURS'
38
   .destroy     dd ?   ;internal destructor
39
   .fd          dd ?   ;next object in list
40
   .bk          dd ?   ;prev object in list
41
   .pid         dd ?   ;owner id
42
43
 
44
   .base        dd ?   ;allocated memory
45
   .hot_x       dd ?   ;hotspot coords
46
   .hot_y       dd ?
227 serge 47
}
48
virtual at 0
49
  CURSOR CURSOR
50
end virtual
51
52
 
281 serge 53
227 serge 54
 
214 serge 55
R9000       equ 0x4966  ;RV250
56
R9200       equ 0x5961  ;RV280
57
R9500       equ 0x4144  ;R300
58
R9500P      equ 0x4E45  ;R300
59
R9550       equ 0x4153  ;RV350
60
R9600       equ 0x4150  ;RV350
61
R9600XT     equ 0x4152  ;RV360
62
R9700P      equ 0x4E44  ;R300
63
R9800       equ 0x4E49  ;R350
64
R9800P      equ 0x4E48  ;R350
65
R9800XT     equ 0x4E4A  ;R360
66
67
 
378 serge 68
new_app_base    equ 0x80000000
69
SLOT_BASE       equ 0x0080000
380 serge 70
214 serge 71
 
72
PG_NOCACHE   equ 0x018
73
74
 
75
{  .handle           dd ?
76
   .io_code          dd ?
77
   .input            dd ?
78
   .inp_size         dd ?
79
   .output           dd ?
80
   .out_size         dd ?
81
}
82
83
 
84
  IOCTL IOCTL
85
end virtual
86
87
 
378 serge 88
RD_RB3D_CNTL            equ 1c3ch
89
214 serge 90
 
91
RD_CRTC_GEN_CNTL           equ 0050h
92
RD_CRTC_CUR_EN             equ 10000h
93
RD_DISPLAY_BASE_ADDR       equ 023ch
94
RD_DEFAULT_OFFSET          equ 16e0h
95
CUR_HORZ_VERT_OFF          equ 0268h
96
CUR_HORZ_VERT_POSN         equ 0264h
97
CUR_OFFSET                 equ 0260h
98
RD_RB3D_CNTL               equ 1c3ch
99
RD_RBBM_STATUS             equ 0e40h
100
RD_RBBM_FIFOCNT_MASK       equ 007fh
101
RD_RBBM_ACTIVE             equ 80000000h
102
RD_TIMEOUT                 equ 2000000
103
104
 
105
RD_DP_BRUSH_BKGD_CLR       equ 01478h
106
RD_DP_BRUSH_FRGD_CLR       equ 0147ch
107
RD_DP_SRC_BKGD_CLR         equ 015dch
108
RD_DP_SRC_FRGD_CLR         equ 015d8h
109
RD_DP_CNTL                 equ 016c0h
110
RD_DP_DATATYPE             equ 016c4h
111
RD_DP_WRITE_MASK           equ 016cch
112
RD_DP_SRC_SOURCE_MEMORY    equ (2 shl 24)
113
RD_DP_SRC_SOURCE_HOST_DATA equ (3 shl 24)
114
RD_DEFAULT_SC_BOTTOM_RIGHT equ 16e8h
115
RD_GMC_BRUSH_SOLID_COLOR   equ (13 shl 4)
116
RD_DEFAULT_SC_RIGHT_MAX    equ 1fffh
117
RD_DEFAULT_SC_BOTTOM_MAX   equ 1fff0000h
118
RD_GMC_DST_DATATYPE_SHIFT  equ 8
119
120
 
121
RD_ROP3_P                  equ 00f00000h
122
123
 
124
RD_RB2D_DSTCACHE_CTLSTAT   equ 0342ch
125
RD_RB2D_DC_FLUSH_ALL       equ 000fh
126
RD_RB2D_DC_BUSY            equ 80000000h
127
128
 
129
RD_GMC_SRC_DATATYPE_COLOR  equ (3 shl 12)
130
RD_GMC_CLR_CMP_CNTL_DIS    equ (1 shl 28)
131
RD_GMC_WR_MSK_DIS          equ (1 shl 30)
132
133
 
134
135
 
136
RD_SRC_PITCH_OFFSET        equ 1428h
137
138
 
139
RD_DST_Y_TOP_TO_BOTTOM     equ 2
140
RD_DST_Y_X                 equ 1438h
141
RD_DST_WIDTH_HEIGHT        equ 1598h
142
RD_DST_LINE_START          equ 1600h
143
RD_DST_LINE_END            equ 1604h
144
R300_MEM_NUM_CHANNELS_MASK equ 0003h
145
146
 
147
{
148
     mov edi, [ati_io]
149
     mov op1, [edi+op2]
150
}
151
152
 
153
{
154
     mov edi, [ati_io]
155
     mov dword [edi+dest], src
156
}
157
158
 
159
 
160
public service_proc
161
public version
227 serge 162
214 serge 163
 
164
165
 
166
DRV_EXIT  equ -1
167
168
 
169
170
 
171
172
 
227 serge 173
           jne .exit
174
175
 
214 serge 176
           mov esi, msgInit
177
           call SysMsgBoardStr
178
     end if
179
180
 
181
           test eax, eax
227 serge 182
           jz .fail
214 serge 183
184
 
185
           test eax, eax
186
           jz .fail
187
188
 
281 serge 189
           mov [cursor_map], eax
227 serge 190
           mov [cursor_map+4], eax
191
           mov edx, cursor_map
192
           mov [cursor_start], edx
193
           add edx, 8
281 serge 194
           mov [cursor_end], edx
227 serge 195
196
 
214 serge 197
           test eax, eax
198
           jz .fail
199
           mov dword [SetHwCursor], drvCursorPos ;enable hardware cursor
227 serge 200
           mov dword [HwCursorRestore], drv_restore
201
           mov dword [HwCursorCreate], ati_cursor
202
           ret
203
.fail:
214 serge 204
     if DEBUG
205
           mov esi, msgFail
227 serge 206
           call SysMsgBoardStr
214 serge 207
     end if
208
209
 
210
           xor eax, eax
211
;           mov ebx, SetHwCursor
227 serge 212
;           mov dword [ebx], eax    ;force disable hardware cursor
213
           ret
214 serge 214
endp
215
216
 
217
io_code    equ  IOCTL.io_code
218
input      equ  IOCTL.input
219
inp_size   equ  IOCTL.inp_size
220
output     equ  IOCTL.output
221
out_size   equ  IOCTL.out_size
222
223
 
224
proc service_proc stdcall, ioctl:dword
225
226
 
233 serge 227
           mov ebx, [edi+io_code]
228
           cmp ebx, VIDEO_FREE
229
           jne .fail
230
214 serge 231
 
233 serge 232
           call video_free
233
.fail:
234
           or eax, -1
378 serge 235
           ret
233 serge 236
endp
214 serge 237
238
 
239
restore   io_code
240
restore   input
241
restore   inp_size
242
restore   output
243
restore   out_size
244
245
 
246
proc detect_ati
247
           locals
227 serge 248
             last_bus dd ?
249
           endl
250
214 serge 251
 
227 serge 252
           mov [bus], eax
253
           inc eax
254
           call PciApi
214 serge 255
           cmp eax, -1
227 serge 256
           je .err
214 serge 257
258
 
227 serge 259
214 serge 260
 
261
           and [devfn], 0
227 serge 262
.next_dev:
214 serge 263
           stdcall PciRead32, [bus], [devfn], dword 0
264
           test eax, eax
227 serge 265
           jz .next
266
           cmp eax, -1
267
           je .next
268
214 serge 269
 
227 serge 270
@@:
214 serge 271
           mov ebx, [edi]
227 serge 272
           test ebx, ebx
273
           jz .next
274
214 serge 275
 
227 serge 276
           je .found
277
           add edi, 4
214 serge 278
           jmp @B
227 serge 279
214 serge 280
 
227 serge 281
           inc [devfn]
282
           cmp [devfn], 256
283
           jb  .next_dev
284
           mov eax, [bus]
285
           inc eax
286
           mov [bus], eax
287
           cmp eax, [last_bus]
288
           jna .next_bus
289
           xor eax, eax
290
           ret
291
.found:
214 serge 292
           xor eax, eax
227 serge 293
           inc eax
214 serge 294
           ret
227 serge 295
.err:
214 serge 296
           xor eax, eax
297
           ret
298
endp
299
300
 
301
proc init_ati
302
303
 
304
           test eax, eax
305
           jz .fail
306
307
 
308
309
 
310
           and eax, 0xFFFF0000
311
           mov esi, eax
312
313
 
314
           mov edx, 16
315
@@:
316
           stdcall MapPage,edi,esi,PG_SW+PG_NOCACHE
317
           add edi, 0x1000
227 serge 318
           add esi, 0x1000
214 serge 319
           dec edx
320
           jnz @B
321
322
 
323
           mov dword [edi+RD_RB3D_CNTL], 0
324
           call engRestore
325
326
 
327
           mov eax, [edi+0x50]
328
           mov ebx,3
329
           shl ebx,20
330
           not ebx
331
           and eax,ebx
332
           mov ebx, 2
333
           shl ebx,20
334
           or eax, ebx
335
           mov [edi+0x50], eax
336
337
 
338
           xor eax, eax
339
           inc eax
340
.fail:
341
           ret
342
endp
343
344
 
345
drv_restore:
227 serge 346
           ret 8
347
348
 
349
drvShowCursor:
214 serge 350
           mov edi, [ati_io]
351
352
 
353
           bts eax,16
354
           mov [edi+RD_CRTC_GEN_CNTL], eax
355
           ret
356
357
 
358
proc drvCursorPos stdcall, hcursor:dword, x:dword, y:dword
227 serge 359
           pushfd
233 serge 360
           cli
361
227 serge 362
 
233 serge 363
           xor edx, edx
364
           mov esi, [hcursor]
365
           mov ebx, [x]
366
           mov ecx, [y]
367
214 serge 368
 
233 serge 369
           jnc @F
370
           neg ebx
371
           mov eax, ebx
372
           shl eax, 16
214 serge 373
           xor ebx, ebx
233 serge 374
@@:
375
           sub ecx, [esi+CURSOR.hot_y]
376
           jnc @F
377
           neg ecx
378
           mov ax, cx
379
           mov edx, ecx
380
           xor ecx, ecx
381
@@:
382
           or eax, 0x80000000
383
           wrr CUR_HORZ_VERT_OFF, eax
384
214 serge 385
 
233 serge 386
           mov bx, cx
387
           or ebx, 0x80000000
388
           wrr CUR_HORZ_VERT_POSN, ebx
389
390
 
391
           add edx, [esi+CURSOR.base]
392
           sub edx, LFBAddress
393
           wrr CUR_OFFSET, edx
394
           popfd
395
           ret
227 serge 396
endp
397
214 serge 398
 
399
proc video_alloc
227 serge 400
401
 
402
           cli
403
           mov ebx, [cursor_start]
404
           mov ecx, [cursor_end]
405
.l1:
406
           bsf eax,[ebx];
407
           jnz .found
408
           add ebx,4
409
           cmp ebx, ecx
410
           jb .l1
411
           popfd
412
           xor eax,eax
413
           ret
414
.found:
415
           btr [ebx], eax
416
           popfd
417
418
 
419
           sub ebx, cursor_map
420
           lea eax,[eax+ebx*8]
254 serge 421
227 serge 422
 
423
           add eax, LFBAddress+CURSOR_IMAGE_OFFSET
424
           ret
425
endp
426
427
 
428
video_free:
233 serge 429
           pushfd
430
           cli
431
           sub eax, LFBAddress+CURSOR_IMAGE_OFFSET
432
           shr eax, 14
433
           mov ebx, cursor_map
434
           bts [ebx], eax
435
           shr eax, 3
436
           and eax, not 3
437
           add eax, ebx
438
           cmp [cursor_start], eax
439
           ja @f
440
           popfd
441
           ret
442
@@:
443
           mov [cursor_start], eax
444
           popfd
445
           ret
446
447
 
281 serge 448
;  eax= pid
449
;  ebx= src
450
;  ecx= flags
451
452
 
233 serge 453
ati_cursor:
281 serge 454
.src     equ esp
455
.flags   equ esp+4
456
.hcursor equ esp+8
457
227 serge 458
 
281 serge 459
           push ecx
460
           push ebx
461
227 serge 462
 
281 serge 463
           mov eax, CURSOR_SIZE
464
           call CreateObject
465
           test eax, eax
466
           jz .fail
467
468
 
469
470
 
471
           mov [eax+CURSOR.magic], 'CURS'
472
           mov [eax+CURSOR.destroy], destroy_cursor
473
           mov [eax+CURSOR.hot_x], ebx
474
           mov [eax+CURSOR.hot_y], ebx
475
476
 
477
           mov edi, [.hcursor]
478
           mov [edi+CURSOR.base], eax
227 serge 479
480
 
281 serge 481
           mov ebx, [.flags]
482
           cmp bx, LOAD_INDIRECT
227 serge 483
           je .indirect
484
485
 
486
           movzx edx, word [esi+12]
487
           mov [edi+CURSOR.hot_x], ecx
488
           mov [edi+CURSOR.hot_y], edx
489
490
 
491
           mov eax, [.hcursor]
281 serge 492
.fail:
227 serge 493
           add esp, 12
281 serge 494
           ret
227 serge 495
.indirect:
496
           shr ebx, 16
497
           movzx ecx, bh
498
           movzx edx, bl
499
           mov [edi+CURSOR.hot_x], ecx
233 serge 500
           mov [edi+CURSOR.hot_y], edx
501
227 serge 502
 
281 serge 503
           mov ebx, eax
504
           mov ecx, 64*64
227 serge 505
           xor eax,eax
506
           cld
281 serge 507
           rep stosd
227 serge 508
           mov edi, ebx
281 serge 509
227 serge 510
 
281 serge 511
           mov ebx, 32
227 serge 512
           cld
513
@@:
514
           mov ecx, 32
515
           rep movsd
516
           add edi, 128
517
           dec ebx
518
           jnz @B
519
           mov eax, [.hcursor]
281 serge 520
           add esp, 12
521
           ret
227 serge 522
523
 
524
destroy_cursor:
281 serge 525
526
 
527
           mov eax, [eax+CURSOR.base]
528
           call video_free
529
           pop eax
530
531
 
532
           ret
533
534
 
535
proc ati_init_cursor stdcall, dst:dword, src:dword
227 serge 536
           locals
214 serge 537
             rBase    dd ?
538
             pQuad    dd ?
539
             pBits    dd ?
540
             pAnd     dd ?
541
             width    dd ?
542
             height   dd ?
543
             counter  dd ?
544
           endl
545
546
 
227 serge 547
           add esi,[esi+18]
548
           mov eax,esi
549
214 serge 550
 
227 serge 551
           je .img_24
552
           cmp [esi+BI.biBitCount], 8
233 serge 553
           je .img_8
554
           cmp [esi+BI.biBitCount], 4
555
           je .img_4
556
557
 
558
           add eax, [esi]
559
           mov [pQuad],eax
560
           add eax,8
561
           mov [pBits],eax
562
           add eax, 128
563
           mov [pAnd],eax
564
           mov eax,[esi+4]
565
           mov [width],eax
566
           mov ebx,[esi+8]
567
           shr ebx,1
568
           mov [height],ebx
569
570
 
571
           add edi, 32*31*4
572
           mov [rBase],edi
573
574
 
575
.l21:
576
           mov ebx, [pBits]
577
           mov ebx, [ebx]
578
           bswap ebx
579
           mov eax, [pAnd]
580
           mov eax, [eax]
581
           bswap eax
582
           mov [counter], 32
583
@@:
584
           xor edx, edx
585
           shl eax,1
586
           setc dl
587
           dec edx
588
589
 
590
           shl ebx,1
591
           setc cl
592
           mov ecx, [esi+ecx*4]
593
           and ecx, edx
594
           and edx, 0xFF000000
595
           or edx, ecx
596
           mov [edi], edx
597
598
 
599
           dec [counter]
600
           jnz @B
601
602
 
603
           add [pAnd], 4
604
           mov edi,[rBase]
605
           sub edi,128
606
           mov [rBase],edi
607
           sub [height],1
608
           jnz .l21
609
           jmp .copy
610
.img_4:
227 serge 611
           add eax, [esi]
214 serge 612
           mov [pQuad],eax
613
           add eax,64
614
           mov [pBits],eax
615
           add eax, 0x200
616
           mov [pAnd],eax
617
           mov eax,[esi+4]
618
           mov [width],eax
619
           mov ebx,[esi+8]
620
           shr ebx,1
621
           mov [height],ebx
622
623
 
624
           add edi, 32*31*4
625
           mov [rBase],edi
626
627
 
233 serge 628
           mov ebx, [pBits]
214 serge 629
.l4:
233 serge 630
           mov eax, [pAnd]
631
           mov eax, [eax]
632
           bswap eax
214 serge 633
           mov [counter], 16
634
@@:
635
           xor edx, edx
636
           shl eax,1
637
           setc dl
638
           dec edx
639
640
 
233 serge 641
           and cl, 0xF0
642
           shr ecx, 2
214 serge 643
           mov ecx, [esi+ecx]
233 serge 644
           and ecx, edx
214 serge 645
           and edx, 0xFF000000
646
           or edx, ecx
647
           mov [edi], edx
648
649
 
650
           shl eax,1
651
           setc dl
652
           dec edx
653
654
 
233 serge 655
           and cl, 0x0F
656
           mov ecx, [esi+ecx*4]
657
           and ecx, edx
214 serge 658
           and edx, 0xFF000000
659
           or edx, ecx
660
           mov [edi+4], edx
661
662
 
663
           add edi, 8
664
           dec [counter]
665
           jnz @B
666
667
 
233 serge 668
           mov edi,[rBase]
214 serge 669
           sub edi,128
670
           mov [rBase],edi
671
           sub [height],1
672
           jnz .l4
233 serge 673
           jmp .copy
227 serge 674
.img_8:
233 serge 675
           add eax, [esi]
676
           mov [pQuad],eax
677
           add eax,1024
678
           mov [pBits],eax
679
           add eax, 1024
680
           mov [pAnd],eax
681
           mov eax,[esi+4]
682
           mov [width],eax
683
           mov ebx,[esi+8]
684
           shr ebx,1
685
           mov [height],ebx
686
214 serge 687
 
233 serge 688
           add edi, 32*31*4
689
           mov [rBase],edi
690
691
 
692
           mov ebx, [pBits]
693
.l81:
694
           mov eax, [pAnd]
695
           mov eax, [eax]
696
           bswap eax
697
           mov [counter], 32
698
@@:
699
           xor edx, edx
700
           shl eax,1
701
           setc dl
702
           dec edx
703
704
 
705
           mov ecx, [esi+ecx*4]
706
           and ecx, edx
707
           and edx, 0xFF000000
708
           or edx, ecx
709
           mov [edi], edx
710
711
 
712
           add edi, 4
713
           dec [counter]
714
           jnz @B
715
716
 
717
           mov edi,[rBase]
718
           sub edi,128
719
           mov [rBase],edi
720
           sub [height],1
721
           jnz .l81
722
           jmp .copy
723
.img_24:
227 serge 724
           add eax, [esi]
725
           mov [pQuad],eax
726
           add eax, 0xC00
727
           mov [pAnd],eax
728
           mov eax,[esi+BI.biWidth]
729
           mov [width],eax
730
           mov ebx,[esi+BI.biHeight]
731
           shr ebx,1
732
           mov [height],ebx
733
734
 
735
           add edi, 32*31*4
736
           mov [rBase],edi
737
738
 
739
           mov ebx, [pQuad]
740
.row_24:
741
           mov eax, [esi]
742
           bswap eax
743
           mov [counter], 32
744
@@:
745
           xor edx, edx
746
           shl eax,1
747
           setc dl
748
           dec edx
749
750
 
751
           and ecx, 0x00FFFFFF
752
           and ecx, edx
753
           and edx, 0xFF000000
754
           or edx, ecx
755
           mov [edi], edx
756
           add ebx, 3
757
           add edi, 4
758
           dec [counter]
759
           jnz @B
760
761
 
762
           mov edi,[rBase]
763
           sub edi,128
764
           mov [rBase],edi
765
           sub [height],1
766
           jnz .row_24
767
.copy:
768
           mov edi, [dst]
769
           mov ecx, 64*64
214 serge 770
           xor eax,eax
771
           rep stosd
772
773
 
774
           mov edi, [dst]
227 serge 775
           mov ebx, 32
214 serge 776
           cld
227 serge 777
@@:
778
           mov ecx, 32
214 serge 779
           rep movsd
227 serge 780
           add edi, 128
214 serge 781
           dec ebx
227 serge 782
           jnz @B
783
           ret
214 serge 784
endp
785
786
 
787
proc engFlush
788
789
 
790
791
 
792
           or eax,RD_RB2D_DC_FLUSH_ALL
793
           mov [edi+RD_RB2D_DSTCACHE_CTLSTAT],eax
794
795
 
796
@@:
797
           mov eax,[edi+RD_RB2D_DSTCACHE_CTLSTAT]
798
           and eax, RD_RB2D_DC_BUSY
799
           jz .exit
800
801
 
802
           jnz @B
803
.exit:
804
           ret
805
endp
806
807
 
808
engWaitForFifo:
809
cnt equ bp+8
810
           push ebp
811
           mov ebp, esp
812
813
 
814
815
 
816
@@:
817
           mov eax, [edi+RD_RBBM_STATUS]
818
           and eax, RD_RBBM_FIFOCNT_MASK
819
           cmp eax, [ebp+8]
820
           jae .exit
821
822
 
823
           jmp @B
824
825
 
826
           leave
827
           ret 4
828
829
 
830
proc engWaitForIdle
831
832
 
227 serge 833
           call engWaitForFifo
834
214 serge 835
 
227 serge 836
           mov ecx ,RD_TIMEOUT
837
@@:
214 serge 838
           mov eax, [edi+RD_RBBM_STATUS]
227 serge 839
           and eax,RD_RBBM_ACTIVE
840
           jz .exit
841
214 serge 842
 
227 serge 843
           jnz @B
844
.exit:
214 serge 845
           call engFlush
227 serge 846
           ret
847
endp
214 serge 848
849
 
850
proc engRestore
851
852
 
853
;             call engWaitForFifo
854
855
 
856
857
 
227 serge 858
           call engWaitForFifo
859
214 serge 860
 
861
862
 
863
           shr eax, 10d
864
           or eax,(64d shl 22d)
865
           mov [edi+RD_DEFAULT_OFFSET],eax
866
           mov [edi+RD_SRC_PITCH_OFFSET],eax
867
           mov [edi+RD_DST_PITCH_OFFSET],eax
868
869
 
870
           call engWaitForFifo
871
872
 
873
           mov eax, [edi+RD_DP_DATATYPE]
874
           btr eax, 29d
875
           mov [edi+RD_DP_DATATYPE],eax
876
877
 
878
           call engWaitForFifo
879
880
 
881
           mov dword [edi+RD_DEFAULT_SC_BOTTOM_RIGHT],\
882
                     (RD_DEFAULT_SC_RIGHT_MAX or RD_DEFAULT_SC_BOTTOM_MAX)
883
884
 
885
           call engWaitForFifo
886
887
 
888
           mov dword [edi+RD_DP_GUI_MASTER_CNTL],\
889
                     (RD_GMC_BRUSH_SOLID_COLOR or \
890
                      RD_GMC_SRC_DATATYPE_COLOR or \
891
                     (6 shl RD_GMC_DST_DATATYPE_SHIFT) or \
892
                      RD_GMC_CLR_CMP_CNTL_DIS or \
893
                      RD_ROP3_P or \
894
                      RD_GMC_WR_MSK_DIS)
895
896
 
897
 
898
           call engWaitForFifo
899
900
 
901
902
 
903
           mov dword [edi+RD_DST_LINE_END], 0
904
           mov dword [edi+RD_DP_BRUSH_FRGD_CLR], 808000ffh
905
           mov dword [edi+RD_DP_BRUSH_BKGD_CLR], 002020ffh
906
           mov dword [edi+RD_DP_SRC_FRGD_CLR],   808000ffh
907
           mov dword [edi+RD_DP_SRC_BKGD_CLR],   004000ffh
908
           mov dword [edi+RD_DP_WRITE_MASK],0ffffffffh
909
910
 
911
912
 
913
endp
914
915
 
916
engSetupSolidFill:
917
           push ebp
918
           mov ebp, esp
919
920
 
921
           call engWaitForFifo
922
923
 
924
925
 
926
           wrr RD_DP_BRUSH_FRGD_CLR,eax
927
928
 
929
           mov dword [edi+RD_DP_CNTL],(RD_DST_X_LEFT_TO_RIGHT or RD_DST_Y_TOP_TO_BOTTOM)
930
           leave
931
           ret 4
932
933
 
934
 
935
drvSolidFill:
936
;x:word,y:word,w:word,h:word,color:dword
937
            push ebp
938
            mov ebp, esp
939
x equ ebp+8
940
y equ ebp+12
941
w equ ebp+16
942
h equ ebp+20
943
color equ ebp+24
944
945
 
227 serge 946
           call engSetupSolidFill
947
214 serge 948
 
227 serge 949
           call engWaitForFifo
950
214 serge 951
 
227 serge 952
214 serge 953
 
227 serge 954
           mov ebx, [x]
955
           shl eax,16
956
           or eax, ebx
957
214 serge 958
 
227 serge 959
           mov edx,  [h]
960
           shl ecx,16
961
           or ecx, edx
962
           mov [edi+RD_DST_Y_X], eax
963
           mov [edi+RD_DST_WIDTH_HEIGHT], ecx
964
           call engFlush
965
           leave
966
           ret 20
967
214 serge 968
 
969
devices dd (R8500   shl 16)+VID_ATI
970
        dd (R9000   shl 16)+VID_ATI
971
        dd (R9200   shl 16)+VID_ATI
972
        dd (R9500   shl 16)+VID_ATI
973
        dd (R9500P  shl 16)+VID_ATI
974
        dd (R9550   shl 16)+VID_ATI
975
        dd (R9600   shl 16)+VID_ATI
976
        dd (R9600XT shl 16)+VID_ATI
977
        dd (R9700P  shl 16)+VID_ATI
978
        dd (R9800   shl 16)+VID_ATI
979
        dd (R9800P  shl 16)+VID_ATI
980
        dd (R9800XT shl 16)+VID_ATI
981
        dd 0    ;terminator
982
983
 
378 serge 984
214 serge 985
 
227 serge 986
214 serge 987
 
988
msgPCI       db 'PCI accsess not supported',13,10,0
989
msgFail      db 'device not found',13,10,0
990
msg_neg      db 'neg ecx',13,10,0
233 serge 991
buff         db 8 dup(0)
992
             db 13,10, 0
993
214 serge 994
 
995
996
 
997
998
 
227 serge 999
cursor_start   rd 1
1000
cursor_end     rd 1
1001
214 serge 1002
 
227 serge 1003
devfn          dd ?
1004
ati_io         dd ?
1005