new NOT WORKING : Play TV Football 2 [Sean Riddle, Peter Wilhelmsen] (note, vii.cpp, not XaviX) + Baseball 3 + Huntin' 3 (Elan HW) (#4462)

* new NOT WORKING : Play TV Football 2 [Sean Riddle, Peter Wilhelmsen] (note, vii.cpp, not XaviX)

* note (nw)

* kill off old cricket hack, add logging function to calculate crc showing in header for radica games for easy verification

* better comment (nw)

* basketball seems to have been fixed at some point, remove old notes (nw)

* new NOT WORKING
Play TV Baseball 3 [Sean Riddle, Peter Wilhelmsen, David Haywood]
Play TV Huntin' 3 [Sean Riddle, Peter Wilhelmsen, David Haywood]

(need work on the hardware emulation and inputs)

* (nw)

* (nw)
This commit is contained in:
David Haywood 2019-01-04 02:55:52 +00:00 committed by R. Belmont
parent dd1a04267e
commit 082e78ddc7
3 changed files with 306 additions and 82 deletions

View File

@ -10,18 +10,16 @@
Known to be on this hardware Known to be on this hardware
Golden Tee Golf Home Edition (developed by FarSight Studios) name PCB ID ROM width TSOP pads ROM size SEEPROM die markings
Connectv Football (developed by Medialink) Golden Tee Golf Home Edition ELAN EU3A14 (developed by FarSight Studios)
Connectv Football ELAN EU3A14 (developed by Medialink)
Also on this hardware Play TV Basketball 75029 x16 48 4MB no ELAN EU3A14
Baseball 3 ? x16 48 4MB no ELAN EU3A14 (developed by FarSight Studios)
name PCB ID ROM width TSOP pads ROM size SEEPROM die markings Huntin3 ? x16 48 4MB no Elan ?
--------------
Real Swing Golf 74037 x16 48 not dumped no ELAN EU3A14 Also on this hardware
Play TV Basketball 75029 x16 48 not dumped no ELAN EU3A14 --------------
Baseball 3 ? x16 48 not dumped no ELAN EU3A14 Real Swing Golf 74037 x16 48 not dumped no ELAN EU3A14
Huntin3 ? x16 48 not dumped no Elan ?
In many ways this is similar to the rad_eu3a05.cpp hardware In many ways this is similar to the rad_eu3a05.cpp hardware
but the video system has changed, here the sprites are more traditional non-tile based, rather but the video system has changed, here the sprites are more traditional non-tile based, rather
@ -82,15 +80,18 @@ public:
m_dmaparams(*this, "dmaparams"), m_dmaparams(*this, "dmaparams"),
m_bank(*this, "bank"), m_bank(*this, "bank"),
m_palette(*this, "palette"), m_palette(*this, "palette"),
m_gfxdecode(*this, "gfxdecode") m_gfxdecode(*this, "gfxdecode"),
m_tvtype(*this, "TV")
{ } { }
void radica_eu3a14(machine_config &config); void radica_eu3a14(machine_config &config);
void radica_eu3a14_adc(machine_config &config); void radica_eu3a14_adc(machine_config &config);
void radica_eu3a14p(machine_config &config);
void init_rad_gtg(); void init_rad_gtg();
void init_rad_foot(); void init_rad_foot();
void init_rad_hnt3();
private: private:
READ8_MEMBER(irq_vector_r); READ8_MEMBER(irq_vector_r);
@ -112,6 +113,8 @@ private:
DECLARE_WRITE8_MEMBER(radicasi_rombank_lo_w); DECLARE_WRITE8_MEMBER(radicasi_rombank_lo_w);
DECLARE_WRITE8_MEMBER(radicasi_rombank_hi_w); DECLARE_WRITE8_MEMBER(radicasi_rombank_hi_w);
DECLARE_READ8_MEMBER(radica_5009_unk_r) { return machine().rand(); };
DECLARE_READ8_MEMBER(random_r) { return machine().rand(); }; DECLARE_READ8_MEMBER(random_r) { return machine().rand(); };
TIMER_DEVICE_CALLBACK_MEMBER(scanline_cb); TIMER_DEVICE_CALLBACK_MEMBER(scanline_cb);
@ -141,11 +144,14 @@ private:
required_device<address_map_bank_device> m_bank; required_device<address_map_bank_device> m_bank;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_ioport m_tvtype;
uint8_t m_rombank_hi; uint8_t m_rombank_hi;
uint8_t m_rombank_lo; uint8_t m_rombank_lo;
int m_tilerambase; int m_tilerambase;
int m_spriterambase; int m_spriterambase;
int m_pagewidth;
int m_pageheight;
void handle_palette(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void handle_palette(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_page(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which, int xbase, int ybase, int size); void draw_page(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which, int xbase, int ybase, int size);
@ -211,28 +217,37 @@ void radica_eu3a14_state::draw_page(screen_device &screen, bitmap_ind16 &bitmap,
{ {
gfx_element *gfx; gfx_element *gfx;
int pagesize = m_pagewidth * m_pageheight * 2;
int base = (m_tilebase[1] << 8) | m_tilebase[0]; int base = (m_tilebase[1] << 8) | m_tilebase[0];
if (m_tilecfg[2] & 0x04) if (m_tilecfg[2] & 0x04) // 4bpp selection
{ {
gfx = m_gfxdecode->gfx(4); gfx = m_gfxdecode->gfx(4); // 16x16 4bpp
base <<= 1; base <<= 1;
if (size == 8) if (size == 8)
{ {
gfx = m_gfxdecode->gfx(5); gfx = m_gfxdecode->gfx(6); // 8x8 4bpp
base <<= 2; base <<= 2;
} }
} }
else else // 8bpp selection
{ {
gfx = m_gfxdecode->gfx(3); gfx = m_gfxdecode->gfx(3); // 16x16 8bpp
if (size == 8)
{
gfx = m_gfxdecode->gfx(5); // 8x8 8bpp
base <<= 2;
}
} }
int xdraw = xbase; int xdraw = xbase;
int ydraw = ybase; int ydraw = ybase;
int count = 0; int count = 0;
for (int i = m_tilerambase+0x1c0*which; i < m_tilerambase+0x1c0*(which+1); i+=2) for (int i = m_tilerambase+pagesize*which; i < m_tilerambase+pagesize*(which+1); i+=2)
{ {
int tile = m_mainram[i+0] | (m_mainram[i+1] << 8); int tile = m_mainram[i+0] | (m_mainram[i+1] << 8);
@ -240,9 +255,9 @@ void radica_eu3a14_state::draw_page(screen_device &screen, bitmap_ind16 &bitmap,
xdraw+=size; xdraw+=size;
count++; count++;
if (((count % 16) == 0)) if (((count % m_pagewidth) == 0))
{ {
xdraw -= size*16; xdraw -= size*m_pagewidth;
ydraw += size; ydraw += size;
} }
} }
@ -255,30 +270,35 @@ void radica_eu3a14_state::draw_background(screen_device &screen, bitmap_ind16 &b
int size = 16; int size = 16;
// or 0x10? // or 0x10?
if (m_tilecfg[0] & 0x80) if (m_tilecfg[0] & 0x10)
{ {
size = 8; size = 8;
} }
draw_page(screen, bitmap, cliprect, 0, 0 - xscroll, 0 - yscroll, size); // normal
draw_page(screen, bitmap, cliprect, 1, (size * 16) - xscroll, 0 - yscroll, size); draw_page(screen, bitmap, cliprect, 0, 0 - xscroll, 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 2, 0 - xscroll, (size * 14) - yscroll, size); draw_page(screen, bitmap, cliprect, 1, (size * m_pagewidth) - xscroll, 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * 16) - xscroll, (size * 14) - yscroll, size); draw_page(screen, bitmap, cliprect, 2, 0 - xscroll, (size * m_pageheight) - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * m_pagewidth) - xscroll, (size * m_pageheight) - yscroll, size);
draw_page(screen, bitmap, cliprect, 0, (size * 16 * 2) + 0 - xscroll, 0 - yscroll, size); // wrap x
draw_page(screen, bitmap, cliprect, 1, (size * 16 * 3) - xscroll, 0 - yscroll, size); draw_page(screen, bitmap, cliprect, 0, (size * m_pagewidth * 2) + 0 - xscroll, 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 2, (size * 16 * 2) + 0 - xscroll, (size * 14) - yscroll, size); draw_page(screen, bitmap, cliprect, 1, (size * m_pagewidth * 3) - xscroll, 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * 16 * 3) - xscroll, (size * 14) - yscroll, size); draw_page(screen, bitmap, cliprect, 2, (size * m_pagewidth * 2) + 0 - xscroll, (size * m_pageheight) - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * m_pagewidth * 3) - xscroll, (size * m_pageheight) - yscroll, size);
draw_page(screen, bitmap, cliprect, 0, 0 - xscroll, (size * 14 * 2) + 0 - yscroll, size); // wrap y
draw_page(screen, bitmap, cliprect, 1, (size * 16) - xscroll, (size * 14 * 2) + 0 - yscroll, size); draw_page(screen, bitmap, cliprect, 0, 0 - xscroll, (size * m_pageheight * 2) + 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 2, 0 - xscroll, (size * 14 * 3) - yscroll, size); draw_page(screen, bitmap, cliprect, 1, (size * m_pagewidth) - xscroll, (size * m_pageheight * 2) + 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * 16) - xscroll, (size * 14 * 3) - yscroll, size); draw_page(screen, bitmap, cliprect, 2, 0 - xscroll, (size * m_pageheight * 3) - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * m_pagewidth) - xscroll, (size * m_pageheight * 3) - yscroll, size);
// wrap x+y
draw_page(screen, bitmap, cliprect, 0, (size * m_pagewidth * 2) + 0 - xscroll, (size * m_pageheight * 2) + 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 1, (size * m_pagewidth * 3) - xscroll, (size * m_pageheight * 2) + 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 2, (size * m_pagewidth * 2) + 0 - xscroll, (size * m_pageheight * 3) - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * m_pagewidth * 3) - xscroll, (size * m_pageheight * 3) - yscroll, size);
draw_page(screen, bitmap, cliprect, 0, (size * 16 * 2) + 0 - xscroll, (size * 14 * 2) + 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 1, (size * 16 * 3) - xscroll, (size * 14 * 2) + 0 - yscroll, size);
draw_page(screen, bitmap, cliprect, 2, (size * 16 * 2) + 0 - xscroll, (size * 14 * 3) - yscroll, size);
draw_page(screen, bitmap, cliprect, 3, (size * 16 * 3) - xscroll, (size * 14 * 3) - yscroll, size);
} }
void radica_eu3a14_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) void radica_eu3a14_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@ -473,8 +493,7 @@ READ8_MEMBER(radica_eu3a14_state::radicasi_pal_ntsc_r)
// how best to handle this, we probably need to run the PAL machine at 50hz // how best to handle this, we probably need to run the PAL machine at 50hz
// the text under the radica logo differs between regions // the text under the radica logo differs between regions
logerror("%s: radicasi_pal_ntsc_r (region + more?)\n", machine().describe_context()); logerror("%s: radicasi_pal_ntsc_r (region + more?)\n", machine().describe_context());
return 0xff; // NTSC return m_tvtype->read();
//return 0x00; // PAL
} }
void radica_eu3a14_state::bank_map(address_map &map) void radica_eu3a14_state::bank_map(address_map &map)
@ -492,7 +511,7 @@ void radica_eu3a14_state::radica_eu3a14_map(address_map &map)
// similar to eu3a05, at least for pal flags and rom banking // similar to eu3a05, at least for pal flags and rom banking
map(0x5007, 0x5007).noprw(); map(0x5007, 0x5007).noprw();
map(0x5008, 0x5008).nopw(); // startup map(0x5008, 0x5008).nopw(); // startup
map(0x5009, 0x5009).noprw(); map(0x5009, 0x5009).r(FUNC(radica_eu3a14_state::radica_5009_unk_r)); // rad_hnt3 polls this on startup
map(0x500a, 0x500a).nopw(); // startup map(0x500a, 0x500a).nopw(); // startup
map(0x500b, 0x500b).r(FUNC(radica_eu3a14_state::radicasi_pal_ntsc_r)).nopw(); // PAL / NTSC flag at least map(0x500b, 0x500b).r(FUNC(radica_eu3a14_state::radicasi_pal_ntsc_r)).nopw(); // PAL / NTSC flag at least
map(0x500c, 0x500c).w(FUNC(radica_eu3a14_state::radicasi_rombank_hi_w)); map(0x500c, 0x500c).w(FUNC(radica_eu3a14_state::radicasi_rombank_hi_w));
@ -602,10 +621,13 @@ static INPUT_PORTS_START( rad_gtg )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("TV")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
// hold enter and left during power on for test mode // hold enter and left during power on for test mode
static INPUT_PORTS_START( radica_eu3a14 ) static INPUT_PORTS_START( radica_foot )
PORT_START("IN0") PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
@ -651,6 +673,111 @@ static INPUT_PORTS_START( radica_eu3a14 )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("TV")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( radica_hnt3 )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Menu Previous")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Menu Next")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Menu Select")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 ) // pause?
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("TV")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( radica_hnt3p )
PORT_INCLUDE(radica_hnt3)
PORT_MODIFY("TV")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( radica_bb3 )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
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("TV")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( radica_bb3p )
PORT_INCLUDE(radica_bb3)
PORT_MODIFY("TV")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
void radica_eu3a14_state::machine_start() void radica_eu3a14_state::machine_start()
@ -752,6 +879,17 @@ static const gfx_layout helper16x16x4_layout =
16 * 16 * 4 16 * 16 * 4
}; };
static const gfx_layout helper8x8x8_layout =
{
8,8,
RGN_FRAC(1,1),
8,
{ STEP8(0,1) },
{ STEP8(0,8) },
{ STEP8(0,8*8) },
8 * 8 * 8
};
static const gfx_layout helper8x8x4_layout = static const gfx_layout helper8x8x4_layout =
{ {
8,8, 8,8,
@ -768,8 +906,10 @@ static GFXDECODE_START( gfx_helper )
GFXDECODE_ENTRY( "maincpu", 0, helper8x1x2_layout, 0x0, 128 ) GFXDECODE_ENTRY( "maincpu", 0, helper8x1x2_layout, 0x0, 128 )
GFXDECODE_ENTRY( "maincpu", 0, helper8x1x4_layout, 0x0, 32 ) GFXDECODE_ENTRY( "maincpu", 0, helper8x1x4_layout, 0x0, 32 )
GFXDECODE_ENTRY( "maincpu", 0, helper8x1x8_layout, 0x0, 2 ) GFXDECODE_ENTRY( "maincpu", 0, helper8x1x8_layout, 0x0, 2 )
// standard decodes
GFXDECODE_ENTRY( "maincpu", 0, helper16x16x8_layout, 0x0, 2 ) GFXDECODE_ENTRY( "maincpu", 0, helper16x16x8_layout, 0x0, 2 )
GFXDECODE_ENTRY( "maincpu", 0, helper16x16x4_layout, 0x0, 32 ) GFXDECODE_ENTRY( "maincpu", 0, helper16x16x4_layout, 0x0, 32 )
GFXDECODE_ENTRY( "maincpu", 0, helper8x8x8_layout, 0x0, 2 )
GFXDECODE_ENTRY( "maincpu", 0, helper8x8x4_layout, 0x0, 32 ) GFXDECODE_ENTRY( "maincpu", 0, helper8x8x4_layout, 0x0, 32 )
GFXDECODE_END GFXDECODE_END
@ -811,11 +951,22 @@ MACHINE_CONFIG_START(radica_eu3a14_state::radica_eu3a14_adc)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", radica_eu3a14_state, scanline_cb, "screen", 0, 1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", radica_eu3a14_state, scanline_cb, "screen", 0, 1)
MACHINE_CONFIG_END MACHINE_CONFIG_END
MACHINE_CONFIG_START(radica_eu3a14_state::radica_eu3a14p) // TODO, clocks differ too, what are they on PAL?
radica_eu3a14(config);
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_REFRESH_RATE(50)
MACHINE_CONFIG_END
void radica_eu3a14_state::init_rad_gtg() void radica_eu3a14_state::init_rad_gtg()
{ {
// must be registers to control this // must be registers to control this
m_tilerambase = 0x0a00 - 0x200; m_tilerambase = 0x0a00 - 0x200;
m_spriterambase = 0x0220 - 0x200; m_spriterambase = 0x0220 - 0x200;
m_pagewidth = 16;
m_pageheight = 14;
} }
void radica_eu3a14_state::init_rad_foot() void radica_eu3a14_state::init_rad_foot()
@ -823,6 +974,20 @@ void radica_eu3a14_state::init_rad_foot()
// must be registers to control this // must be registers to control this
m_tilerambase = 0x0200 - 0x200; m_tilerambase = 0x0200 - 0x200;
m_spriterambase = 0x2800 - 0x200; m_spriterambase = 0x2800 - 0x200;
// this is ok for the game, but secret test mode also uses a weird 8x8 mode with different tile addressing
m_pagewidth = 16;
m_pageheight = 14;
}
void radica_eu3a14_state::init_rad_hnt3()
{
// must be registers to control this
m_tilerambase = 0x0200 - 0x200;
m_spriterambase = 0x1800 - 0x200;
// uses an 8x8 mode, could depend on that, but other 8x8 use case above is different
m_pagewidth = 32;
m_pageheight = 28;
} }
@ -836,7 +1001,33 @@ ROM_START( rad_foot )
ROM_LOAD( "connectvfootball.bin", 0x000000, 0x400000, CRC(00ac4fc0) SHA1(2b60ae5c6bc7e9ef7cdbd3f6a0a0657ed3ab5afe) ) ROM_LOAD( "connectvfootball.bin", 0x000000, 0x400000, CRC(00ac4fc0) SHA1(2b60ae5c6bc7e9ef7cdbd3f6a0a0657ed3ab5afe) )
ROM_END ROM_END
CONS( 2006, rad_gtg, 0, 0, radica_eu3a14_adc, rad_gtg, radica_eu3a14_state, init_rad_gtg, "Radica (licensed from Incredible Technologies)", "Golden Tee Golf: Home Edition", MACHINE_NOT_WORKING ) ROM_START( rad_bb3 )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "baseball3.bin", 0x000000, 0x400000, CRC(af86aab0) SHA1(5fed48a295f045ca839f87b0f9b78ecc51104cdc) )
ROM_END
ROM_START( rad_bb3p )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "baseball3.bin", 0x000000, 0x400000, CRC(af86aab0) SHA1(5fed48a295f045ca839f87b0f9b78ecc51104cdc) )
ROM_END
ROM_START( rad_hnt3 )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "huntin3.bin", 0x000000, 0x400000, CRC(c8e3e40b) SHA1(81eb16ac5ab6d93525fcfadbc6703b2811d7de7f) )
ROM_END
ROM_START( rad_hnt3p )
ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "huntin3.bin", 0x000000, 0x400000, CRC(c8e3e40b) SHA1(81eb16ac5ab6d93525fcfadbc6703b2811d7de7f) )
ROM_END
CONS( 2006, rad_gtg, 0, 0, radica_eu3a14_adc, rad_gtg, radica_eu3a14_state, init_rad_gtg, "Radica (licensed from Incredible Technologies)", "Golden Tee Golf: Home Edition", MACHINE_NOT_WORKING )
// also has a Connectv Real Soccer logo in the roms, apparently unused, maybe that was to be the US title (without the logo being changed to Play TV) but Play TV Soccer ended up being a different game licensed from Epoch instead. // also has a Connectv Real Soccer logo in the roms, apparently unused, maybe that was to be the US title (without the logo being changed to Play TV) but Play TV Soccer ended up being a different game licensed from Epoch instead.
CONS( 2006, rad_foot, 0, 0, radica_eu3a14, radica_eu3a14, radica_eu3a14_state, init_rad_foot, "Radica", "Connectv Football", MACHINE_NOT_WORKING ) CONS( 2006, rad_foot, 0, 0, radica_eu3a14p, radica_foot, radica_eu3a14_state, init_rad_foot, "Radica", "Connectv Football", MACHINE_NOT_WORKING )
CONS( 200?, rad_bb3, 0, 0, radica_eu3a14, radica_bb3, radica_eu3a14_state, init_rad_gtg, "Radica", "Play TV Baseball 3", MACHINE_NOT_WORKING )
CONS( 200?, rad_bb3p, rad_bb3, 0, radica_eu3a14p, radica_bb3p, radica_eu3a14_state, init_rad_gtg, "Radica", "Connectv Baseball 3", MACHINE_NOT_WORKING )
CONS( 2005, rad_hnt3, 0, 0, radica_eu3a14, radica_hnt3, radica_eu3a14_state, init_rad_hnt3, "Radica / V-Tac Technology Co Ltd.", "Play TV Huntin' 3", MACHINE_NOT_WORKING )
CONS( 2005, rad_hnt3p,rad_hnt3, 0, radica_eu3a14p, radica_hnt3p, radica_eu3a14_state, init_rad_hnt3, "Radica / V-Tac Technology Co Ltd.", "Connectv Huntin' 3", MACHINE_NOT_WORKING )

