Subversion Repositories Kolibri OS

Rev

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