d_nes: add Chao Ji Zhan Hun: Super Contra 7 (China)
- NES adds SOCD scenes - Fixed a typo in a SOCD - Fixed some incorrect SOCD settings
This commit is contained in:
parent
184cac9c05
commit
4c8b72fff7
|
@ -119,7 +119,7 @@ struct HoldCoin {
|
|||
template <int N, typename T>
|
||||
struct ClearOpposite {
|
||||
// T prev[N << 2];
|
||||
T prev[N << 1], prev_a[N << 1], prev_b[N << 1];
|
||||
T prev[N], prev_a[N], prev_b[N];
|
||||
|
||||
void reset() {
|
||||
memset(&prev, 0, sizeof(prev));
|
||||
|
@ -186,7 +186,7 @@ struct ClearOpposite {
|
|||
}
|
||||
|
||||
const T inp_u = (1 << i), inp_d = (inp_u << 1), inp_l = (inp_u << 2), inp_r = (inp_u << 3);
|
||||
const T inp_ud = (inp_u | inp_d), inp_lr = (inp_l & inp_r);
|
||||
const T inp_ud = (inp_u | inp_d), inp_lr = (inp_l | inp_r);
|
||||
const T inp_e = (inp & (inp_ud | inp_lr)), prev_e = (prev[n] & (inp_ud | inp_lr));
|
||||
|
||||
if (((inp_e == (inp_d | inp_l)) && (prev_e == (inp_d | inp_r))) ||
|
||||
|
|
|
@ -135,7 +135,7 @@ UINT8 NeoReset = 0, NeoSystem = 0;
|
|||
UINT8 NeoCDBios = 0;
|
||||
UINT8 NeoUniHW = 0;
|
||||
UINT8 NeoOverscan = 0;
|
||||
static ClearOpposite<2, UINT8> clear_opposite;
|
||||
static ClearOpposite<4, UINT8> clear_opposite;
|
||||
|
||||
static UINT8 OldDebugDip[2] = { 0, 0 };
|
||||
|
||||
|
@ -4546,8 +4546,8 @@ static void NeoStandardInputs(INT32 nBank)
|
|||
NeoInput[10] |= (NeoButton3[i] & 1) << i;
|
||||
NeoInput[11] |= (NeoButton4[i] & 1) << i;
|
||||
}
|
||||
clear_opposite.check(0, NeoInput[ 8], 0x0c, 0x03, nSocd[2]);
|
||||
clear_opposite.check(1, NeoInput[ 9], 0x0c, 0x03, nSocd[3]);
|
||||
clear_opposite.check(2, NeoInput[ 8], 0x0c, 0x03, nSocd[2]);
|
||||
clear_opposite.check(3, NeoInput[ 9], 0x0c, 0x03, nSocd[3]);
|
||||
|
||||
if (NeoDiag[1]) {
|
||||
NeoInput[13] |= 0x80;
|
||||
|
@ -4563,8 +4563,8 @@ static void NeoStandardInputs(INT32 nBank)
|
|||
NeoInput[ 2] |= (NeoButton1[i] & 1) << i;
|
||||
NeoInput[ 3] |= (NeoButton2[i] & 1) << i;
|
||||
}
|
||||
clear_opposite.check(2, NeoInput[ 0], 0x0c, 0x03, nSocd[0]);
|
||||
clear_opposite.check(3, NeoInput[ 1], 0x0c, 0x03, nSocd[1]);
|
||||
clear_opposite.check(0, NeoInput[ 0], 0x0c, 0x03, nSocd[0]);
|
||||
clear_opposite.check(1, NeoInput[ 1], 0x0c, 0x03, nSocd[1]);
|
||||
if (NeoDiag[0]) {
|
||||
NeoInput[ 5] |= 0x80;
|
||||
}
|
||||
|
|
|
@ -27447,6 +27447,24 @@ struct BurnDriver BurnDrvnes_champlodrun = {
|
|||
SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT
|
||||
};
|
||||
|
||||
// Chao Ji Zhan Hun: Super Contra 7 (China)
|
||||
static struct BurnRomInfo nes_supercontra7RomDesc[] = {
|
||||
{ "Chao Ji Zhan Hun - Super Contra 7 (China)(1996)(E.S.C Co.).nes", 262160, 0x69480594, BRF_ESS | BRF_PRG },
|
||||
};
|
||||
|
||||
STD_ROM_PICK(nes_supercontra7)
|
||||
STD_ROM_FN(nes_supercontra7)
|
||||
|
||||
struct BurnDriver BurnDrvnes_supercontra7 = {
|
||||
"nes_supercontra7", NULL, NULL, NULL, "1996",
|
||||
" Chao Ji Zhan Hun: Super Contra 7 (China)\0", NULL, "E.S.C Co.", "NES / Famicom",
|
||||
L"Chao Ji Zhan Hun: Super Contra 7 (China)\0\u8d85\u7d1a\u6230\u9b42: Super Contra 7\0", NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING, 2, HARDWARE_NES, GBF_PLATFORM | GBF_RUNGUN, 0,
|
||||
NESGetZipName, nes_supercontra7RomInfo, nes_supercontra7RomName, NULL, NULL, NULL, NULL, NESInputInfo, NESDIPInfo,
|
||||
NESInit, NESExit, NESFrame, NESDraw, NESScan, &NESRecalc, 0x40,
|
||||
SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT
|
||||
};
|
||||
|
||||
// Chaos World (Japan)
|
||||
static struct BurnRomInfo nes_chaosworldjRomDesc[] = {
|
||||
{ "Chaos World (Japan)(1991)(Natsume).nes", 393232, 0xe2ae3e63, BRF_ESS | BRF_PRG },
|
||||
|
|
|
@ -30,6 +30,8 @@ static UINT8 DrvInputs[4] = { 0, 0, 0, 0 };
|
|||
static UINT32 JoyShifter[2] = { 0, 0 };
|
||||
static UINT8 JoyStrobe = 0;
|
||||
|
||||
static ClearOpposite<4, UINT8> clear_opposite;
|
||||
|
||||
// Zapper emulation
|
||||
INT16 ZapperX;
|
||||
INT16 ZapperY;
|
||||
|
@ -10982,6 +10984,8 @@ static INT32 DrvDoReset()
|
|||
cyc_counter = 0;
|
||||
mega_cyc_counter = 0;
|
||||
|
||||
clear_opposite.reset();
|
||||
|
||||
{
|
||||
INT32 nAspectX, nAspectY;
|
||||
BurnDrvGetAspect(&nAspectX, &nAspectY);
|
||||
|
@ -11378,6 +11382,7 @@ INT32 NESDraw()
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void clear_opposites(UINT8 &inpt)
|
||||
{
|
||||
// some games will straight-up crash or go berzerk if up+down or left+right
|
||||
|
@ -11390,6 +11395,7 @@ static void clear_opposites(UINT8 &inpt)
|
|||
if ((inpt & ( (1 << 6) | (1 << 7) )) == ((1 << 6) | (1 << 7)) )
|
||||
inpt &= ~((1 << 6) | (1 << 7)); // left + right pressed, cancel both
|
||||
}
|
||||
#endif
|
||||
|
||||
#define DEBUG_CYC 0
|
||||
|
||||
|
@ -11425,11 +11431,16 @@ INT32 NESFrame()
|
|||
DrvInputs[2] ^= (NESJoy3[i] & 1) << i;
|
||||
DrvInputs[3] ^= (NESJoy4[i] & 1) << i;
|
||||
}
|
||||
|
||||
#if 0
|
||||
clear_opposites(DrvInputs[0]);
|
||||
clear_opposites(DrvInputs[1]);
|
||||
clear_opposites(DrvInputs[2]);
|
||||
clear_opposites(DrvInputs[3]);
|
||||
#endif
|
||||
clear_opposite.check(0, DrvInputs[0], 0x30, 0xc0, nSocd[0]);
|
||||
clear_opposite.check(1, DrvInputs[1], 0x30, 0xc0, nSocd[1]);
|
||||
clear_opposite.check(2, DrvInputs[2], 0x30, 0xc0, nSocd[2]);
|
||||
clear_opposite.check(3, DrvInputs[3], 0x30, 0xc0, nSocd[3]);
|
||||
|
||||
if (NESMode & (USE_ZAPPER | VS_ZAPPER)) {
|
||||
BurnGunMakeInputs(0, ZapperX, ZapperY);
|
||||
|
@ -11553,6 +11564,7 @@ INT32 NESScan(INT32 nAction, INT32 *pnMin)
|
|||
SCAN_VAR(JoyShifter);
|
||||
SCAN_VAR(JoyStrobe);
|
||||
SCAN_VAR(ZapperReloadTimer);
|
||||
clear_opposite.scan();
|
||||
|
||||
ScanVar(NES_CPU_RAM, 0x800, "CPU Ram");
|
||||
ScanVar(Cart.WorkRAM, Cart.WorkRAMSize, "Work Ram");
|
||||
|
|
|
@ -13,7 +13,7 @@ UINT8 PgmBtn2[8] = {0,0,0,0,0,0,0,0};
|
|||
UINT8 PgmInput[9] = {0,0,0,0,0,0,0,0,0};
|
||||
UINT8 PgmReset = 0;
|
||||
static HoldCoin<4> hold_coin;
|
||||
static ClearOpposite<2, UINT8> clear_opposite;
|
||||
static ClearOpposite<4, UINT8> clear_opposite;
|
||||
|
||||
INT32 nPGM68KROMLen = 0;
|
||||
INT32 nPGMTileROMLen = 0;
|
||||
|
|
Loading…
Reference in New Issue