Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
431 serge 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
214 serge 7
 
8
format MS COFF
9
 
10
include 'proc32.inc'
281 serge 11
include 'imports.inc'
214 serge 12
 
729 serge 13
R500_HW2D       equ 0
14
 
465 serge 15
API_VERSION     equ 0x01000100
214 serge 16
 
465 serge 17
DEBUG           equ 1
214 serge 18
 
630 serge 19
STRIDE          equ 8
20
 
465 serge 21
VID_ATI         equ 0x1002
22
 
227 serge 23
LOAD_FROM_FILE  equ 0
24
LOAD_FROM_MEM   equ 1
25
LOAD_INDIRECT   equ 2
26
LOAD_SYSTEM     equ 3
27
 
465 serge 28
SRV_GETVERSION  equ 0
233 serge 29
 
227 serge 30
struc BITMAPINFOHEADER {
31
  .biSize          dd ? ; DWORD
32
  .biWidth         dd ? ; LONG
33
  .biHeight        dd ? ; LONG
34
  .biPlanes        dw ? ; WORD
35
  .biBitCount      dw ? ; WORD
36
  .biCompression   dd ? ; DWORD
37
  .biSizeImage     dd ? ; DWORD
38
  .biXPelsPerMeter dd ? ; LONG
39
  .biYPelsPerMeter dd ? ; LONG
40
  .biClrUsed       dd ? ; DWORD
41
  .biClrImportant  dd ? ; DWORD
42
}
43
 
44
virtual at 0
45
  BI BITMAPINFOHEADER
46
end virtual
47
 
48
struc CURSOR
281 serge 49
{;common object header
50
   .magic       dd ?   ;'CURS'
51
   .destroy     dd ?   ;internal destructor
52
   .fd          dd ?   ;next object in list
53
   .bk          dd ?   ;prev object in list
54
   .pid         dd ?   ;owner id
55
 
56
 ;cursor data
57
   .base        dd ?   ;allocated memory
58
   .hot_x       dd ?   ;hotspot coords
227 serge 59
   .hot_y       dd ?
60
}
61
virtual at 0
62
  CURSOR CURSOR
63
end virtual
64
 
281 serge 65
CURSOR_SIZE     equ 32
227 serge 66
 
465 serge 67
OS_BASE         equ 0x80000000
68
SLOT_BASE       equ (OS_BASE+0x0080000)
630 serge 69
LFB_BASE        equ 0xFE000000
214 serge 70
 
71
PG_SW        equ 0x003
72
PG_NOCACHE   equ 0x018
73
 
74
struc IOCTL
75
{  .handle           dd ?
76
   .io_code          dd ?
77
   .input            dd ?
78
   .inp_size         dd ?
79
   .output           dd ?
80
   .out_size         dd ?
81
}
82
 
83
virtual at 0
84
  IOCTL IOCTL
85
end virtual
86
 
378 serge 87
;MMIO                   equ 0F9000000h
630 serge 88
RD_RB3D_CNTL               equ 1c3ch
214 serge 89
 
90
RD_MEM_CNTL                equ 0140h
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
630 serge 95
 
214 serge 96
CUR_HORZ_VERT_OFF          equ 0268h
97
CUR_HORZ_VERT_POSN         equ 0264h
98
CUR_OFFSET                 equ 0260h
630 serge 99
 
100
 
214 serge 101
RD_RB3D_CNTL               equ 1c3ch
102
RD_RBBM_STATUS             equ 0e40h
103
RD_RBBM_FIFOCNT_MASK       equ 007fh
104
RD_RBBM_ACTIVE             equ 80000000h
105
RD_TIMEOUT                 equ 2000000
106
 
107
RD_DP_GUI_MASTER_CNTL      equ 0146ch
108
RD_DP_BRUSH_BKGD_CLR       equ 01478h
109
RD_DP_BRUSH_FRGD_CLR       equ 0147ch
110
RD_DP_SRC_BKGD_CLR         equ 015dch
111
RD_DP_SRC_FRGD_CLR         equ 015d8h
112
RD_DP_CNTL                 equ 016c0h
113
RD_DP_DATATYPE             equ 016c4h
114
RD_DP_WRITE_MASK           equ 016cch
115
RD_DP_SRC_SOURCE_MEMORY    equ (2 shl 24)
116
RD_DP_SRC_SOURCE_HOST_DATA equ (3 shl 24)
117
RD_DEFAULT_SC_BOTTOM_RIGHT equ 16e8h
118
RD_GMC_BRUSH_SOLID_COLOR   equ (13 shl 4)
119
RD_DEFAULT_SC_RIGHT_MAX    equ 1fffh
120
RD_DEFAULT_SC_BOTTOM_MAX   equ 1fff0000h
121
RD_GMC_DST_DATATYPE_SHIFT  equ 8
122
 
123
RD_ROP3_S                  equ 00cc0000h
124
RD_ROP3_P                  equ 00f00000h
125
 
126
RD_RB2D_DSTCACHE_MODE      equ 03428h
127
RD_RB2D_DSTCACHE_CTLSTAT   equ 0342ch
128
RD_RB2D_DC_FLUSH_ALL       equ 000fh
129
RD_RB2D_DC_BUSY            equ 80000000h
130
 
131
RD_GMC_BRUSH_SOLID_COLOR   equ 000000D0h
132
RD_GMC_SRC_DATATYPE_COLOR  equ (3 shl 12)
133
RD_GMC_CLR_CMP_CNTL_DIS    equ (1 shl 28)
134
RD_GMC_WR_MSK_DIS          equ (1 shl 30)
135
 
136
cmdSolidFill               equ 73f036d0h
137
 
138
RD_DST_PITCH_OFFSET        equ 142ch
139
RD_SRC_PITCH_OFFSET        equ 1428h
140
 
141
RD_DST_X_LEFT_TO_RIGHT     equ 1
142
RD_DST_Y_TOP_TO_BOTTOM     equ 2
143
RD_DST_Y_X                 equ 1438h
144
RD_DST_WIDTH_HEIGHT        equ 1598h
145
RD_DST_LINE_START          equ 1600h
146
RD_DST_LINE_END            equ 1604h
147
R300_MEM_NUM_CHANNELS_MASK equ 0003h
148
 
149
macro rdr op1, op2
150
{
151
     mov edi, [ati_io]
152
     mov op1, [edi+op2]
153
}
154
 
791 serge 155
macro BEGIN_RING
156
{
157
      mov edi, [rhd.ring_base]
158
      mov edx, [rhd.ring_wp]
159
}
160
 
161
macro COMMIT_RING
162
{
163
        and edx, 0x1FFF
164
        mov [rhd.ring_wp], edx
165
 
166
        lock add [esp], dword 0            ; Flush writes to ring
167
 
168
        wrr RADEON_CP_RB_WPTR, edx
169
        rdr eax, RADEON_CP_RB_RPTR
170
}
171
 
172
macro OUT_PACKET0 reg, count
173
{
174
     mov eax, (RADEON_CP_PACKET0 + (count shl 16) + (reg shr 2))
175
     mov [edi+edx*4], eax
176
     inc edx
177
}
178
 
179
macro OUT_PACKET3 pkt, count                                              \
180
{
181
     mov eax, (RADEON_CP_PACKET3 or pkt or (count shl 16))
182
     mov [edi+edx*4], eax
183
     inc edx
184
}
185
 
186
macro OUT_RING  val
187
{
188
     mov eax, val
189
     mov [edi+edx*4], eax
190
     inc edx
191
}
192
 
193
macro RADEON_WAIT_UNTIL_IDLE
194
{
195
     OUT_PACKET0 RADEON_WAIT_UNTIL, 0
196
     OUT_RING RADEON_WAIT_2D_IDLECLEAN + \
197
              RADEON_WAIT_3D_IDLECLEAN + \
198
              RADEON_WAIT_HOST_IDLECLEAN
199
}
200
 
