diff --git a/src/boards/addrlatch.c b/src/boards/addrlatch.c index d47a131..2f581c3 100644 --- a/src/boards/addrlatch.c +++ b/src/boards/addrlatch.c @@ -846,3 +846,34 @@ static void M464Sync(void) { void Mapper464_Init(CartInfo *info) { Latch_Init(info, M464Sync, NULL, 0x0000, 0x8000, 0xFFFF, 1); } + +/*------------------ Map 488 ---------------------------*/ +static void M488Sync(void) { + setchr8(latche); + if (latche &4) + setprg32(0x8000, latche); + else { + setprg16(0x8000, latche <<1 | latche >>4 &1); + setprg16(0xC000, latche <<1 | latche >>4 &1); + } +} + +static DECLFR(M488Read) { + if (latche & 0x100) + A =A &~0x0F | dipswitch &0xF; + return CartBR(A); +} + +static void M488Reset(void) { + dipswitch++; + latche =0; + M488Sync(); +} + +void Mapper488_Init(CartInfo *info) { + dipswitch = 0; + Latch_Init(info, M488Sync, M488Read, 0x0000, 0x8000, 0xFFFF, 0); + info->Reset = M488Reset; + AddExState(&dipswitch, 1, 0, "DIPSW"); +} + diff --git a/src/ines.c b/src/ines.c index 8504a00..c30942f 100644 --- a/src/ines.c +++ b/src/ines.c @@ -907,6 +907,7 @@ INES_BOARD_BEGIN() INES_BOARD( "0359", 485, Mapper485_Init ) INES_BOARD( "KS7009", 486, Mapper486_Init ) INES_BOARD( "AVE NINA-08", 487, Mapper487_Init ) + INES_BOARD( "HC001", 488, Mapper488_Init ) INES_BOARD( "Yhc-000", 500, Mapper500_Init ) INES_BOARD( "Yhc-001", 501, Mapper501_Init ) INES_BOARD( "Yhc-002", 502, Mapper502_Init ) diff --git a/src/ines.h b/src/ines.h index 9ed5560..07d87fc 100644 --- a/src/ines.h +++ b/src/ines.h @@ -386,6 +386,7 @@ void Mapper484_Init(CartInfo *); void Mapper485_Init(CartInfo *); void Mapper486_Init(CartInfo *); void Mapper487_Init(CartInfo *); +void Mapper488_Init(CartInfo *); void Mapper500_Init(CartInfo *); void Mapper501_Init(CartInfo *); void Mapper502_Init(CartInfo *);