mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
Plug & Play work (#6463)
* new NOT WORKING ---- TV Fitness Center (Lexibook) [TeamEurope] Lexibook Retro TV Game Console - Frozen - 300 Games [TeamEurope] the TV Fitness you can select games etc. but inputs aren't fully mapped, Frozen is a more enhanced NES VT clone than we support (nw) * new NOT WORKING ---- Haluatko miljonääriksi? (Finland) [Sean Riddle, Santeri Saarimaa] surprisingly on entirely different hardware to the otherwise identical from the outside, aside from stickers UK version (nw) * new WORKING machines ---- Double Players Mini Joystick 80-in-1 (MJ8500, ABL TV Game) [Sean Riddle, David Haywood] * might as well drop the non-working tag here, issues are minor (nw) * was a PAL unit (nw) * minor vt refactoring (nw)
This commit is contained in:
parent
1f2d08fc6e
commit
74c4c3b275
@ -3874,6 +3874,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_senario_poker.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_mysprtch.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_vii.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_wiwi.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_ican.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_playvision.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg2xx_shredmjr.cpp",
|
||||
|
@ -272,40 +272,17 @@ void ppu_sh6578_device::draw_sprites(uint8_t* line_priority)
|
||||
}
|
||||
*/
|
||||
|
||||
void ppu_sh6578_device::write(offs_t offset, uint8_t data)
|
||||
void ppu_sh6578_device::write_extended(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset < 0x8)
|
||||
{
|
||||
ppu2c0x_device::write(offset, data);
|
||||
}
|
||||
else if (offset == 0x8)
|
||||
{
|
||||
LOGMASKED(LOG_PPU_EXTRA, "%s: ppu_sh6578_device::write : Color Select & PNT Start Address : %02x\n", machine().describe_context(), data);
|
||||
m_colsel_pntstart = data;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGMASKED(LOG_PPU_EXTRA, "%s: ppu_sh6578_device::write : unhandled offset %02x : %02x\n", machine().describe_context(), offset, data);
|
||||
}
|
||||
LOGMASKED(LOG_PPU_EXTRA, "%s: ppu_sh6578_device::write : Color Select & PNT Start Address : %02x\n", machine().describe_context(), data);
|
||||
m_colsel_pntstart = data;
|
||||
}
|
||||
|
||||
|
||||
uint8_t ppu_sh6578_device::read(offs_t offset)
|
||||
uint8_t ppu_sh6578_device::read_extended(offs_t offset)
|
||||
{
|
||||
if (offset < 0x8)
|
||||
{
|
||||
return ppu2c0x_device::read(offset);
|
||||
}
|
||||
else if (offset == 0x8)
|
||||
{
|
||||
LOGMASKED(LOG_PPU_EXTRA, "%s: ppu_sh6578_device::read : Color Select & PNT Start Address\n", machine().describe_context());
|
||||
return m_colsel_pntstart;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGMASKED(LOG_PPU_EXTRA, "%s: ppu_sh6578_device::read : unhandled offset %02x\n", machine().describe_context(), offset);
|
||||
return 0x00;
|
||||
}
|
||||
LOGMASKED(LOG_PPU_EXTRA, "%s: ppu_sh6578_device::read : Color Select & PNT Start Address\n", machine().describe_context());
|
||||
return m_colsel_pntstart;
|
||||
}
|
||||
|
||||
void ppu_sh6578_device::palette_write(offs_t offset, uint8_t data)
|
||||
|
@ -18,8 +18,8 @@ public:
|
||||
|
||||
virtual uint8_t palette_read(offs_t offset) override;
|
||||
virtual void palette_write(offs_t offset, uint8_t data) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write_extended(offs_t offset, uint8_t data);
|
||||
virtual uint8_t read_extended(offs_t offset);
|
||||
|
||||
protected:
|
||||
ppu_sh6578_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
@ -176,75 +176,67 @@ void ppu_vt03_device::palette_write(offs_t offset, uint8_t data)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ppu_vt03_device::read(offs_t offset)
|
||||
|
||||
uint8_t ppu_vt03_device::read_extended(offs_t offset)
|
||||
{
|
||||
if (offset <= 0xf)
|
||||
offset += 0x10;
|
||||
logerror("%s: read from extended PPU reg %02x\n", machine().describe_context(), offset);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
return ppu2c0x_device::read(offset);
|
||||
}
|
||||
else if (offset <= 0x1f)
|
||||
{
|
||||
logerror("%s: read from reg %02x\n", machine().describe_context(), offset);
|
||||
case 0x10:
|
||||
return m_201x_regs[0x0];
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0x10:
|
||||
return m_201x_regs[0x0];
|
||||
case 0x11:
|
||||
return m_201x_regs[0x1];
|
||||
|
||||
case 0x11:
|
||||
return m_201x_regs[0x1];
|
||||
case 0x12:
|
||||
return m_201x_regs[m_2012_2017_descramble[0]];
|
||||
|
||||
case 0x12:
|
||||
return m_201x_regs[m_2012_2017_descramble[0]];
|
||||
case 0x13:
|
||||
return m_201x_regs[m_2012_2017_descramble[1]];
|
||||
|
||||
case 0x13:
|
||||
return m_201x_regs[m_2012_2017_descramble[1]];
|
||||
case 0x14:
|
||||
return m_201x_regs[m_2012_2017_descramble[2]];
|
||||
|
||||
case 0x14:
|
||||
return m_201x_regs[m_2012_2017_descramble[2]];
|
||||
case 0x15:
|
||||
return m_201x_regs[m_2012_2017_descramble[3]];
|
||||
|
||||
case 0x15:
|
||||
return m_201x_regs[m_2012_2017_descramble[3]];
|
||||
case 0x16:
|
||||
return m_201x_regs[m_2012_2017_descramble[4]];
|
||||
|
||||
case 0x16:
|
||||
return m_201x_regs[m_2012_2017_descramble[4]];
|
||||
case 0x17:
|
||||
return m_201x_regs[m_2012_2017_descramble[5]];
|
||||
|
||||
case 0x17:
|
||||
return m_201x_regs[m_2012_2017_descramble[5]];
|
||||
case 0x18:
|
||||
return m_201x_regs[0x8];
|
||||
|
||||
case 0x18:
|
||||
return m_201x_regs[0x8];
|
||||
case 0x19:
|
||||
return 0x00;
|
||||
|
||||
case 0x19:
|
||||
return 0x00;
|
||||
case 0x1a:
|
||||
return m_201x_regs[0xa];
|
||||
|
||||
case 0x1a:
|
||||
return m_201x_regs[0xa];
|
||||
case 0x1b:
|
||||
return 0x00;
|
||||
|
||||
case 0x1b:
|
||||
return 0x00;
|
||||
case 0x1c:
|
||||
return 0x00;
|
||||
|
||||
case 0x1c:
|
||||
return 0x00;
|
||||
case 0x1d:
|
||||
return 0x00;
|
||||
|
||||
case 0x1d:
|
||||
return 0x00;
|
||||
case 0x1e:
|
||||
return 0x00;
|
||||
|
||||
case 0x1e:
|
||||
return 0x00;
|
||||
|
||||
case 0x1f:
|
||||
return 0x00;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
case 0x1f:
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
|
||||
void ppu_vt03_device::init_palette()
|
||||
{
|
||||
// todo, work out the format of the 12 palette bits instead of just calling the main init
|
||||
@ -500,83 +492,78 @@ void ppu_vt03_device::set_2010_reg(uint8_t data)
|
||||
m_201x_regs[0x0] = data;
|
||||
}
|
||||
|
||||
void ppu_vt03_device::write(offs_t offset, uint8_t data)
|
||||
void ppu_vt03_device::write_extended(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (offset < 0x10)
|
||||
offset += 0x10;
|
||||
logerror("%s: write to extended PPU reg 0x20%02x %02x\n", machine().describe_context(), offset, data);
|
||||
switch (offset)
|
||||
{
|
||||
ppu2c0x_device::write(offset, data);
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s: write to reg 0x20%02x %02x\n", machine().describe_context(), offset, data);
|
||||
switch (offset)
|
||||
{
|
||||
case 0x10:
|
||||
set_2010_reg(data);
|
||||
break;
|
||||
case 0x10:
|
||||
set_2010_reg(data);
|
||||
break;
|
||||
|
||||
case 0x11:
|
||||
m_201x_regs[0x1] = data;
|
||||
break;
|
||||
case 0x11:
|
||||
m_201x_regs[0x1] = data;
|
||||
break;
|
||||
|
||||
case 0x12:
|
||||
m_201x_regs[m_2012_2017_descramble[0]] = data;
|
||||
break;
|
||||
case 0x12:
|
||||
m_201x_regs[m_2012_2017_descramble[0]] = data;
|
||||
break;
|
||||
|
||||
case 0x13:
|
||||
m_201x_regs[m_2012_2017_descramble[1]] = data;
|
||||
break;
|
||||
case 0x13:
|
||||
m_201x_regs[m_2012_2017_descramble[1]] = data;
|
||||
break;
|
||||
|
||||
case 0x14:
|
||||
m_201x_regs[m_2012_2017_descramble[2]] = data;
|
||||
break;
|
||||
case 0x14:
|
||||
m_201x_regs[m_2012_2017_descramble[2]] = data;
|
||||
break;
|
||||
|
||||
case 0x15:
|
||||
m_201x_regs[m_2012_2017_descramble[3]] = data;
|
||||
break;
|
||||
case 0x15:
|
||||
m_201x_regs[m_2012_2017_descramble[3]] = data;
|
||||
break;
|
||||
|
||||
case 0x16:
|
||||
m_201x_regs[m_2012_2017_descramble[4]] = data;
|
||||
break;
|
||||
case 0x16:
|
||||
m_201x_regs[m_2012_2017_descramble[4]] = data;
|
||||
break;
|
||||
|
||||
case 0x17:
|
||||
logerror("set reg 7 %02x\n", data);
|
||||
m_201x_regs[m_2012_2017_descramble[5]] = data;
|
||||
break;
|
||||
case 0x17:
|
||||
logerror("set reg 7 %02x\n", data);
|
||||
m_201x_regs[m_2012_2017_descramble[5]] = data;
|
||||
break;
|
||||
|
||||
case 0x18:
|
||||
logerror("set reg 8 %02x\n", data);
|
||||
m_201x_regs[0x8] = data;
|
||||
break;
|
||||
case 0x18:
|
||||
logerror("set reg 8 %02x\n", data);
|
||||
m_201x_regs[0x8] = data;
|
||||
break;
|
||||
|
||||
case 0x19:
|
||||
// reset gun port (value doesn't matter)
|
||||
break;
|
||||
case 0x19:
|
||||
// reset gun port (value doesn't matter)
|
||||
break;
|
||||
|
||||
case 0x1a:
|
||||
m_201x_regs[0xa] = data;
|
||||
break;
|
||||
case 0x1a:
|
||||
m_201x_regs[0xa] = data;
|
||||
break;
|
||||
|
||||
case 0x1b:
|
||||
// unused
|
||||
break;
|
||||
case 0x1b:
|
||||
// unused
|
||||
break;
|
||||
|
||||
case 0x1c:
|
||||
// (READ) x-coordinate of gun
|
||||
break;
|
||||
case 0x1c:
|
||||
// (READ) x-coordinate of gun
|
||||
break;
|
||||
|
||||
case 0x1d:
|
||||
// (READ) y-coordinate of gun
|
||||
break;
|
||||
case 0x1d:
|
||||
// (READ) y-coordinate of gun
|
||||
break;
|
||||
|
||||
case 0x1e:
|
||||
// (READ) x-coordinate of gun 2
|
||||
break;
|
||||
case 0x1e:
|
||||
// (READ) x-coordinate of gun 2
|
||||
break;
|
||||
|
||||
case 0x1f:
|
||||
// (READ) y-coordinate of gun 2
|
||||
break;
|
||||
}
|
||||
case 0x1f:
|
||||
// (READ) y-coordinate of gun 2
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -34,8 +34,9 @@ public:
|
||||
void set_palette_mode(vtxx_pal_mode pmode) { m_pal_mode = pmode; }
|
||||
void set_201x_descramble(uint8_t reg0, uint8_t reg1, uint8_t reg2, uint8_t reg3, uint8_t reg4, uint8_t reg5);
|
||||
|
||||
virtual uint8_t read(offs_t offset) override;
|
||||
virtual void write(offs_t offset, uint8_t data) override;
|
||||
uint8_t read_extended(offs_t offset);
|
||||
void write_extended(offs_t offset, uint8_t data);
|
||||
|
||||
virtual uint8_t palette_read(offs_t offset) override;
|
||||
virtual void palette_write(offs_t offset, uint8_t data) override;
|
||||
|
||||
|
@ -819,6 +819,13 @@ ROM_START( carlecfg )
|
||||
ROM_RELOAD(0x300000,0x100000)
|
||||
ROM_END
|
||||
|
||||
ROM_START( pvmilfin )
|
||||
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "fwwtbam.bin", 0x000000, 0x200000, CRC(2cfef9ab) SHA1(b64f55e36b59790a310ae33154774ac613b5d49f) )
|
||||
ROM_RELOAD(0x200000,0x200000)
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
ROM_START( buzztime )
|
||||
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
|
||||
@ -842,3 +849,6 @@ CONS( 2004, buzztime, 0, 0, elan_buzztime, sudoku, elan_eu3a05_buzztime_state, e
|
||||
CONS( 2006, sudoelan, 0, 0, elan_sudoku, sudoku, elan_eu3a05_state, empty_init, "Senario / All in 1 Products Ltd", "Ultimate Sudoku TV Edition 3-in-1", MACHINE_NOT_WORKING )
|
||||
|
||||
CONS( 200?, carlecfg, 0, 0, elan_sudoku, carlecfg, elan_eu3a05_state, empty_init, "Excalibur Electronics Inc", "Carl Edwards' Chase For Glory", MACHINE_NOT_WORKING )
|
||||
|
||||
// see https://millionaire.fandom.com/wiki/Haluatko_miljon%C3%A4%C3%A4riksi%3F_(Play_Vision_game)
|
||||
CONS( 2006, pvmilfin, 0, 0, elan_sudoku, sudoku, elan_eu3a05_state, empty_init, "Play Vision", "Haluatko miljonääriksi? (Finland)", MACHINE_NOT_WORKING )
|
||||
|
@ -435,7 +435,8 @@ READ8_MEMBER(nes_sh6578_state::apu_read_mem)
|
||||
void nes_sh6578_state::nes_sh6578_map(address_map& map)
|
||||
{
|
||||
map(0x0000, 0x1fff).ram();
|
||||
map(0x2000, 0x2008).rw(m_ppu, FUNC(ppu_sh6578_device::read), FUNC(ppu_sh6578_device::write));
|
||||
map(0x2000, 0x2007).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write));
|
||||
map(0x2008, 0x2008).rw(m_ppu, FUNC(ppu_sh6578_device::read_extended), FUNC(ppu_sh6578_device::write_extended));
|
||||
|
||||
map(0x2040, 0x207f).rw(m_ppu, FUNC(ppu_sh6578_device::palette_read), FUNC(ppu_sh6578_device::palette_write));
|
||||
|
||||
|
@ -275,6 +275,18 @@ protected:
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
class nes_vt_waixing_alt_state : public nes_vt_waixing_state
|
||||
{
|
||||
public:
|
||||
nes_vt_waixing_alt_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
nes_vt_waixing_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
protected:
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
class nes_vt_timetp36_state : public nes_vt_state
|
||||
{
|
||||
public:
|
||||
@ -1005,11 +1017,16 @@ void nes_vt_state::machine_start()
|
||||
save_item(NAME(m_410x));
|
||||
save_item(NAME(m_413x));
|
||||
|
||||
save_item(NAME(m_411c));
|
||||
save_item(NAME(m_411d));
|
||||
save_item(NAME(m_4242));
|
||||
|
||||
save_item(NAME(m_8000_addr_latch));
|
||||
|
||||
save_item(NAME(m_timer_irq_enabled));
|
||||
save_item(NAME(m_timer_running));
|
||||
save_item(NAME(m_timer_val));
|
||||
save_item(NAME(m_vdma_ctrl));
|
||||
|
||||
m_ntram = std::make_unique<uint8_t[]>(0x2000);
|
||||
save_pointer(NAME(m_ntram), 0x2000);
|
||||
@ -1702,7 +1719,9 @@ WRITE8_MEMBER(nes_vt_sudoku_state::in0_w)
|
||||
void nes_vt_state::nes_vt_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x07ff).ram();
|
||||
map(0x2000, 0x3fff).mask(0x001f).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); /* PPU registers */
|
||||
// ddrdismx relies on the mirroring
|
||||
map(0x2000, 0x2007).mirror(0x00e0).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); /* standard PPU registers */
|
||||
map(0x2010, 0x201f).mirror(0x00e0).rw(m_ppu, FUNC(ppu_vt03_device::read_extended), FUNC(ppu_vt03_device::write_extended)); /* extra VT PPU registers */
|
||||
|
||||
map(0x4000, 0x4013).rw(m_apu, FUNC(nesapu_device::read), FUNC(nesapu_device::write));
|
||||
map(0x4014, 0x4014).r(FUNC(nes_vt_state::psg1_4014_r)).w(FUNC(nes_vt_state::vt_dma_w));
|
||||
@ -1765,7 +1784,8 @@ void nes_vt_cy_state::nes_vt_bt_map(address_map &map)
|
||||
void nes_vt_hh_state::nes_vt_hh_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).mask(0x0fff).ram();
|
||||
map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); /* PPU registers */
|
||||
map(0x2000, 0x2007).mirror(0x00e0).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); /* standard PPU registers */
|
||||
map(0x2010, 0x201f).mirror(0x00e0).rw(m_ppu, FUNC(ppu_vt03_device::read_extended), FUNC(ppu_vt03_device::write_extended)); /* extra VT PPU registers */
|
||||
|
||||
map(0x4000, 0x4013).rw(m_apu, FUNC(nesapu_device::read), FUNC(nesapu_device::write));
|
||||
map(0x4015, 0x4015).rw(FUNC(nes_vt_hh_state::psg1_4015_r), FUNC(nes_vt_hh_state::psg1_4015_w)); /* PSG status / first control register */
|
||||
@ -1815,7 +1835,8 @@ void nes_vt_hh_state::nes_vt_fp_map(address_map &map)
|
||||
void nes_vt_dg_state::nes_vt_dg_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).ram();
|
||||
map(0x2000, 0x3fff).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); /* PPU registers */
|
||||
map(0x2000, 0x2007).mirror(0x00e0).rw(m_ppu, FUNC(ppu2c0x_device::read), FUNC(ppu2c0x_device::write)); /* standard PPU registers */
|
||||
map(0x2010, 0x201f).mirror(0x00e0).rw(m_ppu, FUNC(ppu_vt03_device::read_extended), FUNC(ppu_vt03_device::write_extended)); /* extra VT PPU registers */
|
||||
|
||||
map(0x4000, 0x4013).rw(m_apu, FUNC(nesapu_device::read), FUNC(nesapu_device::write));
|
||||
map(0x4015, 0x4015).rw(FUNC(nes_vt_dg_state::psg1_4015_r), FUNC(nes_vt_dg_state::psg1_4015_w)); /* PSG status / first control register */
|
||||
@ -1976,7 +1997,12 @@ void nes_vt_waixing_state::machine_reset()
|
||||
nes_vt_state::machine_reset();
|
||||
|
||||
m_ppu->set_201x_descramble(0x3, 0x2, 0x7, 0x6, 0x5, 0x4); // reasonable
|
||||
// set_8000_scramble(0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8);
|
||||
}
|
||||
|
||||
void nes_vt_waixing_alt_state::machine_reset()
|
||||
{
|
||||
nes_vt_waixing_state::machine_reset();
|
||||
set_8000_scramble(0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8);
|
||||
}
|
||||
|
||||
void nes_vt_hum_state::machine_reset()
|
||||
@ -2363,7 +2389,11 @@ ROM_START( rtvgc300 )
|
||||
ROM_LOAD( "lexibook300.bin", 0x00000, 0x4000000, CRC(015c4067) SHA1(a12986c4a366a23c4c7ca7b3d33e421a8dfdffc0) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( rtvgc300fz )
|
||||
ROM_REGION( 0x8000000, "mainrom", 0 )
|
||||
// some of the higher address lines might be swapped
|
||||
ROM_LOAD( "jg7800fz.bin", 0x00000, 0x4000000, CRC(c9d319d2) SHA1(9d0d1435b802f63ce11b94ce54d11f4065b324cc) )
|
||||
ROM_END
|
||||
|
||||
// The maximum address space a VT chip can see is 32MB, so these 64MB roms are actually 2 programs (there are vectors in the first half and the 2nd half)
|
||||
// there must be a bankswitch bit that switches the whole 32MB space. Loading the 2nd half in Star Wars does actually boot straight to a game.
|
||||
@ -2666,6 +2696,12 @@ ROM_START( mc_tv200 )
|
||||
ROM_LOAD( "s29gl064n90.bin", 0x00000, 0x800000, CRC(ae1905d2) SHA1(11582055713ba937c1ad32c4ada8683eebc1c83c) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( ablmini )
|
||||
ROM_REGION( 0x800000, "mainrom", 0 )
|
||||
ROM_LOAD( "ablmini.bin", 0x00000, 0x800000, CRC(e65a2c3a) SHA1(9b4811e5b50b67d74b9602471767b8bcd24dd59b) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( techni4 )
|
||||
ROM_REGION( 0x200000, "mainrom", 0 )
|
||||
ROM_LOAD( "technigame.bin", 0x00000, 0x200000, CRC(3c96b1b1) SHA1(1acc81b26e740327bd6d9faa5a96ab027a48dd77) )
|
||||
@ -2764,6 +2800,9 @@ CONS( 200?, sudopptv, 0, 0, nes_vt, nes_vt, nes_vt_waixing_state, empty
|
||||
|
||||
CONS( 200?, megapad, 0, 0, nes_vt, nes_vt, nes_vt_waixing_state, empty_init, "Waixing", "Megapad 31-in-1", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // Happy Biqi has broken sprites, investigate before promoting
|
||||
|
||||
// 060303 date code on PCB
|
||||
CONS( 2006, ablmini, 0, 0, nes_vt_base_pal, nes_vt, nes_vt_waixing_alt_state, empty_init, "Advance Bright Ltd", "Double Players Mini Joystick 80-in-1 (MJ8500, ABL TV Game)", MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
// needs PCM samples, Y button is not mapped (not used by any of the games?)
|
||||
CONS( 200?, timetp36, 0, 0, nes_vt_base_pal, timetp36, nes_vt_timetp36_state, empty_init, "TimeTop", "Super Game 36-in-1 (TimeTop SuperGame) (PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
|
||||
|
||||
@ -2791,7 +2830,10 @@ CONS( 200?, lxcmc250, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empt
|
||||
CONS( 200?, lxcmcysw, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - Star Wars Rebels", MACHINE_NOT_WORKING )
|
||||
CONS( 200?, lxcmcyfz, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - Frozen", MACHINE_NOT_WORKING )
|
||||
CONS( 200?, lxcmcydp, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - Disney Princess", MACHINE_NOT_WORKING )
|
||||
|
||||
// GB-NO13-Main-VT389-2 on PCBs
|
||||
CONS( 2016, rtvgc300, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Lexibook", "Lexibook Retro TV Game Console - 300 Games", MACHINE_NOT_WORKING )
|
||||
CONS( 2017, rtvgc300fz,0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empty_init, "Lexibook", "Lexibook Retro TV Game Console - Frozen - 300 Games", MACHINE_NOT_WORKING )
|
||||
|
||||
/* The following are also confirmed to be NES/VT derived units, most having a standard set of games with a handful of lazy graphic mods thrown in to fit the unit theme
|
||||
|
||||
@ -2810,7 +2852,6 @@ CONS( 2016, rtvgc300, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_lexibook_state, empt
|
||||
|
||||
(units for use with TV)
|
||||
Lexibook Retro TV Game Console (300 Games) - Cars
|
||||
Lexibook Retro TV Game Console (300 Games) - Frozen
|
||||
|
||||
(more?)
|
||||
*/
|
||||
|
@ -323,111 +323,6 @@ static INPUT_PORTS_START( rad_skatp )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( wiwi18 )
|
||||
PORT_START("P1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, "Possible Input" )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P3")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( tvsprt10 )
|
||||
@ -1399,16 +1294,6 @@ ROM_START( decathln )
|
||||
ROM_LOAD16_WORD_SWAP( "decathlon.bin", 0x000000, 0x400000, CRC(63c8e6b6) SHA1(6a25b68b45336e04a2bfd75b43a494349024d714) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( foxsport )
|
||||
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "foxsports.bin", 0x000000, 0x1000000, CRC(a5092f49) SHA1(feb4d432486b17d6cd2aed8cefd3d084f77c1733) ) // only a tiny amount of data in the 2nd half, what's it used for (if anything)
|
||||
ROM_END
|
||||
|
||||
ROM_START( wiwi18 )
|
||||
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "26gl128.bin", 0x000000, 0x1000000, CRC(0b103ac9) SHA1(14434908f429942096fb8db5b5630603fd54fb2c) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( guitarfv )
|
||||
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "mx26l64.bin", 0x000000, 0x800000, CRC(eaadd2c2) SHA1(0c3fe004dbaa52a335c6ddcecb9e9f5582d7ef35) )
|
||||
@ -1468,14 +1353,6 @@ void spg2xx_game_state::init_crc()
|
||||
logerror("Calculated Byte Sum of bytes from 0x10 to 0x%08x is %08x)\n", length - 1, checksum);
|
||||
}
|
||||
|
||||
void spg2xx_game_state::init_wiwi18()
|
||||
{
|
||||
uint16_t* rom = (uint16_t*)memregion("maincpu")->base();
|
||||
if (rom[0x1ca259]==0x4e04) rom[0x1ca259] = 0xf165; // wiwi18
|
||||
if (rom[0x1355a4]==0x4e04) rom[0x1355a4] = 0xf165; // foxsport
|
||||
}
|
||||
|
||||
|
||||
|
||||
void spg2xx_game_state::init_tvsprt10()
|
||||
{
|
||||
@ -1542,9 +1419,3 @@ CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, emp
|
||||
|
||||
// both the WiWi and Fox Sports units seem to be related to the 'Virtual Interactive' (aka 'Vi') console
|
||||
|
||||
// box marked 'Wireless game console' 'Drahtlose Spielekonsole' 87 Sports games included : 18 hyper sports games, 69 arcade games.
|
||||
// Unit marked 'Hamy System' 'WiWi'
|
||||
// actually a cartridge, but all hardware is in the cart, overriding any internal hardware entirely. see nes_vt.cp 'mc_sp69' for the '69 arcade game' part
|
||||
CONS( 200?, wiwi18, 0, 0, rad_skat, wiwi18, spg2xx_game_state, init_wiwi18, "Hamy System", "WiWi 18-in-1 Sports Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
CONS( 200?, foxsport,0, 0, rad_skat, wiwi18, spg2xx_game_state, init_wiwi18, "Excalibur Electronics", "Fox Sports 7 in 1 Sports Games Plug n' Play", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
@ -228,5 +228,4 @@ ROM_START( pvmil )
|
||||
ROM_LOAD16_WORD_SWAP( "millionare4.bin", 0x000000, 0x400000, CRC(9c43d0f2) SHA1(fb4ba0115000b10b7c0e0d44b9fa3234c900e694) )
|
||||
ROM_END
|
||||
|
||||
// there are other regions of this, including a Finnish version "Haluatko miljonääriksi?" (see https://millionaire.fandom.com/wiki/Haluatko_miljon%C3%A4%C3%A4riksi%3F_(Play_Vision_game) )
|
||||
CONS( 2006, pvmil, 0, 0, pvmil, pvmil, pvmil_state, empty_init, "Play Vision", "Who Wants to Be a Millionaire? (Play Vision, Plug and Play, UK)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
301
src/mame/drivers/spg2xx_wiwi.cpp
Normal file
301
src/mame/drivers/spg2xx_wiwi.cpp
Normal file
@ -0,0 +1,301 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz, David Haywood
|
||||
|
||||
// These all have some kind of startup check
|
||||
// the Virtual Interactive 'Vi' probably also fits here
|
||||
//
|
||||
// The WiWi could also run NES games; SunPlus hardware was in the cartridge, it was a 'fake' system.
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/spg2xx.h"
|
||||
|
||||
class spg2xx_game_wiwi18_state : public spg2xx_game_state
|
||||
{
|
||||
public:
|
||||
spg2xx_game_wiwi18_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
spg2xx_game_state(mconfig, type, tag)
|
||||
{ }
|
||||
|
||||
void init_wiwi18();
|
||||
|
||||
private:
|
||||
DECLARE_WRITE16_MEMBER(portb_w) override;
|
||||
};
|
||||
|
||||
static INPUT_PORTS_START( wiwi18 )
|
||||
PORT_START("P1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, "Possible Input" )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P3")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( lexifit )
|
||||
PORT_START("P1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("P3")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_CUSTOM )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
void spg2xx_game_wiwi18_state::init_wiwi18()
|
||||
{
|
||||
// workaround for security checks on startup
|
||||
|
||||
uint16_t* rom = (uint16_t*)memregion("maincpu")->base();
|
||||
if (rom[0x1ca259]==0x4e04) rom[0x1ca259] = 0xf165; // wiwi18
|
||||
if (rom[0x1355a4]==0x4e04) rom[0x1355a4] = 0xf165; // foxsport
|
||||
|
||||
if (rom[0x362e1c]==0x4e04) rom[0x362e1c] = 0xf165; // lexifit
|
||||
if (rom[0x4c7f4d]==0x4e04) rom[0x4c7f4d] = 0xf165; // lexifit (2nd bank)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE16_MEMBER(spg2xx_game_wiwi18_state::portb_w)
|
||||
{
|
||||
logerror("%s: portb_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask,
|
||||
(mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x',
|
||||
(mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x');
|
||||
|
||||
if (m_maincpu->pc() < 0x2000)
|
||||
{
|
||||
if ((data & 0x0003) == 0x0000)
|
||||
switch_bank(1);
|
||||
else
|
||||
switch_bank(0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ROM_START( foxsport )
|
||||
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "foxsports.bin", 0x000000, 0x1000000, CRC(a5092f49) SHA1(feb4d432486b17d6cd2aed8cefd3d084f77c1733) ) // only a tiny amount of data in the 2nd half, what's it used for (if anything)
|
||||
ROM_END
|
||||
|
||||
ROM_START( wiwi18 )
|
||||
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "26gl128.bin", 0x000000, 0x1000000, CRC(0b103ac9) SHA1(14434908f429942096fb8db5b5630603fd54fb2c) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( lexifit )
|
||||
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "lexibook_tv_fitness_center.bin", 0x000000, 0x1000000, CRC(38021230) SHA1(2b949d723a475bfac23d9da4d1a30ea71b332ccb) )
|
||||
ROM_END
|
||||
|
||||
// box marked 'Wireless game console' 'Drahtlose Spielekonsole' 87 Sports games included : 18 hyper sports games, 69 arcade games.
|
||||
// Unit marked 'Hamy System' 'WiWi'
|
||||
// actually a cartridge, but all hardware is in the cart, overriding any internal hardware entirely. see nes_vt.cp 'mc_sp69' for the '69 arcade game' part
|
||||
CONS( 200?, wiwi18, 0, 0, rad_skat, wiwi18, spg2xx_game_wiwi18_state, init_wiwi18, "Hamy System", "WiWi 18-in-1 Sports Game", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
CONS( 2009, lexifit, 0, 0, rad_skat, lexifit, spg2xx_game_wiwi18_state, init_wiwi18, "Lexibook", "TV Fitness Center (Lexibook)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
CONS( 200?, foxsport, 0, 0, rad_skat, wiwi18, spg2xx_game_wiwi18_state, init_wiwi18, "Excalibur Electronics", "Fox Sports 7 in 1 Sports Games Plug n' Play", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
// thtere is another 'Drahtlose Spielekonsole 48-in-1' with '11 hyper sports games' (including Running) which are clearly SunPlus and would fit here, with the 37 non-hyper sports games presumably again being a NES/Famiclone cart
|
@ -680,5 +680,6 @@ CONS( 200?, zon32bit, 0, 0, zon32bit, zon32bit, zon32bit_state, empty_init,
|
||||
// The Mi Guitar menu contains 24 games, but they're dupes, and just counting those would exclude the other Mi Fit and Mi Papacon menus (which also contain dupes)
|
||||
CONS( 200?, mywicodx, 0, 0, zon32bit, zon32bit, mywicodx_state, empty_init, "<unknown>", "My Wico Deluxe (Family Sport 85-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
CONS( 200?, oplayer, 0, 0, zon32bit, oplayer, oplayer_100in1_state, init_oplayer, "OPlayer", "OPlayer Mobile Game Console (MGS03-white) (Family Sport 100-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
// issues with 'low battery' always showing, but otherwise functional
|
||||
CONS( 200?, oplayer, 0, 0, zon32bit, oplayer, oplayer_100in1_state, init_oplayer, "OPlayer", "OPlayer Mobile Game Console (MGS03-white) (Family Sport 100-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
|
@ -47,7 +47,6 @@ public:
|
||||
|
||||
|
||||
void init_crc();
|
||||
void init_wiwi18();
|
||||
void init_tvsprt10();
|
||||
|
||||
protected:
|
||||
|
@ -12929,6 +12929,7 @@ airblsjs
|
||||
buzztime
|
||||
sudoelan
|
||||
carlecfg
|
||||
pvmilfin
|
||||
|
||||
@source:electra.cpp
|
||||
avenger // (c) 1975 Electra
|
||||
@ -31455,6 +31456,7 @@ lxcmcysw
|
||||
lxcmcyfz
|
||||
lxcmcydp
|
||||
rtvgc300
|
||||
rtvgc300fz
|
||||
red5mam
|
||||
cybar120
|
||||
mc_dg101
|
||||
@ -31514,6 +31516,7 @@ zdog
|
||||
otrail
|
||||
denv150
|
||||
techni4
|
||||
ablmini
|
||||
|
||||
@source:vt1682.cpp
|
||||
ii8in1
|
||||
@ -37199,8 +37202,6 @@ abltenni //
|
||||
fordrace
|
||||
tvsprt10 //
|
||||
decathln
|
||||
wiwi18 //
|
||||
foxsport
|
||||
guitarfv
|
||||
guitarss
|
||||
jjstrip
|
||||
@ -37304,6 +37305,11 @@ tvgogo //
|
||||
@source:spg2xx_vii.cpp
|
||||
vii // KenSingTon / Jungle Soft / Siatronics Vii
|
||||
|
||||
@source:spg2xx_wiwi.cpp
|
||||
wiwi18 //
|
||||
foxsport
|
||||
lexifit
|
||||
|
||||
@source:spg2xx_zone.cpp
|
||||
wirels60 // Wireless 60
|
||||
zone40 // Zone 40
|
||||
|
@ -853,6 +853,7 @@ spg2xx_smarttv.cpp
|
||||
spg2xx_telestory.cpp
|
||||
spg2xx_tvgogo.cpp
|
||||
spg2xx_vii.cpp
|
||||
spg2xx_wiwi.cpp
|
||||
spg2xx_zone.cpp
|
||||
spg2xx_zone_32bit.cpp
|
||||
squale.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user