201
macro RADEON_PURGE_CACHE
202
{
203
     OUT_PACKET0 R5XX_RB3D_DSTCACHE_CTLSTAT, 0
204
     OUT_RING  R5XX_RB3D_DC_FLUSH_ALL
205
}
206
 
207
macro RADEON_PURGE_ZCACHE
208
{
209
     OUT_PACKET0 RADEON_RB3D_ZCACHE_CTLSTAT, 0
210
     OUT_RING RADEON_RB3D_ZC_FLUSH_ALL
211
}
212
 
214 serge 213
macro wrr dest, src
214
{
215
     mov edi, [ati_io]
216
     mov dword [edi+dest], src
217
}
218
 
729 serge 219
macro rmask dest, val, mask
220
{
221
     mov edi, [ati_io]
222
     mov eax, [edi+dest]
223
     and eax, not mask
224
     or eax, (val and mask)
225
     mov [edi+dest], eax
226
}
214 serge 227
 
228
public START
229
public service_proc
227 serge 230
public version
214 serge 231
 
232
CURSOR_IMAGE_OFFSET  equ 0x00500000
233
 
234
DRV_ENTRY equ 1
235
DRV_EXIT  equ -1
236
 
237
section '.flat' code readable align 16
238
 
239
proc START stdcall, state:dword
240
 
227 serge 241
           cmp [state], 1
630 serge 242
           jne .restore
227 serge 243
 
214 serge 244
     if DEBUG
245
           mov esi, msgInit
246
           call SysMsgBoardStr
247
     end if
248
 
249
           call detect_ati
227 serge 250
           test eax, eax
214 serge 251
           jz .fail
252
 
630 serge 253
           mov ebx, [SelectHwCursor]
254
           mov ecx, [SetHwCursor]
255
           mov edx, [HwCursorRestore]
256
           mov esi, [HwCursorCreate]
214 serge 257
 
630 serge 258
           mov [oldSelect], ebx
259
           mov [oldSet], ecx
260
           mov [oldRestore], edx
261
           mov [oldCreate], esi
262
 
263
           call eax
264
 
281 serge 265
           or eax, -1
227 serge 266
           mov [cursor_map], eax
267
           mov [cursor_map+4], eax
268
           mov edx, cursor_map
269
           mov [cursor_start], edx
281 serge 270
           add edx, 8
227 serge 271
           mov [cursor_end], edx
272
 
214 serge 273
           stdcall RegService, sz_ati_srv, service_proc
274
           test eax, eax
630 serge 275
           jz .restore
276
 
732 serge 277
if R500_HW2D
278
           stdcall RegService, sz_HDraw_srv, r500_HDraw
279
 
280
           mov ebx, START
281
           and ebx, -4096
282
           mov [eax+0x20], ebx
283
           mov [eax+0x24], dword 0                       ;hack
284
end if
630 serge 285
           mov ebx, [fnSelect]
286
           mov ecx, [fnSet]
287
 
288
           mov [SelectHwCursor], ebx
289
           mov [SetHwCursor], ecx
227 serge 290
           mov dword [HwCursorRestore], drv_restore
291
           mov dword [HwCursorCreate], ati_cursor
630 serge 292
 
227 serge 293
           ret
630 serge 294
.restore:
295
           mov eax, [oldSelect]
296
           mov ebx, [oldSet]
297
           mov ecx, [oldRestore]
298
           mov edx, [oldCreate]
299
 
300
           mov [SelectHwCursor], eax
301
           mov [SetHwCursor], ebx
302
           mov [HwCursorRestore], ecx
303
           mov [HwCursorCreate], edx
304
 
305
           xor eax, eax
306
           ret
307
 
214 serge 308
.fail:
309
     if DEBUG
227 serge 310
           mov esi, msgFail
214 serge 311
           call SysMsgBoardStr
312
     end if
313
 
314
           xor eax, eax
315
           ret
316
endp
317
 
318
handle     equ  IOCTL.handle
319
io_code    equ  IOCTL.io_code
320
input      equ  IOCTL.input
321
inp_size   equ  IOCTL.inp_size
322
output     equ  IOCTL.output
323
out_size   equ  IOCTL.out_size
324
 
325
align 4
326
proc service_proc stdcall, ioctl:dword
327
 
465 serge 328
           mov ebx, [ioctl]
329
           cmp [ebx+io_code], SRV_GETVERSION
233 serge 330
           jne .fail
214 serge 331
 
465 serge 332
           mov eax, [ebx+output]
333
           cmp [ebx+out_size], 4
334
           jne .fail
335
           mov [eax], dword API_VERSION
336
           xor eax, eax
337
           ret
233 serge 338
.fail:
378 serge 339
           or eax, -1
233 serge 340
           ret
214 serge 341
endp
342
 
343
restore   handle
344
restore   io_code
345
restore   input
346
restore   inp_size
347
restore   output
348
restore   out_size
349
 
350
align 4
351
proc detect_ati
227 serge 352
           locals
353
             last_bus dd ?
354
           endl
214 serge 355
 
227 serge 356
           xor eax, eax
357
           mov [bus], eax
358
           inc eax
214 serge 359
           call PciApi
227 serge 360
           cmp eax, -1
214 serge 361
           je .err
362
 
227 serge 363
           mov [last_bus], eax
214 serge 364
 
365
.next_bus:
227 serge 366
           and [devfn], 0
214 serge 367
.next_dev:
368
           stdcall PciRead32, [bus], [devfn], dword 0
227 serge 369
           test eax, eax
370
           jz .next
371
           cmp eax, -1
372
           je .next
214 serge 373
 
227 serge 374
           mov edi, devices
214 serge 375
@@:
227 serge 376
           mov ebx, [edi]
377
           test ebx, ebx
378
           jz .next
214 serge 379
 
227 serge 380
           cmp eax, ebx
381
           je .found
630 serge 382
           add edi, STRIDE
227 serge 383
           jmp @B
384
.next:
385
           inc [devfn]
386
           cmp [devfn], 256
387
           jb  .next_dev
388
           mov eax, [bus]
389
           inc eax
390
           mov [bus], eax
391
           cmp eax, [last_bus]
392
           jna .next_bus
393
           xor eax, eax
394
           ret
214 serge 395
.found:
630 serge 396
           mov eax, [edi+4]
227 serge 397
           ret
214 serge 398
.err:
399
           xor eax, eax
400
           ret
401
endp
402
 
403
align 4
630 serge 404
proc init_r200
741 serge 405
           stdcall PciRead32, [bus], [devfn], dword 0x18
406
           stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE)
214 serge 407
           test eax, eax
408
           jz .fail
409
 
410
           mov [ati_io], eax
741 serge 411
           mov edi, eax
214 serge 412
 
413
           mov dword [edi+RD_RB3D_CNTL], 0
414
           call engRestore
415
 
416
           mov edi, [ati_io]
417
           mov eax, [edi+0x50]
418
           mov ebx,3
419
           shl ebx,20
420
           not ebx
421
           and eax,ebx
422
           mov ebx, 2
423
           shl ebx,20
424
           or eax, ebx
425
           mov [edi+0x50], eax
426
 
630 serge 427
           call r200_ShowCursor
428
 
429
           mov [fnSelect], r200_SelectCursor
430
           mov [fnSet], r200_SetCursor
431
 
214 serge 432
           xor eax, eax
433
           inc eax
434
.fail:
435
           ret
436
endp
437
 
729 serge 438
if R500_HW2D
439
  include 'r500hw.inc'
440
end if
441
 
214 serge 442
align 4
630 serge 443
proc init_r500
444
 
741 serge 445
           stdcall PciRead32, [bus], [devfn], dword 0x18
446
           stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE)
630 serge 447
           test eax, eax
448
           jz .fail
449
 
450
           mov [ati_io], eax
451
 
452
           mov [fnSelect], r500_SelectCursor
453
           mov [fnSet], r500_SetCursor
454
 
455
           rdr eax, 0x6110
456
           mov [r500_LFB], eax
457
 
