mirror of
https://github.com/dborth/snes9xgx.git
synced 2024-11-27 21:14:21 +01:00
fixed original modes (again)
This commit is contained in:
parent
8374b9dfc9
commit
72b41f925a
@ -87,8 +87,8 @@ s16 square[] ATTRIBUTE_ALIGN (32) =
|
|||||||
|
|
||||||
static camera cam = {
|
static camera cam = {
|
||||||
{0.0F, 0.0F, 0.0F},
|
{0.0F, 0.0F, 0.0F},
|
||||||
{0.0F, 0.5F, 0.0F},
|
{0.0F, 0.5F, 0.0F},
|
||||||
{0.0F, 0.0F, -0.5F}
|
{0.0F, 0.0F, -0.5F}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -102,11 +102,11 @@ static camera cam = {
|
|||||||
GXRModeObj TV_239p =
|
GXRModeObj TV_239p =
|
||||||
{
|
{
|
||||||
VI_TVMODE_PAL_DS, // viDisplayMode
|
VI_TVMODE_PAL_DS, // viDisplayMode
|
||||||
640, // fbWidth
|
512, // fbWidth
|
||||||
239, // efbHeight
|
239, // efbHeight
|
||||||
239, // xfbHeight
|
239, // xfbHeight
|
||||||
(VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin
|
(VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin
|
||||||
(VI_MAX_HEIGHT_PAL - 478)/2, // viYOrigin
|
(VI_MAX_HEIGHT_PAL/2 - 478/2)/2, // viYOrigin
|
||||||
640, // viWidth
|
640, // viWidth
|
||||||
478, // viHeight
|
478, // viHeight
|
||||||
VI_XFBMODE_SF, // xFBmode
|
VI_XFBMODE_SF, // xFBmode
|
||||||
@ -137,7 +137,7 @@ GXRModeObj TV_239p =
|
|||||||
GXRModeObj TV_478i =
|
GXRModeObj TV_478i =
|
||||||
{
|
{
|
||||||
VI_TVMODE_PAL_INT, // viDisplayMode
|
VI_TVMODE_PAL_INT, // viDisplayMode
|
||||||
640, // fbWidth
|
512, // fbWidth
|
||||||
478, // efbHeight
|
478, // efbHeight
|
||||||
478, // xfbHeight
|
478, // xfbHeight
|
||||||
(VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin
|
(VI_MAX_WIDTH_PAL - 640)/2, // viXOrigin
|
||||||
@ -174,11 +174,11 @@ GXRModeObj TV_478i =
|
|||||||
GXRModeObj TV_224p =
|
GXRModeObj TV_224p =
|
||||||
{
|
{
|
||||||
VI_TVMODE_EURGB60_DS, // viDisplayMode
|
VI_TVMODE_EURGB60_DS, // viDisplayMode
|
||||||
640, // fbWidth
|
512, // fbWidth
|
||||||
224, // efbHeight
|
224, // efbHeight
|
||||||
224, // xfbHeight
|
224, // xfbHeight
|
||||||
(VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin
|
(VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin
|
||||||
(VI_MAX_HEIGHT_NTSC - 448)/2, // viYOrigin
|
(VI_MAX_HEIGHT_NTSC/2 - 448/2)/2, // viYOrigin
|
||||||
640, // viWidth
|
640, // viWidth
|
||||||
448, // viHeight
|
448, // viHeight
|
||||||
VI_XFBMODE_SF, // xFBmode
|
VI_XFBMODE_SF, // xFBmode
|
||||||
@ -209,7 +209,7 @@ GXRModeObj TV_224p =
|
|||||||
GXRModeObj TV_448i =
|
GXRModeObj TV_448i =
|
||||||
{
|
{
|
||||||
VI_TVMODE_EURGB60_INT, // viDisplayMode
|
VI_TVMODE_EURGB60_INT, // viDisplayMode
|
||||||
640, // fbWidth
|
512, // fbWidth
|
||||||
448, // efbHeight
|
448, // efbHeight
|
||||||
448, // xfbHeight
|
448, // xfbHeight
|
||||||
(VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin
|
(VI_MAX_WIDTH_NTSC - 640)/2, // viXOrigin
|
||||||
@ -345,6 +345,9 @@ draw_init ()
|
|||||||
memset (&view, 0, sizeof (Mtx));
|
memset (&view, 0, sizeof (Mtx));
|
||||||
guLookAt(view, &cam.pos, &cam.up, &cam.view);
|
guLookAt(view, &cam.pos, &cam.up, &cam.view);
|
||||||
GX_LoadPosMtxImm (view, GX_PNMTX0);
|
GX_LoadPosMtxImm (view, GX_PNMTX0);
|
||||||
|
|
||||||
|
GX_InvVtxCache (); // update vertex cache
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -460,18 +463,51 @@ InitGCVideo ()
|
|||||||
vmode->xfbHeight = 480;
|
vmode->xfbHeight = 480;
|
||||||
vmode->viYOrigin = (VI_MAX_HEIGHT_PAL - 480)/2;
|
vmode->viYOrigin = (VI_MAX_HEIGHT_PAL - 480)/2;
|
||||||
vmode->viHeight = 480;
|
vmode->viHeight = 480;
|
||||||
|
|
||||||
vmode_60hz = 0;
|
vmode_60hz = 0;
|
||||||
|
|
||||||
|
// Original Video modes (forced to PAL 50hz)
|
||||||
|
// set video signal mode
|
||||||
|
TV_224p.viTVMode = VI_TVMODE_PAL_DS;
|
||||||
|
TV_448i.viTVMode = VI_TVMODE_PAL_INT;
|
||||||
|
// set VI position
|
||||||
|
TV_224p.viYOrigin = (VI_MAX_HEIGHT_PAL/2 - 448/2)/2;
|
||||||
|
TV_448i.viYOrigin = (VI_MAX_HEIGHT_PAL - 448)/2;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VI_NTSC:
|
case VI_NTSC:
|
||||||
// 480 lines (NTSC 60hz)
|
// 480 lines (NTSC 60hz)
|
||||||
vmode_60hz = 1;
|
vmode_60hz = 1;
|
||||||
|
|
||||||
|
// Original Video modes (forced to NTSC 60hz)
|
||||||
|
// set video signal mode
|
||||||
|
TV_239p.viTVMode = VI_TVMODE_NTSC_DS;
|
||||||
|
TV_478i.viTVMode = VI_TVMODE_NTSC_INT;
|
||||||
|
TV_224p.viTVMode = VI_TVMODE_NTSC_DS;
|
||||||
|
TV_448i.viTVMode = VI_TVMODE_NTSC_INT;
|
||||||
|
// set VI position
|
||||||
|
TV_239p.viYOrigin = (VI_MAX_HEIGHT_NTSC/2 - 478/2)/2;
|
||||||
|
TV_478i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 478)/2;
|
||||||
|
TV_224p.viYOrigin = (VI_MAX_HEIGHT_NTSC/2 - 448/2)/2;
|
||||||
|
TV_448i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 448)/2;
|
||||||
|
break;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// 480 lines (PAL 60Hz)
|
// 480 lines (PAL 60Hz)
|
||||||
vmode_60hz = 1;
|
vmode_60hz = 1;
|
||||||
|
|
||||||
|
// Original Video modes (forced to PAL 60hz)
|
||||||
|
// set video signal mode
|
||||||
|
TV_239p.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_NON_INTERLACE);
|
||||||
|
TV_478i.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_INTERLACE);
|
||||||
|
TV_224p.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_NON_INTERLACE);
|
||||||
|
TV_448i.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_INTERLACE);
|
||||||
|
// set VI position
|
||||||
|
TV_239p.viYOrigin = (VI_MAX_HEIGHT_NTSC/2 - 478/2)/2;
|
||||||
|
TV_478i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 478)/2;
|
||||||
|
TV_224p.viYOrigin = (VI_MAX_HEIGHT_NTSC/2 - 448/2)/2;
|
||||||
|
TV_448i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 448)/2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -537,79 +573,25 @@ ResetVideo_Emu ()
|
|||||||
GXRModeObj *rmode;
|
GXRModeObj *rmode;
|
||||||
Mtx p;
|
Mtx p;
|
||||||
|
|
||||||
switch (vmode->viTVMode >> 2)
|
|
||||||
{
|
|
||||||
case VI_PAL: /* 576 lines (PAL 50Hz) */
|
|
||||||
|
|
||||||
// set video signal mode
|
|
||||||
TV_239p.viTVMode = VI_TVMODE_PAL_DS;
|
|
||||||
TV_478i.viTVMode = VI_TVMODE_PAL_INT;
|
|
||||||
TV_224p.viTVMode = VI_TVMODE_PAL_DS;
|
|
||||||
TV_448i.viTVMode = VI_TVMODE_PAL_INT;
|
|
||||||
// set VI position
|
|
||||||
TV_239p.viXOrigin = TV_478i.viXOrigin = TV_224p.viXOrigin = TV_448i.viXOrigin = (VI_MAX_WIDTH_PAL - 640)/2;
|
|
||||||
TV_239p.viYOrigin = TV_478i.viYOrigin = (VI_MAX_HEIGHT_PAL - 478)/2;
|
|
||||||
TV_224p.viYOrigin = TV_448i.viYOrigin = (VI_MAX_HEIGHT_PAL - 448)/2;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VI_NTSC: /* 480 lines (NTSC 60hz) */
|
|
||||||
|
|
||||||
// set video signal mode
|
|
||||||
TV_239p.viTVMode = VI_TVMODE_NTSC_DS;
|
|
||||||
TV_478i.viTVMode = VI_TVMODE_NTSC_INT;
|
|
||||||
TV_224p.viTVMode = VI_TVMODE_NTSC_DS;
|
|
||||||
TV_448i.viTVMode = VI_TVMODE_NTSC_INT;
|
|
||||||
// set VI position
|
|
||||||
TV_239p.viXOrigin = TV_224p.viXOrigin = TV_478i.viXOrigin = TV_448i.viXOrigin = (VI_MAX_WIDTH_NTSC - 640)/2;
|
|
||||||
TV_239p.viYOrigin = TV_478i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 478)/2;
|
|
||||||
TV_224p.viYOrigin = TV_448i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 448)/2;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default: /* 480 lines (PAL 60Hz) */
|
|
||||||
|
|
||||||
// set video signal mode
|
|
||||||
TV_239p.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_NON_INTERLACE);
|
|
||||||
TV_478i.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_INTERLACE);
|
|
||||||
TV_224p.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_NON_INTERLACE);
|
|
||||||
TV_448i.viTVMode = VI_TVMODE(vmode->viTVMode >> 2, VI_INTERLACE);
|
|
||||||
// set VI position
|
|
||||||
TV_239p.viXOrigin = TV_224p.viXOrigin = TV_478i.viXOrigin = TV_448i.viXOrigin = (VI_MAX_WIDTH_NTSC - 640)/2;
|
|
||||||
TV_239p.viYOrigin = TV_478i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 478)/2;
|
|
||||||
TV_224p.viYOrigin = TV_448i.viYOrigin = (VI_MAX_HEIGHT_NTSC - 448)/2;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
int i = -1;
|
int i = -1;
|
||||||
if (GCSettings.render == 0) // original render mode
|
if (GCSettings.render == 0) // original render mode
|
||||||
{
|
{
|
||||||
for (i=0; i<4; i++) {
|
for (i=0; i<4; i++) {
|
||||||
if (tvmodes[i]->efbHeight == vheight) {
|
if (tvmodes[i]->efbHeight == vheight)
|
||||||
// FIX: ok?
|
|
||||||
tvmodes[i]->fbWidth = vwidth; // update width - some games are 512x224 (super pang)
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
rmode = tvmodes[i];
|
rmode = tvmodes[i];
|
||||||
}
|
}
|
||||||
else if (GCSettings.render == 2) // unfiltered
|
else
|
||||||
{
|
|
||||||
rmode = vmode;
|
|
||||||
}
|
|
||||||
else // filtered
|
|
||||||
{
|
{
|
||||||
rmode = vmode; // same mode as menu
|
rmode = vmode; // same mode as menu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
VIDEO_Configure (rmode);
|
VIDEO_Configure (rmode);
|
||||||
//VIDEO_ClearFrameBuffer (rmode, xfb[whichfb], COLOR_BLACK);
|
|
||||||
VIDEO_Flush();
|
VIDEO_Flush();
|
||||||
//VIDEO_WaitVSync();
|
VIDEO_WaitVSync();
|
||||||
//if (rmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync();
|
if (rmode->viTVMode & VI_NON_INTERLACE) VIDEO_WaitVSync();
|
||||||
//else while (VIDEO_GetNextField()) VIDEO_WaitVSync();
|
else while (VIDEO_GetNextField()) VIDEO_WaitVSync();
|
||||||
|
|
||||||
|
|
||||||
GX_SetViewport (0, 0, rmode->fbWidth, rmode->efbHeight, 0, 1);
|
GX_SetViewport (0, 0, rmode->fbWidth, rmode->efbHeight, 0, 1);
|
||||||
@ -618,12 +600,12 @@ ResetVideo_Emu ()
|
|||||||
|
|
||||||
GX_SetDispCopySrc (0, 0, rmode->fbWidth, rmode->efbHeight);
|
GX_SetDispCopySrc (0, 0, rmode->fbWidth, rmode->efbHeight);
|
||||||
GX_SetDispCopyDst (rmode->fbWidth, rmode->xfbHeight);
|
GX_SetDispCopyDst (rmode->fbWidth, rmode->xfbHeight);
|
||||||
GX_SetCopyFilter (rmode->aa, rmode->sample_pattern, (GCSettings.render == 1) ? GX_TRUE : GX_FALSE, rmode->vfilter); // AA on only for filtered mode
|
GX_SetCopyFilter (rmode->aa, rmode->sample_pattern, (GCSettings.render == 1) ? GX_TRUE : GX_FALSE, rmode->vfilter); // deflicker ON only for filtered mode
|
||||||
|
|
||||||
GX_SetFieldMode (rmode->field_rendering, ((rmode->viHeight == 2 * rmode->xfbHeight) ? GX_ENABLE : GX_DISABLE));
|
GX_SetFieldMode (rmode->field_rendering, ((rmode->viHeight == 2 * rmode->xfbHeight) ? GX_ENABLE : GX_DISABLE));
|
||||||
GX_SetPixelFmt (GX_PF_RGB8_Z24, GX_ZC_LINEAR);
|
GX_SetPixelFmt (GX_PF_RGB8_Z24, GX_ZC_LINEAR);
|
||||||
|
|
||||||
guOrtho(p, rmode->efbHeight/2, -(rmode->efbHeight/2), -(rmode->fbWidth/2), rmode->fbWidth/2, 10, 1000); // matrix, t, b, l, r, n, f
|
guOrtho(p, rmode->efbHeight/2, -(rmode->efbHeight/2), -(rmode->fbWidth/2), rmode->fbWidth/2, 100, 1000); // matrix, t, b, l, r, n, f
|
||||||
GX_LoadProjectionMtx (p, GX_ORTHOGRAPHIC);
|
GX_LoadProjectionMtx (p, GX_ORTHOGRAPHIC);
|
||||||
|
|
||||||
#ifdef _DEBUG_VIDEO
|
#ifdef _DEBUG_VIDEO
|
||||||
@ -748,10 +730,10 @@ update_video (int width, int height)
|
|||||||
/** Update scaling **/
|
/** Update scaling **/
|
||||||
if (GCSettings.render == 0) // original render mode
|
if (GCSettings.render == 0) // original render mode
|
||||||
{
|
{
|
||||||
xscale = 640 / 2; // use GX scaler instead VI
|
xscale = 256;
|
||||||
yscale = vheight / 2;
|
yscale = vheight / 2;
|
||||||
} else { // unfiltered and filtered mode
|
} else { // unfiltered and filtered mode
|
||||||
xscale = vmode->fbWidth / 2;
|
xscale = 320;
|
||||||
yscale = vheight;
|
yscale = vheight;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -767,8 +749,7 @@ update_video (int width, int height)
|
|||||||
square[0] = square[9] = -xscale + GCSettings.xshift;
|
square[0] = square[9] = -xscale + GCSettings.xshift;
|
||||||
square[4] = square[1] = yscale - GCSettings.yshift;
|
square[4] = square[1] = yscale - GCSettings.yshift;
|
||||||
square[7] = square[10] = -yscale - GCSettings.yshift;
|
square[7] = square[10] = -yscale - GCSettings.yshift;
|
||||||
|
draw_init ();
|
||||||
GX_InvVtxCache (); // update vertex cache
|
|
||||||
|
|
||||||
GX_InitTexObj (&texobj, texturemem, vwidth, vheight, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); // initialize the texture obj we are going to use
|
GX_InitTexObj (&texobj, texturemem, vwidth, vheight, GX_TF_RGB565, GX_CLAMP, GX_CLAMP, GX_FALSE); // initialize the texture obj we are going to use
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user