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)