729 serge 458
if R500_HW2D
459
           call R5xx2DInit
460
end if
630 serge 461
           wrr 0x6410, 0x001F001F
462
           wrr 0x6400, dword (3 shl 8)
463
 
464
           xor eax, eax
465
           inc eax
466
.fail:
467
           ret
468
endp
469
 
470
 
471
align 4
227 serge 472
drv_restore:
473
           ret 8
474
 
630 serge 475
 
227 serge 476
align 4
630 serge 477
proc r500_SelectCursor stdcall,hcursor:dword
478
 
479
           mov esi, [hcursor]
480
 
481
           mov edx, [esi+CURSOR.base]
482
           sub edx, LFB_BASE
483
           add edx, [r500_LFB]
484
           wrr 0x6408, edx
485
 
486
           mov eax, [esi+CURSOR.hot_x]
487
           shl eax, 16
488
           mov ax, word [esi+CURSOR.hot_y]
489
           wrr 0x6418, eax
490
           ret
491
endp
492
 
493
align 4
494
proc r500_SetCursor stdcall, hcursor:dword, x:dword, y:dword
495
           pushfd
496
           cli
497
 
498
           mov esi, [hcursor]
214 serge 499
           mov edi, [ati_io]
500
 
630 serge 501
           mov eax, [x]
502
           shl eax, 16
503
           mov ax, word [y]
504
 
505
           mov [edi+0x6414], eax
506
           or dword [edi+0x6400], 1
507
 
729 serge 508
if 0
509
           stdcall R5xxSetupForSolidFill, 0x80808080, 3, 0xFFFFFFFF
510
           stdcall R5xxSolidFillRect, 100,100, 100,100
511
 
512
           stdcall R5xxSetupForSolidFill, 0xFFFF0000, 3, 0xFFFFFFFF
513
           stdcall R5xxSolidFillRect, 110,110, 80,80
514
 
515
           stdcall R5xxSetupForSolidFill, 0xFF00FF00, 3, 0xFFFFFFFF
516
           stdcall R5xxSolidFillRect, 120,120, 60,60
517
 
518
           stdcall R5xxSetupForSolidFill, 0xFF0000FF, 3, 0xFFFFFFFF
519
           stdcall R5xxSolidFillRect, 130,130, 40,40
520
end if
521
 
630 serge 522
           popfd
523
           ret
524
endp
525
 
526
align 4
527
r500_ShowCursor:
528
 
529
           mov edi, [ati_io]
530
           or dword [edi+0x6400], 1
531
           ret
532
 
533
align 4
534
r200_ShowCursor:
535
           mov edi, [ati_io]
536
 
214 serge 537
           mov eax, [edi+RD_CRTC_GEN_CNTL]
538
           bts eax,16
539
           mov [edi+RD_CRTC_GEN_CNTL], eax
540
           ret
541
 
630 serge 542
 
214 serge 543
align 4
630 serge 544
proc r200_SelectCursor stdcall,hcursor:dword
545
 
546
           ret
547
endp
548
 
549
align 4
550
proc r200_SetCursor stdcall, hcursor:dword, x:dword, y:dword
233 serge 551
           pushfd
552
           cli
227 serge 553
 
233 serge 554
           xor eax, eax
555
           xor edx, edx
556
           mov esi, [hcursor]
557
           mov ebx, [x]
558
           mov ecx, [y]
214 serge 559
 
233 serge 560
           sub ebx, [esi+CURSOR.hot_x]
561
           jnc @F
562
           neg ebx
563
           mov eax, ebx
214 serge 564
           shl eax, 16
233 serge 565
           xor ebx, ebx
566
@@:
567
           sub ecx, [esi+CURSOR.hot_y]
568
           jnc @F
569
           neg ecx
570
           mov ax, cx
571
           mov edx, ecx
572
           xor ecx, ecx
573
@@:
574
           or eax, 0x80000000
575
           wrr CUR_HORZ_VERT_OFF, eax
214 serge 576
 
233 serge 577
           shl ebx, 16
578
           mov bx, cx
579
           or ebx, 0x80000000
580
           wrr CUR_HORZ_VERT_POSN, ebx
581
 
582
           shl edx, 8
583
           add edx, [esi+CURSOR.base]
584
           sub edx, LFBAddress
585
           wrr CUR_OFFSET, edx
586
           popfd
227 serge 587
           ret
588
endp
214 serge 589
 
590
align 4
227 serge 591
proc video_alloc
592
 
593
           pushfd
594
           cli
595
           mov ebx, [cursor_start]
596
           mov ecx, [cursor_end]
597
.l1:
598
           bsf eax,[ebx];
599
           jnz .found
600
           add ebx,4
601
           cmp ebx, ecx
602
           jb .l1
603
           popfd
604
           xor eax,eax
605
           ret
606
.found:
607
           btr [ebx], eax
608
           popfd
609
 
610
           mov [cursor_start],ebx
611
           sub ebx, cursor_map
254 serge 612
           lea eax,[eax+ebx*8]
227 serge 613
 
614
           shl eax,14
615
           add eax, LFBAddress+CURSOR_IMAGE_OFFSET
616
           ret
617
endp
618
 
619
align 4
233 serge 620
video_free:
621
           pushfd
622
           cli
623
           sub eax, LFBAddress+CURSOR_IMAGE_OFFSET
624
           shr eax, 14
625
           mov ebx, cursor_map
626
           bts [ebx], eax
627
           shr eax, 3
628
           and eax, not 3
629
           add eax, ebx
630
           cmp [cursor_start], eax
631
           ja @f
632
           popfd
633
           ret
634
@@:
635
           mov [cursor_start], eax
636
           popfd
637
           ret
638
 
281 serge 639
; param
640
;  eax= pid
641
;  ebx= src
642
;  ecx= flags
643
 
233 serge 644
align 4
281 serge 645
ati_cursor:
646
.src     equ esp
647
.flags   equ esp+4
648
.hcursor equ esp+8
227 serge 649
 
281 serge 650
           sub esp, 4          ;space for .hcursor
651
           push ecx
652
           push ebx
227 serge 653
 
281 serge 654
           mov ebx, eax
655
           mov eax, CURSOR_SIZE
656
           call CreateObject
657
           test eax, eax
658
           jz .fail
659
 
660
           mov [.hcursor],eax
661
 
662
           xor ebx, ebx
663
           mov [eax+CURSOR.magic], 'CURS'
664
           mov [eax+CURSOR.destroy], destroy_cursor
665
           mov [eax+CURSOR.hot_x], ebx
666
           mov [eax+CURSOR.hot_y], ebx
667
 
668
           call video_alloc
669
           mov edi, [.hcursor]
227 serge 670
           mov [edi+CURSOR.base], eax
671
 
281 serge 672
           mov esi, [.src]
673
           mov ebx, [.flags]
227 serge 674
           cmp bx, LOAD_INDIRECT
675
           je .indirect
676
 
677
           movzx ecx, word [esi+10]
678
           movzx edx, word [esi+12]
679
           mov [edi+CURSOR.hot_x], ecx
680
           mov [edi+CURSOR.hot_y], edx
681
 
682
           stdcall ati_init_cursor, eax, esi
281 serge 683
           mov eax, [.hcursor]
227 serge 684
.fail:
281 serge 685
           add esp, 12
227 serge 686
           ret
687
.indirect:
688
           shr ebx, 16
689
           movzx ecx, bh
690
           movzx edx, bl
233 serge 691
           mov [edi+CURSOR.hot_x], ecx
692
           mov [edi+CURSOR.hot_y], edx
227 serge 693
 
281 serge 694
           mov edi, eax
695
           mov ebx, eax
227 serge 696
           mov ecx, 64*64
697
           xor eax,eax
281 serge 698
           cld
227 serge 699
           rep stosd
281 serge 700
           mov edi, ebx
227 serge 701
 
281 serge 702
           mov esi, [.src]
227 serge 703
           mov ebx, 32
704
           cld
705
@@:
706
           mov ecx, 32
