]>
Commit | Line | Data |
---|---|---|
093c790e AM |
1 | diff -urN XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_accel.c XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_accel.c |
2 | --- XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_accel.c Fri Nov 8 19:03:32 2002 | |
3 | +++ XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_accel.c Mon May 5 12:30:22 2003 | |
4 | @@ -470,6 +470,7 @@ | |
5 | | NO_TRANSPARENCY | |
6 | | HARDWARE_PATTERN_PROGRAMMED_BITS | |
7 | | HARDWARE_PATTERN_PROGRAMMED_ORIGIN | |
8 | + | ROP_NEEDS_SOURCE | |
9 | ; | |
10 | } | |
11 | #endif | |
12 | @@ -496,6 +497,7 @@ | |
13 | | SCANLINE_PAD_DWORD | |
14 | | BIT_ORDER_IN_BYTE_MSBFIRST | |
15 | | LEFT_EDGE_CLIPPING | |
16 | + | ROP_NEEDS_SOURCE | |
17 | ; | |
18 | xaaptr->SetupForImageWrite = SavageSetupForImageWrite; | |
19 | xaaptr->SubsequentImageWriteRect = SavageSubsequentImageWriteRect; | |
20 | @@ -506,7 +508,7 @@ | |
21 | /* WriteBitmap color expand */ | |
22 | ||
23 | #if 0 | |
24 | - xaaptr->WriteBitmapFlags = NO_PLANEMASK; | |
25 | + xaaptr->WriteBitmapFlags = NO_PLANEMASK | ROP_NEEDS_SOURCE; | |
26 | xaaptr->WriteBitmap = SavageWriteBitmapCPUToScreenColorExpand; | |
27 | #endif | |
28 | ||
29 | diff -urN XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_driver.c XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c | |
30 | --- XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_driver.c Tue Feb 25 05:08:21 2003 | |
31 | +++ XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.c Mon May 5 12:30:23 2003 | |
32 | @@ -19,16 +19,12 @@ | |
33 | #define DPMS_SERVER | |
34 | #include "extensions/dpms.h" | |
35 | ||
36 | -#ifdef XvExtension | |
37 | #include "xf86xv.h" | |
38 | -#endif | |
39 | ||
40 | #include "savage_driver.h" | |
41 | #include "savage_bci.h" | |
42 | ||
43 | ||
44 | - | |
45 | - | |
46 | /* | |
47 | * prototypes | |
48 | */ | |
49 | @@ -82,10 +78,10 @@ | |
50 | #define iabs(a) ((int)(a)>0?(a):(-(a))) | |
51 | ||
52 | #define DRIVER_NAME "savage" | |
53 | -#define DRIVER_VERSION "1.1.26" | |
54 | +#define DRIVER_VERSION "1.1.27" | |
55 | #define VERSION_MAJOR 1 | |
56 | #define VERSION_MINOR 1 | |
57 | -#define PATCHLEVEL 26 | |
58 | +#define PATCHLEVEL 27 | |
59 | #define SAVAGE_VERSION ((VERSION_MAJOR << 24) | \ | |
60 | (VERSION_MINOR << 16) | \ | |
61 | PATCHLEVEL) | |
62 | @@ -287,7 +283,6 @@ | |
63 | "XAACopyROP_PM", | |
64 | "XAACreateInfoRec", | |
65 | "XAADestroyInfoRec", | |
66 | - "XAAFillSolidRects", | |
67 | "XAAHelpPatternROP", | |
68 | "XAAHelpSolidROP", | |
69 | "XAAInit", | |
70 | @@ -2363,10 +2358,8 @@ | |
71 | if (xf86DPMSInit(pScreen, SavageDPMS, 0) == FALSE) | |
72 | xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "DPMS initialization failed\n"); | |
73 | ||
74 | -#ifdef XvExtension | |
75 | if( !psav->NoAccel && !SavagePanningCheck(pScrn) ) | |
76 | SavageInitVideo( pScreen ); | |
77 | -#endif | |
78 | ||
79 | if (serverGeneration == 1) | |
80 | xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options); | |
81 | diff -urN XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_driver.h XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h | |
82 | --- XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_driver.h Sat Jan 18 16:22:30 2003 | |
83 | +++ XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_driver.h Mon May 5 12:30:23 2003 | |
84 | @@ -140,11 +140,9 @@ | |
85 | int YFactor; /* overlay Y factor */ | |
86 | int displayXoffset; /* overlay X offset */ | |
87 | int displayYoffset; /* overlay Y offset */ | |
88 | - int XExpansion; /* expansion factor in x */ | |
89 | - int XExp1; | |
90 | + int XExp1; /* expansion ratio in x */ | |
91 | int XExp2; | |
92 | - int YExpansion; /* expansion factor in x */ | |
93 | - int YExp1; | |
94 | + int YExp1; /* expansion ratio in x */ | |
95 | int YExp2; | |
96 | int cxScreen; | |
97 | int TVSizeX; | |
98 | diff -urN XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_regs.h XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_regs.h | |
99 | --- XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_regs.h Wed Oct 2 22:39:55 2002 | |
100 | +++ XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_regs.h Mon May 5 12:30:23 2003 | |
101 | @@ -216,7 +216,15 @@ | |
102 | VGAOUT8(psav->vgaIOBase + 5, a); \ | |
103 | } | |
104 | ||
105 | +#define HZEXP_COMP_1 0x54 | |
106 | +#define HZEXP_BORDER 0x58 | |
107 | #define HZEXP_FACTOR_IGA1 0x59 | |
108 | + | |
109 | +#define VTEXP_COMP_1 0x56 | |
110 | +#define VTEXP_BORDER 0x5a | |
111 | #define VTEXP_FACTOR_IGA1 0x5b | |
112 | ||
113 | +#define EC1_CENTER_ON 0x10 | |
114 | +#define EC1_EXPAND_ON 0x0c | |
115 | + | |
116 | #endif /* _SAVAGE_REGS_H */ | |
117 | diff -urN XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_vbe.c XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_vbe.c | |
118 | --- XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_vbe.c Wed Oct 2 22:39:55 2002 | |
119 | +++ XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_vbe.c Mon May 5 12:30:23 2003 | |
120 | @@ -72,7 +72,7 @@ | |
121 | SavageClearVM86Regs( psav->pInt10 ); | |
122 | psav->pInt10->ax = 0x4f14; /* S3 extensions */ | |
123 | psav->pInt10->bx = 0x0001; /* Set default refresh rate */ | |
124 | - psav->pInt10->cx = n; | |
125 | + psav->pInt10->cx = n & 0x3fff; | |
126 | psav->pInt10->di = Refresh & 0xffff; | |
127 | ||
128 | xf86ExecX86int10( psav->pInt10 ); | |
129 | diff -urN XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_video.c XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_video.c | |
130 | --- XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage.org/savage_video.c Sun Jan 12 04:55:49 2003 | |
131 | +++ XFree86-4.3.0/xc/programs/Xserver/hw/xfree86/drivers/savage/savage_video.c Mon May 5 12:30:24 2003 | |
132 | @@ -17,11 +17,6 @@ | |
133 | ||
134 | #define TIMER_MASK (OFF_TIMER | FREE_TIMER) | |
135 | ||
136 | -#ifndef XvExtension | |
137 | -void SavageInitVideo(ScreenPtr pScreen) {} | |
138 | -void SavageResetVideo(ScrnInfoPtr pScrn) {} | |
139 | -#else | |
140 | - | |
141 | void myOUTREG( SavagePtr psav, unsigned long offset, unsigned long value ); | |
142 | ||
143 | static XF86VideoAdaptorPtr SavageSetupImageVideo(ScreenPtr); | |
144 | @@ -79,7 +74,7 @@ | |
145 | ) = NULL; | |
146 | ||
147 | static void OverlayParamInit(ScrnInfoPtr pScrn); | |
148 | -static void InitStreamsForExpansion(SavagePtr psav); | |
149 | +static void InitStreamsForExpansion(ScrnInfoPtr pScrn); | |
150 | ||
151 | /*static void SavageBlockHandler(int, pointer, pointer, pointer);*/ | |
152 | ||
153 | @@ -421,7 +416,6 @@ | |
154 | ||
155 | /* Sequence stolen from streams.c in M7 NT driver */ | |
156 | ||
157 | - | |
158 | xf86EnableIO(); | |
159 | ||
160 | /* Unlock extended registers. */ | |
161 | @@ -430,10 +424,20 @@ | |
162 | VGAOUT16(vgaCRIndex, 0xa039); | |
163 | VGAOUT16(0x3c4, 0x0608); | |
164 | ||
165 | + if( | |
166 | + S3_SAVAGE_MOBILE_SERIES(psav->Chipset) && | |
167 | + !psav->CrtOnly && | |
168 | + !psav->TvOn | |
169 | + ) { | |
170 | + OverlayParamInit( pScrn ); | |
171 | + } | |
172 | + | |
173 | VGAOUT8( vgaCRIndex, EXT_MISC_CTRL2 ); | |
174 | ||
175 | if( S3_SAVAGE_MOBILE_SERIES(psav->Chipset) || | |
176 | - (psav->Chipset == S3_SUPERSAVAGE) || | |
177 | +#if 0 /* I don't think commenting this out is correct (EE) */ | |
178 | + (psav->Chipset == S3_SUPERSAVAGE) || | |
179 | +#endif | |
180 | (psav->Chipset == S3_SAVAGE2000) ) | |
181 | { | |
182 | jStreamsControl = VGAIN8( vgaCRReg ) | ENABLE_STREAM1; | |
183 | @@ -878,36 +882,6 @@ | |
184 | } | |
185 | ||
186 | ||
187 | -static Bool | |
188 | -RegionsEqual(RegionPtr A, RegionPtr B) | |
189 | -{ | |
190 | - int *dataA, *dataB; | |
191 | - int num; | |
192 | - | |
193 | - num = REGION_NUM_RECTS(A); | |
194 | - if(num != REGION_NUM_RECTS(B)) | |
195 | - return FALSE; | |
196 | - | |
197 | - if((A->extents.x1 != B->extents.x1) || | |
198 | - (A->extents.x2 != B->extents.x2) || | |
199 | - (A->extents.y1 != B->extents.y1) || | |
200 | - (A->extents.y2 != B->extents.y2)) | |
201 | - return FALSE; | |
202 | - | |
203 | - dataA = (int*)REGION_RECTS(A); | |
204 | - dataB = (int*)REGION_RECTS(B); | |
205 | - | |
206 | - while(num--) { | |
207 | - if((dataA[0] != dataB[0]) || (dataA[1] != dataB[1])) | |
208 | - return FALSE; | |
209 | - dataA += 2; | |
210 | - dataB += 2; | |
211 | - } | |
212 | - | |
213 | - return TRUE; | |
214 | -} | |
215 | - | |
216 | - | |
217 | /* SavageClipVideo - | |
218 | ||
219 | Takes the dst box in standard X BoxRec form (top and left | |
220 | @@ -992,9 +966,8 @@ | |
221 | ||
222 | REGION_EMPTY(pScrn->pScreen, &pPriv->clip); | |
223 | ||
224 | - SavageStreamsOff( pScrn ); | |
225 | - | |
226 | if(shutdown) { | |
227 | + SavageStreamsOff( pScrn ); | |
228 | if(pPriv->area) { | |
229 | xf86FreeOffscreenArea(pPriv->area); | |
230 | pPriv->area = NULL; | |
231 | @@ -1283,9 +1256,11 @@ | |
232 | ssControl |= (1 << 24); | |
233 | OUTREG(SSTREAM_CONTROL_REG, ssControl); | |
234 | ||
235 | +#if 0 | |
236 | /* Set color key on primary. */ | |
237 | ||
238 | SavageSetColorKey( pScrn ); | |
239 | +#endif | |
240 | ||
241 | /* Set FIFO L2 on second stream. */ | |
242 | ||
243 | @@ -1358,10 +1333,10 @@ | |
244 | !psav->CrtOnly && | |
245 | !psav->TvOn | |
246 | ) { | |
247 | - drw_w = (float)(drw_w * psav->XExp1)/(float)psav->XExp2 + 1; | |
248 | - drw_h = (float)(drw_h * psav->YExp1)/(float)psav->YExp2 + 1; | |
249 | - dstBox->x1 = (float)(dstBox->x1 * psav->XExp1)/(float)psav->XExp2; | |
250 | - dstBox->y1 = (float)(dstBox->y1 * psav->YExp1)/(float)psav->YExp2; | |
251 | + drw_w = (drw_w * psav->XExp1)/psav->XExp2 + 1; | |
252 | + drw_h = (drw_h * psav->YExp1)/psav->YExp2 + 1; | |
253 | + dstBox->x1 = (dstBox->x1 * psav->XExp1)/psav->XExp2; | |
254 | + dstBox->y1 = (dstBox->y1 * psav->YExp1)/psav->YExp2; | |
255 | dstBox->x1 += psav->displayXoffset; | |
256 | dstBox->y1 += psav->displayYoffset; | |
257 | } | |
258 | @@ -1378,14 +1353,16 @@ | |
259 | * are 2 bytes/pixel. | |
260 | */ | |
261 | ||
262 | - OUTREG(SEC_STREAM_FBUF_ADDR0, (offset + (x1>>15)) & 0x3ffff0 ); | |
263 | + OUTREG(SEC_STREAM_FBUF_ADDR0, (offset + (x1>>15)) & 0x7ffff0 ); | |
264 | OUTREG(SEC_STREAM_STRIDE, pitch & 0xfff ); | |
265 | OUTREG(SEC_STREAM_WINDOW_START, ((dstBox->x1+1) << 16) | (dstBox->y1+1) ); | |
266 | OUTREG(SEC_STREAM_WINDOW_SZ, ((drw_w) << 16) | drw_h ); | |
267 | ||
268 | +#if 0 | |
269 | /* Set color key on primary. */ | |
270 | ||
271 | SavageSetColorKey( pScrn ); | |
272 | +#endif | |
273 | ||
274 | /* Set FIFO L2 on second stream. */ | |
275 | ||
276 | @@ -1424,6 +1401,20 @@ | |
277 | int top, left, npixels, nlines; | |
278 | BoxRec dstBox; | |
279 | CARD32 tmp; | |
280 | +/* xf86ErrorFVerb(XVTRACE,"SavagePutImage\n"); */ | |
281 | + | |
282 | + if( psav->cxScreen != pScrn->currentMode->HDisplay ) | |
283 | + { | |
284 | + /* The mode has changed. Recompute the offsets. */ | |
285 | + | |
286 | + if( | |
287 | + S3_SAVAGE_MOBILE_SERIES(psav->Chipset) && | |
288 | + !psav->CrtOnly && | |
289 | + !psav->TvOn | |
290 | + ) { | |
291 | + OverlayParamInit( pScrn ); | |
292 | + } | |
293 | + } | |
294 | ||
295 | if(drw_w > 16384) drw_w = 16384; | |
296 | ||
297 | @@ -1519,18 +1510,19 @@ | |
298 | SavageCopyData(buf, dst_start, srcPitch, dstPitch, nlines, npixels); | |
299 | break; | |
300 | } | |
301 | + | |
302 | + /* We need to enable the video before we draw the chroma color. | |
303 | + Otherwise, we get blue flashes. */ | |
304 | + | |
305 | + SavageDisplayVideo(pScrn, id, offset, width, height, dstPitch, | |
306 | + x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h); | |
307 | ||
308 | /* update cliplist */ | |
309 | - if(!RegionsEqual(&pPriv->clip, clipBoxes)) { | |
310 | - REGION_COPY(pScreen, &pPriv->clip, clipBoxes); | |
311 | + if(!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) { | |
312 | + REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes); | |
313 | /* draw these */ | |
314 | - XAAFillSolidRects(pScrn, pPriv->colorKey, GXcopy, ~0, | |
315 | - REGION_NUM_RECTS(clipBoxes), | |
316 | - REGION_RECTS(clipBoxes)); | |
317 | + xf86XVFillKeyHelper(pScrn->pScreen, pPriv->colorKey, clipBoxes); | |
318 | } | |
319 | - | |
320 | - SavageDisplayVideo(pScrn, id, offset, width, height, dstPitch, | |
321 | - x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h); | |
322 | ||
323 | pPriv->videoStatus = CLIENT_VIDEO_ON; | |
324 | ||
325 | @@ -1692,6 +1684,7 @@ | |
326 | XF86SurfacePtr surface | |
327 | ){ | |
328 | OffscreenPrivPtr pPriv = (OffscreenPrivPtr)surface->devPrivate.ptr; | |
329 | + xf86ErrorFVerb(XVTRACE,"SavageStopSurface\n"); | |
330 | ||
331 | if(pPriv->isOn) { | |
332 | /*SavagePtr psav = SAVPTR(surface->pScrn);*/ | |
333 | @@ -1754,6 +1747,7 @@ | |
334 | SavagePortPrivPtr portPriv = GET_PORT_PRIVATE(pScrn); | |
335 | INT32 x1, y1, x2, y2; | |
336 | BoxRec dstBox; | |
337 | + xf86ErrorFVerb(XVTRACE,"SavageDisplaySurface\n"); | |
338 | ||
339 | x1 = src_x; | |
340 | x2 = src_x + src_w; | |
341 | @@ -1777,14 +1771,12 @@ | |
342 | dstBox.y1 -= pScrn->frameY0; | |
343 | dstBox.y2 -= pScrn->frameY0; | |
344 | ||
345 | - XAAFillSolidRects(pScrn, portPriv->colorKey, GXcopy, ~0, | |
346 | - REGION_NUM_RECTS(clipBoxes), | |
347 | - REGION_RECTS(clipBoxes)); | |
348 | - | |
349 | SavageDisplayVideo(pScrn, surface->id, surface->offsets[0], | |
350 | surface->width, surface->height, surface->pitches[0], | |
351 | x1, y1, x2, y2, &dstBox, src_w, src_h, drw_w, drw_h); | |
352 | ||
353 | + xf86XVFillKeyHelper(pScrn->pScreen, portPriv->colorKey, clipBoxes); | |
354 | + | |
355 | pPriv->isOn = TRUE; | |
356 | #if 0 | |
357 | if(portPriv->videoStatus & CLIENT_VIDEO_ON) { | |
358 | @@ -1839,144 +1831,87 @@ | |
359 | SavagePtr psav = SAVPTR(pScrn); | |
360 | ||
361 | psav = SAVPTR(pScrn); | |
362 | - psav->cxScreen = psav->iResX; | |
363 | - InitStreamsForExpansion(psav); | |
364 | + psav->cxScreen = pScrn->currentMode->HDisplay; | |
365 | + InitStreamsForExpansion(pScrn); | |
366 | } | |
367 | ||
368 | -/* Function to calculate lcd expansion x,yfactor and offset for overlay | |
369 | +/* Function to calculate lcd expansion x,y factor and offset for overlay | |
370 | */ | |
371 | -static void InitStreamsForExpansion(SavagePtr psav) | |
372 | +static void InitStreamsForExpansion(ScrnInfoPtr pScrn) | |
373 | { | |
374 | + SavagePtr psav = SAVPTR(pScrn); | |
375 | int PanelSizeX,PanelSizeY; | |
376 | int ViewPortWidth,ViewPortHeight; | |
377 | + int XExpansion, YExpansion; | |
378 | int XFactor, YFactor; | |
379 | + int Hstate, Vstate; | |
380 | + | |
381 | + static CARD32 Xfactors[] = { | |
382 | + 0x00010001, | |
383 | + 0x00010001, /* 1 */ | |
384 | + 0, | |
385 | + 0x00090008, /* 3 */ | |
386 | + 0x00050004, /* 4 */ | |
387 | + 0, | |
388 | + 0x00030002, /* 6 */ | |
389 | + 0x00020001 /* 7 */ | |
390 | + }; | |
391 | + | |
392 | + static CARD32 Yfactors[] = { | |
393 | + 0x00010001, 0x00010001, | |
394 | + 0, 0x00060005, | |
395 | + 0x00050004, 0x00040003, | |
396 | + 0, 0x00030002, | |
397 | + 0x00020001, 0x00050002, | |
398 | + 0x000C0005, 0x00080003, | |
399 | + 0x00090004, 0, | |
400 | + 0x00030001, 0x00040001, | |
401 | + }; | |
402 | + | |
403 | + | |
404 | ||
405 | PanelSizeX = psav->PanelX; | |
406 | PanelSizeY = psav->PanelY; | |
407 | - ViewPortWidth = psav->iResX; | |
408 | - ViewPortHeight = psav->iResY; | |
409 | + ViewPortWidth = pScrn->currentMode->HDisplay; | |
410 | + ViewPortHeight = pScrn->currentMode->VDisplay; | |
411 | + | |
412 | if( PanelSizeX == 1408 ) | |
413 | PanelSizeX = 1400; | |
414 | - psav->XExpansion = 0x00010001; | |
415 | - psav->YExpansion = 0x00010001; | |
416 | + | |
417 | + XExpansion = 0x00010001; | |
418 | + YExpansion = 0x00010001; | |
419 | + | |
420 | psav->displayXoffset = 0; | |
421 | psav->displayYoffset = 0; | |
422 | ||
423 | + VGAOUT8(0x3C4, HZEXP_COMP_1); | |
424 | + Hstate = VGAIN8(0x3C5); | |
425 | + VGAOUT8(0x3C4, VTEXP_COMP_1); | |
426 | + Vstate = VGAIN8(0x3C5); | |
427 | VGAOUT8(0x3C4, HZEXP_FACTOR_IGA1); | |
428 | - XFactor = VGAIN8(0x3C5) >> 4; | |
429 | + XFactor = VGAIN8(0x3C5); | |
430 | VGAOUT8(0x3C4, VTEXP_FACTOR_IGA1); | |
431 | - YFactor = VGAIN8(0x3C5) >> 4; | |
432 | + YFactor = VGAIN8(0x3C5); | |
433 | ||
434 | - switch( XFactor ) | |
435 | + if( Hstate & EC1_EXPAND_ON ) | |
436 | { | |
437 | - case 1: | |
438 | - psav->XExpansion = 0x00010001; | |
439 | - psav->displayXoffset = | |
440 | - (((PanelSizeX - ViewPortWidth) / 2) + 0x7) & 0xFFF8; | |
441 | - break; | |
442 | - | |
443 | - case 3: | |
444 | - psav->XExpansion = 0x00090008; | |
445 | - psav->displayXoffset = | |
446 | - (((PanelSizeX - ((9 * ViewPortWidth)/8)) / 2) + 0x7) & 0xFFF8; | |
447 | - break; | |
448 | + XExpansion = Xfactors[XFactor>>4]; | |
449 | + } | |
450 | ||
451 | - case 4: | |
452 | - psav->XExpansion = 0x00050004; | |
453 | + if( Vstate & EC1_EXPAND_ON ) | |
454 | + { | |
455 | + YExpansion = Yfactors[YFactor>>4]; | |
456 | + } | |
457 | ||
458 | - if ((psav->cxScreen == 800) && (PanelSizeX !=1400)) | |
459 | - { | |
460 | - psav->displayXoffset = | |
461 | - (((PanelSizeX - ((5 * ViewPortWidth)/4)) / 2) ) & 0xFFF8; | |
462 | - } | |
463 | - else | |
464 | - { | |
465 | - psav->displayXoffset = | |
466 | - (((PanelSizeX - ((5 * ViewPortWidth)/4)) / 2) +0x7) & 0xFFF8; | |
467 | - } | |
468 | - break; | |
469 | + psav->XExp1 = XExpansion >> 16; | |
470 | + psav->XExp2 = XExpansion & 0xFFFF; | |
471 | ||
472 | - case 6: | |
473 | - psav->XExpansion = 0x00030002; | |
474 | - psav->displayXoffset = | |
475 | - (((PanelSizeX - ((3 * ViewPortWidth)/2)) / 2) + 0x7) & 0xFFF8; | |
476 | - break; | |
477 | + psav->YExp1 = YExpansion >> 16; | |
478 | + psav->YExp2 = YExpansion & 0xFFFF; | |
479 | ||
480 | - case 7: | |
481 | - psav->XExpansion = 0x00020001; | |
482 | - psav->displayXoffset = | |
483 | - (((PanelSizeX - (2 * ViewPortWidth)) / 2) + 0x7) & 0xFFF8; | |
484 | - break; | |
485 | - } | |
486 | - | |
487 | - switch( YFactor ) | |
488 | - { | |
489 | - case 0: | |
490 | - psav->YExpansion = 0x00010001; | |
491 | - psav->displayYoffset = (PanelSizeY - ViewPortHeight) / 2; | |
492 | - break; | |
493 | - case 1: | |
494 | - psav->YExpansion = 0x00010001; | |
495 | - psav->displayYoffset = (PanelSizeY - ViewPortHeight) / 2; | |
496 | - break; | |
497 | - case 2: | |
498 | - psav->YExpansion = 0x00040003; | |
499 | - psav->displayYoffset = (PanelSizeY - ((4 * ViewPortHeight)/3)) / 2; | |
500 | - break; | |
501 | - case 4: | |
502 | - psav->YExpansion = 0x00050004; | |
503 | - psav->displayYoffset = (PanelSizeY - ((5 * ViewPortHeight)/4)) / 2; | |
504 | - break; | |
505 | - case 5: | |
506 | - psav->YExpansion = 0x00040003; | |
507 | + psav->displayXoffset = | |
508 | + ((PanelSizeX - (psav->XExp1 * ViewPortWidth) / psav->XExp2) / 2 + 7) & 0xfff8; | |
509 | + psav->displayYoffset = | |
510 | + ((PanelSizeY - (psav->YExp1 * ViewPortHeight) / psav->YExp2) / 2); | |
511 | ||
512 | - if((psav->cxScreen == 1024)&&(PanelSizeX ==1400)) | |
513 | - { | |
514 | - psav->displayYoffset = | |
515 | - ((PanelSizeY - ((4 * ViewPortHeight)/3)) / 2) - 0x1 ; | |
516 | - } | |
517 | - else | |
518 | - { | |
519 | - psav->displayYoffset = (PanelSizeY - ((4 * ViewPortHeight)/3)) / 2; | |
520 | - } | |
521 | - break; | |
522 | - case 6: | |
523 | - psav->YExpansion = 0x00050004; | |
524 | - psav->displayYoffset = (PanelSizeY - ((5 * ViewPortHeight)/4)) / 2; | |
525 | - break; | |
526 | - case 7: | |
527 | - psav->YExpansion = 0x00030002; | |
528 | - psav->displayYoffset = (PanelSizeY - ((3 * ViewPortHeight)/2)) / 2; | |
529 | - break; | |
530 | - case 8: | |
531 | - psav->YExpansion = 0x00020001; | |
532 | - psav->displayYoffset = (PanelSizeY - (2 * ViewPortHeight)) /2; | |
533 | - break; | |
534 | - case 9: | |
535 | - psav->YExpansion = 0x00090004; | |
536 | - psav->displayYoffset = (PanelSizeY - ((9 * ViewPortHeight)/4)) /2; | |
537 | - break; | |
538 | - case 11: | |
539 | - psav->YExpansion = 0x00110005; | |
540 | - psav->displayYoffset = (PanelSizeY - ((11 * ViewPortHeight)/5)) /2; | |
541 | - break; | |
542 | - case 12: | |
543 | - psav->YExpansion = 0x00070003; | |
544 | - psav->displayYoffset = (PanelSizeY - ((7 * ViewPortHeight)/3)) /2; | |
545 | - break; | |
546 | - case 14: | |
547 | - psav->YExpansion = 0x00050002; | |
548 | - psav->displayYoffset = (PanelSizeY - ((5 * ViewPortHeight)/2)) /2; | |
549 | - break; | |
550 | - case 15: | |
551 | - psav->YExpansion = 0x00040001; | |
552 | - psav->displayYoffset = (PanelSizeY - (4 * ViewPortHeight)) /2; | |
553 | - break; | |
554 | - } | |
555 | - psav->XExp1 = psav->XExpansion >> 16; | |
556 | - psav->XExp2 = psav->XExpansion & 0xFFFF; | |
557 | - psav->YExp1 = psav->YExpansion >> 16; | |
558 | - psav->YExp2 = psav->YExpansion & 0xFFFF; | |
559 | } /* InitStreamsForExpansionPM */ | |
560 | - | |
561 | -#endif /* XvExtension */ |