Subversion Repositories Kolibri OS

Rev

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
 
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
 
798 serge 67
OS_BASE          equ 0x80000000
68
SLOT_BASE        equ (OS_BASE+0x0080000)
69
LFB_BASE         equ 0xFE000000
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
 
181
macro OUT_PACKET3 pkt, count                                              \
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]
574
           sub edx, LFBAddress
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
605
           add eax, LFBAddress+CURSOR_IMAGE_OFFSET
606
           ret
607
endp
608
 
609
align 4
233 serge 610
video_free:
611
           pushfd
612
           cli
613
           sub eax, LFBAddress+CURSOR_IMAGE_OFFSET
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
 
1198
        dd (0x791E  shl 16)+VID_ATI, init_r500   ;RS690   X1200
1199
 
1200
        dd (0x7140  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1201
        dd (0x7142  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1202
        dd (0x7146  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1203
        dd (0x714D  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1204
        dd (0x714E  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1205
 
1206
        dd (0x7183  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1207
        dd (0x7187  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1208
        dd (0x718F  shl 16)+VID_ATI, init_r500   ;RV515   X1300
1209
 
1210
        dd (0x7143  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1211
        dd (0x7147  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1212
        dd (0x715F  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1213
        dd (0x7193  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1214
        dd (0x719F  shl 16)+VID_ATI, init_r500   ;RV515   X1550
1215
 
1216
        dd (0x71C0  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1217
        dd (0x71C1  shl 16)+VID_ATI, init_r500   ;RV535   X1650
1218
        dd (0x71C2  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1219
        dd (0x71C3  shl 16)+VID_ATI, init_r500   ;RV535   X1600
1220
        dd (0x71C6  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1221
        dd (0x71C7  shl 16)+VID_ATI, init_r500   ;RV534   X1650
1222
 
1223
        dd (0x7181  shl 16)+VID_ATI, init_r500   ;RV515   X1600
1224
        dd (0x71CD  shl 16)+VID_ATI, init_r500   ;RV530   X1600
1225
 
1226
        dd (0x7291  shl 16)+VID_ATI, init_r500   ;R580    X1650
1227
        dd (0x7293  shl 16)+VID_ATI, init_r500   ;R580    X1650
1228
 
1229
        dd (0x7100  shl 16)+VID_ATI, init_r500   ;RV520   X1800
1230
        dd (0x7109  shl 16)+VID_ATI, init_r500   ;RV520   X1800
1231
        dd (0x710A  shl 16)+VID_ATI, init_r500   ;RV520   X1800 GTO
1232
 
1233
        dd (0x7249  shl 16)+VID_ATI, init_r500   ;RV580   X1900
1234
        dd (0x724B  shl 16)+VID_ATI, init_r500   ;RV580   X1900 GT
1235
 
1236
        dd (0x7240  shl 16)+VID_ATI, init_r500   ;RV580   X1950
1237
        dd (0x7244  shl 16)+VID_ATI, init_r500   ;RV580   X1950
1238
        dd (0x7248  shl 16)+VID_ATI, init_r500   ;RV580   X1950
1239
 
1240
        dd (0x7288  shl 16)+VID_ATI, init_r500   ;R580    X1950 GT
1241
        dd (0x7280  shl 16)+VID_ATI, init_r500   ;R580    X1950 PRO
1242
 
1243
        dd (0x94C3  shl 16)+VID_ATI, init_r500   ;RV610   HD 2400 PRO
1244
        dd (0x94C1  shl 16)+VID_ATI, init_r500   ;RV610   HD 2400 XT
1245
 
1246
        dd (0x9589  shl 16)+VID_ATI, init_r500   ;RV630   HD 2600 PRO
1247
        dd (0x958A  shl 16)+VID_ATI, init_r500   ;RV630   HD 2600 X2
1248
        dd (0x9588  shl 16)+VID_ATI, init_r500   ;RV630   HD 2600 XT
1249
 
1250
        dd (0x9403  shl 16)+VID_ATI, init_r500   ;R600    HD 2900 PRO
1251
        dd (0x9409  shl 16)+VID_ATI, init_r500   ;R600    HD 2900 XT
1252
 
1253
 
214 serge 1254
        dd 0    ;terminator
1255
 
465 serge 1256
version      dd (5 shl 16) or (API_VERSION and 0xFFFF)
214 serge 1257
 
729 serge 1258
if R500_HW2D
630 serge 1259
 
729 serge 1260
align 16
1261
R5xxRops  dd R5XX_ROP3_ZERO, R5XX_ROP3_ZERO  ;GXclear
1262
          dd R5XX_ROP3_DSa,  R5XX_ROP3_DPa   ;Gxand
1263
          dd R5XX_ROP3_SDna, R5XX_ROP3_PDna  ;GXandReverse
1264
          dd R5XX_ROP3_S,    R5XX_ROP3_P     ;GXcopy
1265
          dd R5XX_ROP3_DSna, R5XX_ROP3_DPna  ;GXandInverted
1266
          dd R5XX_ROP3_D,    R5XX_ROP3_D     ;GXnoop
1267
          dd R5XX_ROP3_DSx,  R5XX_ROP3_DPx   ;GXxor
1268
          dd R5XX_ROP3_DSo,  R5XX_ROP3_DPo   ;GXor
1269
          dd R5XX_ROP3_DSon, R5XX_ROP3_DPon  ;GXnor
1270
          dd R5XX_ROP3_DSxn, R5XX_ROP3_PDxn  ;GXequiv
1271
          dd R5XX_ROP3_Dn,   R5XX_ROP3_Dn    ;GXinvert
1272
          dd R5XX_ROP3_SDno, R5XX_ROP3_PDno  ;GXorReverse
1273
          dd R5XX_ROP3_Sn,   R5XX_ROP3_Pn    ;GXcopyInverted
1274
          dd R5XX_ROP3_DSno, R5XX_ROP3_DPno  ;GXorInverted
1275
          dd R5XX_ROP3_DSan, R5XX_ROP3_DPan  ;GXnand
1276
          dd R5XX_ROP3_ONE,  R5XX_ROP3_ONE   ;GXset
1277
end if
1278
 
1279
 
227 serge 1280
sz_ati_srv   db 'HWCURSOR',0
214 serge 1281
 
1282
msgInit      db 'detect hardware...',13,10,0
1283
msgPCI       db 'PCI accsess not supported',13,10,0
1284
msgFail      db 'device not found',13,10,0
233 serge 1285
msg_neg      db 'neg ecx',13,10,0
630 serge 1286
 
729 serge 1287
if R500_HW2D
1288
 
732 serge 1289
sz_HDraw_srv db 'HDRAW',0
1290
 
729 serge 1291
msgR5xx2DFlushtimeout \
1292
             db 'R5xx2DFlush timeout error',13,10,0
1293
msgR5xxFIFOWaitLocaltimeout \
1294
             db 'R5xxFIFOWaitLocal timeout error', 13, 10,0
1295
msgR5xx2DIdleLocaltimeout \
1296
             db 'R5xx2DIdleLocal timeout error', 13,10,0
791 serge 1297
 
1298
align 4
1299
R520_cp_microcode:
1300
dd     0x4200e000, 0000000000
1301
dd     0x4000e000, 0000000000
1302
dd     0x00000099, 0x00000008
1303
dd     0x0000009d, 0x00000008
1304
dd     0x4a554b4a, 0000000000
1305
dd     0x4a4a4467, 0000000000
1306
dd     0x55526f75, 0000000000
1307
dd     0x4a7e7d65, 0000000000
1308
dd     0xe0dae6f6, 0000000000
1309
dd     0x4ac54a4a, 0000000000
1310
dd     0xc8828282, 0000000000
1311
dd     0xbf4acfc1, 0000000000
1312
dd     0x87b04ad5, 0000000000
1313
dd     0xb5838383, 0000000000
1314
dd     0x4a0f85ba, 0000000000
1315
dd     0x000ca000, 0x00000004
1316
dd     0x000d0012, 0x00000038
1317
dd     0x0000e8b4, 0x00000004
1318
dd     0x000d0014, 0x00000038
1319
dd     0x0000e8b6, 0x00000004
1320
dd     0x000d0016, 0x00000038
1321
dd     0x0000e854, 0x00000004
1322
dd     0x000d0018, 0x00000038
1323
dd     0x0000e855, 0x00000004
1324
dd     0x000d001a, 0x00000038
1325
dd     0x0000e856, 0x00000004
1326
dd     0x000d001c, 0x00000038
1327
dd     0x0000e857, 0x00000004
1328
dd     0x000d001e, 0x00000038
1329
dd     0x0000e824, 0x00000004
1330
dd     0x000d0020, 0x00000038
1331
dd     0x0000e825, 0x00000004
1332
dd     0x000d0022, 0x00000038
1333
dd     0x0000e830, 0x00000004
1334
dd     0x000d0024, 0x00000038
1335
dd     0x0000f0c0, 0x00000004
1336
dd     0x000d0026, 0x00000038
1337
dd     0x0000f0c1, 0x00000004
1338
dd     0x000d0028, 0x00000038
1339
dd     0x0000e000, 0x00000004
1340
dd     0x000d002a, 0x00000038
1341
dd     0x0000e000, 0x00000004
1342
dd     0x000d002c, 0x00000038
1343
dd     0x0000e000, 0x00000004
1344
dd     0x000d002e, 0x00000038
1345
dd     0x0000e000, 0x00000004
1346
dd     0x000d0030, 0x00000038
1347
dd     0x0000e000, 0x00000004
1348
dd     0x000d0032, 0x00000038
1349
dd     0x0000f180, 0x00000004
1350
dd     0x000d0034, 0x00000038
1351
dd     0x0000f393, 0x00000004
1352
dd     0x000d0036, 0x00000038
1353
dd     0x0000f38a, 0x00000004
1354
dd     0x000d0038, 0x00000038
1355
dd     0x0000f38e, 0x00000004
1356
dd     0x0000e821, 0x00000004
1357
dd     0x0140a000, 0x00000004
1358
dd     0x00000043, 0x00000018
1359
dd     0x00cce800, 0x00000004
1360
dd     0x001b0001, 0x00000004
1361
dd     0x08004800, 0x00000004
1362
dd     0x001b0001, 0x00000004
1363
dd     0x08004800, 0x00000004
1364
dd     0x001b0001, 0x00000004
1365
dd     0x08004800, 0x00000004
1366
dd     0x0000003a, 0x00000008
1367
dd     0x0000a000, 0000000000
1368
dd     0x2000451d, 0x00000004
1369
dd     0x0000e580, 0x00000004
1370
dd     0x000ce581, 0x00000004
1371
dd     0x08004580, 0x00000004
1372
dd     0x000ce581, 0x00000004
1373
dd     0x00000047, 0x00000008
1374
dd     0x0000a000, 0000000000
1375
dd     0x000c2000, 0x00000004
1376
dd     0x0000e50e, 0x00000004
1377
dd     0x00032000, 0x00000004
1378
dd     0x00022051, 0x00000028
1379
dd     0x00000051, 0x00000024
1380
dd     0x0800450f, 0x00000004
1381
dd     0x0000a04b, 0x00000008
1382
dd     0x0000e565, 0x00000004
1383
dd     0x0000e566, 0x00000004
1384
dd     0x00000052, 0x00000008
1385
dd     0x03cca5b4, 0x00000004
1386
dd     0x05432000, 0x00000004
1387
dd     0x00022000, 0x00000004
1388
dd     0x4ccce05e, 0x00000030
1389
dd     0x08274565, 0x00000004
1390
dd     0x0000005e, 0x00000030
1391
dd     0x08004564, 0x00000004
1392
dd     0x0000e566, 0x00000004
1393
dd     0x00000055, 0x00000008
1394
dd     0x00802061, 0x00000010
1395
dd     0x00202000, 0x00000004
1396
dd     0x001b00ff, 0x00000004
1397
dd     0x01000064, 0x00000010
1398
dd     0x001f2000, 0x00000004
1399
dd     0x001c00ff, 0x00000004
1400
dd     0000000000, 0x0000000c
1401
dd     0x00000072, 0x00000030
1402
dd     0x00000055, 0x00000008
1403
dd     0x0000e576, 0x00000004
1404
dd     0x0000e577, 0x00000004
1405
dd     0x0000e50e, 0x00000004
1406
dd     0x0000e50f, 0x00000004
1407
dd     0x0140a000, 0x00000004
1408
dd     0x00000069, 0x00000018
1409
dd     0x00c0e5f9, 0x000000c2
1410
dd     0x00000069, 0x00000008
1411
dd     0x0014e50e, 0x00000004
1412
dd     0x0040e50f, 0x00000004
1413
dd     0x00c0006c, 0x00000008
1414
dd     0x0000e570, 0x00000004
1415
dd     0x0000e571, 0x00000004
1416
dd     0x0000e572, 0x0000000c
1417
dd     0x0000a000, 0x00000004
1418
dd     0x0140a000, 0x00000004
1419
dd     0x0000e568, 0x00000004
1420
dd     0x000c2000, 0x00000004
1421
dd     0x00000076, 0x00000018
1422
dd     0x000b0000, 0x00000004
1423
dd     0x18c0e562, 0x00000004
1424
dd     0x00000078, 0x00000008
1425
dd     0x00c00077, 0x00000008
1426
dd     0x000700c7, 0x00000004
1427
dd     0x00000080, 0x00000038
1428
dd     0x0000e5bb, 0x00000004
1429
dd     0x0000e5bc, 0000000000
1430
dd     0x0000a000, 0x00000004
1431
dd     0x0000e821, 0x00000004
1432
dd     0x0000e800, 0000000000
1433
dd     0x0000e821, 0x00000004
1434
dd     0x0000e82e, 0000000000
1435
dd     0x02cca000, 0x00000004
1436
dd     0x00140000, 0x00000004
1437
dd     0x000ce1cc, 0x00000004
1438
dd     0x050de1cd, 0x00000004
1439
dd     0x00400000, 0x00000004
1440
dd     0x0000008f, 0x00000018
1441
dd     0x00c0a000, 0x00000004
1442
dd     0x0000008c, 0x00000008
1443
dd     0x00000091, 0x00000020
1444
dd     0x4200e000, 0000000000
1445
dd     0x00000098, 0x00000038
1446
dd     0x000ca000, 0x00000004
1447
dd     0x00140000, 0x00000004
1448
dd     0x000c2000, 0x00000004
1449
dd     0x00160000, 0x00000004
1450
dd     0x700ce000, 0x00000004
1451
dd     0x00140094, 0x00000008
1452
dd     0x4000e000, 0000000000
1453
dd     0x02400000, 0x00000004
1454
dd     0x400ee000, 0x00000004
1455
dd     0x02400000, 0x00000004
1456
dd     0x4000e000, 0000000000
1457
dd     0x000c2000, 0x00000004
1458
dd     0x0240e51b, 0x00000004
1459
dd     0x0080e50a, 0x00000005
1460
dd     0x0080e50b, 0x00000005
1461
dd     0x00220000, 0x00000004
1462
dd     0x000700c7, 0x00000004
1463
dd     0x000000a4, 0x00000038
1464
dd     0x0080e5bd, 0x00000005
1465
dd     0x0000e5bb, 0x00000005
1466
dd     0x0080e5bc, 0x00000005
1467
dd     0x00210000, 0x00000004
1468
dd     0x02800000, 0x00000004
1469
dd     0x00c000ab, 0x00000018
1470
dd     0x4180e000, 0x00000040
1471
dd     0x000000ad, 0x00000024
1472
dd     0x01000000, 0x0000000c
1473
dd     0x0100e51d, 0x0000000c
1474
dd     0x000045bb, 0x00000004
1475
dd     0x000080a7, 0x00000008
1476
dd     0x0000f3ce, 0x00000004
1477
dd     0x0140a000, 0x00000004
1478
dd     0x00cc2000, 0x00000004
1479
dd     0x08c053cf, 0x00000040
1480
dd     0x00008000, 0000000000
1481
dd     0x0000f3d2, 0x00000004
1482
dd     0x0140a000, 0x00000004
1483
dd     0x00cc2000, 0x00000004
1484
dd     0x08c053d3, 0x00000040
1485
dd     0x00008000, 0000000000
1486
dd     0x0000f39d, 0x00000004
1487
dd     0x0140a000, 0x00000004
1488
dd     0x00cc2000, 0x00000004
1489
dd     0x08c0539e, 0x00000040
1490
dd     0x00008000, 0000000000
1491
dd     0x03c00830, 0x00000004
1492
dd     0x4200e000, 0000000000
1493
dd     0x0000a000, 0x00000004
1494
dd     0x200045e0, 0x00000004
1495
dd     0x0000e5e1, 0000000000
1496
dd     0x00000001, 0000000000
1497
dd     0x000700c4, 0x00000004
1498
dd     0x0800e394, 0000000000
1499
dd     0000000000, 0000000000
1500
dd     0x0000e8c4, 0x00000004
1501
dd     0x0000e8c5, 0x00000004
1502
dd     0x0000e8c6, 0x00000004
1503
dd     0x0000e928, 0x00000004
1504
dd     0x0000e929, 0x00000004
1505
dd     0x0000e92a, 0x00000004
1506
dd     0x000000c8, 0x00000008
1507
dd     0x0000e928, 0x00000004
1508
dd     0x0000e929, 0x00000004
1509
dd     0x0000e92a, 0x00000004
1510
dd     0x000000cf, 0x00000008
1511
dd     0xdeadbeef, 0000000000
1512
dd     0x00000116, 0000000000
1513
dd     0x000700d3, 0x00000004
1514
dd     0x080050e7, 0x00000004
1515
dd     0x000700d4, 0x00000004
1516
dd     0x0800401c, 0x00000004
1517
dd     0x0000e01d, 0000000000
1518
dd     0x02c02000, 0x00000004
1519
dd     0x00060000, 0x00000004
1520
dd     0x000000de, 0x00000034
1521
dd     0x000000db, 0x00000008
1522
dd     0x00008000, 0x00000004
1523
dd     0xc000e000, 0000000000
1524
dd     0x0000e1cc, 0x00000004
1525
dd     0x0500e1cd, 0x00000004
1526
dd     0x000ca000, 0x00000004
1527
dd     0x000000e5, 0x00000034
1528
dd     0x000000e1, 0x00000008
1529
dd     0x0000a000, 0000000000
1530
dd     0x0019e1cc, 0x00000004
1531
dd     0x001b0001, 0x00000004
1532
dd     0x0500a000, 0x00000004
1533
dd     0x080041cd, 0x00000004
1534
dd     0x000ca000, 0x00000004
1535
dd     0x000000fb, 0x00000034
1536
dd     0x0000004a, 0x00000008
1537
dd     0000000000, 0000000000
1538
dd     0000000000, 0000000000
1539
dd     0000000000, 0000000000
1540
dd     0000000000, 0000000000
1541
dd     0000000000, 0000000000
1542
dd     0000000000, 0000000000
1543
dd     0000000000, 0000000000
1544
dd     0000000000, 0000000000
1545
dd     0000000000, 0000000000
1546
dd     0x000c2000, 0x00000004
1547
dd     0x001d0018, 0x00000004
1548
dd     0x001a0001, 0x00000004
1549
dd     0x000000fb, 0x00000034
1550
dd     0x0000004a, 0x00000008
1551
dd     0x0500a04a, 0x00000008
1552
dd     0000000000, 0000000000
1553
dd     0000000000, 0000000000
1554
dd     0000000000, 0000000000
1555
dd     0000000000, 0000000000
1556
 
1557
 
729 serge 1558
end if
1559
 
630 serge 1560
if 0
1561
msg6100      db '6100:  ',0
1562
msg6104      db '6104:  ',0
1563
msg6108      db '6108:  ',0
1564
msg6110      db '6110:  ',0
1565
msg6120      db '6120:  ',0
1566
msg6124      db '6124:  ',0
1567
msg6128      db '6128:  ',0
1568
msg612C      db '612C:  ',0
1569
msg6130      db '6130:  ',0
1570
msg6134      db '6134:  ',0
1571
msg6138      db '6138:  ',0
1572
end if
1573
 
233 serge 1574
buff         db 8 dup(0)
1575
             db 13,10, 0
214 serge 1576
 
1577
section '.data' data readable writable align 16
1578
 
1579
pCursor  db 4096 dup(?)
1580
 
227 serge 1581
cursor_map     rd 2
1582
cursor_start   rd 1
1583
cursor_end     rd 1
214 serge 1584
 
630 serge 1585
fnSelect       rd 1
1586
fnSet          rd 1
1587
oldSelect      rd 1
1588
oldSet         rd 1
1589
oldRestore     rd 1
1590
oldCreate      rd 1
1591
 
1592
r500_LFB       rd 1
1593
 
227 serge 1594
bus            dd ?
1595
devfn          dd ?
1596
ati_io         dd ?
214 serge 1597
 
729 serge 1598
if R500_HW2D
214 serge 1599
 
734 serge 1600
__xmin         rd 1
1601
__xmax         rd 1
1602
__ymin         rd 1
1603
__ymax         rd 1
1604
 
729 serge 1605
rhd            RHD
227 serge 1606
 
729 serge 1607
end if