This commit is contained in:
angelosa 2020-01-24 21:05:22 +01:00
commit 6ee5a3beb9
12 changed files with 610 additions and 19 deletions

View File

@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="pi_storyreader_cart" description="Publications International Ltd Story Reader cartridges">
<software name="ts2" supported="no">
<description>Toy Story 2</description>
<year>200?</year>
<publisher>Publications International Ltd / Disney</publisher>
<part name="cart" interface="pi_storyreader_cart">
<dataarea name="rom" size="0x100000">
<rom name="storyreaderv1_toystory2.bin" size="0x100000" crc="496fe7b5" sha1="4a66e1e7ec0fdcfe578d60437fcbaaa19f7ac2d3" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -0,0 +1,16 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="pi_storyreader_v2_cart" description="Publications International Ltd Story Reader 2.0 cartridges">
<software name="ts2" supported="no">
<description>Toy Story 2</description>
<year>200?</year>
<publisher>Publications International Ltd / Disney</publisher>
<part name="cart" interface="pi_storyreader_v2_cart">
<dataarea name="rom" size="0x100000">
<rom name="storyreaderv2_toystory2.bin" size="0x100000" crc="b3b4b613" sha1="0e0bd3a9865ac35a0c8c0dae9cfaac15f5b30a89" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -3835,6 +3835,7 @@ files {
MAME_DIR .. "src/mame/drivers/unkmandd.cpp",
MAME_DIR .. "src/mame/drivers/bbl380.cpp",
MAME_DIR .. "src/mame/drivers/actions_atj2279b.cpp",
MAME_DIR .. "src/mame/drivers/pubint_storyreader.cpp",
}
createMESSProjects(_target, _subtarget, "ultimachine")

View File

