Mapper 394: Add large variant. Correct issue when soft-resetting from JY to MMC3 mode.
This commit is contained in:
committed by
LibretroAdmin
parent
0b8ec19ffe
commit
6e8b6c87ab
@@ -45,6 +45,7 @@ static uint8 mul[2];
|
|||||||
static uint8 adder;
|
static uint8 adder;
|
||||||
static uint8 test;
|
static uint8 test;
|
||||||
static uint8 dipSwitch;
|
static uint8 dipSwitch;
|
||||||
|
static uint8 submapper;
|
||||||
|
|
||||||
static uint8 cpuWriteHandlersSet;
|
static uint8 cpuWriteHandlersSet;
|
||||||
static writefunc cpuWriteHandlers[0x10000]; /* Actual write handlers for CPU write trapping as a method fo IRQ clocking */
|
static writefunc cpuWriteHandlers[0x10000]; /* Actual write handlers for CPU write trapping as a method fo IRQ clocking */
|
||||||
@@ -689,8 +690,8 @@ void Mapper421_Init(CartInfo *info)
|
|||||||
static uint8 HSK007Reg[4];
|
static uint8 HSK007Reg[4];
|
||||||
void sync394 (void) /* Called when J.Y. ASIC is active */
|
void sync394 (void) /* Called when J.Y. ASIC is active */
|
||||||
{
|
{
|
||||||
int prgOR =HSK007Reg[3] <<1 &0x010 | HSK007Reg[1] <<5 &0x020;
|
int prgOR =HSK007Reg[3] <<1 &0x010 | HSK007Reg[1] <<5 &0x060;
|
||||||
int chrOR =HSK007Reg[3] <<1 &0x080 | HSK007Reg[1] <<8 &0x100;
|
int chrOR =HSK007Reg[3] <<1 &0x080 | HSK007Reg[1] <<6 &0x100 | HSK007Reg[1] <<8 &0x200;
|
||||||
syncPRG(0x1F, prgOR);
|
syncPRG(0x1F, prgOR);
|
||||||
syncCHR(0xFF, chrOR);
|
syncCHR(0xFF, chrOR);
|
||||||
syncNT (0xFF, chrOR);
|
syncNT (0xFF, chrOR);
|
||||||
@@ -698,7 +699,7 @@ void sync394 (void) /* Called when J.Y. ASIC is active */
|
|||||||
static void Mapper394_PWrap(uint32 A, uint8 V)
|
static void Mapper394_PWrap(uint32 A, uint8 V)
|
||||||
{
|
{
|
||||||
int prgAND =HSK007Reg[3] &0x10? 0x1F: 0x0F;
|
int prgAND =HSK007Reg[3] &0x10? 0x1F: 0x0F;
|
||||||
int prgOR =HSK007Reg[3] <<1 &0x010 | HSK007Reg[1] <<5 &0x020;
|
int prgOR =HSK007Reg[3] <<1 &0x010 | HSK007Reg[1] <<5 &0x060;
|
||||||
if (HSK007Reg[1] &0x08)
|
if (HSK007Reg[1] &0x08)
|
||||||
setprg8(A, V &prgAND | prgOR &~prgAND);
|
setprg8(A, V &prgAND | prgOR &~prgAND);
|
||||||
else
|
else
|
||||||
@@ -709,7 +710,7 @@ static void Mapper394_PWrap(uint32 A, uint8 V)
|
|||||||
static void Mapper394_CWrap(uint32 A, uint8 V)
|
static void Mapper394_CWrap(uint32 A, uint8 V)
|
||||||
{
|
{
|
||||||
int chrAND =HSK007Reg[3] &0x80? 0xFF: 0x7F;
|
int chrAND =HSK007Reg[3] &0x80? 0xFF: 0x7F;
|
||||||
int chrOR =HSK007Reg[3] <<1 &0x080 | HSK007Reg[1] <<8 &0x100;
|
int chrOR =submapper ==1? (HSK007Reg[3] <<1 &0x080 | HSK007Reg[1] <<8 &0x200 | HSK007Reg[1] <<6 &0x100): (HSK007Reg[3] <<1 &0x080 | HSK007Reg[1] <<8 &0x100);
|
||||||
setchr1(A, V &chrAND | chrOR &~chrAND);
|
setchr1(A, V &chrAND | chrOR &~chrAND);
|
||||||
}
|
}
|
||||||
static DECLFW(Mapper394_Write)
|
static DECLFW(Mapper394_Write)
|
||||||
@@ -775,13 +776,15 @@ static void Mapper394_power(void)
|
|||||||
HSK007Reg[0] =0x00;
|
HSK007Reg[0] =0x00;
|
||||||
HSK007Reg[1] =0x0F;
|
HSK007Reg[1] =0x0F;
|
||||||
HSK007Reg[2] =0x00;
|
HSK007Reg[2] =0x00;
|
||||||
HSK007Reg[3] =0x10;
|
HSK007Reg[3] =0x90;
|
||||||
|
irqEnabled =0;
|
||||||
GenMMC3Power();
|
GenMMC3Power();
|
||||||
SetWriteHandler(0x5000, 0x5FFF, Mapper394_Write);
|
SetWriteHandler(0x5000, 0x5FFF, Mapper394_Write);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mapper394_Init(CartInfo *info)
|
void Mapper394_Init(CartInfo *info)
|
||||||
{
|
{
|
||||||
|
submapper =info->submapper;
|
||||||
allowExtendedMirroring =1;
|
allowExtendedMirroring =1;
|
||||||
sync =sync394;
|
sync =sync394;
|
||||||
JYASIC_init(info);
|
JYASIC_init(info);
|
||||||
|
|||||||
Reference in New Issue
Block a user