707
           rep movsd
708
           add edi, 128
709
           dec ebx
710
           jnz @B
281 serge 711
           mov eax, [.hcursor]
712
           add esp, 12
227 serge 713
           ret
714
 
715
align 4
281 serge 716
destroy_cursor:
717
 
718
           push eax
719
           mov eax, [eax+CURSOR.base]
720
           call video_free
721
           pop eax
722
 
723
           call DestroyObject
724
           ret
725
 
726
align 4
227 serge 727
proc ati_init_cursor stdcall, dst:dword, src:dword
214 serge 728
           locals
729
             rBase    dd ?
730
             pQuad    dd ?
731
             pBits    dd ?
732
             pAnd     dd ?
733
             width    dd ?
734
             height   dd ?
735
             counter  dd ?
736
           endl
737
 
227 serge 738
           mov esi, [src]
739
           add esi,[esi+18]
740
           mov eax,esi
214 serge 741
 
227 serge 742
           cmp [esi+BI.biBitCount], 24
743
           je .img_24
233 serge 744
           cmp [esi+BI.biBitCount], 8
745
           je .img_8
746
           cmp [esi+BI.biBitCount], 4
747
           je .img_4
748
 
749
.img_2:
750
           add eax, [esi]
751
           mov [pQuad],eax
752
           add eax,8
753
           mov [pBits],eax
754
           add eax, 128
755
           mov [pAnd],eax
756
           mov eax,[esi+4]
757
           mov [width],eax
758
           mov ebx,[esi+8]
759
           shr ebx,1
760
           mov [height],ebx
761
 
762
           mov edi, pCursor
763
           add edi, 32*31*4
764
           mov [rBase],edi
765
 
766
           mov esi,[pQuad]
767
.l21:
768
           mov ebx, [pBits]
769
           mov ebx, [ebx]
770
           bswap ebx
771
           mov eax, [pAnd]
772
           mov eax, [eax]
773
           bswap eax
774
           mov [counter], 32
775
@@:
776
           xor edx, edx
777
           shl eax,1
778
           setc dl
779
           dec edx
780
 
781
           xor ecx, ecx
782
           shl ebx,1
783
           setc cl
784
           mov ecx, [esi+ecx*4]
785
           and ecx, edx
786
           and edx, 0xFF000000
787
           or edx, ecx
788
           mov [edi], edx
789
 
790
           add edi, 4
791
           dec [counter]
792
           jnz @B
793
 
794
           add [pBits], 4
795
           add [pAnd], 4
796
           mov edi,[rBase]
797
           sub edi,128
798
           mov [rBase],edi
799
           sub [height],1
800
           jnz .l21
801
           jmp .copy
227 serge 802
.img_4:
214 serge 803
           add eax, [esi]
804
           mov [pQuad],eax
805
           add eax,64
806
           mov [pBits],eax
807
           add eax, 0x200
808
           mov [pAnd],eax
809
           mov eax,[esi+4]
810
           mov [width],eax
811
           mov ebx,[esi+8]
812
           shr ebx,1
813
           mov [height],ebx
814
 
815
           mov edi, pCursor
816
           add edi, 32*31*4
817
           mov [rBase],edi
818
 
233 serge 819
           mov esi,[pQuad]
214 serge 820
           mov ebx, [pBits]
233 serge 821
.l4:
822
           mov eax, [pAnd]
823
           mov eax, [eax]
214 serge 824
           bswap eax
825
           mov [counter], 16
826
@@:
827
           xor edx, edx
828
           shl eax,1
829
           setc dl
830
           dec edx
831
 
233 serge 832
           movzx ecx, byte [ebx]
833
           and cl, 0xF0
214 serge 834
           shr ecx, 2
233 serge 835
           mov ecx, [esi+ecx]
214 serge 836
           and ecx, edx
837
           and edx, 0xFF000000
838
           or edx, ecx
839
           mov [edi], edx
840
 
841
           xor edx, edx
842
           shl eax,1
843
           setc dl
844
           dec edx
845
 
233 serge 846
           movzx ecx, byte [ebx]
847
           and cl, 0x0F
848
           mov ecx, [esi+ecx*4]
214 serge 849
           and ecx, edx
850
           and edx, 0xFF000000
851
           or edx, ecx
852
           mov [edi+4], edx
853
 
854
           inc ebx
855
           add edi, 8
856
           dec [counter]
857
           jnz @B
858
 
233 serge 859
           add [pAnd], 4
214 serge 860
           mov edi,[rBase]
861
           sub edi,128
862
           mov [rBase],edi
863
           sub [height],1
233 serge 864
           jnz .l4
227 serge 865
           jmp .copy
233 serge 866
.img_8:
867
           add eax, [esi]
868
           mov [pQuad],eax
869
           add eax,1024
870
           mov [pBits],eax
871
           add eax, 1024
872
           mov [pAnd],eax
873
           mov eax,[esi+4]
874
           mov [width],eax
875
           mov ebx,[esi+8]
876
           shr ebx,1
877
           mov [height],ebx
214 serge 878
 
233 serge 879
           mov edi, pCursor
880
           add edi, 32*31*4
881
           mov [rBase],edi
882
 
883
           mov esi,[pQuad]
884
           mov ebx, [pBits]
885
.l81:
886
           mov eax, [pAnd]
887
           mov eax, [eax]
888
           bswap eax
889
           mov [counter], 32
890
@@:
891
           xor edx, edx
892
           shl eax,1
893
           setc dl
894
           dec edx
895
 
896
           movzx ecx,  byte [ebx]
897
           mov ecx, [esi+ecx*4]
898
           and ecx, edx
899
           and edx, 0xFF000000
900
           or edx, ecx
901
           mov [edi], edx
902
 
903
           inc ebx
904
           add edi, 4
905
           dec [counter]
906
           jnz @B
907
 
908
           add [pAnd], 4
909
           mov edi,[rBase]
910
           sub edi,128
911
           mov [rBase],edi
912
           sub [height],1
913
           jnz .l81
914
           jmp .copy
227 serge 915
.img_24:
916
           add eax, [esi]
917
           mov [pQuad],eax
918
           add eax, 0xC00
919
           mov [pAnd],eax
920
           mov eax,[esi+BI.biWidth]
921
           mov [width],eax
922
           mov ebx,[esi+BI.biHeight]
923
           shr ebx,1
924
           mov [height],ebx
925
 
926
           mov edi, pCursor
927
           add edi, 32*31*4
928
           mov [rBase],edi
929
 
930
           mov esi,[pAnd]
931
           mov ebx, [pQuad]
932
.row_24:
933
           mov eax, [esi]
934
           bswap eax
935
           mov [counter], 32
936
@@:
937
           xor edx, edx
938
           shl eax,1
939
           setc dl
940
           dec edx
941
 
942
           mov ecx, [ebx]
943
           and ecx, 0x00FFFFFF
944
           and ecx, edx
945
           and edx, 0xFF000000
946
           or edx, ecx
947
           mov [edi], edx
948
           add ebx, 3
949
           add edi, 4
950
           dec [counter]
951
           jnz @B
952
 
953
           add esi, 4
954
           mov edi,[rBase]
955
           sub edi,128
956
           mov [rBase],edi
957
           sub [height],1
958
           jnz .row_24
959
.copy:
960
           mov edi, [dst]
214 serge 961
           mov ecx, 64*64
962
           xor eax,eax
963
           rep stosd
964
 
965
           mov esi, pCursor
227 serge 966
           mov edi, [dst]
214 serge 967
           mov ebx, 32
227 serge 968
           cld
969
@@:
214 serge 970
           mov ecx, 32
227 serge 971
           rep movsd
214 serge 972
           add edi, 128
227 serge 973
           dec ebx
974
           jnz @B
214 serge 975
           ret
976
endp
977
 
978
align 4
979
proc engFlush
980
 
981
           mov edi, [ati_io]
982
 
983
           mov eax, [edi+RD_RB2D_DSTCACHE_CTLSTAT]
