Rev 741 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 741 | Rev 749 | ||
---|---|---|---|
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
2 | ;; ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
7 | 7 | ||
8 | format MS COFF |
8 | format MS COFF |
9 | 9 | ||
10 | include 'proc32.inc' |
10 | include 'proc32.inc' |
11 | include 'imports.inc' |
11 | include 'imports.inc' |
12 | 12 | ||
13 | R500_HW2D equ 0 |
13 | R500_HW2D equ 0 |
14 | 14 | ||
15 | API_VERSION equ 0x01000100 |
15 | API_VERSION equ 0x01000100 |
16 | 16 | ||
17 | DEBUG equ 1 |
17 | DEBUG equ 1 |
18 | 18 | ||
19 | STRIDE equ 8 |
19 | STRIDE equ 8 |
20 | 20 | ||
21 | VID_ATI equ 0x1002 |
21 | VID_ATI equ 0x1002 |
22 | 22 | ||
23 | LOAD_FROM_FILE equ 0 |
23 | LOAD_FROM_FILE equ 0 |
24 | LOAD_FROM_MEM equ 1 |
24 | LOAD_FROM_MEM equ 1 |
25 | LOAD_INDIRECT equ 2 |
25 | LOAD_INDIRECT equ 2 |
26 | LOAD_SYSTEM equ 3 |
26 | LOAD_SYSTEM equ 3 |
27 | 27 | ||
28 | SRV_GETVERSION equ 0 |
28 | SRV_GETVERSION equ 0 |
29 | 29 | ||
30 | struc BITMAPINFOHEADER { |
30 | struc BITMAPINFOHEADER { |
31 | .biSize dd ? ; DWORD |
31 | .biSize dd ? ; DWORD |
32 | .biWidth dd ? ; LONG |
32 | .biWidth dd ? ; LONG |
33 | .biHeight dd ? ; LONG |
33 | .biHeight dd ? ; LONG |
34 | .biPlanes dw ? ; WORD |
34 | .biPlanes dw ? ; WORD |
35 | .biBitCount dw ? ; WORD |
35 | .biBitCount dw ? ; WORD |
36 | .biCompression dd ? ; DWORD |
36 | .biCompression dd ? ; DWORD |
37 | .biSizeImage dd ? ; DWORD |
37 | .biSizeImage dd ? ; DWORD |
38 | .biXPelsPerMeter dd ? ; LONG |
38 | .biXPelsPerMeter dd ? ; LONG |
39 | .biYPelsPerMeter dd ? ; LONG |
39 | .biYPelsPerMeter dd ? ; LONG |
40 | .biClrUsed dd ? ; DWORD |
40 | .biClrUsed dd ? ; DWORD |
41 | .biClrImportant dd ? ; DWORD |
41 | .biClrImportant dd ? ; DWORD |
42 | } |
42 | } |
43 | 43 | ||
44 | virtual at 0 |
44 | virtual at 0 |
45 | BI BITMAPINFOHEADER |
45 | BI BITMAPINFOHEADER |
46 | end virtual |
46 | end virtual |
47 | 47 | ||
48 | struc CURSOR |
48 | struc CURSOR |
49 | {;common object header |
49 | {;common object header |
50 | .magic dd ? ;'CURS' |
50 | .magic dd ? ;'CURS' |
51 | .destroy dd ? ;internal destructor |
51 | .destroy dd ? ;internal destructor |
52 | .fd dd ? ;next object in list |
52 | .fd dd ? ;next object in list |
53 | .bk dd ? ;prev object in list |
53 | .bk dd ? ;prev object in list |
54 | .pid dd ? ;owner id |
54 | .pid dd ? ;owner id |
55 | 55 | ||
56 | ;cursor data |
56 | ;cursor data |
57 | .base dd ? ;allocated memory |
57 | .base dd ? ;allocated memory |
58 | .hot_x dd ? ;hotspot coords |
58 | .hot_x dd ? ;hotspot coords |
59 | .hot_y dd ? |
59 | .hot_y dd ? |
60 | } |
60 | } |
61 | virtual at 0 |
61 | virtual at 0 |
62 | CURSOR CURSOR |
62 | CURSOR CURSOR |
63 | end virtual |
63 | end virtual |
64 | 64 | ||
65 | CURSOR_SIZE equ 32 |
65 | CURSOR_SIZE equ 32 |
66 | 66 | ||
67 | OS_BASE equ 0x80000000 |
67 | OS_BASE equ 0x80000000 |
68 | SLOT_BASE equ (OS_BASE+0x0080000) |
68 | SLOT_BASE equ (OS_BASE+0x0080000) |
69 | LFB_BASE equ 0xFE000000 |
69 | LFB_BASE equ 0xFE000000 |
70 | 70 | ||
71 | PG_SW equ 0x003 |
71 | PG_SW equ 0x003 |
72 | PG_NOCACHE equ 0x018 |
72 | PG_NOCACHE equ 0x018 |
73 | 73 | ||
74 | struc IOCTL |
74 | struc IOCTL |
75 | { .handle dd ? |
75 | { .handle dd ? |
76 | .io_code dd ? |
76 | .io_code dd ? |
77 | .input dd ? |
77 | .input dd ? |
78 | .inp_size dd ? |
78 | .inp_size dd ? |
79 | .output dd ? |
79 | .output dd ? |
80 | .out_size dd ? |
80 | .out_size dd ? |
81 | } |
81 | } |
82 | 82 | ||
83 | virtual at 0 |
83 | virtual at 0 |
84 | IOCTL IOCTL |
84 | IOCTL IOCTL |
85 | end virtual |
85 | end virtual |
86 | 86 | ||
87 | ;MMIO equ 0F9000000h |
87 | ;MMIO equ 0F9000000h |
88 | RD_RB3D_CNTL equ 1c3ch |
88 | RD_RB3D_CNTL equ 1c3ch |
89 | 89 | ||
90 | RD_MEM_CNTL equ 0140h |
90 | RD_MEM_CNTL equ 0140h |
91 | RD_CRTC_GEN_CNTL equ 0050h |
91 | RD_CRTC_GEN_CNTL equ 0050h |
92 | RD_CRTC_CUR_EN equ 10000h |
92 | RD_CRTC_CUR_EN equ 10000h |
93 | RD_DISPLAY_BASE_ADDR equ 023ch |
93 | RD_DISPLAY_BASE_ADDR equ 023ch |
94 | RD_DEFAULT_OFFSET equ 16e0h |
94 | RD_DEFAULT_OFFSET equ 16e0h |
95 | 95 | ||
96 | CUR_HORZ_VERT_OFF equ 0268h |
96 | CUR_HORZ_VERT_OFF equ 0268h |
97 | CUR_HORZ_VERT_POSN equ 0264h |
97 | CUR_HORZ_VERT_POSN equ 0264h |
98 | CUR_OFFSET equ 0260h |
98 | CUR_OFFSET equ 0260h |
99 | 99 | ||
100 | 100 | ||
101 | RD_RB3D_CNTL equ 1c3ch |
101 | RD_RB3D_CNTL equ 1c3ch |
102 | RD_RBBM_STATUS equ 0e40h |
102 | RD_RBBM_STATUS equ 0e40h |
103 | RD_RBBM_FIFOCNT_MASK equ 007fh |
103 | RD_RBBM_FIFOCNT_MASK equ 007fh |
104 | RD_RBBM_ACTIVE equ 80000000h |
104 | RD_RBBM_ACTIVE equ 80000000h |
105 | RD_TIMEOUT equ 2000000 |
105 | RD_TIMEOUT equ 2000000 |
106 | 106 | ||
107 | RD_DP_GUI_MASTER_CNTL equ 0146ch |
107 | RD_DP_GUI_MASTER_CNTL equ 0146ch |
108 | RD_DP_BRUSH_BKGD_CLR equ 01478h |
108 | RD_DP_BRUSH_BKGD_CLR equ 01478h |
109 | RD_DP_BRUSH_FRGD_CLR equ 0147ch |
109 | RD_DP_BRUSH_FRGD_CLR equ 0147ch |
110 | RD_DP_SRC_BKGD_CLR equ 015dch |
110 | RD_DP_SRC_BKGD_CLR equ 015dch |
111 | RD_DP_SRC_FRGD_CLR equ 015d8h |
111 | RD_DP_SRC_FRGD_CLR equ 015d8h |
112 | RD_DP_CNTL equ 016c0h |
112 | RD_DP_CNTL equ 016c0h |
113 | RD_DP_DATATYPE equ 016c4h |
113 | RD_DP_DATATYPE equ 016c4h |
114 | RD_DP_WRITE_MASK equ 016cch |
114 | RD_DP_WRITE_MASK equ 016cch |
115 | RD_DP_SRC_SOURCE_MEMORY equ (2 shl 24) |
115 | RD_DP_SRC_SOURCE_MEMORY equ (2 shl 24) |
116 | RD_DP_SRC_SOURCE_HOST_DATA equ (3 shl 24) |
116 | RD_DP_SRC_SOURCE_HOST_DATA equ (3 shl 24) |
117 | RD_DEFAULT_SC_BOTTOM_RIGHT equ 16e8h |
117 | RD_DEFAULT_SC_BOTTOM_RIGHT equ 16e8h |
118 | RD_GMC_BRUSH_SOLID_COLOR equ (13 shl 4) |
118 | RD_GMC_BRUSH_SOLID_COLOR equ (13 shl 4) |
119 | RD_DEFAULT_SC_RIGHT_MAX equ 1fffh |
119 | RD_DEFAULT_SC_RIGHT_MAX equ 1fffh |
120 | RD_DEFAULT_SC_BOTTOM_MAX equ 1fff0000h |
120 | RD_DEFAULT_SC_BOTTOM_MAX equ 1fff0000h |
121 | RD_GMC_DST_DATATYPE_SHIFT equ 8 |
121 | RD_GMC_DST_DATATYPE_SHIFT equ 8 |
122 | 122 | ||
123 | RD_ROP3_S equ 00cc0000h |
123 | RD_ROP3_S equ 00cc0000h |
124 | RD_ROP3_P equ 00f00000h |
124 | RD_ROP3_P equ 00f00000h |
125 | 125 | ||
126 | RD_RB2D_DSTCACHE_MODE equ 03428h |
126 | RD_RB2D_DSTCACHE_MODE equ 03428h |
127 | RD_RB2D_DSTCACHE_CTLSTAT equ 0342ch |
127 | RD_RB2D_DSTCACHE_CTLSTAT equ 0342ch |
128 | RD_RB2D_DC_FLUSH_ALL equ 000fh |
128 | RD_RB2D_DC_FLUSH_ALL equ 000fh |
129 | RD_RB2D_DC_BUSY equ 80000000h |
129 | RD_RB2D_DC_BUSY equ 80000000h |
130 | 130 | ||
131 | RD_GMC_BRUSH_SOLID_COLOR equ 000000D0h |
131 | RD_GMC_BRUSH_SOLID_COLOR equ 000000D0h |
132 | RD_GMC_SRC_DATATYPE_COLOR equ (3 shl 12) |
132 | RD_GMC_SRC_DATATYPE_COLOR equ (3 shl 12) |
133 | RD_GMC_CLR_CMP_CNTL_DIS equ (1 shl 28) |
133 | RD_GMC_CLR_CMP_CNTL_DIS equ (1 shl 28) |
134 | RD_GMC_WR_MSK_DIS equ (1 shl 30) |
134 | RD_GMC_WR_MSK_DIS equ (1 shl 30) |
135 | 135 | ||
136 | cmdSolidFill equ 73f036d0h |
136 | cmdSolidFill equ 73f036d0h |
137 | 137 | ||
138 | RD_DST_PITCH_OFFSET equ 142ch |
138 | RD_DST_PITCH_OFFSET equ 142ch |
139 | RD_SRC_PITCH_OFFSET equ 1428h |
139 | RD_SRC_PITCH_OFFSET equ 1428h |
140 | 140 | ||
141 | RD_DST_X_LEFT_TO_RIGHT equ 1 |
141 | RD_DST_X_LEFT_TO_RIGHT equ 1 |
142 | RD_DST_Y_TOP_TO_BOTTOM equ 2 |
142 | RD_DST_Y_TOP_TO_BOTTOM equ 2 |
143 | RD_DST_Y_X equ 1438h |
143 | RD_DST_Y_X equ 1438h |
144 | RD_DST_WIDTH_HEIGHT equ 1598h |
144 | RD_DST_WIDTH_HEIGHT equ 1598h |
145 | RD_DST_LINE_START equ 1600h |
145 | RD_DST_LINE_START equ 1600h |
146 | RD_DST_LINE_END equ 1604h |
146 | RD_DST_LINE_END equ 1604h |
147 | R300_MEM_NUM_CHANNELS_MASK equ 0003h |
147 | R300_MEM_NUM_CHANNELS_MASK equ 0003h |
148 | 148 | ||
149 | macro rdr op1, op2 |
149 | macro rdr op1, op2 |
150 | { |
150 | { |
151 | mov edi, [ati_io] |
151 | mov edi, [ati_io] |
152 | mov op1, [edi+op2] |
152 | mov op1, [edi+op2] |
153 | } |
153 | } |
154 | 154 | ||
155 | macro wrr dest, src |
155 | macro wrr dest, src |
156 | { |
156 | { |
157 | mov edi, [ati_io] |
157 | mov edi, [ati_io] |
158 | mov dword [edi+dest], src |
158 | mov dword [edi+dest], src |
159 | } |
159 | } |
160 | 160 | ||
161 | macro rmask dest, val, mask |
161 | macro rmask dest, val, mask |
162 | { |
162 | { |
163 | mov edi, [ati_io] |
163 | mov edi, [ati_io] |
164 | mov eax, [edi+dest] |
164 | mov eax, [edi+dest] |
165 | and eax, not mask |
165 | and eax, not mask |
166 | or eax, (val and mask) |
166 | or eax, (val and mask) |
167 | mov [edi+dest], eax |
167 | mov [edi+dest], eax |
168 | } |
168 | } |
169 | 169 | ||
170 | public START |
170 | public START |
171 | public service_proc |
171 | public service_proc |
172 | public version |
172 | public version |
173 | 173 | ||
174 | CURSOR_IMAGE_OFFSET equ 0x00500000 |
174 | CURSOR_IMAGE_OFFSET equ 0x00500000 |
175 | 175 | ||
176 | DRV_ENTRY equ 1 |
176 | DRV_ENTRY equ 1 |
177 | DRV_EXIT equ -1 |
177 | DRV_EXIT equ -1 |
178 | 178 | ||
179 | section '.flat' code readable align 16 |
179 | section '.flat' code readable align 16 |
180 | 180 | ||
181 | proc START stdcall, state:dword |
181 | proc START stdcall, state:dword |
182 | 182 | ||
183 | cmp [state], 1 |
183 | cmp [state], 1 |
184 | jne .restore |
184 | jne .restore |
185 | 185 | ||
186 | if DEBUG |
186 | if DEBUG |
187 | mov esi, msgInit |
187 | mov esi, msgInit |
188 | call SysMsgBoardStr |
188 | call SysMsgBoardStr |
189 | end if |
189 | end if |
190 | 190 | ||
191 | call detect_ati |
191 | call detect_ati |
192 | test eax, eax |
192 | test eax, eax |
193 | jz .fail |
193 | jz .fail |
194 | 194 | ||
195 | mov ebx, [SelectHwCursor] |
195 | mov ebx, [SelectHwCursor] |
196 | mov ecx, [SetHwCursor] |
196 | mov ecx, [SetHwCursor] |
197 | mov edx, [HwCursorRestore] |
197 | mov edx, [HwCursorRestore] |
198 | mov esi, [HwCursorCreate] |
198 | mov esi, [HwCursorCreate] |
199 | 199 | ||
200 | mov [oldSelect], ebx |
200 | mov [oldSelect], ebx |
201 | mov [oldSet], ecx |
201 | mov [oldSet], ecx |
202 | mov [oldRestore], edx |
202 | mov [oldRestore], edx |
203 | mov [oldCreate], esi |
203 | mov [oldCreate], esi |
204 | 204 | ||
205 | call eax |
205 | call eax |
206 | 206 | ||
207 | or eax, -1 |
207 | or eax, -1 |
208 | mov [cursor_map], eax |
208 | mov [cursor_map], eax |
209 | mov [cursor_map+4], eax |
209 | mov [cursor_map+4], eax |
210 | mov edx, cursor_map |
210 | mov edx, cursor_map |
211 | mov [cursor_start], edx |
211 | mov [cursor_start], edx |
212 | add edx, 8 |
212 | add edx, 8 |
213 | mov [cursor_end], edx |
213 | mov [cursor_end], edx |
214 | 214 | ||
215 | stdcall RegService, sz_ati_srv, service_proc |
215 | stdcall RegService, sz_ati_srv, service_proc |
216 | test eax, eax |
216 | test eax, eax |
217 | jz .restore |
217 | jz .restore |
218 | 218 | ||
219 | if R500_HW2D |
219 | if R500_HW2D |
220 | stdcall RegService, sz_HDraw_srv, r500_HDraw |
220 | stdcall RegService, sz_HDraw_srv, r500_HDraw |
221 | 221 | ||
222 | mov ebx, START |
222 | mov ebx, START |
223 | and ebx, -4096 |
223 | and ebx, -4096 |
224 | mov [eax+0x20], ebx |
224 | mov [eax+0x20], ebx |
225 | mov [eax+0x24], dword 0 ;hack |
225 | mov [eax+0x24], dword 0 ;hack |
226 | end if |
226 | end if |
227 | mov ebx, [fnSelect] |
227 | mov ebx, [fnSelect] |
228 | mov ecx, [fnSet] |
228 | mov ecx, [fnSet] |
229 | 229 | ||
230 | mov [SelectHwCursor], ebx |
230 | mov [SelectHwCursor], ebx |
231 | mov [SetHwCursor], ecx |
231 | mov [SetHwCursor], ecx |
232 | mov dword [HwCursorRestore], drv_restore |
232 | mov dword [HwCursorRestore], drv_restore |
233 | mov dword [HwCursorCreate], ati_cursor |
233 | mov dword [HwCursorCreate], ati_cursor |
234 | 234 | ||
235 | ret |
235 | ret |
236 | .restore: |
236 | .restore: |
237 | mov eax, [oldSelect] |
237 | mov eax, [oldSelect] |
238 | mov ebx, [oldSet] |
238 | mov ebx, [oldSet] |
239 | mov ecx, [oldRestore] |
239 | mov ecx, [oldRestore] |
240 | mov edx, [oldCreate] |
240 | mov edx, [oldCreate] |
241 | 241 | ||
242 | mov [SelectHwCursor], eax |
242 | mov [SelectHwCursor], eax |
243 | mov [SetHwCursor], ebx |
243 | mov [SetHwCursor], ebx |
244 | mov [HwCursorRestore], ecx |
244 | mov [HwCursorRestore], ecx |
245 | mov [HwCursorCreate], edx |
245 | mov [HwCursorCreate], edx |
246 | 246 | ||
247 | xor eax, eax |
247 | xor eax, eax |
248 | ret |
248 | ret |
249 | 249 | ||
250 | .fail: |
250 | .fail: |
251 | if DEBUG |
251 | if DEBUG |
252 | mov esi, msgFail |
252 | mov esi, msgFail |
253 | call SysMsgBoardStr |
253 | call SysMsgBoardStr |
254 | end if |
254 | end if |
255 | 255 | ||
256 | xor eax, eax |
256 | xor eax, eax |
257 | ret |
257 | ret |
258 | endp |
258 | endp |
259 | 259 | ||
260 | handle equ IOCTL.handle |
260 | handle equ IOCTL.handle |
261 | io_code equ IOCTL.io_code |
261 | io_code equ IOCTL.io_code |
262 | input equ IOCTL.input |
262 | input equ IOCTL.input |
263 | inp_size equ IOCTL.inp_size |
263 | inp_size equ IOCTL.inp_size |
264 | output equ IOCTL.output |
264 | output equ IOCTL.output |
265 | out_size equ IOCTL.out_size |
265 | out_size equ IOCTL.out_size |
266 | 266 | ||
267 | align 4 |
267 | align 4 |
268 | proc service_proc stdcall, ioctl:dword |
268 | proc service_proc stdcall, ioctl:dword |
269 | 269 | ||
270 | mov ebx, [ioctl] |
270 | mov ebx, [ioctl] |
271 | cmp [ebx+io_code], SRV_GETVERSION |
271 | cmp [ebx+io_code], SRV_GETVERSION |
272 | jne .fail |
272 | jne .fail |
273 | 273 | ||
274 | mov eax, [ebx+output] |
274 | mov eax, [ebx+output] |
275 | cmp [ebx+out_size], 4 |
275 | cmp [ebx+out_size], 4 |
276 | jne .fail |
276 | jne .fail |
277 | mov [eax], dword API_VERSION |
277 | mov [eax], dword API_VERSION |
278 | xor eax, eax |
278 | xor eax, eax |
279 | ret |
279 | ret |
280 | .fail: |
280 | .fail: |
281 | or eax, -1 |
281 | or eax, -1 |
282 | ret |
282 | ret |
283 | endp |
283 | endp |
284 | 284 | ||
285 | restore handle |
285 | restore handle |
286 | restore io_code |
286 | restore io_code |
287 | restore input |
287 | restore input |
288 | restore inp_size |
288 | restore inp_size |
289 | restore output |
289 | restore output |
290 | restore out_size |
290 | restore out_size |
291 | 291 | ||
292 | align 4 |
292 | align 4 |
293 | proc detect_ati |
293 | proc detect_ati |
294 | locals |
294 | locals |
295 | last_bus dd ? |
295 | last_bus dd ? |
296 | endl |
296 | endl |
297 | 297 | ||
298 | xor eax, eax |
298 | xor eax, eax |
299 | mov [bus], eax |
299 | mov [bus], eax |
300 | inc eax |
300 | inc eax |
301 | call PciApi |
301 | call PciApi |
302 | cmp eax, -1 |
302 | cmp eax, -1 |
303 | je .err |
303 | je .err |
304 | 304 | ||
305 | mov [last_bus], eax |
305 | mov [last_bus], eax |
306 | 306 | ||
307 | .next_bus: |
307 | .next_bus: |
308 | and [devfn], 0 |
308 | and [devfn], 0 |
309 | .next_dev: |
309 | .next_dev: |
310 | stdcall PciRead32, [bus], [devfn], dword 0 |
310 | stdcall PciRead32, [bus], [devfn], dword 0 |
311 | test eax, eax |
311 | test eax, eax |
312 | jz .next |
312 | jz .next |
313 | cmp eax, -1 |
313 | cmp eax, -1 |
314 | je .next |
314 | je .next |
315 | 315 | ||
316 | mov edi, devices |
316 | mov edi, devices |
317 | @@: |
317 | @@: |
318 | mov ebx, [edi] |
318 | mov ebx, [edi] |
319 | test ebx, ebx |
319 | test ebx, ebx |
320 | jz .next |
320 | jz .next |
321 | 321 | ||
322 | cmp eax, ebx |
322 | cmp eax, ebx |
323 | je .found |
323 | je .found |
324 | add edi, STRIDE |
324 | add edi, STRIDE |
325 | jmp @B |
325 | jmp @B |
326 | .next: |
326 | .next: |
327 | inc [devfn] |
327 | inc [devfn] |
328 | cmp [devfn], 256 |
328 | cmp [devfn], 256 |
329 | jb .next_dev |
329 | jb .next_dev |
330 | mov eax, [bus] |
330 | mov eax, [bus] |
331 | inc eax |
331 | inc eax |
332 | mov [bus], eax |
332 | mov [bus], eax |
333 | cmp eax, [last_bus] |
333 | cmp eax, [last_bus] |
334 | jna .next_bus |
334 | jna .next_bus |
335 | xor eax, eax |
335 | xor eax, eax |
336 | ret |
336 | ret |
337 | .found: |
337 | .found: |
338 | mov eax, [edi+4] |
338 | mov eax, [edi+4] |
339 | ret |
339 | ret |
340 | .err: |
340 | .err: |
341 | xor eax, eax |
341 | xor eax, eax |
342 | ret |
342 | ret |
343 | endp |
343 | endp |
344 | 344 | ||
345 | align 4 |
345 | align 4 |
346 | proc init_r200 |
346 | proc init_r200 |
347 | stdcall PciRead32, [bus], [devfn], dword 0x18 |
347 | stdcall PciRead32, [bus], [devfn], dword 0x18 |
348 | stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE) |
348 | stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE) |
349 | test eax, eax |
349 | test eax, eax |
350 | jz .fail |
350 | jz .fail |
351 | 351 | ||
352 | mov [ati_io], eax |
352 | mov [ati_io], eax |
353 | mov edi, eax |
353 | mov edi, eax |
354 | 354 | ||
355 | mov dword [edi+RD_RB3D_CNTL], 0 |
355 | mov dword [edi+RD_RB3D_CNTL], 0 |
356 | call engRestore |
356 | call engRestore |
357 | 357 | ||
358 | mov edi, [ati_io] |
358 | mov edi, [ati_io] |
359 | mov eax, [edi+0x50] |
359 | mov eax, [edi+0x50] |
360 | mov ebx,3 |
360 | mov ebx,3 |
361 | shl ebx,20 |
361 | shl ebx,20 |
362 | not ebx |
362 | not ebx |
363 | and eax,ebx |
363 | and eax,ebx |
364 | mov ebx, 2 |
364 | mov ebx, 2 |
365 | shl ebx,20 |
365 | shl ebx,20 |
366 | or eax, ebx |
366 | or eax, ebx |
367 | mov [edi+0x50], eax |
367 | mov [edi+0x50], eax |
368 | 368 | ||
369 | call r200_ShowCursor |
369 | call r200_ShowCursor |
370 | 370 | ||
371 | mov [fnSelect], r200_SelectCursor |
371 | mov [fnSelect], r200_SelectCursor |
372 | mov [fnSet], r200_SetCursor |
372 | mov [fnSet], r200_SetCursor |
373 | 373 | ||
374 | xor eax, eax |
374 | xor eax, eax |
375 | inc eax |
375 | inc eax |
376 | .fail: |
376 | .fail: |
377 | ret |
377 | ret |
378 | endp |
378 | endp |
379 | 379 | ||
380 | if R500_HW2D |
380 | if R500_HW2D |
381 | include 'r500hw.inc' |
381 | include 'r500hw.inc' |
382 | end if |
382 | end if |
383 | 383 | ||
384 | align 4 |
384 | align 4 |
385 | proc init_r500 |
385 | proc init_r500 |
386 | 386 | ||
387 | stdcall PciRead32, [bus], [devfn], dword 0x18 |
387 | stdcall PciRead32, [bus], [devfn], dword 0x18 |
388 | stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE) |
388 | stdcall MapIoMem,eax,0x10000,(PG_SW+PG_NOCACHE) |
389 | test eax, eax |
389 | test eax, eax |
390 | jz .fail |
390 | jz .fail |
391 | 391 | ||
392 | mov [ati_io], eax |
392 | mov [ati_io], eax |
393 | 393 | ||
394 | mov [fnSelect], r500_SelectCursor |
394 | mov [fnSelect], r500_SelectCursor |
395 | mov [fnSet], r500_SetCursor |
395 | mov [fnSet], r500_SetCursor |
396 | 396 | ||
397 | rdr eax, 0x6110 |
397 | rdr eax, 0x6110 |
398 | mov [r500_LFB], eax |
398 | mov [r500_LFB], eax |
399 | 399 | ||
400 | if R500_HW2D |
400 | if R500_HW2D |
401 | call R5xx2DInit |
401 | call R5xx2DInit |
402 | end if |
402 | end if |
403 | wrr 0x6410, 0x001F001F |
403 | wrr 0x6410, 0x001F001F |
404 | wrr 0x6400, dword (3 shl 8) |
404 | wrr 0x6400, dword (3 shl 8) |
405 | 405 | ||
406 | xor eax, eax |
406 | xor eax, eax |
407 | inc eax |
407 | inc eax |
408 | .fail: |
408 | .fail: |
409 | ret |
409 | ret |
410 | endp |
410 | endp |
411 | 411 | ||
412 | 412 | ||
413 | align 4 |
413 | align 4 |
414 | drv_restore: |
414 | drv_restore: |
415 | ret 8 |
415 | ret 8 |
416 | 416 | ||
417 | 417 | ||
418 | align 4 |
418 | align 4 |
419 | proc r500_SelectCursor stdcall,hcursor:dword |
419 | proc r500_SelectCursor stdcall,hcursor:dword |
420 | 420 | ||
421 | mov esi, [hcursor] |
421 | mov esi, [hcursor] |
422 | 422 | ||
423 | mov edx, [esi+CURSOR.base] |
423 | mov edx, [esi+CURSOR.base] |
424 | sub edx, LFB_BASE |
424 | sub edx, LFB_BASE |
425 | add edx, [r500_LFB] |
425 | add edx, [r500_LFB] |
426 | wrr 0x6408, edx |
426 | wrr 0x6408, edx |
427 | 427 | ||
428 | mov eax, [esi+CURSOR.hot_x] |
428 | mov eax, [esi+CURSOR.hot_x] |
429 | shl eax, 16 |
429 | shl eax, 16 |
430 | mov ax, word [esi+CURSOR.hot_y] |
430 | mov ax, word [esi+CURSOR.hot_y] |
431 | wrr 0x6418, eax |
431 | wrr 0x6418, eax |
432 | ret |
432 | ret |
433 | endp |
433 | endp |
434 | 434 | ||
435 | align 4 |
435 | align 4 |
436 | proc r500_SetCursor stdcall, hcursor:dword, x:dword, y:dword |
436 | proc r500_SetCursor stdcall, hcursor:dword, x:dword, y:dword |
437 | pushfd |
437 | pushfd |
438 | cli |
438 | cli |
439 | 439 | ||
440 | mov esi, [hcursor] |
440 | mov esi, [hcursor] |
441 | mov edi, [ati_io] |
441 | mov edi, [ati_io] |
442 | 442 | ||
443 | mov eax, [x] |
443 | mov eax, [x] |
444 | shl eax, 16 |
444 | shl eax, 16 |
445 | mov ax, word [y] |
445 | mov ax, word [y] |
446 | 446 | ||
447 | mov [edi+0x6414], eax |
447 | mov [edi+0x6414], eax |
448 | or dword [edi+0x6400], 1 |
448 | or dword [edi+0x6400], 1 |
449 | 449 | ||
450 | if 0 |
450 | if 0 |
451 | stdcall R5xxSetupForSolidFill, 0x80808080, 3, 0xFFFFFFFF |
451 | stdcall R5xxSetupForSolidFill, 0x80808080, 3, 0xFFFFFFFF |
452 | stdcall R5xxSolidFillRect, 100,100, 100,100 |
452 | stdcall R5xxSolidFillRect, 100,100, 100,100 |
453 | 453 | ||
454 | stdcall R5xxSetupForSolidFill, 0xFFFF0000, 3, 0xFFFFFFFF |
454 | stdcall R5xxSetupForSolidFill, 0xFFFF0000, 3, 0xFFFFFFFF |
455 | stdcall R5xxSolidFillRect, 110,110, 80,80 |
455 | stdcall R5xxSolidFillRect, 110,110, 80,80 |
456 | 456 | ||
457 | stdcall R5xxSetupForSolidFill, 0xFF00FF00, 3, 0xFFFFFFFF |
457 | stdcall R5xxSetupForSolidFill, 0xFF00FF00, 3, 0xFFFFFFFF |
458 | stdcall R5xxSolidFillRect, 120,120, 60,60 |
458 | stdcall R5xxSolidFillRect, 120,120, 60,60 |
459 | 459 | ||
460 | stdcall R5xxSetupForSolidFill, 0xFF0000FF, 3, 0xFFFFFFFF |
460 | stdcall R5xxSetupForSolidFill, 0xFF0000FF, 3, 0xFFFFFFFF |
461 | stdcall R5xxSolidFillRect, 130,130, 40,40 |
461 | stdcall R5xxSolidFillRect, 130,130, 40,40 |
462 | end if |
462 | end if |
463 | 463 | ||
464 | popfd |
464 | popfd |
465 | ret |
465 | ret |
466 | endp |
466 | endp |
467 | 467 | ||
468 | align 4 |
468 | align 4 |
469 | r500_ShowCursor: |
469 | r500_ShowCursor: |
470 | 470 | ||
471 | mov edi, [ati_io] |
471 | mov edi, [ati_io] |
472 | or dword [edi+0x6400], 1 |
472 | or dword [edi+0x6400], 1 |
473 | ret |
473 | ret |
474 | 474 | ||
475 | align 4 |
475 | align 4 |
476 | r200_ShowCursor: |
476 | r200_ShowCursor: |
477 | mov edi, [ati_io] |
477 | mov edi, [ati_io] |
478 | 478 | ||
479 | mov eax, [edi+RD_CRTC_GEN_CNTL] |
479 | mov eax, [edi+RD_CRTC_GEN_CNTL] |
480 | bts eax,16 |
480 | bts eax,16 |
481 | mov [edi+RD_CRTC_GEN_CNTL], eax |
481 | mov [edi+RD_CRTC_GEN_CNTL], eax |
482 | ret |
482 | ret |
483 | 483 | ||
484 | 484 | ||
485 | align 4 |
485 | align 4 |
486 | proc r200_SelectCursor stdcall,hcursor:dword |
486 | proc r200_SelectCursor stdcall,hcursor:dword |
487 | 487 | ||
488 | ret |
488 | ret |
489 | endp |
489 | endp |
490 | 490 | ||
491 | align 4 |
491 | align 4 |
492 | proc r200_SetCursor stdcall, hcursor:dword, x:dword, y:dword |
492 | proc r200_SetCursor stdcall, hcursor:dword, x:dword, y:dword |
493 | pushfd |
493 | pushfd |
494 | cli |
494 | cli |
495 | 495 | ||
496 | xor eax, eax |
496 | xor eax, eax |
497 | xor edx, edx |
497 | xor edx, edx |
498 | mov esi, [hcursor] |
498 | mov esi, [hcursor] |
499 | mov ebx, [x] |
499 | mov ebx, [x] |
500 | mov ecx, [y] |
500 | mov ecx, [y] |
501 | 501 | ||
502 | sub ebx, [esi+CURSOR.hot_x] |
502 | sub ebx, [esi+CURSOR.hot_x] |
503 | jnc @F |
503 | jnc @F |
504 | neg ebx |
504 | neg ebx |
505 | mov eax, ebx |
505 | mov eax, ebx |
506 | shl eax, 16 |
506 | shl eax, 16 |
507 | xor ebx, ebx |
507 | xor ebx, ebx |
508 | @@: |
508 | @@: |
509 | sub ecx, [esi+CURSOR.hot_y] |
509 | sub ecx, [esi+CURSOR.hot_y] |
510 | jnc @F |
510 | jnc @F |
511 | neg ecx |
511 | neg ecx |
512 | mov ax, cx |
512 | mov ax, cx |
513 | mov edx, ecx |
513 | mov edx, ecx |
514 | xor ecx, ecx |
514 | xor ecx, ecx |
515 | @@: |
515 | @@: |
516 | or eax, 0x80000000 |
516 | or eax, 0x80000000 |
517 | wrr CUR_HORZ_VERT_OFF, eax |
517 | wrr CUR_HORZ_VERT_OFF, eax |
518 | 518 | ||
519 | shl ebx, 16 |
519 | shl ebx, 16 |
520 | mov bx, cx |
520 | mov bx, cx |
521 | or ebx, 0x80000000 |
521 | or ebx, 0x80000000 |
522 | wrr CUR_HORZ_VERT_POSN, ebx |
522 | wrr CUR_HORZ_VERT_POSN, ebx |
523 | 523 | ||
524 | shl edx, 8 |
524 | shl edx, 8 |
525 | add edx, [esi+CURSOR.base] |
525 | add edx, [esi+CURSOR.base] |
526 | sub edx, LFBAddress |
526 | sub edx, LFBAddress |
527 | wrr CUR_OFFSET, edx |
527 | wrr CUR_OFFSET, edx |
528 | popfd |
528 | popfd |
529 | ret |
529 | ret |
530 | endp |
530 | endp |
531 | 531 | ||
532 | align 4 |
532 | align 4 |
533 | proc video_alloc |
533 | proc video_alloc |
534 | 534 | ||
535 | pushfd |
535 | pushfd |
536 | cli |
536 | cli |
537 | mov ebx, [cursor_start] |
537 | mov ebx, [cursor_start] |
538 | mov ecx, [cursor_end] |
538 | mov ecx, [cursor_end] |
539 | .l1: |
539 | .l1: |
540 | bsf eax,[ebx]; |
540 | bsf eax,[ebx]; |
541 | jnz .found |
541 | jnz .found |
542 | add ebx,4 |
542 | add ebx,4 |
543 | cmp ebx, ecx |
543 | cmp ebx, ecx |
544 | jb .l1 |
544 | jb .l1 |
545 | popfd |
545 | popfd |
546 | xor eax,eax |
546 | xor eax,eax |
547 | ret |
547 | ret |
548 | .found: |
548 | .found: |
549 | btr [ebx], eax |
549 | btr [ebx], eax |
550 | popfd |
550 | popfd |
551 | 551 | ||
552 | mov [cursor_start],ebx |
552 | mov [cursor_start],ebx |
553 | sub ebx, cursor_map |
553 | sub ebx, cursor_map |
554 | lea eax,[eax+ebx*8] |
554 | lea eax,[eax+ebx*8] |
555 | 555 | ||
556 | shl eax,14 |
556 | shl eax,14 |
557 | add eax, LFBAddress+CURSOR_IMAGE_OFFSET |
557 | add eax, LFBAddress+CURSOR_IMAGE_OFFSET |
558 | ret |
558 | ret |
559 | endp |
559 | endp |
560 | 560 | ||
561 | align 4 |
561 | align 4 |
562 | video_free: |
562 | video_free: |
563 | pushfd |
563 | pushfd |
564 | cli |
564 | cli |
565 | sub eax, LFBAddress+CURSOR_IMAGE_OFFSET |
565 | sub eax, LFBAddress+CURSOR_IMAGE_OFFSET |
566 | shr eax, 14 |
566 | shr eax, 14 |
567 | mov ebx, cursor_map |
567 | mov ebx, cursor_map |
568 | bts [ebx], eax |
568 | bts [ebx], eax |
569 | shr eax, 3 |
569 | shr eax, 3 |
570 | and eax, not 3 |
570 | and eax, not 3 |
571 | add eax, ebx |
571 | add eax, ebx |
572 | cmp [cursor_start], eax |
572 | cmp [cursor_start], eax |
573 | ja @f |
573 | ja @f |
574 | popfd |
574 | popfd |
575 | ret |
575 | ret |
576 | @@: |
576 | @@: |
577 | mov [cursor_start], eax |
577 | mov [cursor_start], eax |
578 | popfd |
578 | popfd |
579 | ret |
579 | ret |
580 | 580 | ||
581 | ; param |
581 | ; param |
582 | ; eax= pid |
582 | ; eax= pid |
583 | ; ebx= src |
583 | ; ebx= src |
584 | ; ecx= flags |
584 | ; ecx= flags |
585 | 585 | ||
586 | align 4 |
586 | align 4 |
587 | ati_cursor: |
587 | ati_cursor: |
588 | .src equ esp |
588 | .src equ esp |
589 | .flags equ esp+4 |
589 | .flags equ esp+4 |
590 | .hcursor equ esp+8 |
590 | .hcursor equ esp+8 |
591 | 591 | ||
592 | sub esp, 4 ;space for .hcursor |
592 | sub esp, 4 ;space for .hcursor |
593 | push ecx |
593 | push ecx |
594 | push ebx |
594 | push ebx |
595 | 595 | ||
596 | mov ebx, eax |
596 | mov ebx, eax |
597 | mov eax, CURSOR_SIZE |
597 | mov eax, CURSOR_SIZE |
598 | call CreateObject |
598 | call CreateObject |
599 | test eax, eax |
599 | test eax, eax |
600 | jz .fail |
600 | jz .fail |
601 | 601 | ||
602 | mov [.hcursor],eax |
602 | mov [.hcursor],eax |
603 | 603 | ||
604 | xor ebx, ebx |
604 | xor ebx, ebx |
605 | mov [eax+CURSOR.magic], 'CURS' |
605 | mov [eax+CURSOR.magic], 'CURS' |
606 | mov [eax+CURSOR.destroy], destroy_cursor |
606 | mov [eax+CURSOR.destroy], destroy_cursor |
607 | mov [eax+CURSOR.hot_x], ebx |
607 | mov [eax+CURSOR.hot_x], ebx |
608 | mov [eax+CURSOR.hot_y], ebx |
608 | mov [eax+CURSOR.hot_y], ebx |
609 | 609 | ||
610 | call video_alloc |
610 | call video_alloc |
611 | mov edi, [.hcursor] |
611 | mov edi, [.hcursor] |
612 | mov [edi+CURSOR.base], eax |
612 | mov [edi+CURSOR.base], eax |
613 | 613 | ||
614 | mov esi, [.src] |
614 | mov esi, [.src] |
615 | mov ebx, [.flags] |
615 | mov ebx, [.flags] |
616 | cmp bx, LOAD_INDIRECT |
616 | cmp bx, LOAD_INDIRECT |
617 | je .indirect |
617 | je .indirect |
618 | 618 | ||
619 | movzx ecx, word [esi+10] |
619 | movzx ecx, word [esi+10] |
620 | movzx edx, word [esi+12] |
620 | movzx edx, word [esi+12] |
621 | mov [edi+CURSOR.hot_x], ecx |
621 | mov [edi+CURSOR.hot_x], ecx |
622 | mov [edi+CURSOR.hot_y], edx |
622 | mov [edi+CURSOR.hot_y], edx |
623 | 623 | ||
624 | stdcall ati_init_cursor, eax, esi |
624 | stdcall ati_init_cursor, eax, esi |
625 | mov eax, [.hcursor] |
625 | mov eax, [.hcursor] |
626 | .fail: |
626 | .fail: |
627 | add esp, 12 |
627 | add esp, 12 |
628 | ret |
628 | ret |
629 | .indirect: |
629 | .indirect: |
630 | shr ebx, 16 |
630 | shr ebx, 16 |
631 | movzx ecx, bh |
631 | movzx ecx, bh |
632 | movzx edx, bl |
632 | movzx edx, bl |
633 | mov [edi+CURSOR.hot_x], ecx |
633 | mov [edi+CURSOR.hot_x], ecx |
634 | mov [edi+CURSOR.hot_y], edx |
634 | mov [edi+CURSOR.hot_y], edx |
635 | 635 | ||
636 | mov edi, eax |
636 | mov edi, eax |
637 | mov ebx, eax |
637 | mov ebx, eax |
638 | mov ecx, 64*64 |
638 | mov ecx, 64*64 |
639 | xor eax,eax |
639 | xor eax,eax |
640 | cld |
640 | cld |
641 | rep stosd |
641 | rep stosd |
642 | mov edi, ebx |
642 | mov edi, ebx |
643 | 643 | ||
644 | mov esi, [.src] |
644 | mov esi, [.src] |
645 | mov ebx, 32 |
645 | mov ebx, 32 |
646 | cld |
646 | cld |
647 | @@: |
647 | @@: |
648 | mov ecx, 32 |
648 | mov ecx, 32 |
649 | rep movsd |
649 | rep movsd |
650 | add edi, 128 |
650 | add edi, 128 |
651 | dec ebx |
651 | dec ebx |
652 | jnz @B |
652 | jnz @B |
653 | mov eax, [.hcursor] |
653 | mov eax, [.hcursor] |
654 | add esp, 12 |
654 | add esp, 12 |
655 | ret |
655 | ret |
656 | 656 | ||
657 | align 4 |
657 | align 4 |
658 | destroy_cursor: |
658 | destroy_cursor: |
659 | 659 | ||
660 | push eax |
660 | push eax |
661 | mov eax, [eax+CURSOR.base] |
661 | mov eax, [eax+CURSOR.base] |
662 | call video_free |
662 | call video_free |
663 | pop eax |
663 | pop eax |
664 | 664 | ||
665 | call DestroyObject |
665 | call DestroyObject |
666 | ret |
666 | ret |
667 | 667 | ||
668 | align 4 |
668 | align 4 |
669 | proc ati_init_cursor stdcall, dst:dword, src:dword |
669 | proc ati_init_cursor stdcall, dst:dword, src:dword |
670 | locals |
670 | locals |
671 | rBase dd ? |
671 | rBase dd ? |
672 | pQuad dd ? |
672 | pQuad dd ? |
673 | pBits dd ? |
673 | pBits dd ? |
674 | pAnd dd ? |
674 | pAnd dd ? |
675 | width dd ? |
675 | width dd ? |
676 | height dd ? |
676 | height dd ? |
677 | counter dd ? |
677 | counter dd ? |
678 | endl |
678 | endl |
679 | 679 | ||
680 | mov esi, [src] |
680 | mov esi, [src] |
681 | add esi,[esi+18] |
681 | add esi,[esi+18] |
682 | mov eax,esi |
682 | mov eax,esi |
683 | 683 | ||
684 | cmp [esi+BI.biBitCount], 24 |
684 | cmp [esi+BI.biBitCount], 24 |
685 | je .img_24 |
685 | je .img_24 |
686 | cmp [esi+BI.biBitCount], 8 |
686 | cmp [esi+BI.biBitCount], 8 |
687 | je .img_8 |
687 | je .img_8 |
688 | cmp [esi+BI.biBitCount], 4 |
688 | cmp [esi+BI.biBitCount], 4 |
689 | je .img_4 |
689 | je .img_4 |
690 | 690 | ||
691 | .img_2: |
691 | .img_2: |
692 | add eax, [esi] |
692 | add eax, [esi] |
693 | mov [pQuad],eax |
693 | mov [pQuad],eax |
694 | add eax,8 |
694 | add eax,8 |
695 | mov [pBits],eax |
695 | mov [pBits],eax |
696 | add eax, 128 |
696 | add eax, 128 |
697 | mov [pAnd],eax |
697 | mov [pAnd],eax |
698 | mov eax,[esi+4] |
698 | mov eax,[esi+4] |
699 | mov [width],eax |
699 | mov [width],eax |
700 | mov ebx,[esi+8] |
700 | mov ebx,[esi+8] |
701 | shr ebx,1 |
701 | shr ebx,1 |
702 | mov [height],ebx |
702 | mov [height],ebx |
703 | 703 | ||
704 | mov edi, pCursor |
704 | mov edi, pCursor |
705 | add edi, 32*31*4 |
705 | add edi, 32*31*4 |
706 | mov [rBase],edi |
706 | mov [rBase],edi |
707 | 707 | ||
708 | mov esi,[pQuad] |
708 | mov esi,[pQuad] |
709 | .l21: |
709 | .l21: |
710 | mov ebx, [pBits] |
710 | mov ebx, [pBits] |
711 | mov ebx, [ebx] |
711 | mov ebx, [ebx] |
712 | bswap ebx |
712 | bswap ebx |
713 | mov eax, [pAnd] |
713 | mov eax, [pAnd] |
714 | mov eax, [eax] |
714 | mov eax, [eax] |
715 | bswap eax |
715 | bswap eax |
716 | mov [counter], 32 |
716 | mov [counter], 32 |
717 | @@: |
717 | @@: |
718 | xor edx, edx |
718 | xor edx, edx |
719 | shl eax,1 |
719 | shl eax,1 |
720 | setc dl |
720 | setc dl |
721 | dec edx |
721 | dec edx |
722 | 722 | ||
723 | xor ecx, ecx |
723 | xor ecx, ecx |
724 | shl ebx,1 |
724 | shl ebx,1 |
725 | setc cl |
725 | setc cl |
726 | mov ecx, [esi+ecx*4] |
726 | mov ecx, [esi+ecx*4] |
727 | and ecx, edx |
727 | and ecx, edx |
728 | and edx, 0xFF000000 |
728 | and edx, 0xFF000000 |
729 | or edx, ecx |
729 | or edx, ecx |
730 | mov [edi], edx |
730 | mov [edi], edx |
731 | 731 | ||
732 | add edi, 4 |
732 | add edi, 4 |
733 | dec [counter] |
733 | dec [counter] |
734 | jnz @B |
734 | jnz @B |
735 | 735 | ||
736 | add [pBits], 4 |
736 | add [pBits], 4 |
737 | add [pAnd], 4 |
737 | add [pAnd], 4 |
738 | mov edi,[rBase] |
738 | mov edi,[rBase] |
739 | sub edi,128 |
739 | sub edi,128 |
740 | mov [rBase],edi |
740 | mov [rBase],edi |
741 | sub [height],1 |
741 | sub [height],1 |
742 | jnz .l21 |
742 | jnz .l21 |
743 | jmp .copy |
743 | jmp .copy |
744 | .img_4: |
744 | .img_4: |
745 | add eax, [esi] |
745 | add eax, [esi] |
746 | mov [pQuad],eax |
746 | mov [pQuad],eax |
747 | add eax,64 |
747 | add eax,64 |
748 | mov [pBits],eax |
748 | mov [pBits],eax |
749 | add eax, 0x200 |
749 | add eax, 0x200 |
750 | mov [pAnd],eax |
750 | mov [pAnd],eax |
751 | mov eax,[esi+4] |
751 | mov eax,[esi+4] |
752 | mov [width],eax |
752 | mov [width],eax |
753 | mov ebx,[esi+8] |
753 | mov ebx,[esi+8] |
754 | shr ebx,1 |
754 | shr ebx,1 |
755 | mov [height],ebx |
755 | mov [height],ebx |
756 | 756 | ||
757 | mov edi, pCursor |
757 | mov edi, pCursor |
758 | add edi, 32*31*4 |
758 | add edi, 32*31*4 |
759 | mov [rBase],edi |
759 | mov [rBase],edi |
760 | 760 | ||
761 | mov esi,[pQuad] |
761 | mov esi,[pQuad] |
762 | mov ebx, [pBits] |
762 | mov ebx, [pBits] |
763 | .l4: |
763 | .l4: |
764 | mov eax, [pAnd] |
764 | mov eax, [pAnd] |
765 | mov eax, [eax] |
765 | mov eax, [eax] |
766 | bswap eax |
766 | bswap eax |
767 | mov [counter], 16 |
767 | mov [counter], 16 |
768 | @@: |
768 | @@: |
769 | xor edx, edx |
769 | xor edx, edx |
770 | shl eax,1 |
770 | shl eax,1 |
771 | setc dl |
771 | setc dl |
772 | dec edx |
772 | dec edx |
773 | 773 | ||
774 | movzx ecx, byte [ebx] |
774 | movzx ecx, byte [ebx] |
775 | and cl, 0xF0 |
775 | and cl, 0xF0 |
776 | shr ecx, 2 |
776 | shr ecx, 2 |
777 | mov ecx, [esi+ecx] |
777 | mov ecx, [esi+ecx] |
778 | and ecx, edx |
778 | and ecx, edx |
779 | and edx, 0xFF000000 |
779 | and edx, 0xFF000000 |
780 | or edx, ecx |
780 | or edx, ecx |
781 | mov [edi], edx |
781 | mov [edi], edx |
782 | 782 | ||
783 | xor edx, edx |
783 | xor edx, edx |
784 | shl eax,1 |
784 | shl eax,1 |
785 | setc dl |
785 | setc dl |
786 | dec edx |
786 | dec edx |
787 | 787 | ||
788 | movzx ecx, byte [ebx] |
788 | movzx ecx, byte [ebx] |
789 | and cl, 0x0F |
789 | and cl, 0x0F |
790 | mov ecx, [esi+ecx*4] |
790 | mov ecx, [esi+ecx*4] |
791 | and ecx, edx |
791 | and ecx, edx |
792 | and edx, 0xFF000000 |
792 | and edx, 0xFF000000 |
793 | or edx, ecx |
793 | or edx, ecx |
794 | mov [edi+4], edx |
794 | mov [edi+4], edx |
795 | 795 | ||
796 | inc ebx |
796 | inc ebx |
797 | add edi, 8 |
797 | add edi, 8 |
798 | dec [counter] |
798 | dec [counter] |
799 | jnz @B |
799 | jnz @B |
800 | 800 | ||
801 | add [pAnd], 4 |
801 | add [pAnd], 4 |
802 | mov edi,[rBase] |
802 | mov edi,[rBase] |
803 | sub edi,128 |
803 | sub edi,128 |
804 | mov [rBase],edi |
804 | mov [rBase],edi |
805 | sub [height],1 |
805 | sub [height],1 |
806 | jnz .l4 |
806 | jnz .l4 |
807 | jmp .copy |
807 | jmp .copy |
808 | .img_8: |
808 | .img_8: |
809 | add eax, [esi] |
809 | add eax, [esi] |
810 | mov [pQuad],eax |
810 | mov [pQuad],eax |
811 | add eax,1024 |
811 | add eax,1024 |
812 | mov [pBits],eax |
812 | mov [pBits],eax |
813 | add eax, 1024 |
813 | add eax, 1024 |
814 | mov [pAnd],eax |
814 | mov [pAnd],eax |
815 | mov eax,[esi+4] |
815 | mov eax,[esi+4] |
816 | mov [width],eax |
816 | mov [width],eax |
817 | mov ebx,[esi+8] |
817 | mov ebx,[esi+8] |
818 | shr ebx,1 |
818 | shr ebx,1 |
819 | mov [height],ebx |
819 | mov [height],ebx |
820 | 820 | ||
821 | mov edi, pCursor |
821 | mov edi, pCursor |
822 | add edi, 32*31*4 |
822 | add edi, 32*31*4 |
823 | mov [rBase],edi |
823 | mov [rBase],edi |
824 | 824 | ||
825 | mov esi,[pQuad] |
825 | mov esi,[pQuad] |
826 | mov ebx, [pBits] |
826 | mov ebx, [pBits] |
827 | .l81: |
827 | .l81: |
828 | mov eax, [pAnd] |
828 | mov eax, [pAnd] |
829 | mov eax, [eax] |
829 | mov eax, [eax] |
830 | bswap eax |
830 | bswap eax |
831 | mov [counter], 32 |
831 | mov [counter], 32 |
832 | @@: |
832 | @@: |
833 | xor edx, edx |
833 | xor edx, edx |
834 | shl eax,1 |
834 | shl eax,1 |
835 | setc dl |
835 | setc dl |
836 | dec edx |
836 | dec edx |
837 | 837 | ||
838 | movzx ecx, byte [ebx] |
838 | movzx ecx, byte [ebx] |
839 | mov ecx, [esi+ecx*4] |
839 | mov ecx, [esi+ecx*4] |
840 | and ecx, edx |
840 | and ecx, edx |
841 | and edx, 0xFF000000 |
841 | and edx, 0xFF000000 |
842 | or edx, ecx |
842 | or edx, ecx |
843 | mov [edi], edx |
843 | mov [edi], edx |
844 | 844 | ||
845 | inc ebx |
845 | inc ebx |
846 | add edi, 4 |
846 | add edi, 4 |
847 | dec [counter] |
847 | dec [counter] |
848 | jnz @B |
848 | jnz @B |
849 | 849 | ||
850 | add [pAnd], 4 |
850 | add [pAnd], 4 |
851 | mov edi,[rBase] |
851 | mov edi,[rBase] |
852 | sub edi,128 |
852 | sub edi,128 |
853 | mov [rBase],edi |
853 | mov [rBase],edi |
854 | sub [height],1 |
854 | sub [height],1 |
855 | jnz .l81 |
855 | jnz .l81 |
856 | jmp .copy |
856 | jmp .copy |
857 | .img_24: |
857 | .img_24: |
858 | add eax, [esi] |
858 | add eax, [esi] |
859 | mov [pQuad],eax |
859 | mov [pQuad],eax |
860 | add eax, 0xC00 |
860 | add eax, 0xC00 |
861 | mov [pAnd],eax |
861 | mov [pAnd],eax |
862 | mov eax,[esi+BI.biWidth] |
862 | mov eax,[esi+BI.biWidth] |
863 | mov [width],eax |
863 | mov [width],eax |
864 | mov ebx,[esi+BI.biHeight] |
864 | mov ebx,[esi+BI.biHeight] |
865 | shr ebx,1 |
865 | shr ebx,1 |
866 | mov [height],ebx |
866 | mov [height],ebx |
867 | 867 | ||
868 | mov edi, pCursor |
868 | mov edi, pCursor |
869 | add edi, 32*31*4 |
869 | add edi, 32*31*4 |
870 | mov [rBase],edi |
870 | mov [rBase],edi |
871 | 871 | ||
872 | mov esi,[pAnd] |
872 | mov esi,[pAnd] |
873 | mov ebx, [pQuad] |
873 | mov ebx, [pQuad] |
874 | .row_24: |
874 | .row_24: |
875 | mov eax, [esi] |
875 | mov eax, [esi] |
876 | bswap eax |
876 | bswap eax |
877 | mov [counter], 32 |
877 | mov [counter], 32 |
878 | @@: |
878 | @@: |
879 | xor edx, edx |
879 | xor edx, edx |
880 | shl eax,1 |
880 | shl eax,1 |
881 | setc dl |
881 | setc dl |
882 | dec edx |
882 | dec edx |
883 | 883 | ||
884 | mov ecx, [ebx] |
884 | mov ecx, [ebx] |
885 | and ecx, 0x00FFFFFF |
885 | and ecx, 0x00FFFFFF |
886 | and ecx, edx |
886 | and ecx, edx |
887 | and edx, 0xFF000000 |
887 | and edx, 0xFF000000 |
888 | or edx, ecx |
888 | or edx, ecx |
889 | mov [edi], edx |
889 | mov [edi], edx |
890 | add ebx, 3 |
890 | add ebx, 3 |
891 | add edi, 4 |
891 | add edi, 4 |
892 | dec [counter] |
892 | dec [counter] |
893 | jnz @B |
893 | jnz @B |
894 | 894 | ||
895 | add esi, 4 |
895 | add esi, 4 |
896 | mov edi,[rBase] |
896 | mov edi,[rBase] |
897 | sub edi,128 |
897 | sub edi,128 |
898 | mov [rBase],edi |
898 | mov [rBase],edi |
899 | sub [height],1 |
899 | sub [height],1 |
900 | jnz .row_24 |
900 | jnz .row_24 |
901 | .copy: |
901 | .copy: |
902 | mov edi, [dst] |
902 | mov edi, [dst] |
903 | mov ecx, 64*64 |
903 | mov ecx, 64*64 |
904 | xor eax,eax |
904 | xor eax,eax |
905 | rep stosd |
905 | rep stosd |
906 | 906 | ||
907 | mov esi, pCursor |
907 | mov esi, pCursor |
908 | mov edi, [dst] |
908 | mov edi, [dst] |
909 | mov ebx, 32 |
909 | mov ebx, 32 |
910 | cld |
910 | cld |
911 | @@: |
911 | @@: |
912 | mov ecx, 32 |
912 | mov ecx, 32 |
913 | rep movsd |
913 | rep movsd |
914 | add edi, 128 |
914 | add edi, 128 |
915 | dec ebx |
915 | dec ebx |
916 | jnz @B |
916 | jnz @B |
917 | ret |
917 | ret |
918 | endp |
918 | endp |
919 | 919 | ||
920 | align 4 |
920 | align 4 |
921 | proc engFlush |
921 | proc engFlush |
922 | 922 | ||
923 | mov edi, [ati_io] |
923 | mov edi, [ati_io] |
924 | 924 | ||
925 | mov eax, [edi+RD_RB2D_DSTCACHE_CTLSTAT] |
925 | mov eax, [edi+RD_RB2D_DSTCACHE_CTLSTAT] |
926 | or eax,RD_RB2D_DC_FLUSH_ALL |
926 | or eax,RD_RB2D_DC_FLUSH_ALL |
927 | mov [edi+RD_RB2D_DSTCACHE_CTLSTAT],eax |
927 | mov [edi+RD_RB2D_DSTCACHE_CTLSTAT],eax |
928 | 928 | ||
929 | mov ecx, RD_TIMEOUT |
929 | mov ecx, RD_TIMEOUT |
930 | @@: |
930 | @@: |
931 | mov eax,[edi+RD_RB2D_DSTCACHE_CTLSTAT] |
931 | mov eax,[edi+RD_RB2D_DSTCACHE_CTLSTAT] |
932 | and eax, RD_RB2D_DC_BUSY |
932 | and eax, RD_RB2D_DC_BUSY |
933 | jz .exit |
933 | jz .exit |
934 | 934 | ||
935 | sub ecx,1 |
935 | sub ecx,1 |
936 | jnz @B |
936 | jnz @B |
937 | .exit: |
937 | .exit: |
938 | ret |
938 | ret |
939 | endp |
939 | endp |
940 | 940 | ||
941 | 941 | ||
942 | align 4 |
942 | align 4 |
943 | engWaitForFifo: |
943 | engWaitForFifo: |
944 | cnt equ bp+8 |
944 | cnt equ bp+8 |
945 | push ebp |
945 | push ebp |
946 | mov ebp, esp |
946 | mov ebp, esp |
947 | 947 | ||
948 | mov edi, [ati_io] |
948 | mov edi, [ati_io] |
949 | 949 | ||
950 | mov ecx, RD_TIMEOUT |
950 | mov ecx, RD_TIMEOUT |
951 | @@: |
951 | @@: |
952 | mov eax, [edi+RD_RBBM_STATUS] |
952 | mov eax, [edi+RD_RBBM_STATUS] |
953 | and eax, RD_RBBM_FIFOCNT_MASK |
953 | and eax, RD_RBBM_FIFOCNT_MASK |
954 | cmp eax, [ebp+8] |
954 | cmp eax, [ebp+8] |
955 | jae .exit |
955 | jae .exit |
956 | 956 | ||
957 | sub ecx,1 |
957 | sub ecx,1 |
958 | jmp @B |
958 | jmp @B |
959 | 959 | ||
960 | .exit: |
960 | .exit: |
961 | leave |
961 | leave |
962 | ret 4 |
962 | ret 4 |
963 | 963 | ||
964 | align 4 |
964 | align 4 |
965 | proc engWaitForIdle |
965 | proc engWaitForIdle |
966 | 966 | ||
967 | push dword 64 |
967 | push dword 64 |
968 | call engWaitForFifo |
968 | call engWaitForFifo |
969 | 969 | ||
970 | mov edi, [ati_io] |
970 | mov edi, [ati_io] |
971 | mov ecx ,RD_TIMEOUT |
971 | mov ecx ,RD_TIMEOUT |
972 | @@: |
972 | @@: |
973 | mov eax, [edi+RD_RBBM_STATUS] |
973 | mov eax, [edi+RD_RBBM_STATUS] |
974 | and eax,RD_RBBM_ACTIVE |
974 | and eax,RD_RBBM_ACTIVE |
975 | jz .exit |
975 | jz .exit |
976 | 976 | ||
977 | sub ecx,1 |
977 | sub ecx,1 |
978 | jnz @B |
978 | jnz @B |
979 | .exit: |
979 | .exit: |
980 | call engFlush |
980 | call engFlush |
981 | ret |
981 | ret |
982 | endp |
982 | endp |
983 | 983 | ||
984 | 984 | ||
985 | align 4 |
985 | align 4 |
986 | proc engRestore |
986 | proc engRestore |
987 | 987 | ||
988 | ; push dword 1 |
988 | ; push dword 1 |
989 | ; call engWaitForFifo |
989 | ; call engWaitForFifo |
990 | 990 | ||
991 | ; mov dword [MMIO+RD_RB2D_DSTCACHE_MODE], 0 |
991 | ; mov dword [MMIO+RD_RB2D_DSTCACHE_MODE], 0 |
992 | 992 | ||
993 | push dword 3 |
993 | push dword 3 |
994 | call engWaitForFifo |
994 | call engWaitForFifo |
995 | 995 | ||
996 | mov edi, [ati_io] |
996 | mov edi, [ati_io] |
997 | 997 | ||
998 | mov eax, [edi+RD_DISPLAY_BASE_ADDR] |
998 | mov eax, [edi+RD_DISPLAY_BASE_ADDR] |
999 | shr eax, 10d |
999 | shr eax, 10d |
1000 | or eax,(64d shl 22d) |
1000 | or eax,(64d shl 22d) |
1001 | mov [edi+RD_DEFAULT_OFFSET],eax |
1001 | mov [edi+RD_DEFAULT_OFFSET],eax |
1002 | mov [edi+RD_SRC_PITCH_OFFSET],eax |
1002 | mov [edi+RD_SRC_PITCH_OFFSET],eax |
1003 | mov [edi+RD_DST_PITCH_OFFSET],eax |
1003 | mov [edi+RD_DST_PITCH_OFFSET],eax |
1004 | 1004 | ||
1005 | push dword 1 |
1005 | push dword 1 |
1006 | call engWaitForFifo |
1006 | call engWaitForFifo |
1007 | 1007 | ||
1008 | mov edi, [ati_io] |
1008 | mov edi, [ati_io] |
1009 | mov eax, [edi+RD_DP_DATATYPE] |
1009 | mov eax, [edi+RD_DP_DATATYPE] |
1010 | btr eax, 29d |
1010 | btr eax, 29d |
1011 | mov [edi+RD_DP_DATATYPE],eax |
1011 | mov [edi+RD_DP_DATATYPE],eax |
1012 | 1012 | ||
1013 | push dword 1 |
1013 | push dword 1 |
1014 | call engWaitForFifo |
1014 | call engWaitForFifo |
1015 | 1015 | ||
1016 | mov edi, [ati_io] |
1016 | mov edi, [ati_io] |
1017 | mov dword [edi+RD_DEFAULT_SC_BOTTOM_RIGHT],\ |
1017 | mov dword [edi+RD_DEFAULT_SC_BOTTOM_RIGHT],\ |
1018 | (RD_DEFAULT_SC_RIGHT_MAX or RD_DEFAULT_SC_BOTTOM_MAX) |
1018 | (RD_DEFAULT_SC_RIGHT_MAX or RD_DEFAULT_SC_BOTTOM_MAX) |
1019 | 1019 | ||
1020 | push dword 1 |
1020 | push dword 1 |
1021 | call engWaitForFifo |
1021 | call engWaitForFifo |
1022 | 1022 | ||
1023 | mov edi, [ati_io] |
1023 | mov edi, [ati_io] |
1024 | mov dword [edi+RD_DP_GUI_MASTER_CNTL],\ |
1024 | mov dword [edi+RD_DP_GUI_MASTER_CNTL],\ |
1025 | (RD_GMC_BRUSH_SOLID_COLOR or \ |
1025 | (RD_GMC_BRUSH_SOLID_COLOR or \ |
1026 | RD_GMC_SRC_DATATYPE_COLOR or \ |
1026 | RD_GMC_SRC_DATATYPE_COLOR or \ |
1027 | (6 shl RD_GMC_DST_DATATYPE_SHIFT) or \ |
1027 | (6 shl RD_GMC_DST_DATATYPE_SHIFT) or \ |
1028 | RD_GMC_CLR_CMP_CNTL_DIS or \ |
1028 | RD_GMC_CLR_CMP_CNTL_DIS or \ |
1029 | RD_ROP3_P or \ |
1029 | RD_ROP3_P or \ |
1030 | RD_GMC_WR_MSK_DIS) |
1030 | RD_GMC_WR_MSK_DIS) |
1031 | 1031 | ||
1032 | 1032 | ||
1033 | push dword 7 |
1033 | push dword 7 |
1034 | call engWaitForFifo |
1034 | call engWaitForFifo |
1035 | 1035 | ||
1036 | mov edi, [ati_io] |
1036 | mov edi, [ati_io] |
1037 | 1037 | ||
1038 | mov dword [edi+RD_DST_LINE_START],0 |
1038 | mov dword [edi+RD_DST_LINE_START],0 |
1039 | mov dword [edi+RD_DST_LINE_END], 0 |
1039 | mov dword [edi+RD_DST_LINE_END], 0 |
1040 | mov dword [edi+RD_DP_BRUSH_FRGD_CLR], 808000ffh |
1040 | mov dword [edi+RD_DP_BRUSH_FRGD_CLR], 808000ffh |
1041 | mov dword [edi+RD_DP_BRUSH_BKGD_CLR], 002020ffh |
1041 | mov dword [edi+RD_DP_BRUSH_BKGD_CLR], 002020ffh |
1042 | mov dword [edi+RD_DP_SRC_FRGD_CLR], 808000ffh |
1042 | mov dword [edi+RD_DP_SRC_FRGD_CLR], 808000ffh |
1043 | mov dword [edi+RD_DP_SRC_BKGD_CLR], 004000ffh |
1043 | mov dword [edi+RD_DP_SRC_BKGD_CLR], 004000ffh |
1044 | mov dword [edi+RD_DP_WRITE_MASK],0ffffffffh |
1044 | mov dword [edi+RD_DP_WRITE_MASK],0ffffffffh |
1045 | 1045 | ||
1046 | call engWaitForIdle |
1046 | call engWaitForIdle |
1047 | 1047 | ||
1048 | ret |
1048 | ret |
1049 | endp |
1049 | endp |
1050 | 1050 | ||
1051 | 1051 | ||
1052 | 1052 | ||
1053 | align 4 |
1053 | align 4 |
1054 | dword2str: |
1054 | dword2str: |
1055 | mov esi, hex_buff |
1055 | mov esi, hex_buff |
1056 | mov ecx, -8 |
1056 | mov ecx, -8 |
1057 | @@: |
1057 | @@: |
1058 | rol eax, 4 |
1058 | rol eax, 4 |
1059 | mov ebx, eax |
1059 | mov ebx, eax |
1060 | and ebx, 0x0F |
1060 | and ebx, 0x0F |
1061 | mov bl, [ebx+hexletters] |
1061 | mov bl, [ebx+hexletters] |
1062 | mov [8+esi+ecx], bl |
1062 | mov [8+esi+ecx], bl |
1063 | inc ecx |
1063 | inc ecx |
1064 | jnz @B |
1064 | jnz @B |
1065 | ret |
1065 | ret |
1066 | 1066 | ||
1067 | hexletters db '0123456789ABCDEF' |
1067 | hexletters db '0123456789ABCDEF' |
1068 | hex_buff db 8 dup(0),13,10,0 |
1068 | hex_buff db 8 dup(0),13,10,0 |
1069 | 1069 | ||
1070 | R200M equ 0x5a62 ;R300 |
1070 | R200M equ 0x5a62 ;R300 |
1071 | R7000 equ 0x5159 ;R200 |
1071 | R7000 equ 0x5159 ;R200 |
- | 1072 | R750M equ 0x4c57 ;M7 mobile rv200 |
|
1072 | R8500 equ 0x514C ;R200 |
1073 | R8500 equ 0x514C ;R200 |
1073 | R9000 equ 0x4966 ;RV250 |
1074 | R9000 equ 0x4966 ;RV250 |
1074 | R9200 equ 0x5961 ;RV280 |
1075 | R9200 equ 0x5961 ;RV280 |
1075 | R9200SE equ 0x5964 ;RV280 |
1076 | R9200SE equ 0x5964 ;RV280 |
1076 | R9500 equ 0x4144 ;R300 |
1077 | R9500 equ 0x4144 ;R300 |
1077 | R9500P equ 0x4E45 ;R300 |
1078 | R9500P equ 0x4E45 ;R300 |
1078 | R9550 equ 0x4153 ;RV350 |
1079 | R9550 equ 0x4153 ;RV350 |
1079 | R9600 equ 0x4150 ;RV350 |
1080 | R9600 equ 0x4150 ;RV350 |
1080 | R9600XT equ 0x4152 ;RV360 |
1081 | R9600XT equ 0x4152 ;RV360 |
1081 | R9700P equ 0x4E44 ;R300 |
1082 | R9700P equ 0x4E44 ;R300 |
1082 | R9800 equ 0x4E49 ;R350 |
1083 | R9800 equ 0x4E49 ;R350 |
1083 | R9800P equ 0x4E48 ;R350 |
1084 | R9800P equ 0x4E48 ;R350 |
1084 | R9800XT equ 0x4E4A ;R360 |
1085 | R9800XT equ 0x4E4A ;R360 |
1085 | 1086 | ||
1086 | 1087 | ||
1087 | align 4 |
1088 | align 4 |
1088 | 1089 | ||
1089 | devices: |
1090 | devices: |
1090 | dd (R200M shl 16)+VID_ATI, init_r200 ;R300 |
1091 | dd (R200M shl 16)+VID_ATI, init_r200 ;R300 |
1091 | dd (R7000 shl 16)+VID_ATI, init_r200 |
1092 | dd (R7000 shl 16)+VID_ATI, init_r200 |
- | 1093 | dd (R750M shl 16)+VID_ATI, init_r200 ;M7 |
|
1092 | dd (R8500 shl 16)+VID_ATI, init_r200 |
1094 | dd (R8500 shl 16)+VID_ATI, init_r200 |
1093 | dd (R9000 shl 16)+VID_ATI, init_r200 |
1095 | dd (R9000 shl 16)+VID_ATI, init_r200 |
1094 | dd (0x514D shl 16)+VID_ATI, init_r200 ;R200 9100 |
1096 | dd (0x514D shl 16)+VID_ATI, init_r200 ;R200 9100 |
1095 | 1097 | ||
1096 | dd (R9200 shl 16)+VID_ATI, init_r200 |
1098 | dd (R9200 shl 16)+VID_ATI, init_r200 |
1097 | dd (R9200SE shl 16)+VID_ATI, init_r200 |
1099 | dd (R9200SE shl 16)+VID_ATI, init_r200 |
1098 | 1100 | ||
1099 | dd (0x5960 shl 16)+VID_ATI, init_r200 ;RV280 9250 |
1101 | dd (0x5960 shl 16)+VID_ATI, init_r200 ;RV280 9250 |
1100 | 1102 | ||
1101 | dd (R9500 shl 16)+VID_ATI, init_r200 |
1103 | dd (R9500 shl 16)+VID_ATI, init_r200 |
1102 | dd (R9500P shl 16)+VID_ATI, init_r200 |
1104 | dd (R9500P shl 16)+VID_ATI, init_r200 |
1103 | dd (R9550 shl 16)+VID_ATI, init_r200 |
1105 | dd (R9550 shl 16)+VID_ATI, init_r200 |
1104 | 1106 | ||
1105 | dd (R9600 shl 16)+VID_ATI, init_r200 |
1107 | dd (R9600 shl 16)+VID_ATI, init_r200 |
1106 | dd (R9600XT shl 16)+VID_ATI, init_r200 |
1108 | dd (R9600XT shl 16)+VID_ATI, init_r200 |
1107 | dd (0x4155 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
1109 | dd (0x4155 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
1108 | dd (0x4151 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
1110 | dd (0x4151 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
1109 | dd (0x4E51 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
1111 | dd (0x4E51 shl 16)+VID_ATI, init_r200 ;RV350 9600 |
1110 | 1112 | ||
1111 | dd (R9700P shl 16)+VID_ATI, init_r200 |
1113 | dd (R9700P shl 16)+VID_ATI, init_r200 |
1112 | 1114 | ||
1113 | dd (0x4148 shl 16)+VID_ATI, init_r200 ;R350 9800 |
1115 | dd (0x4148 shl 16)+VID_ATI, init_r200 ;R350 9800 |
1114 | dd (R9800 shl 16)+VID_ATI, init_r200 |
1116 | dd (R9800 shl 16)+VID_ATI, init_r200 |
1115 | dd (R9800P shl 16)+VID_ATI, init_r200 |
1117 | dd (R9800P shl 16)+VID_ATI, init_r200 |
1116 | dd (R9800XT shl 16)+VID_ATI, init_r200 |
1118 | dd (R9800XT shl 16)+VID_ATI, init_r200 |
1117 | 1119 | ||
1118 | dd (0x5B60 shl 16)+VID_ATI, init_r200 ;RV370 X300/X550 |
1120 | dd (0x5B60 shl 16)+VID_ATI, init_r200 ;RV370 X300/X550 |
1119 | dd (0x5B63 shl 16)+VID_ATI, init_r200 ;RV370 X550 |
1121 | dd (0x5B63 shl 16)+VID_ATI, init_r200 ;RV370 X550 |
1120 | dd (0x5B62 shl 16)+VID_ATI, init_r200 ;RV380x X600 |
1122 | dd (0x5B62 shl 16)+VID_ATI, init_r200 ;RV380x X600 |
1121 | dd (0x3E50 shl 16)+VID_ATI, init_r200 ;RV380 X600/X550 |
1123 | dd (0x3E50 shl 16)+VID_ATI, init_r200 ;RV380 X600/X550 |
1122 | 1124 | ||
1123 | dd (0x5B4F shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1125 | dd (0x5B4F shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1124 | dd (0x5B4D shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1126 | dd (0x5B4D shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1125 | dd (0x5B4B shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1127 | dd (0x5B4B shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1126 | dd (0x5B4C shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1128 | dd (0x5B4C shl 16)+VID_ATI, init_r200 ;RV410 X700 |
1127 | 1129 | ||
1128 | dd (0x4a49 shl 16)+VID_ATI, init_r200 ;R420 X800 PRO/GTO |
1130 | dd (0x4a49 shl 16)+VID_ATI, init_r200 ;R420 X800 PRO/GTO |
1129 | dd (0x4a4B shl 16)+VID_ATI, init_r200 ;R420 X800 |
1131 | dd (0x4a4B shl 16)+VID_ATI, init_r200 ;R420 X800 |
1130 | dd (0x5549 shl 16)+VID_ATI, init_r200 ;R423 X800 |
1132 | dd (0x5549 shl 16)+VID_ATI, init_r200 ;R423 X800 |
1131 | dd (0x4a4A shl 16)+VID_ATI, init_r200 ;R420 X800 |
1133 | dd (0x4a4A shl 16)+VID_ATI, init_r200 ;R420 X800 |
1132 | dd (0x554F shl 16)+VID_ATI, init_r200 ;R430 X800 |
1134 | dd (0x554F shl 16)+VID_ATI, init_r200 ;R430 X800 |
1133 | dd (0x554D shl 16)+VID_ATI, init_r200 ;R430 X800 |
1135 | dd (0x554D shl 16)+VID_ATI, init_r200 ;R430 X800 |
1134 | dd (0x554E shl 16)+VID_ATI, init_r200 ;R430 X800 |
1136 | dd (0x554E shl 16)+VID_ATI, init_r200 ;R430 X800 |
1135 | dd (0x5D57 shl 16)+VID_ATI, init_r200 ;R423 X800 XT |
1137 | dd (0x5D57 shl 16)+VID_ATI, init_r200 ;R423 X800 XT |
1136 | dd (0x4A50 shl 16)+VID_ATI, init_r200 ;R420 X800 XT |
1138 | dd (0x4A50 shl 16)+VID_ATI, init_r200 ;R420 X800 XT |
1137 | dd (0x554A shl 16)+VID_ATI, init_r200 ;R423 X800 XT |
1139 | dd (0x554A shl 16)+VID_ATI, init_r200 ;R423 X800 XT |
1138 | dd (0x5D4F shl 16)+VID_ATI, init_r200 ;R423 X800/X850 |
1140 | dd (0x5D4F shl 16)+VID_ATI, init_r200 ;R423 X800/X850 |
1139 | dd (0x554B shl 16)+VID_ATI, init_r200 ;R423 X800 GT |
1141 | dd (0x554B shl 16)+VID_ATI, init_r200 ;R423 X800 GT |
1140 | 1142 | ||
1141 | dd (0x4B4B shl 16)+VID_ATI, init_r200 ;R481 X850 |
1143 | dd (0x4B4B shl 16)+VID_ATI, init_r200 ;R481 X850 |
1142 | dd (0x4B49 shl 16)+VID_ATI, init_r200 ;R481 X850 |
1144 | dd (0x4B49 shl 16)+VID_ATI, init_r200 ;R481 X850 |
1143 | dd (0x4B4C shl 16)+VID_ATI, init_r200 ;R481 X850 |
1145 | dd (0x4B4C shl 16)+VID_ATI, init_r200 ;R481 X850 |
1144 | 1146 | ||
1145 | dd (0x5D4D shl 16)+VID_ATI, init_r200 ;R480 X850 |
1147 | dd (0x5D4D shl 16)+VID_ATI, init_r200 ;R480 X850 |
1146 | dd (0x5D52 shl 16)+VID_ATI, init_r200 ;R480 X850 |
1148 | dd (0x5D52 shl 16)+VID_ATI, init_r200 ;R480 X850 |
1147 | 1149 | ||
1148 | dd (0x791E shl 16)+VID_ATI, init_r500 ;RS690 X1200 |
1150 | dd (0x791E shl 16)+VID_ATI, init_r500 ;RS690 X1200 |
1149 | 1151 | ||
1150 | dd (0x7140 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1152 | dd (0x7140 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1151 | dd (0x7142 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1153 | dd (0x7142 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1152 | dd (0x7146 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1154 | dd (0x7146 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1153 | dd (0x714D shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1155 | dd (0x714D shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1154 | dd (0x714E shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1156 | dd (0x714E shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1155 | 1157 | ||
1156 | dd (0x7183 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1158 | dd (0x7183 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1157 | dd (0x7187 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1159 | dd (0x7187 shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1158 | dd (0x718F shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1160 | dd (0x718F shl 16)+VID_ATI, init_r500 ;RV515 X1300 |
1159 | 1161 | ||
1160 | dd (0x7143 shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1162 | dd (0x7143 shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1161 | dd (0x7147 shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1163 | dd (0x7147 shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1162 | dd (0x715F shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1164 | dd (0x715F shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1163 | dd (0x7193 shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1165 | dd (0x7193 shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1164 | dd (0x719F shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1166 | dd (0x719F shl 16)+VID_ATI, init_r500 ;RV515 X1550 |
1165 | 1167 | ||
1166 | dd (0x71C0 shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1168 | dd (0x71C0 shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1167 | dd (0x71C1 shl 16)+VID_ATI, init_r500 ;RV535 X1650 |
1169 | dd (0x71C1 shl 16)+VID_ATI, init_r500 ;RV535 X1650 |
1168 | dd (0x71C2 shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1170 | dd (0x71C2 shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1169 | dd (0x71C3 shl 16)+VID_ATI, init_r500 ;RV535 X1600 |
1171 | dd (0x71C3 shl 16)+VID_ATI, init_r500 ;RV535 X1600 |
1170 | dd (0x71C6 shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1172 | dd (0x71C6 shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1171 | dd (0x71C7 shl 16)+VID_ATI, init_r500 ;RV534 X1650 |
1173 | dd (0x71C7 shl 16)+VID_ATI, init_r500 ;RV534 X1650 |
1172 | 1174 | ||
1173 | dd (0x7181 shl 16)+VID_ATI, init_r500 ;RV515 X1600 |
1175 | dd (0x7181 shl 16)+VID_ATI, init_r500 ;RV515 X1600 |
1174 | dd (0x71CD shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1176 | dd (0x71CD shl 16)+VID_ATI, init_r500 ;RV530 X1600 |
1175 | 1177 | ||
1176 | dd (0x7291 shl 16)+VID_ATI, init_r500 ;R580 X1650 |
1178 | dd (0x7291 shl 16)+VID_ATI, init_r500 ;R580 X1650 |
1177 | dd (0x7293 shl 16)+VID_ATI, init_r500 ;R580 X1650 |
1179 | dd (0x7293 shl 16)+VID_ATI, init_r500 ;R580 X1650 |
1178 | 1180 | ||
1179 | dd (0x7100 shl 16)+VID_ATI, init_r500 ;RV520 X1800 |
1181 | dd (0x7100 shl 16)+VID_ATI, init_r500 ;RV520 X1800 |
1180 | dd (0x7109 shl 16)+VID_ATI, init_r500 ;RV520 X1800 |
1182 | dd (0x7109 shl 16)+VID_ATI, init_r500 ;RV520 X1800 |
1181 | dd (0x710A shl 16)+VID_ATI, init_r500 ;RV520 X1800 GTO |
1183 | dd (0x710A shl 16)+VID_ATI, init_r500 ;RV520 X1800 GTO |
1182 | 1184 | ||
1183 | dd (0x7249 shl 16)+VID_ATI, init_r500 ;RV580 X1900 |
1185 | dd (0x7249 shl 16)+VID_ATI, init_r500 ;RV580 X1900 |
1184 | dd (0x724B shl 16)+VID_ATI, init_r500 ;RV580 X1900 GT |
1186 | dd (0x724B shl 16)+VID_ATI, init_r500 ;RV580 X1900 GT |
1185 | 1187 | ||
1186 | dd (0x7240 shl 16)+VID_ATI, init_r500 ;RV580 X1950 |
1188 | dd (0x7240 shl 16)+VID_ATI, init_r500 ;RV580 X1950 |
1187 | dd (0x7244 shl 16)+VID_ATI, init_r500 ;RV580 X1950 |
1189 | dd (0x7244 shl 16)+VID_ATI, init_r500 ;RV580 X1950 |
1188 | dd (0x7248 shl 16)+VID_ATI, init_r500 ;RV580 X1950 |
1190 | dd (0x7248 shl 16)+VID_ATI, init_r500 ;RV580 X1950 |
1189 | 1191 | ||
1190 | dd (0x7288 shl 16)+VID_ATI, init_r500 ;R580 X1950 GT |
1192 | dd (0x7288 shl 16)+VID_ATI, init_r500 ;R580 X1950 GT |
1191 | dd (0x7280 shl 16)+VID_ATI, init_r500 ;R580 X1950 PRO |
1193 | dd (0x7280 shl 16)+VID_ATI, init_r500 ;R580 X1950 PRO |
1192 | 1194 | ||
1193 | dd (0x94C3 shl 16)+VID_ATI, init_r500 ;RV610 HD 2400 PRO |
1195 | dd (0x94C3 shl 16)+VID_ATI, init_r500 ;RV610 HD 2400 PRO |
1194 | dd (0x94C1 shl 16)+VID_ATI, init_r500 ;RV610 HD 2400 XT |
1196 | dd (0x94C1 shl 16)+VID_ATI, init_r500 ;RV610 HD 2400 XT |
1195 | 1197 | ||
1196 | dd (0x9589 shl 16)+VID_ATI, init_r500 ;RV630 HD 2600 PRO |
1198 | dd (0x9589 shl 16)+VID_ATI, init_r500 ;RV630 HD 2600 PRO |
1197 | dd (0x958A shl 16)+VID_ATI, init_r500 ;RV630 HD 2600 X2 |
1199 | dd (0x958A shl 16)+VID_ATI, init_r500 ;RV630 HD 2600 X2 |
1198 | dd (0x9588 shl 16)+VID_ATI, init_r500 ;RV630 HD 2600 XT |
1200 | dd (0x9588 shl 16)+VID_ATI, init_r500 ;RV630 HD 2600 XT |
1199 | 1201 | ||
1200 | dd (0x9403 shl 16)+VID_ATI, init_r500 ;R600 HD 2900 PRO |
1202 | dd (0x9403 shl 16)+VID_ATI, init_r500 ;R600 HD 2900 PRO |
1201 | dd (0x9409 shl 16)+VID_ATI, init_r500 ;R600 HD 2900 XT |
1203 | dd (0x9409 shl 16)+VID_ATI, init_r500 ;R600 HD 2900 XT |
1202 | 1204 | ||
1203 | 1205 | ||
1204 | dd 0 ;terminator |
1206 | dd 0 ;terminator |
1205 | 1207 | ||
1206 | version dd (5 shl 16) or (API_VERSION and 0xFFFF) |
1208 | version dd (5 shl 16) or (API_VERSION and 0xFFFF) |
1207 | 1209 | ||
1208 | if R500_HW2D |
1210 | if R500_HW2D |
1209 | 1211 | ||
1210 | align 16 |
1212 | align 16 |
1211 | R5xxRops dd R5XX_ROP3_ZERO, R5XX_ROP3_ZERO ;GXclear |
1213 | R5xxRops dd R5XX_ROP3_ZERO, R5XX_ROP3_ZERO ;GXclear |
1212 | dd R5XX_ROP3_DSa, R5XX_ROP3_DPa ;Gxand |
1214 | dd R5XX_ROP3_DSa, R5XX_ROP3_DPa ;Gxand |
1213 | dd R5XX_ROP3_SDna, R5XX_ROP3_PDna ;GXandReverse |
1215 | dd R5XX_ROP3_SDna, R5XX_ROP3_PDna ;GXandReverse |
1214 | dd R5XX_ROP3_S, R5XX_ROP3_P ;GXcopy |
1216 | dd R5XX_ROP3_S, R5XX_ROP3_P ;GXcopy |
1215 | dd R5XX_ROP3_DSna, R5XX_ROP3_DPna ;GXandInverted |
1217 | dd R5XX_ROP3_DSna, R5XX_ROP3_DPna ;GXandInverted |
1216 | dd R5XX_ROP3_D, R5XX_ROP3_D ;GXnoop |
1218 | dd R5XX_ROP3_D, R5XX_ROP3_D ;GXnoop |
1217 | dd R5XX_ROP3_DSx, R5XX_ROP3_DPx ;GXxor |
1219 | dd R5XX_ROP3_DSx, R5XX_ROP3_DPx ;GXxor |
1218 | dd R5XX_ROP3_DSo, R5XX_ROP3_DPo ;GXor |
1220 | dd R5XX_ROP3_DSo, R5XX_ROP3_DPo ;GXor |
1219 | dd R5XX_ROP3_DSon, R5XX_ROP3_DPon ;GXnor |
1221 | dd R5XX_ROP3_DSon, R5XX_ROP3_DPon ;GXnor |
1220 | dd R5XX_ROP3_DSxn, R5XX_ROP3_PDxn ;GXequiv |
1222 | dd R5XX_ROP3_DSxn, R5XX_ROP3_PDxn ;GXequiv |
1221 | dd R5XX_ROP3_Dn, R5XX_ROP3_Dn ;GXinvert |
1223 | dd R5XX_ROP3_Dn, R5XX_ROP3_Dn ;GXinvert |
1222 | dd R5XX_ROP3_SDno, R5XX_ROP3_PDno ;GXorReverse |
1224 | dd R5XX_ROP3_SDno, R5XX_ROP3_PDno ;GXorReverse |
1223 | dd R5XX_ROP3_Sn, R5XX_ROP3_Pn ;GXcopyInverted |
1225 | dd R5XX_ROP3_Sn, R5XX_ROP3_Pn ;GXcopyInverted |
1224 | dd R5XX_ROP3_DSno, R5XX_ROP3_DPno ;GXorInverted |
1226 | dd R5XX_ROP3_DSno, R5XX_ROP3_DPno ;GXorInverted |
1225 | dd R5XX_ROP3_DSan, R5XX_ROP3_DPan ;GXnand |
1227 | dd R5XX_ROP3_DSan, R5XX_ROP3_DPan ;GXnand |
1226 | dd R5XX_ROP3_ONE, R5XX_ROP3_ONE ;GXset |
1228 | dd R5XX_ROP3_ONE, R5XX_ROP3_ONE ;GXset |
1227 | end if |
1229 | end if |
1228 | 1230 | ||
1229 | 1231 | ||
1230 | sz_ati_srv db 'HWCURSOR',0 |
1232 | sz_ati_srv db 'HWCURSOR',0 |
1231 | 1233 | ||
1232 | msgInit db 'detect hardware...',13,10,0 |
1234 | msgInit db 'detect hardware...',13,10,0 |
1233 | msgPCI db 'PCI accsess not supported',13,10,0 |
1235 | msgPCI db 'PCI accsess not supported',13,10,0 |
1234 | msgFail db 'device not found',13,10,0 |
1236 | msgFail db 'device not found',13,10,0 |
1235 | msg_neg db 'neg ecx',13,10,0 |
1237 | msg_neg db 'neg ecx',13,10,0 |
1236 | 1238 | ||
1237 | if R500_HW2D |
1239 | if R500_HW2D |
1238 | 1240 | ||
1239 | sz_HDraw_srv db 'HDRAW',0 |
1241 | sz_HDraw_srv db 'HDRAW',0 |
1240 | 1242 | ||
1241 | msgR5xx2DFlushtimeout \ |
1243 | msgR5xx2DFlushtimeout \ |
1242 | db 'R5xx2DFlush timeout error',13,10,0 |
1244 | db 'R5xx2DFlush timeout error',13,10,0 |
1243 | msgR5xxFIFOWaitLocaltimeout \ |
1245 | msgR5xxFIFOWaitLocaltimeout \ |
1244 | db 'R5xxFIFOWaitLocal timeout error', 13, 10,0 |
1246 | db 'R5xxFIFOWaitLocal timeout error', 13, 10,0 |
1245 | msgR5xx2DIdleLocaltimeout \ |
1247 | msgR5xx2DIdleLocaltimeout \ |
1246 | db 'R5xx2DIdleLocal timeout error', 13,10,0 |
1248 | db 'R5xx2DIdleLocal timeout error', 13,10,0 |
1247 | end if |
1249 | end if |
1248 | 1250 | ||
1249 | if 0 |
1251 | if 0 |
1250 | msg6100 db '6100: ',0 |
1252 | msg6100 db '6100: ',0 |
1251 | msg6104 db '6104: ',0 |
1253 | msg6104 db '6104: ',0 |
1252 | msg6108 db '6108: ',0 |
1254 | msg6108 db '6108: ',0 |
1253 | msg6110 db '6110: ',0 |
1255 | msg6110 db '6110: ',0 |
1254 | msg6120 db '6120: ',0 |
1256 | msg6120 db '6120: ',0 |
1255 | msg6124 db '6124: ',0 |
1257 | msg6124 db '6124: ',0 |
1256 | msg6128 db '6128: ',0 |
1258 | msg6128 db '6128: ',0 |
1257 | msg612C db '612C: ',0 |
1259 | msg612C db '612C: ',0 |
1258 | msg6130 db '6130: ',0 |
1260 | msg6130 db '6130: ',0 |
1259 | msg6134 db '6134: ',0 |
1261 | msg6134 db '6134: ',0 |
1260 | msg6138 db '6138: ',0 |
1262 | msg6138 db '6138: ',0 |
1261 | end if |
1263 | end if |
1262 | 1264 | ||
1263 | buff db 8 dup(0) |
1265 | buff db 8 dup(0) |
1264 | db 13,10, 0 |
1266 | db 13,10, 0 |
1265 | 1267 | ||
1266 | section '.data' data readable writable align 16 |
1268 | section '.data' data readable writable align 16 |
1267 | 1269 | ||
1268 | pCursor db 4096 dup(?) |
1270 | pCursor db 4096 dup(?) |
1269 | 1271 | ||
1270 | cursor_map rd 2 |
1272 | cursor_map rd 2 |
1271 | cursor_start rd 1 |
1273 | cursor_start rd 1 |
1272 | cursor_end rd 1 |
1274 | cursor_end rd 1 |
1273 | 1275 | ||
1274 | fnSelect rd 1 |
1276 | fnSelect rd 1 |
1275 | fnSet rd 1 |
1277 | fnSet rd 1 |
1276 | oldSelect rd 1 |
1278 | oldSelect rd 1 |
1277 | oldSet rd 1 |
1279 | oldSet rd 1 |
1278 | oldRestore rd 1 |
1280 | oldRestore rd 1 |
1279 | oldCreate rd 1 |
1281 | oldCreate rd 1 |
1280 | 1282 | ||
1281 | r500_LFB rd 1 |
1283 | r500_LFB rd 1 |
1282 | 1284 | ||
1283 | bus dd ? |
1285 | bus dd ? |
1284 | devfn dd ? |
1286 | devfn dd ? |
1285 | ati_io dd ? |
1287 | ati_io dd ? |
1286 | 1288 | ||
1287 | if R500_HW2D |
1289 | if R500_HW2D |
1288 | 1290 | ||
1289 | __xmin rd 1 |
1291 | __xmin rd 1 |
1290 | __xmax rd 1 |
1292 | __xmax rd 1 |
1291 | __ymin rd 1 |
1293 | __ymin rd 1 |
1292 | __ymax rd 1 |
1294 | __ymax rd 1 |
1293 | 1295 | ||
1294 | rhd RHD |
1296 | rhd RHD |
1295 | 1297 | ||
1296 | end if |
1298 | end if |