Cps2Turbo: add missing y-lines to sfz3mix, add asspect ratio DIP
This commit is contained in:
parent
d068ff4e18
commit
aa33827302
|
@ -2356,7 +2356,9 @@ INT32 CpsExit()
|
|||
nCpsNumScanlines = 262;
|
||||
|
||||
nCpsScreenWidth = 384;
|
||||
nCpsScreenHeight = 224;
|
||||
nCpsGlobalXOffset = 0;
|
||||
nCpsGlobalYOffset = 0;
|
||||
|
||||
if (Cps2Turbo) {
|
||||
BurnSampleExit();
|
||||
|
|
|
@ -316,7 +316,9 @@ extern INT32 Cps1OverrideLayers;
|
|||
extern INT32 nCps1Layers[4];
|
||||
extern INT32 nCps1LayerOffs[3];
|
||||
extern INT32 nCpsScreenWidth;
|
||||
extern INT32 nCpsScreenHeight;
|
||||
extern INT32 nCpsGlobalXOffset;
|
||||
extern INT32 nCpsGlobalYOffset;
|
||||
void DrawFnInit();
|
||||
INT32 CpsDraw();
|
||||
INT32 CpsRedraw();
|
||||
|
@ -447,7 +449,7 @@ struct CpsrLineInfo {
|
|||
INT16 Rows[16]; // 16 row scroll values for this line
|
||||
INT32 nMaxLeft, nMaxRight; // Maximum row shifts left and right
|
||||
};
|
||||
extern struct CpsrLineInfo CpsrLineInfo[15];
|
||||
extern struct CpsrLineInfo CpsrLineInfo[16];
|
||||
INT32 Cps1rPrepare();
|
||||
INT32 Cps2rPrepare();
|
||||
|
||||
|
@ -528,3 +530,4 @@ extern UINT16 Cps2VolumeStates[40];
|
|||
extern INT32 Cps2DisableDigitalVolume;
|
||||
extern UINT8 Cps2VolUp;
|
||||
extern UINT8 Cps2VolDwn;
|
||||
extern UINT8 AspectDIP;
|
||||
|
|
|
@ -12,7 +12,9 @@ INT32 CpsLayEn[6] = {0, 0, 0, 0, 0, 0}; // bits for layer enable
|
|||
INT32 MaskAddr[4] = {0, 0, 0, 0};
|
||||
|
||||
INT32 nCpsScreenWidth = 384;
|
||||
INT32 nCpsScreenHeight = 224;
|
||||
INT32 nCpsGlobalXOffset = 0;
|
||||
INT32 nCpsGlobalYOffset = 0;
|
||||
|
||||
INT32 CpsLayer1XOffs = 0;
|
||||
INT32 CpsLayer2XOffs = 0;
|
||||
|
@ -83,7 +85,7 @@ static INT32 DrawScroll1(INT32 i)
|
|||
// bprintf(PRINT_NORMAL, _T("1 %x, %x, %x\n"), nOff, nScrX, nScrY);
|
||||
|
||||
nScrX += CpsLayer1XOffs;
|
||||
nScrY += 0x10;
|
||||
nScrY += 0x10 - nCpsGlobalYOffset;
|
||||
nScrY += CpsLayer1YOffs;
|
||||
nOff <<= 8;
|
||||
nOff &= 0xffc000;
|
||||
|
@ -121,7 +123,7 @@ static INT32 DrawScroll2Init(INT32 i)
|
|||
nCpsrScrX += CpsLayer2XOffs;
|
||||
nCpsrScrX &= 0x03FF;
|
||||
|
||||
nCpsrScrY += 0x10;
|
||||
nCpsrScrY += 0x10 - nCpsGlobalYOffset;
|
||||
nCpsrScrY += CpsLayer2YOffs;
|
||||
nCpsrScrY &= 0x03FF;
|
||||
|
||||
|
@ -191,7 +193,7 @@ static INT32 DrawScroll3(INT32 i)
|
|||
// bprintf(PRINT_NORMAL, _T("3 %x, %x, %x\n"), nOff, nScrX, nScrY);
|
||||
|
||||
nScrX += CpsLayer3XOffs;
|
||||
nScrY += 0x10;
|
||||
nScrY += 0x10 - nCpsGlobalYOffset;
|
||||
nScrY += CpsLayer3YOffs;
|
||||
|
||||
nOff <<= 8;
|
||||
|
@ -400,7 +402,7 @@ static void Cps2Layers()
|
|||
nStartline = nRasterline[nSlice];
|
||||
nEndline = nRasterline[nSlice + 1];
|
||||
if (!nEndline) {
|
||||
nEndline = 224;
|
||||
nEndline = nCpsScreenHeight;
|
||||
}
|
||||
|
||||
// Render layer
|
||||
|
@ -489,7 +491,7 @@ void CpsClearScreen()
|
|||
}
|
||||
}
|
||||
} else {
|
||||
memset(pBurnDraw, 0, nCpsScreenWidth * 224 * nBurnBpp);
|
||||
memset(pBurnDraw, 0, nCpsScreenWidth * nCpsScreenHeight * nBurnBpp);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ static INT32 CpsMemIndex()
|
|||
CpsRam708 = Next; Next += 0x010000; // Obj Ram
|
||||
CpsFrg = Next; Next += 0x000010; // 'Four' Registers (Registers at 0x400000)
|
||||
|
||||
ZBuf = (UINT16*)Next; Next += nCpsScreenWidth * 224 * 2; // Sprite Masking Z buffer
|
||||
ZBuf = (UINT16*)Next; Next += nCpsScreenWidth * nCpsScreenHeight * 2; // Sprite Masking Z buffer
|
||||
|
||||
CpsSaveRegData = Next; Next += 0x0100 * (MAX_RASTER + 1); // Draw Copy of registers
|
||||
CpsSaveFrgData = Next; Next += 0x0010 * (MAX_RASTER + 1); // Draw Copy of 'Four' Registers
|
||||
|
|
|
@ -123,7 +123,7 @@ INT32 CpsObjInit()
|
|||
nGetNext=0;
|
||||
|
||||
if (Cps == 2) {
|
||||
memset(ZBuf, 0, nCpsScreenWidth * 224 * 2);
|
||||
memset(ZBuf, 0, nCpsScreenWidth * nCpsScreenHeight * 2);
|
||||
nMaxZMask = nZOffset = 0;
|
||||
nMaxZValue = 1;
|
||||
}
|
||||
|
@ -180,7 +180,7 @@ INT32 CpsObjGet()
|
|||
|
||||
pof->nShiftX = (-CpsSaveFrg[0][0x9]) + nCpsGlobalXOffset;
|
||||
// bprintf(0, _T("shift-x %d\n"), pof->nShiftX);
|
||||
pof->nShiftY = -CpsSaveFrg[0][0xB];
|
||||
pof->nShiftY = (-CpsSaveFrg[0][0xB]) + nCpsGlobalYOffset;
|
||||
} else {
|
||||
INT32 nOff = BURN_ENDIAN_SWAP_INT16(*((UINT16*)(CpsReg + 0x00))) << 8;
|
||||
nOff &= 0xfff800;
|
||||
|
@ -240,7 +240,7 @@ void CpsObjDrawInit()
|
|||
|
||||
if (nZOffset >= 0xFC00) {
|
||||
// The Z buffer might moverflow the next fram, so initialise it
|
||||
memset(ZBuf, 0, nCpsScreenWidth * 224 * 2);
|
||||
memset(ZBuf, 0, nCpsScreenWidth * nCpsScreenHeight * 2);
|
||||
nZOffset = 0;
|
||||
}
|
||||
|
||||
|
@ -300,7 +300,7 @@ INT32 Cps1ObjDraw(INT32 nLevelFrom,INT32 nLevelTo)
|
|||
nFlip=(a>>5)&3;
|
||||
|
||||
// Take care with tiles if the sprite goes off the screen
|
||||
if (x<0 || y<0 || x+(bx<<4)>nCpsScreenWidth || y+(by<<4)>224) {
|
||||
if (x<0 || y<0 || x+(bx<<4)>nCpsScreenWidth || y+(by<<4)>nCpsScreenHeight) {
|
||||
nCpstType=CTT_16X16 | CTT_CARE;
|
||||
} else {
|
||||
nCpstType=CTT_16X16;
|
||||
|
@ -432,7 +432,7 @@ INT32 Cps2ObjDraw(INT32 nLevelFrom, INT32 nLevelTo)
|
|||
by = ((a >> 12) & 15) + 1;
|
||||
|
||||
// Take care with tiles if the sprite goes off the screen
|
||||
if (x < 0 || y < 0 || x + (bx << 4) > (nCpsScreenWidth-1) || y + (by << 4) > 223) {
|
||||
if (x < 0 || y < 0 || x + (bx << 4) > (nCpsScreenWidth-1) || y + (by << 4) > (nCpsScreenHeight-1)) {
|
||||
nCpstType = CTT_16X16 | CTT_CARE;
|
||||
} else {
|
||||
nCpstType = CTT_16X16;
|
||||
|
@ -857,7 +857,7 @@ INT32 FcrashObjDraw(INT32 nLevelFrom,INT32 nLevelTo)
|
|||
nFlip=(a>>5)&3;
|
||||
|
||||
// Take care with tiles if the sprite goes off the screen
|
||||
if (x<0 || y<0 || x+(1<<4)>nCpsScreenWidth || y+(1<<4)>224) {
|
||||
if (x<0 || y<0 || x+(1<<4)>nCpsScreenWidth || y+(1<<4)>nCpsScreenHeight) {
|
||||
nCpstType=CTT_16X16 | CTT_CARE;
|
||||
} else {
|
||||
nCpstType=CTT_16X16;
|
||||
|
|
|
@ -22,6 +22,8 @@ INT32 Cps1VBlankIRQLine = 2;
|
|||
|
||||
INT32 Cps1DrawAtVblank = 0;
|
||||
|
||||
static UINT8 AspectDIPLast = 0;
|
||||
|
||||
CpsRunInitCallback CpsRunInitCallbackFunction = NULL;
|
||||
CpsRunInitCallback CpsRunExitCallbackFunction = NULL;
|
||||
CpsRunResetCallback CpsRunResetCallbackFunction = NULL;
|
||||
|
@ -43,6 +45,23 @@ static void CpsQSoundCheatSearchCallback()
|
|||
}
|
||||
}
|
||||
|
||||
static void check_aspect()
|
||||
{
|
||||
if (Cps2Turbo && (AspectDIP & 0x03) != AspectDIPLast) {
|
||||
INT32 aspects[3][2] = { { 16, 9 }, { 4, 3 }, { 112, 81 } };
|
||||
AspectDIPLast = AspectDIP & 0x03;
|
||||
|
||||
INT32 nAspectX, nAspectY;
|
||||
BurnDrvGetAspect(&nAspectX, &nAspectY);
|
||||
|
||||
if (nAspectX != aspects[AspectDIPLast][0] || nAspectY != aspects[AspectDIPLast][1]) {
|
||||
bprintf(0, _T("* CPS-2: Changing to %d:%d aspect\n"), aspects[AspectDIPLast][0], aspects[AspectDIPLast][1]);
|
||||
BurnDrvSetAspect(aspects[AspectDIPLast][0], aspects[AspectDIPLast][1]);
|
||||
Reinitialise();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static INT32 DrvReset()
|
||||
{
|
||||
// Reset machine
|
||||
|
@ -70,7 +89,6 @@ static INT32 DrvReset()
|
|||
SekClose();
|
||||
}
|
||||
|
||||
|
||||
nCpsCyclesExtra = 0;
|
||||
|
||||
if (((Cps == 2) && !Cps2DisableQSnd) || Cps1Qs == 1) { // Sound init (QSound)
|
||||
|
@ -80,7 +98,12 @@ static INT32 DrvReset()
|
|||
if (CpsRunResetCallbackFunction) {
|
||||
CpsRunResetCallbackFunction();
|
||||
}
|
||||
|
||||
|
||||
if (Cps2Turbo) {
|
||||
AspectDIPLast = 0xff;
|
||||
check_aspect();
|
||||
}
|
||||
|
||||
HiscoreReset();
|
||||
|
||||
return 0;
|
||||
|
@ -387,6 +410,10 @@ INT32 Cps2Frame()
|
|||
DrvReset();
|
||||
}
|
||||
|
||||
if (Cps2Turbo) {
|
||||
check_aspect();
|
||||
}
|
||||
|
||||
// extern INT32 prevline;
|
||||
// prevline = -1;
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ int nCpsrRowStart=0; // Start of row scroll (can wrap?)
|
|||
static INT32 nShiftY=0;
|
||||
static INT32 EndLineInfo=0;
|
||||
|
||||
struct CpsrLineInfo CpsrLineInfo[15];
|
||||
struct CpsrLineInfo CpsrLineInfo[16]; // +1 added for Cps2Turbo
|
||||
|
||||
static void GetRowsRange(INT32 *pnStart,INT32 *pnWidth,INT32 nRowFrom,INT32 nRowTo)
|
||||
{
|
||||
|
|
|
@ -37,10 +37,10 @@ static INT32 CpstOne()
|
|||
if (nCpstX <= -nSize) return 0;
|
||||
if (nCpstX >= nCpsScreenWidth) return 0;
|
||||
if (nCpstY <= -nSize) return 0;
|
||||
if (nCpstY >= 224) return 0;
|
||||
if (nCpstY >= nCpsScreenHeight) return 0;
|
||||
}
|
||||
nCtvRollX=(0x40000000 + nCpsScreenWidth - 1) + nCpstX * 0x7fff;
|
||||
nCtvRollY=0x400000df + nCpstY * 0x7fff;
|
||||
nCtvRollY=(0x40000000 + nCpsScreenHeight - 1) + nCpstY * 0x7fff;
|
||||
}
|
||||
|
||||
// Clip to loaded graphics data (we have a gap of 0x200 at the end)
|
||||
|
@ -78,11 +78,10 @@ static INT32 CpstOneBgHi()
|
|||
if (nCpstX<=-nSize) return 0;
|
||||
if (nCpstX>=nCpsScreenWidth) return 0;
|
||||
if (nCpstY<=-nSize) return 0;
|
||||
if (nCpstY>=224) return 0;
|
||||
if (nCpstY>=nCpsScreenHeight) return 0;
|
||||
}
|
||||
nCtvRollX=(0x40000000 + nCpsScreenWidth - 1) + nCpstX * 0x7fff;
|
||||
// nCtvRollX=0x4000017f + nCpstX * 0x7fff;
|
||||
nCtvRollY=0x400000df + nCpstY * 0x7fff;
|
||||
nCtvRollY=(0x40000000 + nCpsScreenHeight - 1) + nCpstY * 0x7fff;
|
||||
}
|
||||
|
||||
// Clip to loaded graphics data (we have a gap of 0x200 at the end)
|
||||
|
@ -164,10 +163,10 @@ static INT32 CpstOneObjZ()
|
|||
if (nCpstX <= -nSize) return 0;
|
||||
if (nCpstX >= nCpsScreenWidth) return 0;
|
||||
if (nCpstY <= -nSize) return 0;
|
||||
if (nCpstY >= 224) return 0;
|
||||
if (nCpstY >= nCpsScreenHeight) return 0;
|
||||
}
|
||||
nCtvRollX=(0x40000000 + nCpsScreenWidth - 1) + nCpstX * 0x7fff;
|
||||
nCtvRollY=0x400000df + nCpstY * 0x7fff;
|
||||
nCtvRollY=(0x40000000 + nCpsScreenHeight - 1) + nCpstY * 0x7fff;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ INT32 Cps2Volume = 39;
|
|||
INT32 Cps2DisableDigitalVolume = 0;
|
||||
UINT8 Cps2VolUp;
|
||||
UINT8 Cps2VolDwn;
|
||||
UINT8 AspectDIP; // only for Cps2Turbo == 1
|
||||
|
||||
UINT16 Cps2VolumeStates[40] = {
|
||||
0xf010, 0xf008, 0xf004, 0xf002, 0xf001, 0xe810, 0xe808, 0xe804, 0xe802, 0xe801,
|
||||
|
@ -50,6 +51,57 @@ static struct BurnInputInfo Cps2FightingInputList[] = {
|
|||
|
||||
STDINPUTINFO(Cps2Fighting)
|
||||
|
||||
static struct BurnInputInfo Sfz3mixInputList[] = {
|
||||
{"P1 Coin" , BIT_DIGITAL , CpsInp020+4, "p1 coin" },
|
||||
{"P1 Start" , BIT_DIGITAL , CpsInp020+0, "p1 start" },
|
||||
{"P1 Up" , BIT_DIGITAL , CpsInp001+3, "p1 up" },
|
||||
{"P1 Down" , BIT_DIGITAL , CpsInp001+2, "p1 down" },
|
||||
{"P1 Left" , BIT_DIGITAL , CpsInp001+1, "p1 left" },
|
||||
{"P1 Right" , BIT_DIGITAL , CpsInp001+0, "p1 right" },
|
||||
{"P1 Weak Punch" , BIT_DIGITAL , CpsInp001+4, "p1 fire 1" },
|
||||
{"P1 Medium Punch" , BIT_DIGITAL , CpsInp001+5, "p1 fire 2" },
|
||||
{"P1 Strong Punch" , BIT_DIGITAL , CpsInp001+6, "p1 fire 3" },
|
||||
{"P1 Weak Kick" , BIT_DIGITAL , CpsInp011+0, "p1 fire 4" },
|
||||
{"P1 Medium Kick" , BIT_DIGITAL , CpsInp011+1, "p1 fire 5" },
|
||||
{"P1 Strong Kick" , BIT_DIGITAL , CpsInp011+2, "p1 fire 6" },
|
||||
|
||||
{"P2 Coin" , BIT_DIGITAL , CpsInp020+5, "p2 coin" },
|
||||
{"P2 Start" , BIT_DIGITAL , CpsInp020+1, "p2 start" },
|
||||
{"P2 Up" , BIT_DIGITAL , CpsInp000+3, "p2 up" },
|
||||
{"P2 Down" , BIT_DIGITAL , CpsInp000+2, "p2 down" },
|
||||
{"P2 Left" , BIT_DIGITAL , CpsInp000+1, "p2 left" },
|
||||
{"P2 Right" , BIT_DIGITAL , CpsInp000+0, "p2 right" },
|
||||
{"P2 Weak Punch" , BIT_DIGITAL , CpsInp000+4, "p2 fire 1" },
|
||||
{"P2 Medium Punch" , BIT_DIGITAL , CpsInp000+5, "p2 fire 2" },
|
||||
{"P2 Strong Punch" , BIT_DIGITAL , CpsInp000+6, "p2 fire 3" },
|
||||
{"P2 Weak Kick" , BIT_DIGITAL , CpsInp011+4, "p2 fire 4" },
|
||||
{"P2 Medium Kick" , BIT_DIGITAL , CpsInp011+5, "p2 fire 5" },
|
||||
{"P2 Strong Kick" , BIT_DIGITAL , CpsInp020+6, "p2 fire 6" },
|
||||
|
||||
{"Reset" , BIT_DIGITAL , &CpsReset , "reset" },
|
||||
{"Diagnostic" , BIT_DIGITAL , CpsInp021+1, "diag" },
|
||||
{"Service" , BIT_DIGITAL , CpsInp021+2, "service" },
|
||||
{"Volume Up" , BIT_DIGITAL , &Cps2VolUp , "p1 fire 7" },
|
||||
{"Volume Down" , BIT_DIGITAL , &Cps2VolDwn, "p1 fire 8" },
|
||||
{"Dip A" , BIT_DIPSWITCH, &AspectDIP , "dip" },
|
||||
};
|
||||
|
||||
STDINPUTINFO(Sfz3mix)
|
||||
|
||||
// sfz3miz 0.20+ only!
|
||||
static struct BurnDIPInfo Sfz3mixDIPList[] =
|
||||
{
|
||||
DIP_OFFSET(0x1d)
|
||||
{0x00, 0xff, 0xff, 0x00, NULL },
|
||||
|
||||
{0 , 0xfe, 0 , 3, "Aspect Ratio" },
|
||||
{0x00, 0x01, 0x03, 0x00, "16:9" },
|
||||
{0x00, 0x01, 0x03, 0x01, "4:3" },
|
||||
{0x00, 0x01, 0x03, 0x02, "112:81" },
|
||||
};
|
||||
|
||||
STDDIPINFO(Sfz3mix)
|
||||
|
||||
static struct BurnInputInfo NineXXInputList[] = {
|
||||
{"P1 Coin" , BIT_DIGITAL , CpsInp020+4, "p1 coin" },
|
||||
{"P1 Start" , BIT_DIGITAL , CpsInp020+0, "p1 start" },
|
||||
|
@ -11528,7 +11580,9 @@ static INT32 Cps2TurboInit()
|
|||
}
|
||||
|
||||
nCpsScreenWidth = 416;
|
||||
nCpsScreenHeight = 234;
|
||||
nCpsGlobalXOffset = 16;
|
||||
nCpsGlobalYOffset = 5;
|
||||
|
||||
return Cps2Init();
|
||||
}
|
||||
|
@ -11538,9 +11592,9 @@ struct BurnDriver BurnDrvCpsSfz3mix = {
|
|||
"Street Fighter Zero 3 Mix v0.22\0", NULL, "hack", "CPS2",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE | BDF_HACK | BDF_HISCORE_SUPPORTED, 2, HARDWARE_CAPCOM_CPS2, GBF_VSFIGHT, FBF_SF,
|
||||
NULL, Sfz3mixRomInfo, Sfz3mixRomName, NULL, NULL, Sfz3mixSampleInfo, Sfz3mixSampleName, Cps2FightingInputInfo, NULL,
|
||||
NULL, Sfz3mixRomInfo, Sfz3mixRomName, NULL, NULL, Sfz3mixSampleInfo, Sfz3mixSampleName, Sfz3mixInputInfo, Sfz3mixDIPInfo,
|
||||
Cps2TurboInit, DrvExit, Cps2Frame, CpsRedraw, CpsAreaScan,
|
||||
&CpsRecalcPal, 0x1000, 416, 224, 16, 9
|
||||
&CpsRecalcPal, 0x1000, 416, 234, 16, 9
|
||||
};
|
||||
|
||||
struct BurnDriver BurnDrvCpsSfz3mix13 = {
|
||||
|
@ -14651,7 +14705,7 @@ struct BurnDriver BurnDrvCpsGigaman2 = {
|
|||
};
|
||||
|
||||
// Dungeons & Dragons - shadow over mystara (T-Chi)
|
||||
// Modified by ¥Õ¥§¥Ë¥Ã¥¯¥¹
|
||||
// Modified by ¥Õ¥§¥Ë¥Ã¥¯¥¹
|
||||
static struct BurnRomInfo DdsomjcRomDesc[] = {
|
||||
{ "dd2jc.03g", 0x080000, 0xed73e646, CPS2_PRG_68K | BRF_ESS | BRF_PRG },
|
||||
{ "dd2jc.04g", 0x080000, 0xc5a6e4b5, CPS2_PRG_68K | BRF_ESS | BRF_PRG },
|
||||
|
|
Loading…
Reference in New Issue