View File

@ -23,15 +23,19 @@
Game seems unhappy with NVRAM, clears contents on each boot. Game seems unhappy with NVRAM, clears contents on each boot.
rad_skat: rad_skat:
Palette issues on the High Score screen. Palette issues on the High Score screen.
rad_fb2:
sometimes when selecting QB training camp the sprites don't appear
controls are not properly mapped
vii: vii:
When loading a cart from file manager, sometimes MAME will crash. When loading a cart from file manager, sometimes MAME will crash.
The "MOTOR" option in the diagnostic menu does nothing when selected. The "MOTOR" option in the diagnostic menu does nothing when selected.
The "SPEECH IC" option in the diagnostic menu does nothing when selected. The "SPEECH IC" option in the diagnostic menu does nothing when selected.
On 'vii_vc1' & 'vii_vc2' cart, the left-right keys are transposed with the up-down keys. On 'vii_vc1' & 'vii_vc2' cart, the left-right keys are transposed with the up-down keys.
- This is not a bug per se, as the games are played with the controller physically rotated 90 degrees. - This is not a bug per se, as the games are played with the controller physically rotated 90 degrees.
When entering a game in Basketball, MAME fatalerrors when starting the game due to jumping to invalid code.
zone60/wirels60: Note:
When entering a game in Basketball, MAME fatalerrors when starting the game due to jumping to invalid code. Cricket, Skateboarder, Skannerz and Football 2 list a 32-bit checksum at the start of ROM.
This is the byte sum of the file, excluding the first 16 byte (where the checksum is stored)
*******************************************************************************/ *******************************************************************************/
@ -75,7 +79,7 @@ public:
void rad_crik(machine_config &config); void rad_crik(machine_config &config);
void non_spg_base(machine_config &config); void non_spg_base(machine_config &config);
void init_rad_crik(); void init_crc();
protected: protected:
virtual void machine_start() override; virtual void machine_start() override;
@ -114,9 +118,6 @@ protected:
optional_ioport m_io_p3; optional_ioport m_io_p3;
optional_device<i2cmem_device> m_i2cmem; optional_device<i2cmem_device> m_i2cmem;
optional_device<nvram_device> m_nvram; optional_device<nvram_device> m_nvram;
// temp hack
DECLARE_READ16_MEMBER(rad_crik_hack_r);
}; };
class vii_state : public spg2xx_game_state class vii_state : public spg2xx_game_state
@ -477,6 +478,23 @@ static INPUT_PORTS_START( rad_crik )
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( rad_fb2 ) // controls must be multiplexed somehow, as there's no room for P2 controls otherwise (unless P2 controls were never finished and it was only sold in a single mat version, Radica left useless P2 menu options in the mini Genesis consoles)
PORT_START("P1")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) // 'left'
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // 'up'
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) // 'right'
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // acts a 'motion ball' in menu (this is an analog input from the ball tho? at least in rad_fb in xavix.cpp so this might just be a debug input here)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) // 'p2 right'
// none of the remaining inputs seem to do anything
PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P2")
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("P3")
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag
INPUT_PORTS_END
void vii_state::machine_start() void vii_state::machine_start()
{ {
spg2xx_game_state::machine_start(); spg2xx_game_state::machine_start();
@ -682,65 +700,50 @@ void spg2xx_game_state::rad_crik(machine_config &config)
NVRAM(config, m_nvram, nvram_device::DEFAULT_ALL_1); NVRAM(config, m_nvram, nvram_device::DEFAULT_ALL_1);
} }
READ16_MEMBER(spg2xx_game_state::rad_crik_hack_r)
{
int pc = m_maincpu->state_int(UNSP_PC);
if (pc == 0xf851)
return 0xf859;
else
return 0xf854;
}
void spg2xx_game_state::init_rad_crik()
{
// not 100% sure what this is waiting on, could be eeprom as it seems to end up here frequently during the eeprom test, patch running code, not ROM, so that checksum can still pass
m_maincpu->space(AS_PROGRAM).install_read_handler(0xf851, 0xf851, read16_delegate(FUNC(spg2xx_game_state::rad_crik_hack_r),this));
}
ROM_START( vii ) ROM_START( vii )
ROM_REGION( 0x2000000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x2000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "vii.bin", 0x0000, 0x2000000, CRC(04627639) SHA1(f883a92d31b53c9a5b0cdb112d07cd793c95fc43)) ROM_LOAD16_WORD_SWAP( "vii.bin", 0x0000, 0x2000000, CRC(04627639) SHA1(f883a92d31b53c9a5b0cdb112d07cd793c95fc43))
ROM_END ROM_END
ROM_START( batmantv ) ROM_START( batmantv )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "batman.bin", 0x000000, 0x400000, CRC(46f848e5) SHA1(5875d57bb3fe0cac5d20e626e4f82a0e5f9bb94c) ) ROM_LOAD16_WORD_SWAP( "batman.bin", 0x000000, 0x400000, CRC(46f848e5) SHA1(5875d57bb3fe0cac5d20e626e4f82a0e5f9bb94c) )
ROM_END ROM_END
ROM_START( walle ) ROM_START( walle )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "walle.bin", 0x000000, 0x400000, BAD_DUMP CRC(bd554cba) SHA1(6cd06a036ab12e7b0e1fd8003db873b0bb783868) ) ROM_LOAD16_WORD_SWAP( "walle.bin", 0x000000, 0x400000, BAD_DUMP CRC(bd554cba) SHA1(6cd06a036ab12e7b0e1fd8003db873b0bb783868) )
// Alternate dump, we need to decide which one is correct. // Alternate dump, we need to decide which one is correct.
//ROM_LOAD16_WORD_SWAP( "walle.bin", 0x000000, 0x400000, CRC(6bc90b16) SHA1(184d72de059057aae7800da510fcf05ed1da9ec9)) //ROM_LOAD16_WORD_SWAP( "walle.bin", 0x000000, 0x400000, CRC(6bc90b16) SHA1(184d72de059057aae7800da510fcf05ed1da9ec9))
ROM_END ROM_END
ROM_START( zone40 ) ROM_START( zone40 )
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "zone40.bin", 0x0000, 0x4000000, CRC(4ba1444f) SHA1(de83046ab93421486668a247972ad6d3cda19440) ) ROM_LOAD16_WORD_SWAP( "zone40.bin", 0x0000, 0x4000000, CRC(4ba1444f) SHA1(de83046ab93421486668a247972ad6d3cda19440) )
ROM_END ROM_END
ROM_START( zone60 ) ROM_START( zone60 )
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "zone60.bin", 0x0000, 0x4000000, CRC(4cb637d1) SHA1(1f97cbdb4299ac0fbafc2a3aa592066cb0727066)) ROM_LOAD16_WORD_SWAP( "zone60.bin", 0x0000, 0x4000000, CRC(4cb637d1) SHA1(1f97cbdb4299ac0fbafc2a3aa592066cb0727066))
ROM_END ROM_END
ROM_START( wirels60 ) ROM_START( wirels60 )
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "wirels60.bin", 0x0000, 0x4000000, CRC(b4df8b28) SHA1(00e3da542e4bc14baf4724ad436f66d4c0f65c84)) ROM_LOAD16_WORD_SWAP( "wirels60.bin", 0x0000, 0x4000000, CRC(b4df8b28) SHA1(00e3da542e4bc14baf4724ad436f66d4c0f65c84))
ROM_END ROM_END
ROM_START( rad_skat ) ROM_START( rad_skat )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "skateboarder.bin", 0x000000, 0x400000, CRC(08b9ab91) SHA1(6665edc4740804956136c68065890925a144626b) ) ROM_LOAD16_WORD_SWAP( "skateboarder.bin", 0x000000, 0x400000, CRC(08b9ab91) SHA1(6665edc4740804956136c68065890925a144626b) )
ROM_END ROM_END
ROM_START( rad_skatp ) // rom was dumped from the NTSC version, but region comes from an io port, so ROM is probably the same ROM_START( rad_skatp ) // rom was dumped from the NTSC version, but region comes from an io port, so ROM is probably the same
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "skateboarder.bin", 0x000000, 0x400000, CRC(08b9ab91) SHA1(6665edc4740804956136c68065890925a144626b) ) ROM_LOAD16_WORD_SWAP( "skateboarder.bin", 0x000000, 0x400000, CRC(08b9ab91) SHA1(6665edc4740804956136c68065890925a144626b) )
ROM_END ROM_END
ROM_START( rad_sktv ) ROM_START( rad_sktv )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "skannerztv.bin", 0x000000, 0x200000, CRC(e92278e3) SHA1(eb6bee5e661128d83784960dfff50379c36bfaeb) ) ROM_LOAD16_WORD_SWAP( "skannerztv.bin", 0x000000, 0x200000, CRC(e92278e3) SHA1(eb6bee5e661128d83784960dfff50379c36bfaeb) )
/* The external scanner MCU is a Winbond from 2000: SA5641 /* The external scanner MCU is a Winbond from 2000: SA5641
@ -750,8 +753,13 @@ ROM_START( rad_sktv )
TODO: find details on MCU so that we know capacity etc. */ TODO: find details on MCU so that we know capacity etc. */
ROM_END ROM_END
ROM_START( rad_fb2 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "football2.bin", 0x000000, 0x400000, CRC(96b4f0d2) SHA1(e91f2ac679fb0c026ffe216eb4ab58802f361a17) )
ROM_END
ROM_START( rad_crik ) // only released in EU? ROM_START( rad_crik ) // only released in EU?
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "cricket.bin", 0x000000, 0x200000, CRC(6fa0aaa9) SHA1(210d2d4f542181f59127ce2f516d0408dc6de7a8) ) ROM_LOAD16_WORD_SWAP( "cricket.bin", 0x000000, 0x200000, CRC(6fa0aaa9) SHA1(210d2d4f542181f59127ce2f516d0408dc6de7a8) )
ROM_END ROM_END
@ -779,7 +787,7 @@ http://www.lcis.com.tw/paper_store/paper_store/GPL162004A-507A_162005A-707AV10_c
*/ */
ROM_START( wlsair60 ) ROM_START( wlsair60 )
ROM_REGION( 0x8400000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x8400000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "wlsair60.nand", 0x0000, 0x8400000, CRC(eec23b97) SHA1(1bb88290cf54579a5bb51c08a02d793cd4d79f7a) ) ROM_LOAD16_WORD_SWAP( "wlsair60.nand", 0x0000, 0x8400000, CRC(eec23b97) SHA1(1bb88290cf54579a5bb51c08a02d793cd4d79f7a) )
ROM_END ROM_END
@ -860,10 +868,29 @@ which is also found in the Wireless Air 60 ROM.
*/ */
ROM_START( wrlshunt ) ROM_START( wrlshunt )
ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASEFF ) ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "wireless.bin", 0x0000, 0x8000000, CRC(a6ecc20e) SHA1(3645f23ba2bb218e92d4560a8ae29dddbaabf796) ) ROM_LOAD16_WORD_SWAP( "wireless.bin", 0x0000, 0x8000000, CRC(a6ecc20e) SHA1(3645f23ba2bb218e92d4560a8ae29dddbaabf796) )
ROM_END ROM_END
void spg2xx_game_state::init_crc()
{
// several games have a byte sum checksum listed at the start of ROM, this little helper function logs what it should match.
const int length = memregion("maincpu")->bytes();
const uint8_t* rom = memregion("maincpu")->base();
uint32_t checksum = 0x00000000;
// the first 0x10 bytes are where the "chksum:xxxxxxxx " string is listed, so skip over them
for (int i = 0x10; i < length; i++)
{
checksum += rom[i];
}
logerror("Calculated Byte Sum of bytes from 0x10 to 0x%08x is %08x)\n", length - 1, checksum);
}
// year, name, parent, compat, machine, input, class, init, company, fullname, flags // year, name, parent, compat, machine, input, class, init, company, fullname, flags
// Jungle Soft TV games // Jungle Soft TV games
@ -876,10 +903,11 @@ CONS( 2004, batmantv, 0, 0, jakks, batman, spg2xx_game_state, empty_init, "JAKKS
CONS( 2008, walle, 0, 0, walle, walle, spg2xx_game_state, empty_init, "JAKKS Pacific Inc", "Wall-E", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) CONS( 2008, walle, 0, 0, walle, walle, spg2xx_game_state, empty_init, "JAKKS Pacific Inc", "Wall-E", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
// Radica TV games // Radica TV games
CONS( 2006, rad_skat, 0, 0, rad_skat, rad_skat, spg2xx_game_state, empty_init, "Radica", "Play TV Skateboarder (NTSC)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) CONS( 2006, rad_skat, 0, 0, rad_skat, rad_skat, spg2xx_game_state, init_crc, "Radica", "Play TV Skateboarder (NTSC)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, rad_skatp, rad_skat, 0, rad_skatp, rad_skatp, spg2xx_game_state, empty_init, "Radica", "Connectv Skateboarder (PAL)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) CONS( 2006, rad_skatp, rad_skat, 0, rad_skatp,rad_skatp, spg2xx_game_state, init_crc, "Radica", "Connectv Skateboarder (PAL)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, rad_crik, 0, 0, rad_crik, rad_crik, spg2xx_game_state, empty_init, "Radica", "Connectv Cricket (PAL)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // Version 3.00 20/03/06 is listed in INTERNAL TEST CONS( 2006, rad_crik, 0, 0, rad_crik, rad_crik, spg2xx_game_state, init_crc, "Radica", "Connectv Cricket (PAL)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // Version 3.00 20/03/06 is listed in INTERNAL TEST
CONS( 2007, rad_sktv, 0, 0, rad_skat, rad_sktv, spg2xx_game_state, empty_init, "Radica", "Skannerz TV", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) CONS( 2007, rad_sktv, 0, 0, rad_skat, rad_sktv, spg2xx_game_state, init_crc, "Radica", "Skannerz TV", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
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 )
// might not fit here. First 0x8000 bytes are blank (not too uncommon for these) then rest of rom looks like it's probably encrypted at least // might not fit here. First 0x8000 bytes are blank (not too uncommon for these) then rest of rom looks like it's probably encrypted at least
CONS( 2009, zone40, 0, 0, non_spg_base, wirels60, spg2xx_game_state, empty_init, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 40", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) CONS( 2009, zone40, 0, 0, non_spg_base, wirels60, spg2xx_game_state, empty_init, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 40", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )

View File

@ -33048,6 +33048,10 @@ rabbitjt // (c) 1996 Electronic Arts
@source:rad_eu3a14.cpp @source:rad_eu3a14.cpp
rad_gtg rad_gtg
rad_foot rad_foot
rad_bb3
rad_bb3p
rad_hnt3
rad_hnt3p
@source:rad_eu3a05.cpp @source:rad_eu3a05.cpp
rad_sinv rad_sinv
@ -38547,6 +38551,7 @@ rad_skat //
rad_skatp // rad_skatp //
rad_sktv // rad_sktv //
rad_crik // rad_crik //
rad_fb2 //
@source:vsmile.cpp @source:vsmile.cpp
vsmile // vsmile //