984
           or eax,RD_RB2D_DC_FLUSH_ALL
985
           mov [edi+RD_RB2D_DSTCACHE_CTLSTAT],eax
986
 
987
           mov ecx, RD_TIMEOUT
988
@@:
989
           mov eax,[edi+RD_RB2D_DSTCACHE_CTLSTAT]
990
           and eax, RD_RB2D_DC_BUSY
991
           jz .exit
992
 
993
           sub ecx,1
994
           jnz @B
995
.exit:
996
           ret
997
endp
998
 
630 serge 999
 
214 serge 1000
align 4
1001
engWaitForFifo:
1002
cnt equ bp+8
1003
           push ebp
1004
           mov ebp, esp
1005
 
1006
           mov edi, [ati_io]
1007
 
1008
           mov ecx, RD_TIMEOUT
1009
@@:
1010
           mov eax, [edi+RD_RBBM_STATUS]
1011
           and eax, RD_RBBM_FIFOCNT_MASK
1012
           cmp eax, [ebp+8]
1013
           jae .exit
1014
 
1015
           sub ecx,1
1016
           jmp @B
1017
 
1018
.exit:
1019
           leave
1020
           ret 4
1021
 
1022
align 4
1023
proc engWaitForIdle
1024
 
227 serge 1025
           push dword 64
1026
           call engWaitForFifo
214 serge 1027
 
227 serge 1028
           mov edi, [ati_io]
1029
           mov ecx ,RD_TIMEOUT
214 serge 1030
@@:
227 serge 1031
           mov eax, [edi+RD_RBBM_STATUS]
1032
           and eax,RD_RBBM_ACTIVE
1033
           jz .exit
214 serge 1034
 
227 serge 1035
           sub ecx,1
1036
           jnz @B
214 serge 1037
.exit:
227 serge 1038
           call engFlush
1039
           ret
214 serge 1040
endp
1041
 
630 serge 1042
 
214 serge 1043
align 4
1044
proc engRestore
1045
 
1046
;             push dword 1
1047
;             call engWaitForFifo
1048
 
1049
;             mov dword  [MMIO+RD_RB2D_DSTCACHE_MODE], 0
1050
 
227 serge 1051
           push dword 3
1052
           call engWaitForFifo
214 serge 1053
 
1054
           mov edi, [ati_io]
1055
 
1056
           mov eax, [edi+RD_DISPLAY_BASE_ADDR]
1057
           shr eax, 10d
1058
           or eax,(64d shl 22d)
1059
           mov [edi+RD_DEFAULT_OFFSET],eax
1060
           mov [edi+RD_SRC_PITCH_OFFSET],eax
1061
           mov [edi+RD_DST_PITCH_OFFSET],eax
1062
 
1063
           push dword 1
1064
           call engWaitForFifo
1065
 
1066
           mov edi, [ati_io]
1067
           mov eax, [edi+RD_DP_DATATYPE]
1068
           btr eax, 29d
1069
           mov [edi+RD_DP_DATATYPE],eax
1070
 
1071
           push dword 1
1072
           call engWaitForFifo
1073
 
1074
           mov edi, [ati_io]
1075
           mov dword [edi+RD_DEFAULT_SC_BOTTOM_RIGHT],\
1076
                     (RD_DEFAULT_SC_RIGHT_MAX or RD_DEFAULT_SC_BOTTOM_MAX)
1077
 
1078
           push dword 1
1079
           call engWaitForFifo
1080
 
1081
           mov edi, [ati_io]
1082
           mov dword [edi+RD_DP_GUI_MASTER_CNTL],\
1083
                     (RD_GMC_BRUSH_SOLID_COLOR or \
1084
                      RD_GMC_SRC_DATATYPE_COLOR or \
1085
                     (6 shl RD_GMC_DST_DATATYPE_SHIFT) or \
1086
                      RD_GMC_CLR_CMP_CNTL_DIS or \
1087
                      RD_ROP3_P or \
1088
                      RD_GMC_WR_MSK_DIS)
1089
 
1090
 
1091
           push dword 7
1092
           call engWaitForFifo
1093
 
1094
           mov edi, [ati_io]
1095
 
1096
           mov dword [edi+RD_DST_LINE_START],0
1097
           mov dword [edi+RD_DST_LINE_END], 0
1098
           mov dword [edi+RD_DP_BRUSH_FRGD_CLR], 808000ffh
1099
           mov dword [edi+RD_DP_BRUSH_BKGD_CLR], 002020ffh
1100
           mov dword [edi+RD_DP_SRC_FRGD_CLR],   808000ffh
1101
           mov dword [edi+RD_DP_SRC_BKGD_CLR],   004000ffh
1102
           mov dword [edi+RD_DP_WRITE_MASK],0ffffffffh
1103
 
1104
           call engWaitForIdle
1105
 
1106
           ret
1107
endp
1108
 
1109
 
1110
 
630 serge 1111
align 4
1112
dword2str:
1113
      mov  esi, hex_buff
1114
      mov ecx, -8
1115
@@:
1116
      rol eax, 4
1117
      mov ebx, eax
1118
      and ebx, 0x0F
1119
      mov bl, [ebx+hexletters]
1120
      mov [8+esi+ecx], bl
1121
      inc ecx
1122
      jnz @B
1123
      ret
214 serge 1124
 
630 serge 1125
hexletters   db '0123456789ABCDEF'
1126
hex_buff     db 8 dup(0),13,10,0
214 serge 1127
 
669 andrew_pro 1128
R200M       equ 0x5a62  ;R300
640 andrew_pro 1129
R7000       equ 0x5159  ;R200
749 Lrz 1130
R750M       equ 0x4c57  ;M7 mobile rv200
630 serge 1131
R8500       equ 0x514C  ;R200
1132
R9000       equ 0x4966  ;RV250
1133
R9200       equ 0x5961  ;RV280
1134
R9200SE     equ 0x5964  ;RV280
1135
R9500       equ 0x4144  ;R300
1136
R9500P      equ 0x4E45  ;R300
1137
R9550       equ 0x4153  ;RV350
1138
R9600       equ 0x4150  ;RV350
1139
R9600XT     equ 0x4152  ;RV360
1140
R9700P      equ 0x4E44  ;R300
1141
R9800       equ 0x4E49  ;R350
1142
R9800P      equ 0x4E48  ;R350
1143
R9800XT     equ 0x4E4A  ;R360
214 serge 1144
 
1145
 
1146
align 4
1147
 
640 andrew_pro 1148
devices:
669 andrew_pro 1149
        dd (R200M   shl 16)+VID_ATI, init_r200   ;R300
1150
        dd (R7000   shl 16)+VID_ATI, init_r200
749 Lrz 1151
        dd (R750M   shl 16)+VID_ATI, init_r200   ;M7
669 andrew_pro 1152
        dd (R8500   shl 16)+VID_ATI, init_r200
630 serge 1153
        dd (R9000   shl 16)+VID_ATI, init_r200
639 serge 1154
        dd (0x514D  shl 16)+VID_ATI, init_r200   ;R200     9100
1155
 
630 serge 1156
        dd (R9200   shl 16)+VID_ATI, init_r200
1157
        dd (R9200SE shl 16)+VID_ATI, init_r200
639 serge 1158
 
1159
        dd (0x5960  shl 16)+VID_ATI, init_r200   ;RV280    9250
1160
 
630 serge 1161
        dd (R9500   shl 16)+VID_ATI, init_r200
1162
        dd (R9500P  shl 16)+VID_ATI, init_r200
1163
        dd (R9550   shl 16)+VID_ATI, init_r200
214 serge 1164
 
630 serge 1165
        dd (R9600   shl 16)+VID_ATI, init_r200
1166
        dd (R9600XT shl 16)+VID_ATI, init_r200
1167
        dd (0x4155  shl 16)+VID_ATI, init_r200   ;RV350    9600
1168
        dd (0x4151  shl 16)+VID_ATI, init_r200   ;RV350    9600
