;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; ;; 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