0,0 → 1,1731 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
;; Distributed under terms of the GNU General Public License ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
format MS COFF |
|
DEBUG equ 1 |
|
include 'proc32.inc' |
include 'imports.inc' |
|
R500_HW2D equ 0 |
|
API_VERSION equ 0x01000100 |
|
STRIDE equ 8 |
|
VID_ATI equ 0x1002 |
|
LOAD_FROM_FILE equ 0 |
LOAD_FROM_MEM equ 1 |
LOAD_INDIRECT equ 2 |
LOAD_SYSTEM equ 3 |
|
SRV_GETVERSION equ 0 |
|
struc BITMAPINFOHEADER { |
.biSize dd ? ; DWORD |
.biWidth dd ? ; LONG |
.biHeight dd ? ; LONG |
.biPlanes dw ? ; WORD |
.biBitCount dw ? ; WORD |
.biCompression dd ? ; DWORD |
.biSizeImage dd ? ; DWORD |
.biXPelsPerMeter dd ? ; LONG |
.biYPelsPerMeter dd ? ; LONG |
.biClrUsed dd ? ; DWORD |
.biClrImportant dd ? ; DWORD |
} |
|
virtual at 0 |
BI BITMAPINFOHEADER |
end virtual |
|
struc CURSOR |
{;common object header |
.magic dd ? ;'CURS' |
.destroy dd ? ;internal destructor |
.fd dd ? ;next object in list |
.bk dd ? ;prev object in list |
.pid dd ? ;owner id |
|
;cursor data |
.base dd ? ;allocated memory |
.hot_x dd ? ;hotspot coords |
.hot_y dd ? |
} |
virtual at 0 |
CURSOR CURSOR |
end virtual |
|
CURSOR_SIZE equ 32 |
|
OS_BASE equ 0x80000000 |
SLOT_BASE equ (OS_BASE+0x0080000) |
LFB_BASE equ 0xFE000000 |
|
PG_SW equ 0x003 |
PG_NOCACHE equ 0x018 |
|
PCI_MEMORY_MASK equ 0xfffffff0 |
|
struc IOCTL |
{ .handle dd ? |
.io_code dd ? |
.input dd ? |
.inp_size dd ? |
.output dd ? |
.out_size dd ? |
} |
|
virtual at 0 |
IOCTL IOCTL |
end virtual |
|
;MMIO equ 0F9000000h |
RD_RB3D_CNTL equ 1c3ch |
|
RD_MEM_CNTL equ 0140h |
RD_CRTC_GEN_CNTL equ 0050h |
RD_CRTC_CUR_EN equ 10000h |
RD_DISPLAY_BASE_ADDR equ 023ch |
RD_DEFAULT_OFFSET equ 16e0h |
|
CUR_HORZ_VERT_OFF equ 0268h |
CUR_HORZ_VERT_POSN equ 0264h |
CUR_OFFSET equ 0260h |
|
|
RD_RB3D_CNTL equ 1c3ch |
RD_RBBM_STATUS equ 0e40h |
RD_RBBM_FIFOCNT_MASK equ 007fh |
RD_RBBM_ACTIVE equ 80000000h |
RD_TIMEOUT equ 2000000 |
|
RD_DP_GUI_MASTER_CNTL equ 0146ch |
RD_DP_BRUSH_BKGD_CLR equ 01478h |
RD_DP_BRUSH_FRGD_CLR equ 0147ch |
RD_DP_SRC_BKGD_CLR equ 015dch |
RD_DP_SRC_FRGD_CLR equ 015d8h |
RD_DP_CNTL equ 016c0h |
RD_DP_DATATYPE equ 016c4h |
RD_DP_WRITE_MASK equ 016cch |
RD_DP_SRC_SOURCE_MEMORY equ (2 shl 24) |
RD_DP_SRC_SOURCE_HOST_DATA equ (3 shl 24) |
RD_DEFAULT_SC_BOTTOM_RIGHT equ 16e8h |
RD_GMC_BRUSH_SOLID_COLOR equ (13 shl 4) |
RD_DEFAULT_SC_RIGHT_MAX equ 1fffh |
RD_DEFAULT_SC_BOTTOM_MAX equ 1fff0000h |
RD_GMC_DST_DATATYPE_SHIFT equ 8 |
|
RD_ROP3_S equ 00cc0000h |
RD_ROP3_P equ 00f00000h |
|
RD_RB2D_DSTCACHE_MODE equ 03428h |
RD_RB2D_DSTCACHE_CTLSTAT equ 0342ch |
RD_RB2D_DC_FLUSH_ALL equ 000fh |
RD_RB2D_DC_BUSY equ 80000000h |
|
RD_GMC_BRUSH_SOLID_COLOR equ 000000D0h |
RD_GMC_SRC_DATATYPE_COLOR equ (3 shl 12) |
RD_GMC_CLR_CMP_CNTL_DIS equ (1 shl 28) |
RD_GMC_WR_MSK_DIS equ (1 shl 30) |
|
cmdSolidFill equ 73f036d0h |
|
RD_DST_PITCH_OFFSET equ 142ch |
RD_SRC_PITCH_OFFSET equ 1428h |
|
RD_DST_X_LEFT_TO_RIGHT equ 1 |
RD_DST_Y_TOP_TO_BOTTOM equ 2 |
RD_DST_Y_X equ 1438h |
RD_DST_WIDTH_HEIGHT equ 1598h |
RD_DST_LINE_START equ 1600h |
RD_DST_LINE_END equ 1604h |
R300_MEM_NUM_CHANNELS_MASK equ 0003h |
|
macro rdr op1, op2 |
{ |
mov edi, [ati_io] |
mov op1, [edi+op2] |
} |
|
macro BEGIN_RING |
{ |
mov edi, [rhd.ring_base] |
mov edx, [rhd.ring_wp] |
} |
|
macro COMMIT_RING |
{ |
and edx, 0x1FFF |
mov [rhd.ring_wp], edx |
|
lock add [esp], dword 0 ; Flush writes to ring |
|
wrr RADEON_CP_RB_WPTR, edx |
rdr eax, RADEON_CP_RB_RPTR |
} |
|
macro OUT_PACKET0 reg, count |
{ |
mov eax, (RADEON_CP_PACKET0 + (count shl 16) + (reg shr 2)) |
mov [edi+edx*4], eax |
inc edx |
} |
|
macro OUT_PACKET3 pkt, count |
{ |
mov eax, (RADEON_CP_PACKET3 or pkt or (count shl 16)) |
mov [edi+edx*4], eax |
inc edx |
} |
|
macro OUT_RING val |
{ |
mov eax, val |
mov [edi+edx*4], eax |
inc edx |
} |
|
macro RADEON_WAIT_UNTIL_IDLE |
{ |
OUT_PACKET0 RADEON_WAIT_UNTIL, 0 |
OUT_RING RADEON_WAIT_2D_IDLECLEAN + \ |
RADEON_WAIT_3D_IDLECLEAN + \ |
RADEON_WAIT_HOST_IDLECLEAN |
} |
|
macro RADEON_PURGE_CACHE |
{ |
OUT_PACKET0 R5XX_RB3D_DSTCACHE_CTLSTAT, 0 |
OUT_RING R5XX_RB3D_DC_FLUSH_ALL |
} |
|
macro RADEON_PURGE_ZCACHE |
{ |
OUT_PACKET0 RADEON_RB3D_ZCACHE_CTLSTAT, 0 |
OUT_RING RADEON_RB3D_ZC_FLUSH_ALL |
} |
|
macro wrr dest, src |
{ |
mov edi, [ati_io] |
mov dword [edi+dest], src |
} |
|
macro rmask dest, val, mask |
{ |
mov edi, [ati_io] |
mov eax, [edi+dest] |
and eax, not mask |
or eax, (val and mask) |
mov [edi+dest], eax |
} |
|
public START |
public service_proc |
public version |
|
CURSOR_IMAGE_OFFSET equ 0x00500000 |
|
DRV_ENTRY equ 1 |
DRV_EXIT equ -1 |
|
section '.flat' code readable align 16 |
|
proc START stdcall, state:dword |
|
cmp [state], 1 |
jne .restore |
|
if DEBUG |
mov esi, msgInit |
call SysMsgBoardStr |
end if |
|
call detect_ati |
test eax, eax |
jz .fail |
|
mov ebx, [SelectHwCursor] |
mov ecx, [SetHwCursor] |
mov edx, [HwCursorRestore] |
mov esi, [HwCursorCreate] |
|
mov [oldSelect], ebx |
mov [oldSet], ecx |
mov [oldRestore], edx |
mov [oldCreate], esi |
|
call eax |
|
or eax, -1 |
mov [cursor_map], eax |
mov [cursor_map+4], eax |
mov edx, cursor_map |
mov [cursor_start], edx |
add edx, 8 |
mov [cursor_end], edx |
|
stdcall RegService, sz_ati_srv, service_proc |
test eax, eax |
jz .restore |
|
if R500_HW2D |
stdcall RegService, sz_HDraw_srv, r500_HDraw |
|
mov ebx, START |
and ebx, -4096 |
mov [eax+0x20], ebx |
mov [eax+0x24], dword 0 ;hack |
end if |
mov ebx, [fnSelect] |
mov ecx, [fnSet] |
|
mov [SelectHwCursor], ebx |
mov [SetHwCursor], ecx |
mov dword [HwCursorRestore], drv_restore |
mov dword [HwCursorCreate], ati_cursor |
|
ret |
.restore: |
mov eax, [oldSelect] |
mov ebx, [oldSet] |
mov ecx, [oldRestore] |
mov edx, [oldCreate] |
|
mov [SelectHwCursor], eax |
mov [SetHwCursor], ebx |
mov [HwCursorRestore], ecx |
mov [HwCursorCreate], edx |
|
xor eax, eax |
ret |
|
.fail: |
if DEBUG |
mov esi, msgFail |
call SysMsgBoardStr |
end if |
|
xor eax, eax |
ret |
endp |
|
handle equ IOCTL.handle |
io_code equ IOCTL.io_code |
input equ IOCTL.input |
inp_size equ IOCTL.inp_size |
output equ IOCTL.output |
out_size equ IOCTL.out_size |
|
align 4 |
proc service_proc stdcall, ioctl:dword |
|
mov ebx, [ioctl] |
cmp [ebx+io_code], SRV_GETVERSION |
jne .fail |
|
mov eax, [ebx+output] |
cmp [ebx+out_size], 4 |
jne .fail |
mov [eax], dword API_VERSION |
xor eax, eax |
ret |
.fail: |
or eax, -1 |
ret |
endp |
|
restore handle |
restore io_code |
restore input |
restore inp_size |
restore output |
restore out_size |
|
align 4 |
proc detect_ati |
locals |
last_bus dd ? |
endl |
|
xor eax, eax |
mov [bus], eax |
inc eax |
call PciApi |
cmp eax, -1 |
je .err |
|
mov [last_bus], eax |
|
.next_bus: |
and [devfn], 0 |
.next_dev: |
stdcall PciRead32, [bus], [devfn], dword 0 |
test eax, eax |
jz .next |
cmp eax, -1 |
je .next |
|
mov edi, devices |
@@: |
mov ebx, [edi] |
test ebx, ebx |
jz .next |
|
cmp eax, ebx |
je .found |
add edi, STRIDE |
jmp @B |
.next: |
inc [devfn] |
cmp [devfn], 256 |
jb .next_dev |
mov eax, [bus] |
inc eax |
mov [bus], eax |
cmp eax, [last_bus] |
jna .next_bus |
xor eax, eax |
ret |
.found: |
mov eax, [edi+4] |
ret |
.err: |
xor eax, eax |
ret |
endp |
|
align 4 |
proc init_r200 |
stdcall PciRead32, [bus], [devfn], dword 0x18 |
and eax, PCI_MEMORY_MASK |
stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE) |
test eax, eax |
jz .fail |
|
mov [ati_io], eax |
mov edi, eax |
|
mov dword [edi+RD_RB3D_CNTL], 0 |
call engRestore |
|
mov edi, [ati_io] |
mov eax, [edi+0x50] |
mov ebx,3 |
shl ebx,20 |
not ebx |
and eax,ebx |
mov ebx, 2 |
shl ebx,20 |
or eax, ebx |
mov [edi+0x50], eax |
|
call r200_ShowCursor |
|
mov [fnSelect], r200_SelectCursor |
mov [fnSet], r200_SetCursor |
|
xor eax, eax |
inc eax |
.fail: |
ret |
endp |
|
if R500_HW2D |
include 'r500hw.inc' |
end if |
|
align 4 |
proc init_r500 |
|
stdcall PciRead32, [bus], [devfn], dword 0x18 |
and eax, PCI_MEMORY_MASK |
stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE) |
test eax, eax |
jz .fail |
|
mov [ati_io], eax |
|
mov [fnSelect], r500_SelectCursor |
mov [fnSet], r500_SetCursor |
|
rdr eax, 0x6110 |
mov [r500_LFB], eax |
|
if R500_HW2D |
call R5xx2DInit |
end if |
wrr 0x6410, 0x001F001F |
wrr 0x6400, dword (3 shl 8) |
|
xor eax, eax |
inc eax |
.fail: |
ret |
endp |
|
|
align 4 |
drv_restore: |
ret 8 |
|
|
align 4 |
proc r500_SelectCursor stdcall,hcursor:dword |
|
mov esi, [hcursor] |
|
mov edx, [esi+CURSOR.base] |
sub edx, LFB_BASE |
add edx, [r500_LFB] |
wrr 0x6408, edx |
|
mov eax, [esi+CURSOR.hot_x] |
shl eax, 16 |
mov ax, word [esi+CURSOR.hot_y] |
wrr 0x6418, eax |
ret |
endp |
|
align 4 |
proc r500_SetCursor stdcall, hcursor:dword, x:dword, y:dword |
pushfd |
cli |
|
mov esi, [hcursor] |
mov edi, [ati_io] |
|
mov eax, [x] |
shl eax, 16 |
mov ax, word [y] |
|
mov [edi+0x6414], eax |
or dword [edi+0x6400], 1 |
|
popfd |
ret |
endp |
|
align 4 |
r500_ShowCursor: |
|
mov edi, [ati_io] |
or dword [edi+0x6400], 1 |
ret |
|
align 4 |
r200_ShowCursor: |
mov edi, [ati_io] |
|
mov eax, [edi+RD_CRTC_GEN_CNTL] |
bts eax,16 |
mov [edi+RD_CRTC_GEN_CNTL], eax |
ret |
|
|
align 4 |
proc r200_SelectCursor stdcall,hcursor:dword |
|
ret |
endp |
|
align 4 |
proc r200_SetCursor stdcall, hcursor:dword, x:dword, y:dword |
pushfd |
cli |
|
xor eax, eax |
xor edx, edx |
mov esi, [hcursor] |
mov ebx, [x] |
mov ecx, [y] |
|
sub ebx, [esi+CURSOR.hot_x] |
jnc @F |
neg ebx |
mov eax, ebx |
shl eax, 16 |
xor ebx, ebx |
@@: |
sub ecx, [esi+CURSOR.hot_y] |
jnc @F |
neg ecx |
mov ax, cx |
mov edx, ecx |
xor ecx, ecx |
@@: |
or eax, 0x80000000 |
wrr CUR_HORZ_VERT_OFF, eax |
|
shl ebx, 16 |
mov bx, cx |
or ebx, 0x80000000 |
wrr CUR_HORZ_VERT_POSN, ebx |
|
shl edx, 8 |
add edx, [esi+CURSOR.base] |
sub edx, LFBAddress |
wrr CUR_OFFSET, edx |
popfd |
ret |
endp |
|
align 4 |
proc video_alloc |
|
pushfd |
cli |
mov ebx, [cursor_start] |
mov ecx, [cursor_end] |
.l1: |
bsf eax,[ebx]; |
jnz .found |
add ebx,4 |
cmp ebx, ecx |
jb .l1 |
popfd |
xor eax,eax |
ret |
.found: |
btr [ebx], eax |
popfd |
|
mov [cursor_start],ebx |
sub ebx, cursor_map |
lea eax,[eax+ebx*8] |
|
shl eax,14 |
add eax, LFBAddress+CURSOR_IMAGE_OFFSET |
ret |
endp |
|
align 4 |
video_free: |
pushfd |
cli |
sub eax, LFBAddress+CURSOR_IMAGE_OFFSET |
shr eax, 14 |
mov ebx, cursor_map |
bts [ebx], eax |
shr eax, 3 |
and eax, not 3 |
add eax, ebx |
cmp [cursor_start], eax |
ja @f |
popfd |
ret |
@@: |
mov [cursor_start], eax |
popfd |
ret |
|
; param |
; eax= pid |
; ebx= src |
; ecx= flags |
|
align 4 |
ati_cursor: |
.src equ esp |
.flags equ esp+4 |
.hcursor equ esp+8 |
|
sub esp, 4 ;space for .hcursor |
push ecx |
push ebx |
|
mov ebx, eax |
mov eax, CURSOR_SIZE |
call CreateObject |
test eax, eax |
jz .fail |
|
mov [.hcursor],eax |
|
xor ebx, ebx |
mov [eax+CURSOR.magic], 'CURS' |
mov [eax+CURSOR.destroy], destroy_cursor |
mov [eax+CURSOR.hot_x], ebx |
mov [eax+CURSOR.hot_y], ebx |
|
call video_alloc |
mov edi, [.hcursor] |
mov [edi+CURSOR.base], eax |
|
mov esi, [.src] |
mov ebx, [.flags] |
cmp bx, LOAD_INDIRECT |
je .indirect |
|
movzx ecx, word [esi+10] |
movzx edx, word [esi+12] |
mov [edi+CURSOR.hot_x], ecx |
mov [edi+CURSOR.hot_y], edx |
|
stdcall ati_init_cursor, eax, esi |
mov eax, [.hcursor] |
.fail: |
add esp, 12 |
ret |
.indirect: |
shr ebx, 16 |
movzx ecx, bh |
movzx edx, bl |
mov [edi+CURSOR.hot_x], ecx |
mov [edi+CURSOR.hot_y], edx |
|
mov edi, eax |
mov ebx, eax |
mov ecx, 64*64 |
xor eax,eax |
cld |
rep stosd |
mov edi, ebx |
|
mov esi, [.src] |
mov ebx, 32 |
cld |
@@: |
mov ecx, 32 |
rep movsd |
add edi, 128 |
dec ebx |
jnz @B |
mov eax, [.hcursor] |
add esp, 12 |
ret |
|
align 4 |
destroy_cursor: |
|
push eax |
mov eax, [eax+CURSOR.base] |
call video_free |
pop eax |
|
call DestroyObject |
ret |
|
align 4 |
proc ati_init_cursor stdcall, dst:dword, src:dword |
locals |
rBase dd ? |
pQuad dd ? |
pBits dd ? |
pAnd dd ? |
width dd ? |
height dd ? |
counter dd ? |
endl |
|
mov esi, [src] |
add esi,[esi+18] |
mov eax,esi |
|
cmp [esi+BI.biBitCount], 24 |
je .img_24 |
cmp [esi+BI.biBitCount], 8 |
je .img_8 |
cmp [esi+BI.biBitCount], 4 |
je .img_4 |
|
.img_2: |
add eax, [esi] |
mov [pQuad],eax |
add eax,8 |
mov [pBits],eax |
add eax, 128 |
mov [pAnd],eax |
mov eax,[esi+4] |
mov [width],eax |
mov ebx,[esi+8] |
shr ebx,1 |
mov [height],ebx |
|
mov edi, pCursor |
add edi, 32*31*4 |
mov [rBase],edi |
|
mov esi,[pQuad] |
.l21: |
mov ebx, [pBits] |
mov ebx, [ebx] |
bswap ebx |
mov eax, [pAnd] |
mov eax, [eax] |
bswap eax |
mov [counter], 32 |
@@: |
xor edx, edx |
shl eax,1 |
setc dl |
dec edx |
|
xor ecx, ecx |
shl ebx,1 |
setc cl |
mov ecx, [esi+ecx*4] |
and ecx, edx |
and edx, 0xFF000000 |
or edx, ecx |
mov [edi], edx |
|
add edi, 4 |
dec [counter] |
jnz @B |
|
add [pBits], 4 |
add [pAnd], 4 |
mov edi,[rBase] |
sub edi,128 |
mov [rBase],edi |
sub [height],1 |
jnz .l21 |
jmp .copy |
.img_4: |
add eax, [esi] |
mov [pQuad],eax |
add eax,64 |
mov [pBits],eax |
add eax, 0x200 |
mov [pAnd],eax |
mov eax,[esi+4] |
mov [width],eax |
mov ebx,[esi+8] |
shr ebx,1 |
mov [height],ebx |
|
mov edi, pCursor |
add edi, 32*31*4 |
mov [rBase],edi |
|
mov esi,[pQuad] |
mov ebx, [pBits] |
.l4: |
mov eax, [pAnd] |
mov eax, [eax] |
bswap eax |
mov [counter], 16 |
@@: |
xor edx, edx |
shl eax,1 |
setc dl |
dec edx |
|
movzx ecx, byte [ebx] |
and cl, 0xF0 |
shr ecx, 2 |
mov ecx, [esi+ecx] |
and ecx, edx |
and edx, 0xFF000000 |
or edx, ecx |
mov [edi], edx |
|
xor edx, edx |
shl eax,1 |
setc dl |
dec edx |
|
movzx ecx, byte [ebx] |
and cl, 0x0F |
mov ecx, [esi+ecx*4] |
and ecx, edx |
and edx, 0xFF000000 |
or edx, ecx |
mov [edi+4], edx |
|
inc ebx |
add edi, 8 |
dec [counter] |
jnz @B |
|
add [pAnd], 4 |
mov edi,[rBase] |
sub edi,128 |
mov [rBase],edi |
sub [height],1 |
jnz .l4 |
jmp .copy |
.img_8: |
add eax, [esi] |
mov [pQuad],eax |
add eax,1024 |
mov [pBits],eax |
add eax, 1024 |
mov [pAnd],eax |
mov eax,[esi+4] |
mov [width],eax |
mov ebx,[esi+8] |
shr ebx,1 |
mov [height],ebx |
|
mov edi, pCursor |
add edi, 32*31*4 |
mov [rBase],edi |
|
mov esi,[pQuad] |
mov ebx, [pBits] |
.l81: |
mov eax, [pAnd] |
mov eax, [eax] |
bswap eax |
mov [counter], 32 |
@@: |
xor edx, edx |
shl eax,1 |
setc dl |
dec edx |
|
movzx ecx, byte [ebx] |
mov ecx, [esi+ecx*4] |
and ecx, edx |
and edx, 0xFF000000 |
or edx, ecx |
mov [edi], edx |
|
inc ebx |
add edi, 4 |
dec [counter] |
jnz @B |
|
add [pAnd], 4 |
mov edi,[rBase] |
sub edi,128 |
mov [rBase],edi |
sub [height],1 |
jnz .l81 |
jmp .copy |
.img_24: |
add eax, [esi] |
mov [pQuad],eax |
add eax, 0xC00 |
mov [pAnd],eax |
mov eax,[esi+BI.biWidth] |
mov [width],eax |
mov ebx,[esi+BI.biHeight] |
shr ebx,1 |
mov [height],ebx |
|
mov edi, pCursor |
add edi, 32*31*4 |
mov [rBase],edi |
|
mov esi,[pAnd] |
mov ebx, [pQuad] |
.row_24: |
mov eax, [esi] |
bswap eax |
mov [counter], 32 |
@@: |
xor edx, edx |
shl eax,1 |
setc dl |
dec edx |
|
mov ecx, [ebx] |
and ecx, 0x00FFFFFF |
and ecx, edx |
and edx, 0xFF000000 |
or edx, ecx |
mov [edi], edx |
add ebx, 3 |
add edi, 4 |
dec [counter] |
jnz @B |
|
add esi, 4 |
mov edi,[rBase] |
sub edi,128 |
mov [rBase],edi |
sub [height],1 |
jnz .row_24 |
.copy: |
mov edi, [dst] |
mov ecx, 64*64 |
xor eax,eax |
rep stosd |
|
mov esi, pCursor |
mov edi, [dst] |
mov ebx, 32 |
cld |
@@: |
mov ecx, 32 |
rep movsd |
add edi, 128 |
dec ebx |
jnz @B |
ret |
endp |
|
align 4 |
proc engFlush |
|
mov edi, [ati_io] |
|
mov eax, [edi+RD_RB2D_DSTCACHE_CTLSTAT] |
or eax,RD_RB2D_DC_FLUSH_ALL |
mov [edi+RD_RB2D_DSTCACHE_CTLSTAT],eax |
|
mov ecx, RD_TIMEOUT |
@@: |
mov eax,[edi+RD_RB2D_DSTCACHE_CTLSTAT] |
and eax, RD_RB2D_DC_BUSY |
jz .exit |
|
sub ecx,1 |
jnz @B |
.exit: |
ret |
endp |
|
|
align 4 |
engWaitForFifo: |
cnt equ bp+8 |
push ebp |
mov ebp, esp |
|
mov edi, [ati_io] |
|
mov ecx, RD_TIMEOUT |
@@: |
mov eax, [edi+RD_RBBM_STATUS] |
and eax, RD_RBBM_FIFOCNT_MASK |
cmp eax, [ebp+8] |
jae .exit |
|
sub ecx,1 |
jmp @B |
|
.exit: |
leave |
ret 4 |
|
align 4 |
proc engWaitForIdle |
|
push dword 64 |
call engWaitForFifo |
|
mov edi, [ati_io] |
mov ecx ,RD_TIMEOUT |
@@: |
mov eax, [edi+RD_RBBM_STATUS] |
and eax,RD_RBBM_ACTIVE |
jz .exit |
|
sub ecx,1 |
jnz @B |
.exit: |
call engFlush |
ret |
endp |
|
|
align 4 |
proc engRestore |
|
; push dword 1 |
; call engWaitForFifo |
|
; mov dword [MMIO+RD_RB2D_DSTCACHE_MODE], 0 |
|
push dword 3 |
call engWaitForFifo |
|
mov edi, [ati_io] |
|
mov eax, [edi+RD_DISPLAY_BASE_ADDR] |
shr eax, 10d |
or eax,(64d shl 22d) |
mov [edi+RD_DEFAULT_OFFSET],eax |
mov [edi+RD_SRC_PITCH_OFFSET],eax |
mov [edi+RD_DST_PITCH_OFFSET],eax |
|
push dword 1 |
call engWaitForFifo |
|
mov edi, [ati_io] |
mov eax, [edi+RD_DP_DATATYPE] |
btr eax, 29d |
mov [edi+RD_DP_DATATYPE],eax |
|
push dword 1 |
call engWaitForFifo |
|
mov edi, [ati_io] |
mov dword [edi+RD_DEFAULT_SC_BOTTOM_RIGHT],\ |
(RD_DEFAULT_SC_RIGHT_MAX or RD_DEFAULT_SC_BOTTOM_MAX) |
|
push dword 1 |
call engWaitForFifo |
|
mov edi, [ati_io] |
mov dword [edi+RD_DP_GUI_MASTER_CNTL],\ |
(RD_GMC_BRUSH_SOLID_COLOR or \ |
RD_GMC_SRC_DATATYPE_COLOR or \ |
(6 shl RD_GMC_DST_DATATYPE_SHIFT) or \ |
RD_GMC_CLR_CMP_CNTL_DIS or \ |
RD_ROP3_P or \ |
RD_GMC_WR_MSK_DIS) |
|
|
push dword 7 |
call engWaitForFifo |
|
mov edi, [ati_io] |
|
mov dword [edi+RD_DST_LINE_START],0 |
mov dword [edi+RD_DST_LINE_END], 0 |
mov dword [edi+RD_DP_BRUSH_FRGD_CLR], 808000ffh |
mov dword [edi+RD_DP_BRUSH_BKGD_CLR], 002020ffh |
mov dword [edi+RD_DP_SRC_FRGD_CLR], 808000ffh |
mov dword [edi+RD_DP_SRC_BKGD_CLR], 004000ffh |
mov dword [edi+RD_DP_WRITE_MASK],0ffffffffh |
|
call engWaitForIdle |
|
ret |
endp |
|
|
|
align 4 |
dword2str: |
mov esi, hex_buff |
mov ecx, -8 |
@@: |
rol eax, 4 |
mov ebx, eax |
and ebx, 0x0F |
mov bl, [ebx+hexletters] |
mov [8+esi+ecx], bl |
inc ecx |
jnz @B |
ret |
|
hexletters db '0123456789ABCDEF' |
hex_buff db 8 dup(0),13,10,0 |
|
R200M equ 0x5a62 ;R300 |
R7000 equ 0x5159 ;R200 |
R750M equ 0x4c57 ;M7 mobile rv200 |
R8500 equ 0x514C ;R200 |
R9000 equ 0x4966 ;RV250 |
R9200 equ 0x5961 ;RV280 |
R9200SE equ 0x5964 ;RV280 |
R9500 equ 0x4144 ;R300 |
R9500P equ 0x4E45 ;R300 |
R9550 equ 0x4153 ;RV350 |
R9600 equ 0x4150 ;RV350 |
R9600XT equ 0x4152 ;RV360 |
R9700P equ 0x4E44 ;R300 |
R9800 equ 0x4E49 ;R350 |
R9800P equ 0x4E48 ;R350 |
R9800XT equ 0x4E4A ;R360 |
|
|
align 4 |
|
devices: |
dd (R200M shl 16)+VID_ATI, init_r200 ;R300 |
dd (R7000 shl 16)+VID_ATI, init_r200 |
dd (R750M shl 16)+VID_ATI, init_r200 ;M7 |
dd (R8500 shl 16)+VID_ATI, init_r200 |
dd (R9000 shl 16)+VID_ATI, init_r200 |
dd (0x514D shl 16)+VID_ATI, init_r200 ;R200 9100 |
|
dd (R9200 shl 16)+VID_ATI, init_r200 |
dd (R9200SE shl 16)+VID_ATI, init_r200 |
|
dd (0x5960 shl 16)+VID_ATI, init_r200 ;RV280 9250 |
|
dd (R9500 shl 16)+VID_ATI, init_r200 |
dd (R9500P shl 16)+VID_ATI, init_r200 |
dd (R9550 shl 16)+VID_ATI, init_r200 |
|
dd (R9600 shl 16)+VID_ATI, init_r200 |
dd (R9600XT shl 16)+VID_ATI, init_r200 |
dd (0x4155 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
dd (0x4151 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
dd (0x4E51 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
|
dd (R9700P shl 16)+VID_ATI, init_r200 |
|
dd (0x4148 shl 16)+VID_ATI, init_r200 ;R350 9800 |
dd (R9800 shl 16)+VID_ATI, init_r200 |
dd (R9800P shl 16)+VID_ATI, init_r200 |
dd (R9800XT shl 16)+VID_ATI, init_r200 |
|
dd (0x5B60 shl 16)+VID_ATI, init_r200 ;RV370 X300/X550 |
dd (0x5B63 shl 16)+VID_ATI, init_r200 ;RV370 X550 |
dd (0x5B62 shl 16)+VID_ATI, init_r200 ;RV380x X600 |
dd (0x3E50 shl 16)+VID_ATI, init_r200 ;RV380 X600/X550 |
|
dd (0x5B4F shl 16)+VID_ATI, init_r200 ;RV410 X700 |
dd (0x5B4D shl 16)+VID_ATI, init_r200 ;RV410 X700 |
dd (0x5B4B shl 16)+VID_ATI, init_r200 ;RV410 X700 |
dd (0x5B4C shl 16)+VID_ATI, init_r200 ;RV410 X700 |
|
dd (0x4a49 shl 16)+VID_ATI, init_r200 ;R420 X800 PRO/GTO |
dd (0x4a4B shl 16)+VID_ATI, init_r200 ;R420 X800 |
dd (0x5549 shl 16)+VID_ATI, init_r200 ;R423 X800 |
dd (0x4a4A shl 16)+VID_ATI, init_r200 ;R420 X800 |
dd (0x554F shl 16)+VID_ATI, init_r200 ;R430 X800 |
dd (0x554D shl 16)+VID_ATI, init_r200 ;R430 X800 |
dd (0x554E shl 16)+VID_ATI, init_r200 ;R430 X800 |
dd (0x5D57 shl 16)+VID_ATI, init_r200 ;R423 X800 XT |
dd (0x4A50 shl 16)+VID_ATI, init_r200 ;R420 X800 XT |
dd (0x554A shl 16)+VID_ATI, init_r200 ;R423 X800 XT |
dd (0x5D4F shl 16)+VID_ATI, init_r200 ;R423 X800/X850 |
dd (0x554B shl 16)+VID_ATI, init_r200 ;R423 X800 GT |
|
dd (0x4B4B shl 16)+VID_ATI, init_r200 ;R481 X850 |
dd (0x4B49 shl 16)+VID_ATI, init_r200 ;R481 X850 |
dd (0x4B4C shl 16)+VID_ATI, init_r200 ;R481 X850 |
|
dd (0x5D4D shl 16)+VID_ATI, init_r200 ;R480 X850 |
dd (0x5D52 shl 16)+VID_ATI, init_r200 ;R480 X850 |
|
dd (0x7100 shl 16)+VID_ATI, init_r500 ;Radeon X1800 |
dd (0x7101 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1800 XT |
dd (0x7102 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1800 |
dd (0x7103 shl 16)+VID_ATI, init_r500 ;Mobility FireGL V7200 |
dd (0x7104 shl 16)+VID_ATI, init_r500 ;FireGL V7200 |
dd (0x7105 shl 16)+VID_ATI, init_r500 ;FireGL V5300 |
dd (0x7106 shl 16)+VID_ATI, init_r500 ;Mobility FireGL V7100 |
dd (0x7108 shl 16)+VID_ATI, init_r500 ;Radeon X1800 |
dd (0x7109 shl 16)+VID_ATI, init_r500 ;Radeon X1800 |
dd (0x710A shl 16)+VID_ATI, init_r500 ;Radeon X1800 |
dd (0x710B shl 16)+VID_ATI, init_r500 ;Radeon X1800 |
dd (0x710C shl 16)+VID_ATI, init_r500 ;Radeon X1800 |
dd (0x710E shl 16)+VID_ATI, init_r500 ;FireGL V7300 |
dd (0x710F shl 16)+VID_ATI, init_r500 ;FireGL V7350 |
dd (0x7140 shl 16)+VID_ATI, init_r500 ;Radeon X1600/X1550 |
dd (0x7141 shl 16)+VID_ATI, init_r500 ;RV505 |
dd (0x7142 shl 16)+VID_ATI, init_r500 ;Radeon X1300/X1550 |
dd (0x7143 shl 16)+VID_ATI, init_r500 ;Radeon X1550 |
dd (0x7144 shl 16)+VID_ATI, init_r500 ;M54-GL |
dd (0x7145 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1400 |
dd (0x7146 shl 16)+VID_ATI, init_r500 ;Radeon X1300/X1550 |
dd (0x7147 shl 16)+VID_ATI, init_r500 ;Radeon X1550 64-bit |
dd (0x7149 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1300 |
dd (0x714A shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1300 |
dd (0x714B shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1300 |
dd (0x714C shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1300 |
dd (0x714D shl 16)+VID_ATI, init_r500 ;Radeon X1300 |
dd (0x714E shl 16)+VID_ATI, init_r500 ;Radeon X1300 |
dd (0x714F shl 16)+VID_ATI, init_r500 ;RV505 |
dd (0x7151 shl 16)+VID_ATI, init_r500 ;RV505 |
dd (0x7152 shl 16)+VID_ATI, init_r500 ;FireGL V3300 |
dd (0x7153 shl 16)+VID_ATI, init_r500 ;FireGL V3350 |
dd (0x715E shl 16)+VID_ATI, init_r500 ;Radeon X1300 |
dd (0x715F shl 16)+VID_ATI, init_r500 ;Radeon X1550 64-bit |
dd (0x7180 shl 16)+VID_ATI, init_r500 ;Radeon X1300/X1550 |
dd (0x7181 shl 16)+VID_ATI, init_r500 ;Radeon X1600 |
dd (0x7183 shl 16)+VID_ATI, init_r500 ;Radeon X1300/X1550 |
dd (0x7186 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1450 |
dd (0x7187 shl 16)+VID_ATI, init_r500 ;Radeon X1300/X1550 |
dd (0x7188 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X2300 |
dd (0x718A shl 16)+VID_ATI, init_r500 ;Mobility Radeon X2300 |
dd (0x718B shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1350 |
dd (0x718C shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1350 |
dd (0x718D shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1450 |
dd (0x718F shl 16)+VID_ATI, init_r500 ;Radeon X1300 |
dd (0x7193 shl 16)+VID_ATI, init_r500 ;Radeon X1550 |
dd (0x7196 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1350 |
dd (0x719B shl 16)+VID_ATI, init_r500 ;FireMV 2250 |
dd (0x719F shl 16)+VID_ATI, init_r500 ;Radeon X1550 64-bit |
dd (0x71C0 shl 16)+VID_ATI, init_r500 ;Radeon X1600 |
dd (0x71C1 shl 16)+VID_ATI, init_r500 ;Radeon X1650 |
dd (0x71C2 shl 16)+VID_ATI, init_r500 ;Radeon X1600 |
dd (0x71C3 shl 16)+VID_ATI, init_r500 ;Radeon X1600 |
dd (0x71C4 shl 16)+VID_ATI, init_r500 ;Mobility FireGL V5200 |
dd (0x71C5 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1600 |
dd (0x71C6 shl 16)+VID_ATI, init_r500 ;Radeon X1650 |
dd (0x71C7 shl 16)+VID_ATI, init_r500 ;Radeon X1650 |
dd (0x71CD shl 16)+VID_ATI, init_r500 ;Radeon X1600 |
dd (0x71CE shl 16)+VID_ATI, init_r500 ;Radeon X1300 XT/X1600 Pro |
dd (0x71D2 shl 16)+VID_ATI, init_r500 ;FireGL V3400 |
dd (0x71D4 shl 16)+VID_ATI, init_r500 ;Mobility FireGL V5250 |
dd (0x71D5 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1700 |
dd (0x71D6 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1700 XT |
dd (0x71DA shl 16)+VID_ATI, init_r500 ;FireGL V5200 |
dd (0x71DE shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1700 |
dd (0x7200 shl 16)+VID_ATI, init_r500 ;Radeon X2300HD |
dd (0x7210 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 2300 |
dd (0x7211 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 2300 |
dd (0x7240 shl 16)+VID_ATI, init_r500 ;Radeon X1950 |
dd (0x7243 shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x7244 shl 16)+VID_ATI, init_r500 ;Radeon X1950 |
dd (0x7245 shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x7246 shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x7247 shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x7248 shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x7249 shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x724A shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x724B shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x724C shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x724D shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x724E shl 16)+VID_ATI, init_r500 ;AMD Stream Processor |
dd (0x724F shl 16)+VID_ATI, init_r500 ;Radeon X1900 |
dd (0x7280 shl 16)+VID_ATI, init_r500 ;Radeon X1950 |
dd (0x7281 shl 16)+VID_ATI, init_r500 ;RV560 |
dd (0x7283 shl 16)+VID_ATI, init_r500 ;RV560 |
dd (0x7284 shl 16)+VID_ATI, init_r500 ;Mobility Radeon X1900 |
dd (0x7287 shl 16)+VID_ATI, init_r500 ;RV560 |
dd (0x7288 shl 16)+VID_ATI, init_r500 ;Radeon X1950 GT |
dd (0x7289 shl 16)+VID_ATI, init_r500 ;RV570 |
dd (0x728B shl 16)+VID_ATI, init_r500 ;RV570 |
dd (0x728C shl 16)+VID_ATI, init_r500 ;ATI FireGL V7400 |
dd (0x7290 shl 16)+VID_ATI, init_r500 ;RV560 |
dd (0x7291 shl 16)+VID_ATI, init_r500 ;Radeon X1650 |
dd (0x7293 shl 16)+VID_ATI, init_r500 ;Radeon X1650 |
dd (0x7297 shl 16)+VID_ATI, init_r500 ;RV560 |
dd (0x791E shl 16)+VID_ATI, init_r500 ;Radeon X1200 |
dd (0x791F shl 16)+VID_ATI, init_r500 ;Radeon X1200 |
dd (0x793F shl 16)+VID_ATI, init_r500 ;Radeon Xpress 1200 |
dd (0x7941 shl 16)+VID_ATI, init_r500 ;Radeon Xpress 1200 |
dd (0x7942 shl 16)+VID_ATI, init_r500 ;Radeon Xpress 1200 (M) |
dd (0x796C shl 16)+VID_ATI, init_r500 ;RS740 |
dd (0x796D shl 16)+VID_ATI, init_r500 ;RS740M |
dd (0x796E shl 16)+VID_ATI, init_r500 ;ATI Radeon 2100 RS740 |
dd (0x796F shl 16)+VID_ATI, init_r500 ;RS740M |
dd (0x9400 shl 16)+VID_ATI, init_r500 ;Radeon HD 2900 XT |
dd (0x9401 shl 16)+VID_ATI, init_r500 ;Radeon HD 2900 XT |
dd (0x9402 shl 16)+VID_ATI, init_r500 ;Radeon HD 2900 XT |
dd (0x9403 shl 16)+VID_ATI, init_r500 ;Radeon HD 2900 Pro |
dd (0x9405 shl 16)+VID_ATI, init_r500 ;Radeon HD 2900 GT |
dd (0x940A shl 16)+VID_ATI, init_r500 ;FireGL V8650 |
dd (0x940B shl 16)+VID_ATI, init_r500 ;FireGL V8600 |
dd (0x940F shl 16)+VID_ATI, init_r500 ;FireGL V7600 |
dd (0x94C0 shl 16)+VID_ATI, init_r500 ;RV610 |
dd (0x94C1 shl 16)+VID_ATI, init_r500 ;Radeon HD 2400 XT |
dd (0x94C3 shl 16)+VID_ATI, init_r500 ;Radeon HD 2400 Pro |
dd (0x94C4 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 2400 PRO AGP |
dd (0x94C5 shl 16)+VID_ATI, init_r500 ;FireGL V4000 |
dd (0x94C6 shl 16)+VID_ATI, init_r500 ;RV610 |
dd (0x94C7 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 2350 |
dd (0x94C8 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 2400 XT |
dd (0x94C9 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 2400 |
dd (0x94CB shl 16)+VID_ATI, init_r500 ;ATI RADEON E2400 |
dd (0x94CC shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 2400 |
dd (0x9500 shl 16)+VID_ATI, init_r500 ;RV670 |
dd (0x9501 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD3870 |
dd (0x9504 shl 16)+VID_ATI, init_r500 ;ATI Mobility Radeon HD 3850 |
dd (0x9505 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD3850 |
dd (0x9506 shl 16)+VID_ATI, init_r500 ;ATI Mobility Radeon HD 3850 X2 |
dd (0x9507 shl 16)+VID_ATI, init_r500 ;RV670 |
dd (0x9508 shl 16)+VID_ATI, init_r500 ;ATI Mobility Radeon HD 3870 |
dd (0x9509 shl 16)+VID_ATI, init_r500 ;ATI Mobility Radeon HD 3870 X2 |
dd (0x950F shl 16)+VID_ATI, init_r500 ;ATI Radeon HD3870 X2 |
dd (0x9511 shl 16)+VID_ATI, init_r500 ;ATI FireGL V7700 |
dd (0x9515 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3850 AGP |
dd (0x9517 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3960 |
dd (0x9519 shl 16)+VID_ATI, init_r500 ;FireStream 9170 |
dd (0x9580 shl 16)+VID_ATI, init_r500 ;RV630 |
dd (0x9581 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 2600 |
dd (0x9583 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 2600 XT |
dd (0x9586 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 2600 XT AGP |
dd (0x9587 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 2600 Pro AGP |
dd (0x9588 shl 16)+VID_ATI, init_r500 ;Radeon HD 2600 XT |
dd (0x9589 shl 16)+VID_ATI, init_r500 ;Radeon HD 2600 Pro |
dd (0x958A shl 16)+VID_ATI, init_r500 ;Gemini RV630 |
dd (0x958B shl 16)+VID_ATI, init_r500 ;Gemini ATI Mobility Radeon HD 2600 XT |
dd (0x958C shl 16)+VID_ATI, init_r500 ;FireGL V5600 |
dd (0x958D shl 16)+VID_ATI, init_r500 ;FireGL V3600 |
dd (0x958E shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 2600 LE |
dd (0x958F shl 16)+VID_ATI, init_r500 ;ATI Mobility FireGL Graphics Processor |
dd (0x9590 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3600 Series |
dd (0x9591 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 3650 |
dd (0x9593 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 3670 |
dd (0x9595 shl 16)+VID_ATI, init_r500 ;Mobility FireGL V5700 |
dd (0x9596 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3650 AGP |
dd (0x9597 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3600 Series |
dd (0x9598 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3670 |
dd (0x9599 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3600 Series |
dd (0x959B shl 16)+VID_ATI, init_r500 ;Mobility FireGL Graphics Processor |
dd (0x95C0 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3470 |
dd (0x95C2 shl 16)+VID_ATI, init_r500 ;ATI Mobility Radeon HD 3430 (M82) |
dd (0x95C4 shl 16)+VID_ATI, init_r500 ;Mobility Radeon HD 3400 Series (M82) |
dd (0x95C5 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3450 |
dd (0x95C7 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3430 |
dd (0x95CC shl 16)+VID_ATI, init_r500 ;Fire PRO Professional Graphics ASIC |
dd (0x95CD shl 16)+VID_ATI, init_r500 ;ATI FireMV 2450 |
dd (0x95CE shl 16)+VID_ATI, init_r500 ;ATI FireMV 2260 |
dd (0x95CF shl 16)+VID_ATI, init_r500 ;ATI FireMV 2260 |
dd (0x9610 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3200 Graphics |
dd (0x9611 shl 16)+VID_ATI, init_r500 ;ATI Radeon 3100 Graphics |
dd (0x9612 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3200 Graphics |
dd (0x9613 shl 16)+VID_ATI, init_r500 ;ATI Radeon 3100 Graphics |
dd (0x9614 shl 16)+VID_ATI, init_r500 ;ATI Radeon HD 3300 Graphics |
dd (0x9440 shl 16)+VID_ATI, init_r500 ;ATI Radeon 4800 Series |
dd (0x9441 shl 16)+VID_ATI, init_r500 ;ATI Radeon 4870 X2 |
dd (0x9442 shl 16)+VID_ATI, init_r500 ;ATI Radeon 4800 Series |
dd (0x9444 shl 16)+VID_ATI, init_r500 ;Everest ATI FirePro Graphics Accelerator |
dd (0x9446 shl 16)+VID_ATI, init_r500 ;K2 ATI FirePro Graphics Accelerator |
dd (0x944E shl 16)+VID_ATI, init_r500 ;RV770 |
dd (0x9456 shl 16)+VID_ATI, init_r500 ;Denali ATI FirePro Graphics |
|
dd 0 ;terminator |
|
version dd (5 shl 16) or (API_VERSION and 0xFFFF) |
|
if R500_HW2D |
|
align 16 |
R5xxRops dd R5XX_ROP3_ZERO, R5XX_ROP3_ZERO ;GXclear |
dd R5XX_ROP3_DSa, R5XX_ROP3_DPa ;Gxand |
dd R5XX_ROP3_SDna, R5XX_ROP3_PDna ;GXandReverse |
dd R5XX_ROP3_S, R5XX_ROP3_P ;GXcopy |
dd R5XX_ROP3_DSna, R5XX_ROP3_DPna ;GXandInverted |
dd R5XX_ROP3_D, R5XX_ROP3_D ;GXnoop |
dd R5XX_ROP3_DSx, R5XX_ROP3_DPx ;GXxor |
dd R5XX_ROP3_DSo, R5XX_ROP3_DPo ;GXor |
dd R5XX_ROP3_DSon, R5XX_ROP3_DPon ;GXnor |
dd R5XX_ROP3_DSxn, R5XX_ROP3_PDxn ;GXequiv |
dd R5XX_ROP3_Dn, R5XX_ROP3_Dn ;GXinvert |
dd R5XX_ROP3_SDno, R5XX_ROP3_PDno ;GXorReverse |
dd R5XX_ROP3_Sn, R5XX_ROP3_Pn ;GXcopyInverted |
dd R5XX_ROP3_DSno, R5XX_ROP3_DPno ;GXorInverted |
dd R5XX_ROP3_DSan, R5XX_ROP3_DPan ;GXnand |
dd R5XX_ROP3_ONE, R5XX_ROP3_ONE ;GXset |
end if |
|
|
sz_ati_srv db 'HWCURSOR',0 |
|
msgInit db 'detect hardware...',13,10,0 |
msgPCI db 'PCI accsess not supported',13,10,0 |
msgFail db 'device not found',13,10,0 |
msg_neg db 'neg ecx',13,10,0 |
|
if R500_HW2D |
|
sz_HDraw_srv db 'HDRAW',0 |
|
msgR5xx2DFlushtimeout \ |
db 'R5xx2DFlush timeout error',13,10,0 |
msgR5xxFIFOWaitLocaltimeout \ |
db 'R5xxFIFOWaitLocal timeout error', 13, 10,0 |
msgR5xx2DIdleLocaltimeout \ |
db 'R5xx2DIdleLocal timeout error', 13,10,0 |
|
align 4 |
R520_cp_microcode: |
dd 0x4200e000, 0000000000 |
dd 0x4000e000, 0000000000 |
dd 0x00000099, 0x00000008 |
dd 0x0000009d, 0x00000008 |
dd 0x4a554b4a, 0000000000 |
dd 0x4a4a4467, 0000000000 |
dd 0x55526f75, 0000000000 |
dd 0x4a7e7d65, 0000000000 |
dd 0xe0dae6f6, 0000000000 |
dd 0x4ac54a4a, 0000000000 |
dd 0xc8828282, 0000000000 |
dd 0xbf4acfc1, 0000000000 |
dd 0x87b04ad5, 0000000000 |
dd 0xb5838383, 0000000000 |
dd 0x4a0f85ba, 0000000000 |
dd 0x000ca000, 0x00000004 |
dd 0x000d0012, 0x00000038 |
dd 0x0000e8b4, 0x00000004 |
dd 0x000d0014, 0x00000038 |
dd 0x0000e8b6, 0x00000004 |
dd 0x000d0016, 0x00000038 |
dd 0x0000e854, 0x00000004 |
dd 0x000d0018, 0x00000038 |
dd 0x0000e855, 0x00000004 |
dd 0x000d001a, 0x00000038 |
dd 0x0000e856, 0x00000004 |
dd 0x000d001c, 0x00000038 |
dd 0x0000e857, 0x00000004 |
dd 0x000d001e, 0x00000038 |
dd 0x0000e824, 0x00000004 |
dd 0x000d0020, 0x00000038 |
dd 0x0000e825, 0x00000004 |
dd 0x000d0022, 0x00000038 |
dd 0x0000e830, 0x00000004 |
dd 0x000d0024, 0x00000038 |
dd 0x0000f0c0, 0x00000004 |
dd 0x000d0026, 0x00000038 |
dd 0x0000f0c1, 0x00000004 |
dd 0x000d0028, 0x00000038 |
dd 0x0000e000, 0x00000004 |
dd 0x000d002a, 0x00000038 |
dd 0x0000e000, 0x00000004 |
dd 0x000d002c, 0x00000038 |
dd 0x0000e000, 0x00000004 |
dd 0x000d002e, 0x00000038 |
dd 0x0000e000, 0x00000004 |
dd 0x000d0030, 0x00000038 |
dd 0x0000e000, 0x00000004 |
dd 0x000d0032, 0x00000038 |
dd 0x0000f180, 0x00000004 |
dd 0x000d0034, 0x00000038 |
dd 0x0000f393, 0x00000004 |
dd 0x000d0036, 0x00000038 |
dd 0x0000f38a, 0x00000004 |
dd 0x000d0038, 0x00000038 |
dd 0x0000f38e, 0x00000004 |
dd 0x0000e821, 0x00000004 |
dd 0x0140a000, 0x00000004 |
dd 0x00000043, 0x00000018 |
dd 0x00cce800, 0x00000004 |
dd 0x001b0001, 0x00000004 |
dd 0x08004800, 0x00000004 |
dd 0x001b0001, 0x00000004 |
dd 0x08004800, 0x00000004 |
dd 0x001b0001, 0x00000004 |
dd 0x08004800, 0x00000004 |
dd 0x0000003a, 0x00000008 |
dd 0x0000a000, 0000000000 |
dd 0x2000451d, 0x00000004 |
dd 0x0000e580, 0x00000004 |
dd 0x000ce581, 0x00000004 |
dd 0x08004580, 0x00000004 |
dd 0x000ce581, 0x00000004 |
dd 0x00000047, 0x00000008 |
dd 0x0000a000, 0000000000 |
dd 0x000c2000, 0x00000004 |
dd 0x0000e50e, 0x00000004 |
dd 0x00032000, 0x00000004 |
dd 0x00022051, 0x00000028 |
dd 0x00000051, 0x00000024 |
dd 0x0800450f, 0x00000004 |
dd 0x0000a04b, 0x00000008 |
dd 0x0000e565, 0x00000004 |
dd 0x0000e566, 0x00000004 |
dd 0x00000052, 0x00000008 |
dd 0x03cca5b4, 0x00000004 |
dd 0x05432000, 0x00000004 |
dd 0x00022000, 0x00000004 |
dd 0x4ccce05e, 0x00000030 |
dd 0x08274565, 0x00000004 |
dd 0x0000005e, 0x00000030 |
dd 0x08004564, 0x00000004 |
dd 0x0000e566, 0x00000004 |
dd 0x00000055, 0x00000008 |
dd 0x00802061, 0x00000010 |
dd 0x00202000, 0x00000004 |
dd 0x001b00ff, 0x00000004 |
dd 0x01000064, 0x00000010 |
dd 0x001f2000, 0x00000004 |
dd 0x001c00ff, 0x00000004 |
dd 0000000000, 0x0000000c |
dd 0x00000072, 0x00000030 |
dd 0x00000055, 0x00000008 |
dd 0x0000e576, 0x00000004 |
dd 0x0000e577, 0x00000004 |
dd 0x0000e50e, 0x00000004 |
dd 0x0000e50f, 0x00000004 |
dd 0x0140a000, 0x00000004 |
dd 0x00000069, 0x00000018 |
dd 0x00c0e5f9, 0x000000c2 |
dd 0x00000069, 0x00000008 |
dd 0x0014e50e, 0x00000004 |
dd 0x0040e50f, 0x00000004 |
dd 0x00c0006c, 0x00000008 |
dd 0x0000e570, 0x00000004 |
dd 0x0000e571, 0x00000004 |
dd 0x0000e572, 0x0000000c |
dd 0x0000a000, 0x00000004 |
dd 0x0140a000, 0x00000004 |
dd 0x0000e568, 0x00000004 |
dd 0x000c2000, 0x00000004 |
dd 0x00000076, 0x00000018 |
dd 0x000b0000, 0x00000004 |
dd 0x18c0e562, 0x00000004 |
dd 0x00000078, 0x00000008 |
dd 0x00c00077, 0x00000008 |
dd 0x000700c7, 0x00000004 |
dd 0x00000080, 0x00000038 |
dd 0x0000e5bb, 0x00000004 |
dd 0x0000e5bc, 0000000000 |
dd 0x0000a000, 0x00000004 |
dd 0x0000e821, 0x00000004 |
dd 0x0000e800, 0000000000 |
dd 0x0000e821, 0x00000004 |
dd 0x0000e82e, 0000000000 |
dd 0x02cca000, 0x00000004 |
dd 0x00140000, 0x00000004 |
dd 0x000ce1cc, 0x00000004 |
dd 0x050de1cd, 0x00000004 |
dd 0x00400000, 0x00000004 |
dd 0x0000008f, 0x00000018 |
dd 0x00c0a000, 0x00000004 |
dd 0x0000008c, 0x00000008 |
dd 0x00000091, 0x00000020 |
dd 0x4200e000, 0000000000 |
dd 0x00000098, 0x00000038 |
dd 0x000ca000, 0x00000004 |
dd 0x00140000, 0x00000004 |
dd 0x000c2000, 0x00000004 |
dd 0x00160000, 0x00000004 |
dd 0x700ce000, 0x00000004 |
dd 0x00140094, 0x00000008 |
dd 0x4000e000, 0000000000 |
dd 0x02400000, 0x00000004 |
dd 0x400ee000, 0x00000004 |
dd 0x02400000, 0x00000004 |
dd 0x4000e000, 0000000000 |
dd 0x000c2000, 0x00000004 |
dd 0x0240e51b, 0x00000004 |
dd 0x0080e50a, 0x00000005 |
dd 0x0080e50b, 0x00000005 |
dd 0x00220000, 0x00000004 |
dd 0x000700c7, 0x00000004 |
dd 0x000000a4, 0x00000038 |
dd 0x0080e5bd, 0x00000005 |
dd 0x0000e5bb, 0x00000005 |
dd 0x0080e5bc, 0x00000005 |
dd 0x00210000, 0x00000004 |
dd 0x02800000, 0x00000004 |
dd 0x00c000ab, 0x00000018 |
dd 0x4180e000, 0x00000040 |
dd 0x000000ad, 0x00000024 |
dd 0x01000000, 0x0000000c |
dd 0x0100e51d, 0x0000000c |
dd 0x000045bb, 0x00000004 |
dd 0x000080a7, 0x00000008 |
dd 0x0000f3ce, 0x00000004 |
dd 0x0140a000, 0x00000004 |
dd 0x00cc2000, 0x00000004 |
dd 0x08c053cf, 0x00000040 |
dd 0x00008000, 0000000000 |
dd 0x0000f3d2, 0x00000004 |
dd 0x0140a000, 0x00000004 |
dd 0x00cc2000, 0x00000004 |
dd 0x08c053d3, 0x00000040 |
dd 0x00008000, 0000000000 |
dd 0x0000f39d, 0x00000004 |
dd 0x0140a000, 0x00000004 |
dd 0x00cc2000, 0x00000004 |
dd 0x08c0539e, 0x00000040 |
dd 0x00008000, 0000000000 |
dd 0x03c00830, 0x00000004 |
dd 0x4200e000, 0000000000 |
dd 0x0000a000, 0x00000004 |
dd 0x200045e0, 0x00000004 |
dd 0x0000e5e1, 0000000000 |
dd 0x00000001, 0000000000 |
dd 0x000700c4, 0x00000004 |
dd 0x0800e394, 0000000000 |
dd 0000000000, 0000000000 |
dd 0x0000e8c4, 0x00000004 |
dd 0x0000e8c5, 0x00000004 |
dd 0x0000e8c6, 0x00000004 |
dd 0x0000e928, 0x00000004 |
dd 0x0000e929, 0x00000004 |
dd 0x0000e92a, 0x00000004 |
dd 0x000000c8, 0x00000008 |
dd 0x0000e928, 0x00000004 |
dd 0x0000e929, 0x00000004 |
dd 0x0000e92a, 0x00000004 |
dd 0x000000cf, 0x00000008 |
dd 0xdeadbeef, 0000000000 |
dd 0x00000116, 0000000000 |
dd 0x000700d3, 0x00000004 |
dd 0x080050e7, 0x00000004 |
dd 0x000700d4, 0x00000004 |
dd 0x0800401c, 0x00000004 |
dd 0x0000e01d, 0000000000 |
dd 0x02c02000, 0x00000004 |
dd 0x00060000, 0x00000004 |
dd 0x000000de, 0x00000034 |
dd 0x000000db, 0x00000008 |
dd 0x00008000, 0x00000004 |
dd 0xc000e000, 0000000000 |
dd 0x0000e1cc, 0x00000004 |
dd 0x0500e1cd, 0x00000004 |
dd 0x000ca000, 0x00000004 |
dd 0x000000e5, 0x00000034 |
dd 0x000000e1, 0x00000008 |
dd 0x0000a000, 0000000000 |
dd 0x0019e1cc, 0x00000004 |
dd 0x001b0001, 0x00000004 |
dd 0x0500a000, 0x00000004 |
dd 0x080041cd, 0x00000004 |
dd 0x000ca000, 0x00000004 |
dd 0x000000fb, 0x00000034 |
dd 0x0000004a, 0x00000008 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0x000c2000, 0x00000004 |
dd 0x001d0018, 0x00000004 |
dd 0x001a0001, 0x00000004 |
dd 0x000000fb, 0x00000034 |
dd 0x0000004a, 0x00000008 |
dd 0x0500a04a, 0x00000008 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
dd 0000000000, 0000000000 |
|
|
end if |
|
if 0 |
msg6100 db '6100: ',0 |
msg6104 db '6104: ',0 |
msg6108 db '6108: ',0 |
msg6110 db '6110: ',0 |
msg6120 db '6120: ',0 |
msg6124 db '6124: ',0 |
msg6128 db '6128: ',0 |
msg612C db '612C: ',0 |
msg6130 db '6130: ',0 |
msg6134 db '6134: ',0 |
msg6138 db '6138: ',0 |
end if |
|
buff db 8 dup(0) |
db 13,10, 0 |
|
section '.data' data readable writable align 16 |
|
pCursor db 4096 dup(?) |
|
cursor_map rd 2 |
cursor_start rd 1 |
cursor_end rd 1 |
|
fnSelect rd 1 |
fnSet rd 1 |
oldSelect rd 1 |
oldSet rd 1 |
oldRestore rd 1 |
oldCreate rd 1 |
|
r500_LFB rd 1 |
|
bus dd ? |
devfn dd ? |
ati_io dd ? |
|
if R500_HW2D |
|
__xmin rd 1 |
__xmax rd 1 |
__ymin rd 1 |
__ymax rd 1 |
|
rhd RHD |
|
end if |