1169
        dd (0x4E51  shl 16)+VID_ATI, init_r200   ;RV350    9600
214 serge 1170
 
630 serge 1171
        dd (R9700P  shl 16)+VID_ATI, init_r200
214 serge 1172
 
630 serge 1173
        dd (0x4148  shl 16)+VID_ATI, init_r200   ;R350    9800
1174
        dd (R9800   shl 16)+VID_ATI, init_r200
1175
        dd (R9800P  shl 16)+VID_ATI, init_r200
1176
        dd (R9800XT shl 16)+VID_ATI, init_r200
214 serge 1177
 
630 serge 1178
        dd (0x5B60  shl 16)+VID_ATI, init_r200   ;RV370    X300/X550
1179
        dd (0x5B63  shl 16)+VID_ATI, init_r200   ;RV370    X550
1180
        dd (0x5B62  shl 16)+VID_ATI, init_r200   ;RV380x   X600
1181
        dd (0x3E50  shl 16)+VID_ATI, init_r200   ;RV380    X600/X550
214 serge 1182
 
630 serge 1183
        dd (0x5B4F  shl 16)+VID_ATI, init_r200   ;RV410    X700
1184
        dd (0x5B4D  shl 16)+VID_ATI, init_r200   ;RV410    X700
1185
        dd (0x5B4B  shl 16)+VID_ATI, init_r200   ;RV410    X700
1186
        dd (0x5B4C  shl 16)+VID_ATI, init_r200   ;RV410    X700
1187
 
1188
        dd (0x4a49  shl 16)+VID_ATI, init_r200   ;R420     X800 PRO/GTO
1189
        dd (0x4a4B  shl 16)+VID_ATI, init_r200   ;R420     X800
1190
        dd (0x5549  shl 16)+VID_ATI, init_r200   ;R423     X800
1191
        dd (0x4a4A  shl 16)+VID_ATI, init_r200   ;R420     X800
1192
        dd (0x554F  shl 16)+VID_ATI, init_r200   ;R430     X800
1193
        dd (0x554D  shl 16)+VID_ATI, init_r200   ;R430     X800
1194
        dd (0x554E  shl 16)+VID_ATI, init_r200   ;R430     X800
1195
        dd (0x5D57  shl 16)+VID_ATI, init_r200   ;R423     X800 XT
1196
        dd (0x4A50  shl 16)+VID_ATI, init_r200   ;R420     X800 XT
1197
        dd (0x554A  shl 16)+VID_ATI, init_r200   ;R423     X800 XT
1198
        dd (0x5D4F  shl 16)+VID_ATI, init_r200   ;R423     X800/X850
1199
        dd (0x554B  shl 16)+VID_ATI, init_r200   ;R423     X800 GT
1200
 
1201
        dd (0x4B4B  shl 16)+VID_ATI, init_r200   ;R481     X850
1202
        dd (0x4B49  shl 16)+VID_ATI, init_r200   ;R481     X850
1203
        dd (0x4B4C  shl 16)+VID_ATI, init_r200   ;R481     X850
1204
 
1205
        dd (0x5D4D  shl 16)+VID_ATI, init_r200   ;R480     X850
1206
        dd (0x5D52  shl 16)+VID_ATI, init_r200   ;R480     X850
1207
 
1208
        dd (0x791E  shl 16)+VID_ATI, init_r500   ;RS690   X1200
1209
 