@ -126,6 +126,9 @@ public:
void elan_eu3a05(machine_config &config);
void airblsjs(machine_config& config);
void elan_sudoku(machine_config &config);
private:
// screen updates
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
@ -137,6 +140,7 @@ private:
void elan_eu3a05_bank_map(address_map &map);
void elan_eu3a05_map(address_map &map);
void elan_sudoku_map(address_map &map);
// driver_device overrides
virtual void machine_start() override;
@ -214,6 +218,16 @@ void elan_eu3a05_state::elan_eu3a05_map(address_map &map)
//map(0xfffe, 0xffff).r(m_sys, FUNC(elan_eu3a05commonsys_device::irq_vector_r)); // allow normal IRQ for brk
}
// default e000 mapping is the same as eu3a14, other registers seem closer to eua05, probably a different chip type
void elan_eu3a05_state::elan_sudoku_map(address_map& map)
{
elan_eu3a05_map(map);
map(0xe000, 0xffff).rom().region("maincpu", 0x0000);
// not sure how these work, might be a modified 6502 core instead.
map(0xfffa, 0xfffb).r(m_sys, FUNC(elan_eu3a05commonsys_device::nmi_vector_r)); // custom vectors handled with NMI for now
//map(0xfffe, 0xffff).r(m_sys, FUNC(elan_eu3a05commonsys_device::irq_vector_r)); // allow normal IRQ for brk
}
void elan_eu3a05_state::elan_eu3a05_bank_map(address_map &map)
{
@ -286,6 +300,86 @@ static INPUT_PORTS_START( airblsjs )
INPUT_PORTS_END
static INPUT_PORTS_START( sudoku )
PORT_START("IN0")
PORT_DIPNAME( 0x01, 0x01, "IN0" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("IN1")
PORT_DIPNAME( 0x01, 0x01, "IN1" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("IN2")
PORT_DIPNAME( 0x01, 0x01, "IN2" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
void elan_eu3a05_state::machine_start()
{
@ -447,6 +541,13 @@ void elan_eu3a05_state::elan_eu3a05(machine_config &config)
*/
}
void elan_eu3a05_state::elan_sudoku(machine_config& config)
{
elan_eu3a05(config);
m_maincpu->set_addrmap(AS_PROGRAM, &elan_eu3a05_state::elan_sudoku_map);
}
void elan_eu3a05_state::airblsjs(machine_config& config)
{
elan_eu3a05(config);
@ -476,6 +577,14 @@ ROM_START( airblsjs )
ROM_LOAD( "airblsjs.bin", 0x000000, 0x400000, BAD_DUMP CRC(d10a6a84) SHA1(fa65f06e7da229006ddaffb245eef2cc4f90a66d) ) // ROM probably ok, but needs verification pass
ROM_END
ROM_START( sudoelan )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "sudoku.bin", 0x00000, 0x100000, CRC(c2596173) SHA1(cc74932648b577b735151014e8c04ed778e11704) )
ROM_RELOAD(0x100000,0x100000)
ROM_RELOAD(0x200000,0x100000)
ROM_RELOAD(0x300000,0x100000)
ROM_END
CONS( 2004, rad_sinv, 0, 0, elan_eu3a05, rad_sinv, elan_eu3a05_state, empty_init, "Radica (licensed from Taito)", "Space Invaders [Lunar Rescue, Colony 7, Qix, Phoenix] (Radica, Arcade Legends TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "5 Taito games in 1"
@ -483,3 +592,5 @@ CONS( 2004, rad_tetr, 0, 0, elan_eu3a05, rad_tetr, elan_eu3a05_state, empty_init
// ROM contains the string "Credit:XiAn Hummer Software Studio(CHINA) Tel:86-29-84270600 Email:HummerSoft@126.com" PCB has datecode of "050423" (23rd April 2005)
CONS( 2005, airblsjs, 0, 0, airblsjs, airblsjs, elan_eu3a05_state, empty_init, "Advance Bright Ltd", "Air-Blaster Joystick (AB1500, PAL)", MACHINE_NOT_WORKING )
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 )

View File

@ -421,6 +421,34 @@ private:
required_ioport m_plunger;
};
class nes_vt_sudoku_state : public nes_vt_state
{
public:
nes_vt_sudoku_state(const machine_config& mconfig, device_type type, const char* tag) :
nes_vt_state(mconfig, type, tag),
m_io0(*this,"IO0"),
m_io1(*this,"IO1")
{ }
void init_sudoku();
void nes_vt_sudoku(machine_config& config);
protected:
//virtual void machine_start() override;
//virtual void machine_reset() override;
private:
DECLARE_READ8_MEMBER(in0_r);
DECLARE_READ8_MEMBER(in1_r);
DECLARE_WRITE8_MEMBER(in0_w);
void nes_vt_sudoku_map(address_map& map);
required_ioport m_io0;
required_ioport m_io1;
};
@ -1510,6 +1538,19 @@ WRITE8_MEMBER(nes_vt_ablpinb_state::ablpinb_in0_w)
logerror("ablpinb_in0_w %02x\n", data);
}
READ8_MEMBER(nes_vt_sudoku_state::in0_r)
{
return machine().rand();
}
READ8_MEMBER(nes_vt_sudoku_state::in1_r)
{
return machine().rand();
}
WRITE8_MEMBER(nes_vt_sudoku_state::in0_w)
{
}
void nes_vt_state::nes_vt_map(address_map &map)
{
@ -1552,6 +1593,15 @@ void nes_vt_ablpinb_state::nes_vt_ablpinb_map(address_map& map)
map(0x4017, 0x4017).r(FUNC(nes_vt_ablpinb_state::ablpinb_in1_r));
}
void nes_vt_sudoku_state::nes_vt_sudoku_map(address_map& map)
{
nes_vt_map(map);
// override the inputs as specific non-standard 'controller' behavior is needed here and adding it to the generic NES controller bus wouldn't make sense.
map(0x4016, 0x4016).rw(FUNC(nes_vt_sudoku_state::in0_r),FUNC(nes_vt_sudoku_state::in0_w));
map(0x4017, 0x4017).r(FUNC(nes_vt_sudoku_state::in1_r));
}
/* Some later VT models have more RAM */
void nes_vt_state::nes_vt_xx_map(address_map &map)
{
@ -1783,6 +1833,14 @@ void nes_vt_ablpinb_state::nes_vt_ablpinb(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &nes_vt_ablpinb_state::nes_vt_ablpinb_map);
}
void nes_vt_sudoku_state::nes_vt_sudoku(machine_config &config)
{
nes_vt_base(config);
// override for controllers
m_maincpu->set_addrmap(AS_PROGRAM, &nes_vt_sudoku_state::nes_vt_sudoku_map);
}
void nes_vt_state::nes_vt(machine_config &config)
{
nes_vt_base(config);
@ -1968,6 +2026,48 @@ static INPUT_PORTS_START( ablpinb )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("NUDGE" )
INPUT_PORTS_END
static INPUT_PORTS_START( sudoku )
PORT_START("IO0")
PORT_START("IO1")
INPUT_PORTS_END
void nes_vt_sudoku_state::init_sudoku()
{
u8 *src = memregion("mainrom")->base();
int len = memregion("mainrom")->bytes();
std::vector<u8> buffer(len);
{
for (int i = 0; i < len; i += 8)
{
buffer[i+0] = src[i+5];
buffer[i+1] = src[i+4];
buffer[i+2] = src[i+7];
buffer[i+3] = src[i+6];
buffer[i+4] = src[i+1];
buffer[i+5] = src[i+0];
buffer[i+6] = src[i+3];
buffer[i+7] = src[i+2];
}
std::copy(buffer.begin(), buffer.end(), &src[0]);
}
if (0)
{
FILE *fp;
char filename[256];
sprintf(filename,"decrypted_%s", machine().system().name);
fp=fopen(filename, "w+b");
if (fp)
{
fwrite(src, len, 1, fp);
fclose(fp);
}
}
}
ROM_START( vdogdeme )
ROM_REGION( 0x100000, "mainrom", 0 )
@ -1979,6 +2079,7 @@ ROM_START( vdogdemo )
ROM_LOAD( "rom.bin", 0x00000, 0x80000, CRC(054af705) SHA1(e730aeaa94b9cc28aa8b512a5bf411ec45226831) )
ROM_END
ROM_START( pinkjelly )
ROM_REGION( 0x200000, "mainrom", 0 )
ROM_LOAD( "seesaw.bin", 0x00000, 0x200000, CRC(67b5a079) SHA1(36ebfd64809af072b73acfa3a426b57017851bf4) )
@ -2004,6 +2105,11 @@ ROM_START( vtboxing )
ROM_LOAD( "rom.bin", 0x00000, 0x80000, CRC(c115b1af) SHA1(82106e1c11c3279c5d8731c112f713fa3f290125) )
ROM_END
ROM_START( sudokuv )
ROM_REGION( 0x80000, "mainrom", 0 )
ROM_LOAD( "sudoku2.bin", 0x00000, 0x80000, CRC(d1ffcc1e) SHA1(2010e60933a08d0b9271ef37f338758aacba6d2d) )
ROM_END
ROM_START( mc_dgear )
ROM_REGION( 0x400000, "mainrom", 0 )
ROM_LOAD( "dreamgear 75-in-1.prg", 0x00000, 0x400000, CRC(9aabcb8f) SHA1(aa9446b7777fa64503871225fcaf2a17aafd9af1) )
@ -2032,6 +2138,20 @@ ROM_START( lxcmcysw )
ROM_LOAD( "jl2365swr-1.u2", 0x00000, 0x4000000, CRC(60ece391) SHA1(655de6b36ba596d873de2839522b948ccf45e006) )
ROM_END
ROM_START( lxcmcyfz )
ROM_REGION( 0x4000000, "mainrom", 0 )
// sub-board was marked for 2GB capacity (A0-A26 address lines), but only address lines A0-A24 are connected to the chip
ROM_LOAD( "jl2365_frozen.u1", 0x00000, 0x4000000, CRC(64d4c708) SHA1(1bc2d161326ce3039ab9ba46ad62695060cfb2e1) )
ROM_END
ROM_START( lxcmc250 )
ROM_REGION( 0x4000000, "mainrom", 0 )
// sub-board was marked for 2GB capacity (A0-A26 address lines), but only address lines A0-A24 are connected to the chip
ROM_LOAD( "cca250in1.u1", 0x00000, 0x4000000, CRC(6ccd6ad6) SHA1(fafed339097c3d1538faa306021a8373c1b799b3) )
ROM_END
ROM_START( cybar120 )
ROM_REGION( 0x2000000, "mainrom", 0 )
ROM_LOAD( "m2500p-vt09-epson,20091222ver05,_30r-sx1067-01_pcb,_12r0cob128m_12001-3d05_fw.bin", 0x00000, 0x1000000, CRC(f7138980) SHA1(de31264ee3a5a5c77a86733b2e2d6845fee91ea5) )
@ -2329,6 +2449,11 @@ CONS( 200?, vtboxing, 0, 0, nes_vt, nes_vt, nes_vt_state, empty_init, "VRT
// 050329 (29th March 2005) date on PCB
CONS( 2005, ablpinb, 0, 0, nes_vt_ablpinb, ablpinb, nes_vt_ablpinb_state, empty_init, "Advance Bright Ltd", "Pinball (P8002, ABL TV Game)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
// Black pad marked 'SUDOKU' with tails on the S and U characters looping over the logo
// Has 2 sets of 4 buttons in circular 'direction pad' layouts (on the left for directions, on the right for functions) and 9 red numbered buttons with red power LED on left of them, and reset button on right
CONS( 200?, sudokuv, 0, 0, nes_vt_sudoku, sudoku, nes_vt_sudoku_state, init_sudoku, "<unknown>", "Plug and Play Sudoku (VT based)", MACHINE_NOT_WORKING )
// should be VT03 based
// for testing 'Shark', 'Octopus', 'Harbor', and 'Earth Fighter' use the extended colour modes, other games just seem to use standard NES modes
@ -2360,10 +2485,11 @@ CONS( 200?, dgun2500, 0, 0, nes_vt_dg, nes_vt, nes_vt_dg_state, empty_init, "
// don't even get to menu. very enhanced chipset, VT368/9?
CONS( 2012, dgun2561, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "dreamGEAR", "dreamGEAR My Arcade Portable Gaming System (DGUN-2561)", MACHINE_NOT_WORKING )
CONS( 200?, lxcmcy, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade", MACHINE_NOT_WORKING )
CONS( 200?, lxcmc250, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - 250-in-1 (JL2375)", MACHINE_NOT_WORKING )
CONS( 200?, lxcmcysw, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_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_state, empty_init, "Lexibook", "Lexibook Compact Cyber Arcade - Frozen", MACHINE_NOT_WORKING )
// Also Lexibook Compact Cyber Arcade - Disney Princesses
// Lexibook Compact Cyber Arcade - Cars
// Lexibook Compact Cyber Arcade - Frozen
// Lexibook Compact Cyber Arcade - Paw Patrol
// Lexibook Compact Cyber Arcade - Barbie
// Lexibook Compact Cyber Arcade - Finding Dory
@ -2372,6 +2498,7 @@ CONS( 200?, lxcmcysw, 0, 0, nes_vt_cy, nes_vt, nes_vt_cy_state, empty_init, "
// more?
// boots, same platform with scrambled opcodes as FC pocket
// palette issues in some games because they actually use the old VT style palette
// but no way to switch?
@ -2384,6 +2511,8 @@ CONS( 2015, dgun2573, 0, 0, nes_vt_fp, nes_vt, nes_vt_hh_state, empty_init, "
CONS( 200?, polmega, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "Polaroid", "Megamax GPD001SDG", MACHINE_NOT_WORKING )
CONS( 200?, silv35, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "SilverLit", "35 in 1 Super Twins", MACHINE_NOT_WORKING )
// same encryption as above, but seems like newer hardware (or the above aren't using most of the features)
CONS( 200?, lpgm240, 0, 0, nes_vt_vh2009, nes_vt, nes_vt_vh2009_state, empty_init, "<unknown>", "Let's Play! Game Machine 240 in 1", MACHINE_NOT_WORKING ) // mini 'retro-arcade' style cabinet

View File

@ -0,0 +1,171 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
/******************************************************************************
Non-video 'electronic book' reader that takes cartridges
Cartridges are accessed using serial read methods, contain data, not code
so must be internal ROMs on the systems.
---
V1 - rectangular cart
glob up, pins toward you, pins 1-10, left to right
1 tied high
2 CE1 left glob
3 CE2 right glob
4 pin 5
5 pin 4
6 data
7 ground
8 clock
9 3.3 volts
10 tied high
----
V2 - rounded top cart
1 CE1 left glob
2 CE2 right glob
3 tied high
4 ground
5 clock
6 data
7 ground
8 ground
9 3.3 volts
10 tied high
V2 PCB silkscreened with GPR23L822A - 8Mbit serial ROM
----
To dump:
set data and clock high, CE1 low for 1 mS
set CE1 high for 3 uS
set data low for 2 uS
set clock low for 2 uS
set data high for 2 uS
set clock high for 2 uS
set clock low for 2 uS
set data low for 2 uS
loop 24 times:
set clock high for 1 uS
set clock low for 1 uS
make data high Z
loop 8M tims:
set clock high for 1 uS
sample data
set clock low for 1 uS
set CE1 low
if 2 globs, repeat with CE2
*******************************************************************************/
#include "emu.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "screen.h"
#include "softlist.h"
#include "speaker.h"
class pi_storyreader_state : public driver_device
{
public:
pi_storyreader_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_cart(*this, "cartslot"),
m_cart_region(nullptr)
{ }
void pi_storyreader(machine_config &config);
void pi_storyreader_v2(machine_config &config);
private:
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
required_device<generic_slot_device> m_cart;
memory_region *m_cart_region;
};
void pi_storyreader_state::machine_start()
{
// if there's a cart, override the standard mapping
if (m_cart && m_cart->exists())
{
std::string region_tag;
m_cart_region = memregion(region_tag.assign(m_cart->tag()).append(GENERIC_ROM_REGION_TAG).c_str());
}
}
void pi_storyreader_state::machine_reset()
{
}
DEVICE_IMAGE_LOAD_MEMBER(pi_storyreader_state::cart_load)
{
uint32_t size = m_cart->common_get_size("rom");
m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
return image_init_result::PASS;
}
static INPUT_PORTS_START( pi_storyreader )
INPUT_PORTS_END
void pi_storyreader_state::pi_storyreader(machine_config &config)
{
// unknown CPU / MCU type
// screenless
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "pi_storyreader_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
m_cart->set_device_load(FUNC(pi_storyreader_state::cart_load));
SOFTWARE_LIST(config, "cart_list").set_original("pi_storyreader_cart");
}
void pi_storyreader_state::pi_storyreader_v2(machine_config &config)
{
// unknown CPU / MCU type
// screenless
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "pi_storyreader_v2_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
m_cart->set_device_load(FUNC(pi_storyreader_state::cart_load));
SOFTWARE_LIST(config, "cart_list").set_original("pi_storyreader_v2_cart");
}
ROM_START( pi_stry )
ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "internal.mcu.rom", 0x0000, 0x1000, NO_DUMP ) // unknown type / size
ROM_END
ROM_START( pi_stry2 )
ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "internal.mcu.rom", 0x0000, 0x1000, NO_DUMP ) // unknown type / size
ROM_END
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
// These are said to not be compatible with each other
CONS( 200?, pi_stry, 0, 0, pi_storyreader, pi_storyreader, pi_storyreader_state, empty_init, "Publications International Ltd", "Story Reader", MACHINE_IS_SKELETON )
CONS( 200?, pi_stry2, 0, 0, pi_storyreader_v2, pi_storyreader, pi_storyreader_state, empty_init, "Publications International Ltd", "Story Reader 2.0", MACHINE_IS_SKELETON )

View File

@ -196,21 +196,21 @@ READ8_MEMBER(spg2xx_game_state::i2c_r)
READ16_MEMBER(spg2xx_game_state::rad_porta_r)
{
uint16_t data = m_io_p1->read();
logerror("Port A Read: %04x\n", data);
logerror("%s: Port A Read: %04x\n", machine().describe_context(), data);
return data;
}
READ16_MEMBER(spg2xx_game_state::rad_portb_r)
{
uint16_t data = m_io_p2->read();
logerror("Port B Read: %04x\n", data);
logerror("%s: Port B Read: %04x\n", machine().describe_context(), data);
return data;
}
READ16_MEMBER(spg2xx_game_state::rad_portc_r)
{
uint16_t data = m_io_p3->read();
logerror("Port C Read: %04x\n", data);
logerror("%s: Port C Read: %04x\n", machine().describe_context(), data);
return data;
}
@ -463,6 +463,29 @@ static INPUT_PORTS_START( wiwi18 )
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag
INPUT_PORTS_END
static INPUT_PORTS_START( tvsprt10 )
PORT_START("P1")
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
PORT_BIT( 0x0180, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Start
PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("P2")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("P3")
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( mattelcs ) // there is a 'secret test mode' that previously got activated before inputs were mapped, might need unused inputs to active?
PORT_START("P1")
PORT_BIT( 0x0007, IP_ACTIVE_LOW, IPT_UNUSED ) // must be IP_ACTIVE_LOW or you can't switch to Football properly?
@ -712,6 +735,20 @@ void spg2xx_game_state::abltenni(machine_config &config)
m_maincpu->set_rowscroll_offset(8);
}
void spg2xx_game_state::tvsprt10(machine_config &config)
{
SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen);
m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_state::mem_map_2m);
m_maincpu->set_force_no_drc(true); // uses JVS opcode, not implemented in recompiler
spg2xx_base(config);
m_maincpu->porta_in().set(FUNC(spg2xx_game_state::rad_porta_r));
m_maincpu->portb_in().set(FUNC(spg2xx_game_state::rad_portb_r));
m_maincpu->portc_in().set(FUNC(spg2xx_game_state::rad_portc_r));
}
void spg2xx_game_state::rad_skatp(machine_config &config)
{
rad_skat(config);
@ -789,6 +826,11 @@ ROM_START( abltenni )
ROM_LOAD16_WORD_SWAP( "ablpnpwirelesstennis.bin", 0x000000, 0x400000, CRC(66bd8ef1) SHA1(a83640d5d9e84e10d29a065a61e0d7bbec16c6e4) )
ROM_END
ROM_START( tvsprt10 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "tvsports10in1.bin", 0x000000, 0x400000, CRC(98b79889) SHA1(b0ba534d59b794bb38c071c70ab5bcf711364e06) )
ROM_END
ROM_START( wiwi18 )
ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "26gl128.bin", 0x000000, 0x1000000, CRC(0b103ac9) SHA1(14434908f429942096fb8db5b5630603fd54fb2c) )
@ -816,6 +858,23 @@ void spg2xx_game_state::init_wiwi18()
rom[0x1ca259] = 0xf165;
}
void spg2xx_game_state::init_tvsprt10()
{
uint16_t* rom = (uint16_t*)memregion("maincpu")->base();
// hack 'MASK' check (some kind of EEPROM maybe?)
// this hack means the ROM CRC fails, but without it the CRC is OK, so dump is good.
/*
port b 0010 = chip select? / always set when accessing?
0008 = write enable (set when writing, not when reading)
0004 = chip select? / always set when accessing?
0002 = clock? (toggles)
0001 = data in / out
*/
rom[0x18c55d] ^= 0x0001;
}
// year, name, parent, compat, machine, input, class, init, company, fullname, flags
// Radica TV games
@ -826,7 +885,10 @@ CONS( 2007, rad_sktv, 0, 0, rad_sktv, rad_sktv, spg2xx_game_state, ini
CONS( 2007, rad_fb2, 0, 0, rad_skat, rad_fb2, spg2xx_game_state, init_crc, "Radica", "Play TV Football 2", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // offers a 2 player option in menus, but seems to have only been programmed for, and released as, a single player unit, P2 controls appear unfinished.
// ABL TV Games
CONS( 2006, abltenni, 0, 0, abltenni, abltenni, spg2xx_game_state, empty_init, "Advance Bright Ltd", "Wireless Tennis (WT2000, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, abltenni, 0, 0, abltenni, abltenni, spg2xx_game_state, empty_init, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Wireless Tennis (WT2000, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// same as Excalibur Decathlon? not the same as the ABL game
CONS( 2006, tvsprt10, 0, 0, tvsprt10, tvsprt10, spg2xx_game_state, init_tvsprt10, "Simba / V-Tac Technology Co Ltd.", "TV Sports 10-in-1 / Decathlon Atlhetic Sport Games", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// Mattel games
CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, empty_init, "Mattel", "Mattel Classic Sports", MACHINE_IMPERFECT_SOUND )

View File

@ -264,6 +264,12 @@ void spg2xx_senario_cosmo_state::sencosmo(machine_config& config)
{
senbbs(config);
m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_senario_cosmo_state::mem_map_flash_bypass);
/* the game crashes if you get no matches after the 2nd spin on the 'Fashion Disaster' slot machine mini-game.
this could be a real game bug (as to trigger it you'd have to make a poor choice not to hold any matches after the first spin)
however with the recompiler execution of bad data causes MAME to immediately drop to commandline with no error message
without recompiler the game just hangs */
m_maincpu->set_force_no_drc(true);
}

View File

@ -1,7 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz, David Haywood
/* 'Zone' systems */
/* Senario 6 Player Poker systems
TODO:
improve controller hookup / simulation and remove PC-based hacks!
*/
#include "includes/spg2xx.h"
#include "sentx6p.lh"
@ -35,6 +40,10 @@ public:
void sentx6p(machine_config &config);
void init_sentx6p();
void init_sentx6puk();
void init_sentx6pd();
void mem_map_2m_texas(address_map &map);
DECLARE_INPUT_CHANGED_MEMBER(ok_latch)
@ -108,12 +117,17 @@ private:
output_finder<6> m_option_allin;
output_finder<6> m_led;
// for I/O hacks
uint32_t m_pchackaddress1;
uint32_t m_pchackaddress2;
uint16_t m_controller_sense_addr;
};
void sentx6p_state::mem_map_2m_texas(address_map &map)
{
map(0x000000, 0x1fffff).bankr("cartbank");
map(0x000000, 0x3fffff).bankr("cartbank");
map(0x3f0000, 0x3f7fff).ram();
}
@ -342,7 +356,7 @@ void sentx6p_state::machine_reset()
following addresses are for the other controllers, and get set based on Port B
status flags */
address_space &mem = m_maincpu->space(AS_PROGRAM);
mem.write_word(0x1e08,0x0001);
mem.write_word(m_controller_sense_addr,0x0001);
}
void sentx6p_state::controller_send_data(int which)
@ -365,7 +379,7 @@ void sentx6p_state::controller_send_data(int which)
READ16_MEMBER(sentx6p_state::sentx_porta_r)
{
int select_bits = (m_porta_data >> 8) & 0x3f;
logerror("%s: sentx_porta_r (with controller select bits %02x)\n", machine().describe_context(), select_bits);
//logerror("%s: sentx_porta_r (with controller select bits %02x)\n", machine().describe_context(), select_bits);
/* 0000 = no controller? (system buttons only?)
0100 = controller 1?
@ -392,14 +406,14 @@ READ16_MEMBER(sentx6p_state::sentx_porta_r)
// hacks needed for reading from the UART to work
// the select bit must be high here to read from the controller?
if (m_maincpu->pc() == 0x2981e)
if (m_maincpu->pc() == m_pchackaddress1)
{
ret ^= 0x3f;
}
// but must be low again here after writing the select bits in order to not
// get stuck in a timeout loop
if (m_maincpu->pc() == 0x29834)
if (m_maincpu->pc() == m_pchackaddress2)
{
ret &= ~0x3f;
@ -667,14 +681,46 @@ void sentx6p_state::sentx6p(machine_config &config)
}
ROM_START( sentx6p )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "vsmaxxtexasholdem.bin", 0x000000, 0x400000, CRC(00180abb) SHA1(c2af28f64bfdfc9d671bb84561f8a916bc907176) )
ROM_END
ROM_START( sentx6puk )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
// chksum:05B58350 is @ 0x3000.
// This is the correct sum of 0x3010 - 0x1fffff (the first half of the ROM area after the checksum string)
// The 2nd half is not summed (and not used by the game?) but definitely exists in ROM (same data on 2 units)
ROM_LOAD16_WORD_SWAP( "senario texas holdem.bin", 0x000000, 0x400000, CRC(7c7d2d33) SHA1(71631074ba66e3b0cdeb86ebca3931599f3a911c) )
ROM_END
// "go 02d1d0" "do r1 = ff" to get past initial screen (currently bypassed by setting controller sense in RAM earlier, see hack in machine_reset)
// a 'deluxe' version of this also exists with extra game modes
CONS( 2004, sentx6p, 0, 0, sentx6p, sentx6p, sentx6p_state, empty_init, "Senario / Play Vision", "Vs Maxx Texas Hold'em TV Poker - 6 Player Edition (UK)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // from a UK Play Vision branded box, values in GBP
ROM_START( sentx6pd )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "senariodeluxetvpoker.bin", 0x000000, 0x800000, CRC(e2b6844e) SHA1(2413195dfe7a08d16ca870c070a19034c9fe8c30) )
ROM_END
void sentx6p_state::init_sentx6puk()
{
m_pchackaddress1 = 0x2981e;
m_pchackaddress2 = 0x29834;
m_controller_sense_addr = 0x1e08;
}
void sentx6p_state::init_sentx6p()
{
m_pchackaddress1 = 0x29754;
m_pchackaddress2 = 0x2976a;
m_controller_sense_addr = 0x0804;
}
void sentx6p_state::init_sentx6pd()
{
m_pchackaddress1 = 0xca20;
m_pchackaddress2 = 0xca36;
m_controller_sense_addr = 0x1e3a;
}
CONS( 2004, sentx6p, 0, 0, sentx6p, sentx6p, sentx6p_state, init_sentx6p, "Senario", "Vs Maxx Texas Hold'em TV Poker - 6 Player Edition (US)", MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // from a US version, values in USD
CONS( 2004, sentx6puk, sentx6p, 0, sentx6p, sentx6p, sentx6p_state, init_sentx6puk, "Senario / Play Vision", "Vs Maxx Texas Hold'em TV Poker - 6 Player Edition (UK)", MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // from a UK Play Vision branded box, values in GBP
CONS( 2004, sentx6pd, 0, 0, sentx6p, sentx6p, sentx6p_state, init_sentx6pd, "Senario", "Deluxe TV Poker - Texas Hold'em, Blackjack & Video Poker (US)", MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// Deluxe version wasn't released outside of US?

View File

@ -111,13 +111,13 @@ public:
m_maincpu(*this, "maincpu"),
m_fullrom(*this, "fullrom"),
m_bank(*this, "cartbank"),
m_screen(*this, "screen"),
m_soundcpu(*this, "soundcpu"),
m_maincpu_alu(*this, "mainalu"),
m_soundcpu_alu(*this, "soundalu"),
m_soundcpu_timer_a_dev(*this, "snd_timera_dev"),
m_soundcpu_timer_b_dev(*this, "snd_timerb_dev"),
m_system_timer_dev(*this, "sys_timer_dev"),
m_screen(*this, "screen"),
m_spriteram(*this, "spriteram"),
m_vram(*this, "vram"),
m_sound_share(*this, "sound_share"),
@ -144,6 +144,8 @@ protected:
required_device<address_map_bank_device> m_fullrom;
required_memory_bank m_bank;
required_device<screen_device> m_screen;
private:
required_device<cpu_device> m_soundcpu;
required_device<vrt_vt1682_alu_device> m_maincpu_alu;
@ -153,7 +155,6 @@ private:
required_device<vrt_vt1682_timer_device> m_soundcpu_timer_b_dev;
required_device<vrt_vt1682_timer_device> m_system_timer_dev;
required_device<screen_device> m_screen;
required_device<address_map_bank_device> m_spriteram;
required_device<address_map_bank_device> m_vram;
required_shared_ptr<uint8_t> m_sound_share;
@ -664,6 +665,7 @@ public:
{ }
void vt1682_exsport(machine_config& config);
void vt1682_exsportp(machine_config& config);
virtual DECLARE_READ8_MEMBER(uiob_r);
DECLARE_WRITE8_MEMBER(uiob_w);
@ -5768,6 +5770,14 @@ void vt1682_exsport_state::vt1682_exsport(machine_config& config)
m_uio->portb_out().set(FUNC(vt1682_exsport_state::uiob_w));
}
void vt1682_exsport_state::vt1682_exsportp(machine_config& config)
{
vt_vt1682_state::vt_vt1682(config);
// TODO, different clocks, timings etc.!
m_screen->set_refresh_hz(50);
}
void vt1682_wow_state::vt1682_wow(machine_config& config)
{
@ -5840,6 +5850,12 @@ ROM_START( exsprt48 )
ROM_LOAD( "excitesportgames_48.bin", 0x00000, 0x2000000, CRC(1bf239a0) SHA1(d69c16bac5fb15c62abb5a0c0920405647205539) ) // original dump had upper 2 address lines swapped, unmarked chip, so lines were guessed when dumping
ROM_END
// differs by 2 bytes from above, the rasters glitch in MotorStorm in a different way, so it's likely an NTSC/PAL difference?
ROM_START( exsprt48a )
ROM_REGION( 0x2000000, "mainrom", ROMREGION_ERASE00 )
ROM_LOAD( "48in1sports.bin", 0x00000, 0x2000000, CRC(8e490541) SHA1(aeb01b3d7229fc888b36aaa924fe6b10597a7783) )
ROM_END
ROM_START( wowwg )
ROM_REGION( 0x2000000, "mainrom", 0 )
ROM_LOAD( "msp55lv128.bin", 0x00000, 0x1000000, CRC(f607c40c) SHA1(66d3960c3b8fbab06a88cf039419c79a6c8633f0) )
@ -5885,8 +5901,11 @@ CONS( 200?, intg5410, 0, 0, intech_interact_bank, miwi2, intec_interact_state
// Other standalone Mi Kara units should fit here as well
// European versions not verified as the same yet
CONS( 200?, exsprt48, 0, 0, vt1682_exsport, exsprt48, vt1682_exsport_state, regular_init, "Excite", "Excite Sports Wireless Interactive TV Game - 48-in-1 (US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "32 Arcade, 8 Sports, 8 Stadium"
// the timing code for MotorStorm differs between these sets (although fails wiht our emulation in both cases, even if the game runs fine in other collections)
CONS( 200?, exsprt48, 0, 0, vt1682_exsport, exsprt48, vt1682_exsport_state, regular_init, "Excite", "Excite Sports Wireless Interactive TV Game - 48-in-1 (set 1, NTSC)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // "32 Arcade, 8 Sports, 8 Stadium"
CONS( 200?, exsprt48a, exsprt48, 0, vt1682_exsportp, exsprt48, vt1682_exsport_state, regular_init, "Excite", "Excite Sports Wireless Interactive TV Game - 48-in-1 (set 2, PAL)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND ) // ^
/*
There is at least one alt US version of this also on VT1682

View File

@ -39,9 +39,11 @@ public:
void rad_crik(machine_config &config);
void non_spg_base(machine_config &config);
void abltenni(machine_config &config);
void tvsprt10(machine_config &config);
void init_crc();
void init_wiwi18();
void init_tvsprt10();
protected:
virtual void machine_start() override;

View File

@ -12886,6 +12886,7 @@ rad_baskp
rad_sinv
rad_tetr
airblsjs
sudoelan
@source:electra.cpp
avenger // (c) 1975 Electra
@ -31271,11 +31272,14 @@ vtpinball // From V.R. Technology VT SDK
vtsndtest // From V.R. Technology VT SDK
vtboxing // From V.R. Technology VT SDK
ablpinb
sudokuv
mc_dgear
dgun2500
dgun2561
lxcmcy
lxcmc250
lxcmcysw
lxcmcyfz
cybar120
mc_dg101
mc_aa2
@ -31336,6 +31340,7 @@ miwi2_7
intact89
intg5410
exsprt48
exsprt48a
wowwg
@source:newbrain.cpp
@ -33938,6 +33943,10 @@ sol20 //
@source:pturn.cpp
pturn // (c) 1984 Jaleco
@source:pubint_storyreader.cpp
pi_stry
pi_stry2
@source:pubtimed.cpp
pubtimed //
@ -39836,6 +39845,7 @@ rad_crik //
rad_fb2 //
mattelcs //
abltenni //
tvsprt10 //
wiwi18 //
@source:spg2xx_jakks.cpp
@ -39882,6 +39892,8 @@ sencosmo
@source:spg2xx_senario_poker.cpp
sentx6p //
sentx6puk
sentx6pd
@source:spg2xx_vii.cpp
vii // KenSingTon / Jungle Soft / Siatronics Vii