Subversion Repositories Kolibri OS

Rev

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