Mapper 319: Use hp898f.c only for the old incorrect UNIF bank order, and 319.c for all NES 2.0 ROMs. Add CNROM mode and solder pad switch to the latter.
This commit is contained in:
@@ -20,45 +20,25 @@
|
||||
|
||||
#include "mapinc.h"
|
||||
|
||||
/* This source code file only applies to Sanchez' original UNIF file with the incorrect bank order.
|
||||
The correctly-specified mapper, used for all NES 2.0 ROM files, is implemented in 319.c. */
|
||||
|
||||
static uint8 regs[2];
|
||||
static uint8 _submapper = 0;
|
||||
|
||||
static SFORMAT StateRegs[] =
|
||||
{
|
||||
{ regs, 2, "REGS" },
|
||||
{ &_submapper ,1, "SUBM"},
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
/* submapper 1 The code for the original fceux
|
||||
* submapper 0 new HP898F code by dragon2snow,loong2snow from www.nesbbs.com
|
||||
*/
|
||||
static void Sync(void) {
|
||||
|
||||
if (_submapper == 1)
|
||||
{
|
||||
uint8 chr = (regs[0] >> 4) & 7;
|
||||
uint8 prg = (regs[1] >> 3) & 7;
|
||||
uint8 dec = (regs[1] >> 4) & 4;
|
||||
setchr8(chr & (~(((regs[0] & 1) << 2) | (regs[0] & 2))));
|
||||
setprg16(0x8000, prg & (~dec));
|
||||
setprg16(0xC000, prg | dec);
|
||||
setmirror(regs[1] >> 7);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (regs[1] & 0x40)
|
||||
setprg32(0x8000, regs[1] >> 1);
|
||||
else {
|
||||
setprg16(0x8000, regs[1]);
|
||||
setprg16(0xC000, regs[1]);
|
||||
}
|
||||
setchr8((regs[0] >> 4) &~(((regs[0] & 1) ? 4 : 0) | (regs[0] & 2)));
|
||||
if (regs[1] & 0x80)
|
||||
setmirror(1);
|
||||
else
|
||||
setmirror(0);
|
||||
}
|
||||
static void Sync(void) {
|
||||
uint8 chr = (regs[0] >> 4) & 7;
|
||||
uint8 prg = (regs[1] >> 3) & 7;
|
||||
uint8 dec = (regs[1] >> 4) & 4;
|
||||
setchr8(chr & (~(((regs[0] & 1) << 2) | (regs[0] & 2))));
|
||||
setprg16(0x8000, prg & (~dec));
|
||||
setprg16(0xC000, prg | dec);
|
||||
setmirror(regs[1] >> 7);
|
||||
}
|
||||
|
||||
static DECLFW(HP898FWrite) {
|
||||
@@ -78,17 +58,8 @@ static DECLFW(HP898FWriteEx) {
|
||||
static void HP898FPower(void) {
|
||||
regs[0] = regs[1] = 0;
|
||||
Sync();
|
||||
if (_submapper == 1)
|
||||
{
|
||||
SetReadHandler(0x8000, 0xFFFF, CartBR);
|
||||
SetWriteHandler(0x6000, 0xFFFF, HP898FWrite);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetReadHandler(0x8000, 0xFFFF, CartBR);
|
||||
SetWriteHandler(0x6000, 0x7FFF, HP898FWriteEx);
|
||||
SetWriteHandler(0xE000, 0xFFFF, HP898FWriteEx);
|
||||
}
|
||||
SetReadHandler(0x8000, 0xFFFF, CartBR);
|
||||
SetWriteHandler(0x6000, 0xFFFF, HP898FWrite);
|
||||
}
|
||||
|
||||
static void HP898FReset(void) {
|
||||
@@ -101,7 +72,6 @@ static void StateRestore(int version) {
|
||||
}
|
||||
|
||||
void BMCHP898F_Init(CartInfo *info) {
|
||||
_submapper = info->submapper;
|
||||
info->Reset = HP898FReset;
|
||||
info->Power = HP898FPower;
|
||||
GameStateRestore = StateRestore;
|
||||
|
||||
Reference in New Issue
Block a user