Add mapper 447 submapper 1.
This commit is contained in:
@@ -22,14 +22,9 @@
|
|||||||
#include "asic_vrc2and4.h"
|
#include "asic_vrc2and4.h"
|
||||||
#include "cartram.h"
|
#include "cartram.h"
|
||||||
|
|
||||||
|
static uint8 submapper;
|
||||||
static uint8 reg;
|
static uint8 reg;
|
||||||
static uint8 dip;
|
static uint8 pad;
|
||||||
|
|
||||||
static SFORMAT stateRegs[] = {
|
|
||||||
{ ®, 1, "EXP0" },
|
|
||||||
{ &dip, 1, "DIPS" },
|
|
||||||
{ 0 }
|
|
||||||
};
|
|
||||||
|
|
||||||
static void sync () {
|
static void sync () {
|
||||||
VRC24_syncPRG(0x0F, reg <<4);
|
VRC24_syncPRG(0x0F, reg <<4);
|
||||||
@@ -39,21 +34,19 @@ static void sync () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int getPRGBank (uint8 bank) {
|
static int getPRGBank (uint8 bank) {
|
||||||
if (reg &4) {
|
if (reg &0x04) {
|
||||||
if (~reg &2)
|
int mask = reg &(submapper == 0? 0x02: 0x08) ? 1: 3;
|
||||||
return VRC24_getPRGBank(bank &1) &~2 | bank &2;
|
return VRC24_getPRGBank(bank &1) &~mask | bank &mask;
|
||||||
else
|
|
||||||
return VRC24_getPRGBank(bank &1);
|
|
||||||
} else
|
} else
|
||||||
return VRC24_getPRGBank(bank);
|
return VRC24_getPRGBank(bank);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLFR (readPRG) {
|
static DECLFR (readPRG) {
|
||||||
return CartBR(reg &8? (A &~3 | dip &3): A);
|
return CartBR(reg &0x08? (A &~0x03 | pad &0x03): A);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLFW (writeReg) {
|
static DECLFW (writeReg) {
|
||||||
if (~reg &1) {
|
if (~reg &0x01) {
|
||||||
reg = A &0xFF;
|
reg = A &0xFF;
|
||||||
sync();
|
sync();
|
||||||
}
|
}
|
||||||
@@ -62,21 +55,23 @@ static DECLFW (writeReg) {
|
|||||||
|
|
||||||
static void power (void) {
|
static void power (void) {
|
||||||
reg = 0;
|
reg = 0;
|
||||||
dip = 0;
|
pad = 0;
|
||||||
VRC24_power();
|
VRC24_power();
|
||||||
SetReadHandler(0x8000, 0xFFFF, readPRG);
|
if (submapper == 0) SetReadHandler(0x8000, 0xFFFF, readPRG);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset (void) {
|
static void reset (void) {
|
||||||
reg = 0;
|
reg = 0;
|
||||||
dip++;
|
pad++;
|
||||||
sync();
|
VRC24_clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mapper447_Init (CartInfo *info) {
|
void Mapper447_Init (CartInfo *info) {
|
||||||
|
submapper = info->submapper;
|
||||||
VRC4_init(info, sync, 0x04, 0x08, 0, getPRGBank, NULL, NULL, writeReg, NULL );
|
VRC4_init(info, sync, 0x04, 0x08, 0, getPRGBank, NULL, NULL, writeReg, NULL );
|
||||||
WRAM_init(info, 2);
|
WRAM_init(info, 2);
|
||||||
info->Power = power;
|
info->Power = power;
|
||||||
info->Reset = reset;
|
info->Reset = reset;
|
||||||
AddExState(stateRegs, ~0, 0, 0);
|
AddExState(®, 1, 0, "EXPR");
|
||||||
|
if (submapper == 0) AddExState(&pad, 1, 0, "DIPS");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -878,7 +878,7 @@ INES_BOARD_BEGIN()
|
|||||||
INES_BOARD( "NC-7000M/NC-8000M", 444, Mapper444_Init )
|
INES_BOARD( "NC-7000M/NC-8000M", 444, Mapper444_Init )
|
||||||
INES_BOARD( "DG574B", 445, Mapper445_Init )
|
INES_BOARD( "DG574B", 445, Mapper445_Init )
|
||||||
INES_BOARD( "SMD172B_FPGA", 446, Mapper446_Init )
|
INES_BOARD( "SMD172B_FPGA", 446, Mapper446_Init )
|
||||||
INES_BOARD( "KL-06", 447, Mapper447_Init )
|
INES_BOARD( "KL-06/GC007", 447, Mapper447_Init )
|
||||||
INES_BOARD( "830768C", 448, Mapper448_Init )
|
INES_BOARD( "830768C", 448, Mapper448_Init )
|
||||||
INES_BOARD( "22-in-1 King Series", 449, Mapper449_Init )
|
INES_BOARD( "22-in-1 King Series", 449, Mapper449_Init )
|
||||||
INES_BOARD( "晶太 YY841157C", 450, Mapper450_Init )
|
INES_BOARD( "晶太 YY841157C", 450, Mapper450_Init )
|
||||||
|
|||||||
Reference in New Issue
Block a user