diff --git a/hash/nes.xml b/hash/nes.xml index 15150fad1da..dd41670c608 100644 --- a/hash/nes.xml +++ b/hash/nes.xml @@ -78847,6 +78847,206 @@ be better to redump them properly. --> + + + 8-bit Xmas 2008 + 2008 + RetroZone + + + + + + + + + + + + + 8-bit Xmas 2009 + 2009 + RetroZone + + + + + + + + + + + + + 8-bit Xmas 2010 + 2010 + RetroZone + + + + + + + + + + + + + + 8-bit Xmas 2011 + 2011 + RetroZone + + + + + + + + + + + + + + 8-bit Xmas 2012 + 2012 + RetroZone + + + + + + + + + + + + + 8-bit Xmas 2013 + 2013 + RetroZone + + + + + + + + + + + + + 8-bit Xmas 2014 + 2014 + retroUSB + + + + + + + + + + + + + 8-bit Xmas 2015 + 2015 + retroUSB + + + + + + + + + + + + + 8-bit Xmas 2016 + 2016 + retroUSB + + + + + + + + + + + + + 8-bit Xmas 2018 + 2018 + retroUSB + + + + + + + + + + + + + + 8-bit Xmas 2019 + 2019 + retroUSB + + + + + + + + + + + + + 8-bit Xmas 2020 + 2020 + retroUSB + + + + + + + + + + + + + 8-bit Xmas 2021 + 2021 + retroUSB + + + + + + + + + + + + Airball (RetroZone) diff --git a/src/devices/bus/nes/nes_carts.cpp b/src/devices/bus/nes/nes_carts.cpp index dbdc74112f8..58acce6cd1d 100644 --- a/src/devices/bus/nes/nes_carts.cpp +++ b/src/devices/bus/nes/nes_carts.cpp @@ -476,10 +476,11 @@ void nes_cart(device_slot_interface &device) device.option_add_internal("action53", NES_ACTION53); device.option_add_internal("batmap_000", NES_BATMAP_000); device.option_add_internal("batmap_srrx", NES_BATMAP_SRRX); + device.option_add_internal("8bitxmas", NES_8BITXMAS); device.option_add_internal("cufrom", NES_CUFROM); + device.option_add_internal("dpcmcart", NES_DPCMCART); device.option_add_internal("unrom512", NES_UNROM512); device.option_add_internal("2a03pur", NES_2A03PURITANS); - device.option_add_internal("dpcmcart", NES_DPCMCART); device.option_add_internal("farid_slrom8in1", NES_FARID_SLROM); device.option_add_internal("farid_unrom8in1", NES_FARID_UNROM); // other unsupported... diff --git a/src/devices/bus/nes/nes_ines.hxx b/src/devices/bus/nes/nes_ines.hxx index 739525ddf88..fc4e7995ff7 100644 --- a/src/devices/bus/nes/nes_ines.hxx +++ b/src/devices/bus/nes/nes_ines.hxx @@ -61,8 +61,8 @@ static const nes_mmc mmc_list[] = { 26, KONAMI_VRC6 }, { 27, UNL_CC21 }, // Mihunche, but previously used for World Hero { 28, UNL_ACTION53 }, // Multi-discrete PCB designed by Tepples for Action 53 - { 29, UNL_CUFROM }, // homebrew PCB used by Glider - { 30, UNL_UNROM512 }, // UNROM 512 + Flash + { 29, SEALIE_CUFROM }, // homebrew PCB used by Glider + { 30, SEALIE_UNROM512 }, // UNROM 512 + Flash { 31, UNL_2A03PURITANS }, // PCB designed by infinitelives & rainwarrior for 2A03 Puritans Album { 32, IREM_G101 }, { 33, TAITO_TC0190FMC }, @@ -444,7 +444,7 @@ static const nes_mmc mmc_list[] = // 406 homebrew game Haradius Zero // 407 VT03 PnP // 408 Konami PnP - { 409, UNL_DPCMCART }, // A Winner is You homebrew music cart + { 409, SEALIE_DPCMCART }, // A Winner is You homebrew music cart // 410 Unused or JY? { 411, BMC_A88S1 }, // 412 INTV 10-in-1 PnP 2nd edition @@ -871,7 +871,7 @@ void nes_cart_slot_device::call_load_ines() } break; - case UNL_UNROM512: + case SEALIE_UNROM512: // this mapper also uses mirroring flags differently m_cart->set_four_screen_vram(false); switch (local_options & 0x09) diff --git a/src/devices/bus/nes/nes_pcb.hxx b/src/devices/bus/nes/nes_pcb.hxx index 83db5969792..c417986ba58 100644 --- a/src/devices/bus/nes/nes_pcb.hxx +++ b/src/devices/bus/nes/nes_pcb.hxx @@ -385,10 +385,11 @@ static const nes_pcb pcb_list[] = { "action53", UNL_ACTION53 }, { "batmap_000", BATMAP_000 }, { "batmap_srrx", BATMAP_SRRX }, - { "cufrom", UNL_CUFROM }, - { "unrom512", UNL_UNROM512 }, + { "8bitxmas", SEALIE_8BITXMAS }, + { "cufrom", SEALIE_CUFROM }, + { "dpcmcart", SEALIE_DPCMCART }, + { "unrom512", SEALIE_UNROM512 }, { "2a03pur", UNL_2A03PURITANS }, - { "dpcmcart", UNL_DPCMCART }, { "farid_slrom8in1", FARID_SLROM8IN1 }, { "farid_unrom8in1", FARID_UNROM8IN1 }, { "ffe3", FFE3_BOARD }, diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h index 143f09b7005..bc89cc10c6c 100644 --- a/src/devices/bus/nes/nes_slot.h +++ b/src/devices/bus/nes/nes_slot.h @@ -151,7 +151,7 @@ enum // Batlab Electronics BATMAP_000, BATMAP_SRRX, // Sealie - UNL_CUFROM, UNL_UNROM512, UNL_DPCMCART, + SEALIE_8BITXMAS, SEALIE_CUFROM, SEALIE_DPCMCART, SEALIE_UNROM512, // FFE boards, for mappers 6, 8, 17 FFE3_BOARD, FFE4_BOARD, FFE8_BOARD, TEST_BOARD, // Unsupported (for place-holder boards, with no working emulation) & no-board (at init) diff --git a/src/devices/bus/nes/sealie.cpp b/src/devices/bus/nes/sealie.cpp index f9ecbdfa272..8ebad9191a7 100644 --- a/src/devices/bus/nes/sealie.cpp +++ b/src/devices/bus/nes/sealie.cpp @@ -11,6 +11,7 @@ * SEALIE RET-CUFROM [mapper 29] * SEALIE DPCMcart [mapper 409] * SEALIE UNROM 512 [mapper 30] + * SEALIE 8BIT XMAS [mapper 30] ***********************************************************************************************************/ @@ -32,6 +33,7 @@ // constructor //------------------------------------------------- +DEFINE_DEVICE_TYPE(NES_8BITXMAS, nes_8bitxmas_device, "nes_8bitxmas", "NES Cart Sealie 8BIT XMAS PCB") DEFINE_DEVICE_TYPE(NES_CUFROM, nes_cufrom_device, "nes_cufrom", "NES Cart Sealie RET-CUFROM PCB") DEFINE_DEVICE_TYPE(NES_DPCMCART, nes_dpcmcart_device, "nes_dpcmcart", "NES Cart Sealie DPCMcart PCB") DEFINE_DEVICE_TYPE(NES_UNROM512, nes_unrom512_device, "nes_unrom512", "NES Cart Sealie UNROM 512 PCB") @@ -47,8 +49,18 @@ nes_dpcmcart_device::nes_dpcmcart_device(const machine_config &mconfig, const ch { } +nes_unrom512_device::nes_unrom512_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) + : nes_nrom_device(mconfig, type, tag, owner, clock) +{ +} + nes_unrom512_device::nes_unrom512_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) - : nes_nrom_device(mconfig, NES_UNROM512, tag, owner, clock) + : nes_unrom512_device(mconfig, NES_UNROM512, tag, owner, clock) +{ +} + +nes_8bitxmas_device::nes_8bitxmas_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : nes_unrom512_device(mconfig, NES_8BITXMAS, tag, owner, clock), m_led(0) { } @@ -77,6 +89,23 @@ void nes_unrom512_device::pcb_reset() set_nt_mirroring(PPU_MIRROR_LOW); } +void nes_8bitxmas_device::device_start() +{ + nes_unrom512_device::device_start(); + save_item(NAME(m_led)); + + m_bus_conflict = false; +} + +void nes_8bitxmas_device::pcb_reset() +{ + nes_unrom512_device::pcb_reset(); + + m_led = 0; + update_led(); +} + + /*------------------------------------------------- mapper specific handlers @@ -159,3 +188,56 @@ void nes_unrom512_device::write_h(offs_t offset, u8 data) prg16_89ab(data & 0x1f); chr8((data >> 5) & 0x03, CHRRAM); } + +/*------------------------------------------------- + + Sealie 8BIT XMAS revD board + + Games: 8-bit Xmas 2012-2016 and 2018-2021? + + This board is a variant of UNROM512 with 16 LEDs + in 4 colors, blue, yellow, green, red, which are + controlled in pairs by each byte written to + 0x8000-0xbfff. Bits are [BYGR bygr] where bygr + control LEDs 1,2 and BYGR control LEDs 3,4. On + the 8BIT XMAS revD 2012 board LEDS are arranged: + + _______________________________ + | RED2 GRN3 | + | | + | YEL2 BLU3 | + | | + | BLU1 YEL4 | + | | + | GRN1 RED4 | + | | + | RED1 GRN4 | + | | + | YEL1 BLU4 | + -- -- + | GRN2 BLU2 YEL3 RED3 | + | | + + iNES: mapper 30 + + In MAME: Preliminary partial support. + + -------------------------------------------------*/ + +void nes_8bitxmas_device::update_led() +{ + // TODO: add artwork +} + +void nes_8bitxmas_device::write_h(offs_t offset, u8 data) +{ + LOG_MMC(("8bitxmas write_h, offset: %04x, data: %02x\n", offset, data)); + + if (BIT(offset, 14)) + nes_unrom512_device::write_h(offset, data); + else if (m_led != data) + { + m_led = data; + update_led(); + } +} diff --git a/src/devices/bus/nes/sealie.h b/src/devices/bus/nes/sealie.h index f674d558d07..2b6eef8f40d 100644 --- a/src/devices/bus/nes/sealie.h +++ b/src/devices/bus/nes/sealie.h @@ -47,10 +47,37 @@ public: virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; + +protected: + // construction/destruction + nes_unrom512_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); +}; + + +// ======================> nes_8bitxmas_device + +class nes_8bitxmas_device : public nes_unrom512_device +{ +public: + // construction/destruction + nes_8bitxmas_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void write_h(offs_t offset, u8 data) override; + + virtual void pcb_reset() override; + +protected: + // device-level overrides + virtual void device_start() override; + +private: + void update_led(); + u8 m_led; }; // device type definition +DECLARE_DEVICE_TYPE(NES_8BITXMAS, nes_8bitxmas_device) DECLARE_DEVICE_TYPE(NES_CUFROM, nes_cufrom_device) DECLARE_DEVICE_TYPE(NES_DPCMCART, nes_dpcmcart_device) DECLARE_DEVICE_TYPE(NES_UNROM512, nes_unrom512_device)