diff --git a/src/boards/datalatch.c b/src/boards/datalatch.c index c86d585..d5fa8f5 100644 --- a/src/boards/datalatch.c +++ b/src/boards/datalatch.c @@ -512,33 +512,34 @@ void Mapper538_Init(CartInfo *info) { * mode (one screen) and 32K bankswitching, second one have only * 16 bankswitching mode and normal mirroring... But there is no any * correlations between modes and they can be used in one mapper code. + * + * Submapper 0 - 3-in-1 (N068) + * Submapper 0 - 3-in-1 (N080) + * Submapper 1 - 4-in-1 (JY-066) */ + static int A65ASsubmapper; static void BMCA65ASSync(void) { if (latche & 0x40) setprg32(0x8000, (latche >> 1) & 0x0F); else { if (A65ASsubmapper == 1) { - setprg16(0x8000, ((latche & 0x38) >> 0) | (latche & 7)); - setprg16(0xC000, ((latche & 0x38) >> 0) | 7); - } else { setprg16(0x8000, ((latche & 0x30) >> 1) | (latche & 7)); setprg16(0xC000, ((latche & 0x30) >> 1) | 7); + } else { + setprg16(0x8000, latche & 0x0F); + setprg16(0xC000, latche & 0x0F | 7); } } setchr8(0); if (latche & 0x80) setmirror(MI_0 + (((latche >> 5) & 1))); - else { - if (A65ASsubmapper == 1) /* added as workaround since games for this cart uses vertical mirroring */ - setmirror(MI_V); - else - setmirror(((latche >> 3) & 1) ^ 1); - } + else + setmirror(((latche >> 3) & 1) ^ 1); } void BMCA65AS_Init(CartInfo *info) { - A65ASsubmapper = info->submapper; /* not a real submapper */ + A65ASsubmapper = info->submapper; Latch_Init(info, BMCA65ASSync, 0, 0x8000, 0xFFFF, 0, 0); } diff --git a/src/unif.c b/src/unif.c index 5ce0560..502351c 100644 --- a/src/unif.c +++ b/src/unif.c @@ -364,7 +364,7 @@ struct _unif_db { }; static struct _unif_db unif_db[] = { - { 0x8ebad077d08e6c78ULL, "A65AS", 1, -1, -1 }, /* 3-in-1 (N080) [p1][U][!], not a real submapper */ + { 0x03ed6963ca50e1d8ULL, "A65AS", 1, -1, -1 }, { 0x616851e56946893bULL, "RESETNROM-XIN1", 0, MI_V, -1 }, /* Sheng Tian 2-in-1(Unl,ResetBase)[p1].unf */ { 0x4cd729b5ae23a3cfULL, "RESETNROM-XIN1", 0, MI_H, -1 }, /* Sheng Tian 2-in-1(Unl,ResetBase)[p2].unf */