1210
        dd (0x7140  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1211
        dd (0x7142  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1212
        dd (0x7146  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1213
        dd (0x714D  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1214
        dd (0x714E  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1215
 
1216
        dd (0x7183  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1217
        dd (0x7187  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1218
        dd (0x718F  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1219
 
1220
        dd (0x7143  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1221
        dd (0x7147  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1222
        dd (0x715F  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1223
        dd (0x7193  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1224
        dd (0x719F  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1225
 
1226
        dd (0x71C0  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1227
        dd (0x71C1  shl 16)+VID_ATI, init_r500   ;RV535   X1650
1228
        dd (0x71C2  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1229
        dd (0x71C3  shl 16)+VID_ATI, init_r500   ;RV535   X1600
1230
        dd (0x71C6  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1231
        dd (0x71C7  shl 16)+VID_ATI, init_r500   ;RV534   X1650
1232
 
1233
        dd (0x7181  shl 16)+VID_ATI, init_r500   ;RV515   X1600
1234
        dd (0x71CD  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1235
 
1236
        dd (0x7291  shl 16)+VID_ATI, init_r500   ;R580    X1650
1237
        dd (0x7293  shl 16)+VID_ATI, init_r500   ;R580    X1650
1238
 
1239
        dd (0x7100  shl 16)+VID_ATI, init_r500   ;RV520   X1800
1240
        dd (0x7109  shl 16)+VID_ATI, init_r500   ;RV520   X1800
1241
        dd (0x710A  shl 16)+VID_ATI, init_r500   ;RV520   X1800 GTO
1242
 
1243
        dd (0x7249  shl 16)+VID_ATI, init_r500   ;RV580   X1900
1244
        dd (0x724B  shl 16)+VID_ATI, init_r500   ;RV580   X1900 GT
1245
 
1246
        dd (0x7240  shl 16)+VID_ATI, init_r500   ;RV580   X1950
1247
        dd (0x7244  shl 16)+VID_ATI, init_r500   ;RV580   X1950
1248
        dd (0x7248  shl 16)+VID_ATI, init_r500   ;RV580   X1950
1249
 
1250
        dd (0x7288  shl 16)+VID_ATI, init_r500   ;R580    X1950 GT
1251
        dd (0x7280  shl 16)+VID_ATI, init_r500   ;R580    X1950 PRO
1252
 
1253
        dd (0x94C3  shl 16)+VID_ATI, init_r500   ;RV610   HD 2400 PRO
1254
        dd (0x94C1  shl 16)+VID_ATI, init_r500   ;RV610   HD 2400 XT
1255
 
1256
        dd (0x9589  shl 16)+VID_ATI, init_r500   ;RV630   HD 2600 PRO
1257
        dd (0x958A  shl 16)+VID_ATI, init_r500   ;RV630   HD 2600 X2
1258
        dd (0x9588  shl 16)+VID_ATI, init_r500   ;RV630   HD 2600 XT
1259
 
1260
        dd (0x9403  shl 16)+VID_ATI, init_r500   ;R600    HD 2900 PRO
1261
        dd (0x9409  shl 16)+VID_ATI, init_r500   ;R600    HD 2900 XT
1262
 
1263
 
214 serge 1264
        dd 0    ;terminator
1265
 
465 serge 1266
version      dd (5 shl 16) or (API_VERSION and 0xFFFF)
214 serge 1267
 
729 serge 1268
if R500_HW2D
630 serge 1269
 
729 serge 1270
align 16
1271
R5xxRops  dd R5XX_ROP3_ZERO, R5XX_ROP3_ZERO  ;GXclear
1272
          dd R5XX_ROP3_DSa,  R5XX_ROP3_DPa   ;Gxand
1273
          dd R5XX_ROP3_SDna, R5XX_ROP3_PDna  ;GXandReverse
1274
          dd R5XX_ROP3_S,    R5XX_ROP3_P     ;GXcopy
1275
          dd R5XX_ROP3_DSna, R5XX_ROP3_DPna  ;GXandInverted
1276
          dd R5XX_ROP3_D,    R5XX_ROP3_D     ;GXnoop
1277
          dd R5XX_ROP3_DSx,  R5XX_ROP3_DPx   ;GXxor
1278
          dd R5XX_ROP3_DSo,  R5XX_ROP3_DPo   ;GXor
1279
          dd R5XX_ROP3_DSon, R5XX_ROP3_DPon  ;GXnor
1280
          dd R5XX_ROP3_DSxn, R5XX_ROP3_PDxn  ;GXequiv
1281
          dd R5XX_ROP3_Dn,   R5XX_ROP3_Dn    ;GXinvert
1282
          dd R5XX_ROP3_SDno, R5XX_ROP3_PDno  ;GXorReverse
1283
          dd R5XX_ROP3_Sn,   R5XX_ROP3_Pn    ;GXcopyInverted
1284
          dd R5XX_ROP3_DSno, R5XX_ROP3_DPno  ;GXorInverted
1285
          dd R5XX_ROP3_DSan, R5XX_ROP3_DPan  ;GXnand
1286
          dd R5XX_ROP3_ONE,  R5XX_ROP3_ONE   ;GXset
1287
end if
1288
 
1289
 
227 serge 1290
sz_ati_srv   db 'HWCURSOR',0
214 serge 1291
 
1292
msgInit      db 'detect hardware...',13,10,0
1293
msgPCI       db 'PCI accsess not supported',13,10,0
1294
msgFail      db 'device not found',13,10,0
233 serge 1295
msg_neg      db 'neg ecx',13,10,0
630 serge 1296
 
729 serge 1297
if R500_HW2D
1298
 
732 serge 1299
sz_HDraw_srv db 'HDRAW',0
1300
 
729 serge 1301
msgR5xx2DFlushtimeout \
1302
             db 'R5xx2DFlush timeout error',13,10,0
1303
msgR5xxFIFOWaitLocaltimeout \
1304
             db 'R5xxFIFOWaitLocal timeout error', 13, 10,0
1305
msgR5xx2DIdleLocaltimeout \
1306
             db 'R5xx2DIdleLocal timeout error', 13,10,0
791 serge 1307
 
1308
align 4
1309
R520_cp_microcode:
1310
dd     0x4200e000, 0000000000
1311
dd     0x4000e000, 0000000000
1312
dd     0x00000099, 0x00000008
1313
dd     0x0000009d, 0x00000008
1314
dd     0x4a554b4a, 0000000000
1315
dd     0x4a4a4467, 0000000000
1316
dd     0x55526f75, 0000000000
1317
dd     0x4a7e7d65, 0000000000
1318
dd     0xe0dae6f6, 0000000000
1319
dd     0x4ac54a4a, 0000000000
1320
dd     0xc8828282, 0000000000
1321
dd     0xbf4acfc1, 0000000000
1322
dd     0x87b04ad5, 0000000000
1323
dd     0xb5838383, 0000000000
1324
dd     0x4a0f85ba, 0000000000
1325
dd     0x000ca000, 0x00000004
1326
dd     0x000d0012, 0x00000038
1327
dd     0x0000e8b4, 0x00000004
1328
dd     0x000d0014, 0x00000038
1329
dd     0x0000e8b6, 0x00000004
1330
dd     0x000d0016, 0x00000038
1331
dd     0x0000e854, 0x00000004
1332
dd     0x000d0018, 0x00000038
1333
dd     0x0000e855, 0x00000004
1334
dd     0x000d001a, 0x00000038
1335
dd     0x0000e856, 0x00000004
1336
dd     0x000d001c, 0x00000038
1337
dd     0x0000e857, 0x00000004
1338
dd     0x000d001e, 0x00000038
1339
dd     0x0000e824, 0x00000004
1340
dd     0x000d0020, 0x00000038
1341
dd     0x0000e825, 0x00000004
1342
dd     0x000d0022, 0x00000038
1343
dd     0x0000e830, 0x00000004
1344
dd     0x000d0024, 0x00000038
1345
dd     0x0000f0c0, 0x00000004
1346
dd     0x000d0026, 0x00000038
1347
dd     0x0000f0c1, 0x00000004
1348
dd     0x000d0028, 0x00000038
1349
dd     0x0000e000, 0x00000004
1350
dd     0x000d002a, 0x00000038
1351
dd     0x0000e000, 0x00000004
1352
dd     0x000d002c, 0x00000038
1353
dd     0x0000e000, 0x00000004
1354
dd     0x000d002e, 0x00000038
1355
dd     0x0000e000, 0x00000004
1356
dd     0x000d0030, 0x00000038
1357
dd     0x0000e000, 0x00000004
1358
dd     0x000d0032, 0x00000038
1359
dd     0x0000f180, 0x00000004
1360
dd     0x000d0034, 0x00000038
1361
dd     0x0000f393, 0x00000004
1362
dd     0x000d0036, 0x00000038
1363
dd     0x0000f38a, 0x00000004
1364
dd     0x000d0038, 0x00000038
1365
dd     0x0000f38e, 0x00000004
1366
dd     0x0000e821, 0x00000004
1367
dd     0x0140a000, 0x00000004
1368
dd     0x00000043, 0x00000018
1369
dd     0x00cce800, 0x00000004
1370
dd     0x001b0001, 0x00000004
1371
dd     0x08004800, 0x00000004
1372
dd     0x001b0001, 0x00000004
1373
dd     0x08004800, 0x00000004
1374
dd     0x001b0001, 0x00000004
1375
dd     0x08004800, 0x00000004
1376
dd     0x0000003a, 0x00000008
1377
dd     0x0000a000, 0000000000
1378
dd     0x2000451d, 0x00000004
1379
dd     0x0000e580, 0x00000004
1380
dd     0x000ce581, 0x00000004
1381
dd     0x08004580, 0x00000004
1382
dd     0x000ce581, 0x00000004
1383
dd     0x00000047, 0x00000008
1384
dd     0x0000a000, 0000000000
1385
dd     0x000c2000, 0x00000004
1386
dd     0x0000e50e, 0x00000004
1387
dd     0x00032000, 0x00000004
1388
dd     0x00022051, 0x00000028
1389
dd     0x00000051, 0x00000024
1390
dd     0x0800450f, 0x00000004
1391
dd     0x0000a04b, 0x00000008
1392
dd     0x0000e565, 0x00000004
1393
dd     0x0000e566, 0x00000004
1394
dd     0x00000052, 0x00000008
1395
dd     0x03cca5b4, 0x00000004
1396
dd     0x05432000, 0x00000004
1397
dd     0x00022000, 0x00000004
1398
dd     0x4ccce05e, 0x00000030
1399
dd     0x08274565, 0x00000004
1400
dd     0x0000005e, 0x00000030
1401
dd     0x08004564, 0x00000004
1402
dd     0x0000e566, 0x00000004
1403
dd     0x00000055, 0x00000008
1404
dd     0x00802061, 0x00000010
1405
dd     0x00202000, 0x00000004
1406
dd     0x001b00ff, 0x00000004
1407
dd     0x01000064, 0x00000010
1408
dd     0x001f2000, 0x00000004
1409
dd     0x001c00ff, 0x00000004
1410
dd     0000000000, 0x0000000c
1411
dd     0x00000072, 0x00000030
1412
dd     0x00000055, 0x00000008
1413
dd     0x0000e576, 0x00000004
1414
dd     0x0000e577, 0x00000004
1415
dd     0x0000e50e, 0x00000004
1416
dd     0x0000e50f, 0x00000004
1417
dd     0x0140a000, 0x00000004
1418
dd     0x00000069, 0x00000018
1419
dd     0x00c0e5f9, 0x000000c2
1420
dd     0x00000069, 0x00000008
1421
dd     0x0014e50e, 0x00000004
1422
dd     0x0040e50f, 0x00000004
1423
dd     0x00c0006c, 0x00000008
1424
dd     0x0000e570, 0x00000004
1425
dd     0x0000e571, 0x00000004
1426
dd     0x0000e572, 0x0000000c
1427
dd     0x0000a000, 0x00000004
1428
dd     0x0140a000, 0x00000004
1429
dd     0x0000e568, 0x00000004
1430
dd     0x000c2000, 0x00000004
1431
dd     0x00000076, 0x00000018
1432
dd     0x000b0000, 0x00000004
1433
dd     0x18c0e562, 0x00000004
1434
dd     0x00000078, 0x00000008
1435
dd     0x00c00077, 0x00000008
1436
dd     0x000700c7, 0x00000004
1437
dd     0x00000080, 0x00000038
1438
dd     0x0000e5bb, 0x00000004
1439
dd     0x0000e5bc, 0000000000
1440
dd     0x0000a000, 0x00000004
1441
dd     0x0000e821, 0x00000004
1442
dd     0x0000e800, 0000000000
1443
dd     0x0000e821, 0x00000004
1444
dd     0x0000e82e, 0000000000
1445
dd     0x02cca000, 0x00000004
1446
dd     0x00140000, 0x00000004
1447
dd     0x000ce1cc, 0x00000004
1448
dd     0x050de1cd, 0x00000004
1449
dd     0x00400000, 0x00000004
1450
dd     0x0000008f, 0x00000018
1451
dd     0x00c0a000, 0x00000004
1452
dd     0x0000008c, 0x00000008
1453
dd     0x00000091, 0x00000020
1454
dd     0x4200e000, 0000000000
1455
dd     0x00000098, 0x00000038
1456
dd     0x000ca000, 0x00000004
1457
dd     0x00140000, 0x00000004
1458
dd     0x000c2000, 0x00000004
1459
dd     0x00160000, 0x00000004
1460
dd     0x700ce000, 0x00000004
1461
dd     0x00140094, 0x00000008
1462
dd     0x4000e000, 0000000000
1463
dd     0x02400000, 0x00000004
1464
dd     0x400ee000, 0x00000004
1465
dd     0x02400000, 0x00000004
1466
dd     0x4000e000, 0000000000
1467
dd     0x000c2000, 0x00000004
1468
dd     0x0240e51b, 0x00000004
1469
dd     0x0080e50a, 0x00000005
1470
dd     0x0080e50b, 0x00000005
1471
dd     0x00220000, 0x00000004
1472
dd     0x000700c7, 0x00000004
1473
dd     0x000000a4, 0x00000038
1474
dd     0x0080e5bd, 0x00000005
1475
dd     0x0000e5bb, 0x00000005
1476
dd     0x0080e5bc, 0x00000005
1477
dd     0x00210000, 0x00000004
1478
dd     0x02800000, 0x00000004
1479
dd     0x00c000ab, 0x00000018
1480
dd     0x4180e000, 0x00000040
1481
dd     0x000000ad, 0x00000024
1482
dd     0x01000000, 0x0000000c
1483
dd     0x0100e51d, 0x0000000c
1484
dd     0x000045bb, 0x00000004
1485
dd     0x000080a7, 0x00000008
1486
dd     0x0000f3ce, 0x00000004
1487
dd     0x0140a000, 0x00000004
1488
dd     0x00cc2000, 0x00000004
1489
dd     0x08c053cf, 0x00000040
1490
dd     0x00008000, 0000000000
1491
dd     0x0000f3d2, 0x00000004
1492
dd     0x0140a000, 0x00000004
1493
dd     0x00cc2000, 0x00000004
1494
dd     0x08c053d3, 0x00000040
1495
dd     0x00008000, 0000000000
1496
dd     0x0000f39d, 0x00000004
1497
dd     0x0140a000, 0x00000004
1498
dd     0x00cc2000, 0x00000004
1499
dd     0x08c0539e, 0x00000040
1500
dd     0x00008000, 0000000000
1501
dd     0x03c00830, 0x00000004
1502
dd     0x4200e000, 0000000000
1503
dd     0x0000a000, 0x00000004
1504
dd     0x200045e0, 0x00000004
1505
dd     0x0000e5e1, 0000000000
1506
dd     0x00000001, 0000000000
1507
dd     0x000700c4, 0x00000004
1508
dd     0x0800e394, 0000000000
1509
dd     0000000000, 0000000000
1510
dd     0x0000e8c4, 0x00000004
1511
dd     0x0000e8c5, 0x00000004
1512
dd     0x0000e8c6, 0x00000004
1513
dd     0x0000e928, 0x00000004
1514
dd     0x0000e929, 0x00000004
1515
dd     0x0000e92a, 0x00000004
1516
dd     0x000000c8, 0x00000008
1517
dd     0x0000e928, 0x00000004
1518
dd     0x0000e929, 0x00000004
1519
dd     0x0000e92a, 0x00000004
1520
dd     0x000000cf, 0x00000008
1521
dd     0xdeadbeef, 0000000000
1522
dd     0x00000116, 0000000000
1523
dd     0x000700d3, 0x00000004
1524
dd     0x080050e7, 0x00000004
1525
dd     0x000700d4, 0x00000004
1526
dd     0x0800401c, 0x00000004
1527
dd     0x0000e01d, 0000000000
1528
dd     0x02c02000, 0x00000004
1529
dd     0x00060000, 0x00000004
1530
dd     0x000000de, 0x00000034
1531
dd     0x000000db, 0x00000008
1532
dd     0x00008000, 0x00000004
1533
dd     0xc000e000, 0000000000
1534
dd     0x0000e1cc, 0x00000004
1535
dd     0x0500e1cd, 0x00000004
1536
dd     0x000ca000, 0x00000004
1537
dd     0x000000e5, 0x00000034
1538
dd     0x000000e1, 0x00000008
1539
dd     0x0000a000, 0000000000
1540
dd     0x0019e1cc, 0x00000004
1541
dd     0x001b0001, 0x00000004
1542
dd     0x0500a000, 0x00000004
1543
dd     0x080041cd, 0x00000004
1544
dd     0x000ca000, 0x00000004
1545
dd     0x000000fb, 0x00000034
1546
dd     0x0000004a, 0x00000008
1547
dd     0000000000, 0000000000
1548
dd     0000000000, 0000000000
1549
dd     0000000000, 0000000000
1550
dd     0000000000, 0000000000
1551
dd     0000000000, 0000000000
1552
dd     0000000000, 0000000000
1553
dd     0000000000, 0000000000
1554
dd     0000000000, 0000000000
1555
dd     0000000000, 0000000000
1556
dd     0x000c2000, 0x00000004
1557
dd     0x001d0018, 0x00000004
1558
dd     0x001a0001, 0x00000004
1559
dd     0x000000fb, 0x00000034
1560
dd     0x0000004a, 0x00000008
1561
dd     0x0500a04a, 0x00000008
1562
dd     0000000000, 0000000000
1563
dd     0000000000, 0000000000
1564
dd     0000000000, 0000000000
1565
dd     0000000000, 0000000000
1566
 
1567
 
729 serge 1568
end if
1569
 
630 serge 1570
if 0
1571
msg6100      db '6100:  ',0
1572
msg6104      db '6104:  ',0
1573
msg6108      db '6108:  ',0
1574
msg6110      db '6110:  ',0
1575
msg6120      db '6120:  ',0
1576
msg6124      db '6124:  ',0
1577
msg6128      db '6128:  ',0
1578
msg612C      db '612C:  ',0
1579
msg6130      db '6130:  ',0
1580
msg6134      db '6134:  ',0
1581
msg6138      db '6138:  ',0
1582
end if
1583
 
233 serge 1584
buff         db 8 dup(0)
1585
             db 13,10, 0
214 serge 1586
 
1587
section '.data' data readable writable align 16
1588
 
1589
pCursor  db 4096 dup(?)
1590
 
227 serge 1591
cursor_map     rd 2
1592
cursor_start   rd 1
1593
cursor_end     rd 1
214 serge 1594
 
630 serge 1595
fnSelect       rd 1
1596
fnSet          rd 1
1597
oldSelect      rd 1
1598
oldSet         rd 1
1599
oldRestore     rd 1
1600
oldCreate      rd 1
1601
 
1602
r500_LFB       rd 1
1603
 
227 serge 1604
bus            dd ?
1605
devfn          dd ?
1606
ati_io         dd ?
214 serge 1607
 
729 serge 1608
if R500_HW2D
214 serge 1609
 
734 serge 1610
__xmin         rd 1
1611
__xmax         rd 1
1612
__ymin         rd 1
1613
__ymax         rd 1
1614
 
729 serge 1615
rhd            RHD
227 serge 1616
 
729 serge 1617
end if