xavix - new machines marked as NOT WORKING (#3257)

* new machines marked as NOT WORKING
Play TV Bass Fishin' [Sean Riddle, Peter Wilhelmsen]

also some debug code to help figure out how video banking / segmentation works in the mode used by boxing in places, and this in places and some PAL machine clones of what we have because they're useful for figuring out register use.

* mode notes (nw)
This commit is contained in:
David Haywood 2018-02-22 01:38:33 +00:00 committed by R. Belmont
parent 2385b9f18f
commit e3b3c8b479
2 changed files with 143 additions and 66 deletions

View File

@ -57,6 +57,7 @@ public:
m_palette(*this, "palette"),
m_in0(*this, "IN0"),
m_in1(*this, "IN1"),
m_region(*this, "REGION"),
m_gfxdecode(*this, "gfxdecode"),
m_alt_addressing(0),
m_alt_addressing_base(0)
@ -69,6 +70,7 @@ public:
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void xavix(machine_config &config);
void xavixp(machine_config &config);
DECLARE_WRITE8_MEMBER(xavix_7900_w);
@ -223,6 +225,7 @@ private:
required_ioport m_in0;
required_ioport m_in1;
required_ioport m_region;
required_device<gfxdecode_device> m_gfxdecode;
@ -421,6 +424,20 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
if (tileregs[0x7] & 0x02)
alt_tileaddressing2 = 1;
static int hackx = 1;
if (machine().input().code_pressed_once(KEYCODE_Q))
{
hackx--;
printf("%02x\n", hackx);
}
if (machine().input().code_pressed_once(KEYCODE_W))
{
hackx++;
printf("%02x\n", hackx);
}
if (tileregs[0x7] & 0x80)
{
// there's a tilemap register to specify base in main ram, although in the monster truck test mode it points to an unmapped region
@ -438,7 +455,10 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
// the register being 0 probably isn't the condition here
if (tileregs[0x0] != 0x00) tile |= mainspace.read_byte((tileregs[0x0] << 8) + count);
if (tileregs[0x1] != 0x00) tile |= mainspace.read_byte((tileregs[0x1] << 8) + count) << 8;
if (tileregs[0x2] != 0x00) tile |= mainspace.read_byte((tileregs[0x2] << 8) + count) << 16;
// at the very least boxing leaves unwanted bits set in ram after changing between mode 0x8a and 0x82, expecting them to not be used
if (tileregs[0x7] & 0x08)
tile |= mainspace.read_byte((tileregs[0x2] << 8) + count) << 16;
count++;
@ -474,12 +494,38 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
}
else
{
// fixed multiplier? or just different? only seen this in 16x8 tile mode at the moment.
tile = tile * 8;
basereg = (tile & 0xf0000) >> 16;
tile &= 0xffff;
gfxbase = (m_spr_attra[(basereg * 2) + 1] << 16) | (m_spr_attra[(basereg * 2)] << 8);
tile+= gfxbase;
if (tileregs[0x7] & 0x08)
{
// seems to be an alt mode where there more tile data comes from an additional attribute table including palette and the banking indirection is changed
tile = tile * 8; // << 3
// boxing suggests this check happens here
if ((tile & 0xffff) == 0)
continue;
tile &= 0x0ffff;
// how we use the banking bits is not clear..
tile += hackx * 0x10000;
/* 0x03 = bass fishing company logo, 0x01 = xavix logo, title, 0x04 = menu background
0x05 = card night title (ntsc) 0x01 = xavix logo, menu background, 0x08 = card night title (pal) (potentially buggy, code flow seems wrong)
0x0e = boxing (instruction stuff) also needs palette settings.. also some bits on same layer using different bank? (0xd) or just disabled?
*/
}
else
{
// fixed multiplier? or just different? only seen this in 16x8 tile mode at the moment.
tile = tile * 8;
basereg = (tile & 0xf0000) >> 16;
tile &= 0xffff;
gfxbase = (m_spr_attra[(basereg * 2) + 1] << 16) | (m_spr_attra[(basereg * 2)] << 8);
tile += gfxbase;
}
}
}
else
@ -664,7 +710,7 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
tile+= gfxbase;
}
ypos = 0xff - ypos;
ypos = 0x100 - ypos;
xpos -= 136;
ypos -= 152;
@ -1071,59 +1117,11 @@ READ8_MEMBER(xavix_state::xavix_75f9_r)
READ8_MEMBER(xavix_state::xavix_io_0_r)
{
//return 0x00;
//return 0x01; // enter test mode
return m_in0->read();
}
READ8_MEMBER(xavix_state::xavix_io_1_r)
{
//logerror("%s: xavix_io_1_r (random status?)\n", machine().describe_context());
/*
rad_mtrk checks for 0x40 at (interrupt code)
008f02: lda $7a01 -- ??
008f05: and #$40
008f07: beq $8f17
(code that leads to a far call screen fade function with a 'jump to self' at the end, no obvious way out)
008f17 - normal flow?
opposite condition to above
018ac5: lda $7a01 -- ??
018ac8: and #$40
018aca: bne $18ac5
there's a write with 0x80 before the 'jump to self'
018aea: lda #$80
018aec: sta $7a01
018aef: jmp $18aef
and 0x02 elsewhere
near end of interrupt function will conditionally change the value stored at 0x33 to 00 or ff depending on this bit
008f24: lda $7a01
008f27: and #$02
008f29: bne $8f3c
(skips over code to store 0x00 at $33)
008f31: lda $7a01
008f34: and #$02
008f36: beq $8f3c
(skips over code to store 0xff at $33)
there's a similar check fo 0x02 that results in a far call
008099: lda $7a01
00809c: and #$02
00809e: beq $80ab
writes 00 04 and 80
*/
//return 0x02;
return m_in1->read();
}
@ -1219,8 +1217,8 @@ READ8_MEMBER(xavix_state::pal_ntsc_r)
{
// only seen 0x10 checked in code
// in monster truck the tile base address gets set based on this, there are 2 copies of the test screen in rom, one for pal, one for ntsc, see 1854c
return 0x00; // NTSC
//return 0x10; // PAL
// likewise card night has entirely different tilesets for each region title
return m_region->read();
}
WRITE8_MEMBER(xavix_state::xavix_6fc0_w) // also related to tilemap 1?
@ -1519,6 +1517,16 @@ static INPUT_PORTS_START( xavix )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x80, DEF_STR( On ) )
PORT_START("REGION") // PAL/NTSC flag
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_SPECIAL )
INPUT_PORTS_END
static INPUT_PORTS_START( xavixp )
PORT_INCLUDE(xavix)
PORT_MODIFY("REGION") // PAL/NTSC flag
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_SPECIAL )
INPUT_PORTS_END
/* Test mode lists the following
@ -1549,6 +1557,12 @@ static INPUT_PORTS_START( rad_mtrk )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 ) // some kind of 'power off' (fades screen to black, jumps to an infinite loop) maybe low battery condition or just the power button?
INPUT_PORTS_END
static INPUT_PORTS_START( rad_mtrkp )
PORT_INCLUDE(rad_mtrk)
PORT_MODIFY("REGION") // PAL/NTSC flag
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_SPECIAL )
INPUT_PORTS_END
static INPUT_PORTS_START( rad_crdn )
PORT_INCLUDE(xavix)
@ -1557,6 +1571,12 @@ static INPUT_PORTS_START( rad_crdn )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) // can press this to get to a game select screen
INPUT_PORTS_END
static INPUT_PORTS_START( rad_crdnp )
PORT_INCLUDE(rad_crdn)
PORT_MODIFY("REGION") // PAL/NTSC flag
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_SPECIAL )
INPUT_PORTS_END
static INPUT_PORTS_START( rad_box )
PORT_INCLUDE(xavix)
@ -1577,6 +1597,12 @@ static INPUT_PORTS_START( rad_box )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // needs to be high to pass warning screen?
INPUT_PORTS_END
static INPUT_PORTS_START( rad_boxp )
PORT_INCLUDE(rad_box)
PORT_MODIFY("REGION") // PAL/NTSC flag
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SPECIAL )
INPUT_PORTS_END
/* correct, 4bpp gfxs */
@ -1739,6 +1765,14 @@ MACHINE_CONFIG_START(xavix_state::xavix)
// sound is PCM
MACHINE_CONFIG_END
MACHINE_CONFIG_START(xavix_state::xavixp)
xavix(config);
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_REFRESH_RATE(50)
MACHINE_CONFIG_END
DRIVER_INIT_MEMBER(xavix_state,xavix)
{
m_rgnlen = memregion("bios")->bytes();
@ -1784,6 +1818,21 @@ ROM_START( rad_box )
ROM_LOAD("boxing.bin", 0x000000, 0x200000, CRC(5cd40714) SHA1(165260228c029a9502ca0598c84c24fd9bdeaebe) )
ROM_END
ROM_START( rad_boxp )
ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("boxing.bin", 0x000000, 0x200000, CRC(5cd40714) SHA1(165260228c029a9502ca0598c84c24fd9bdeaebe) )
ROM_END
ROM_START( rad_bass )
ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("bassfishin.bin", 0x000000, 0x100000, CRC(b54eb1c5) SHA1(084faa9349369f2b8846950765f9c8f758db3e9e) )
ROM_END
ROM_START( rad_bassp )
ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("bassfishin.bin", 0x000000, 0x100000, CRC(b54eb1c5) SHA1(084faa9349369f2b8846950765f9c8f758db3e9e) )
ROM_END
ROM_START( rad_ping )
ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "pingpong.bin", 0x000000, 0x100000, CRC(629f7f47) SHA1(2bb19fd202f1e6c319d2f7d18adbfed8a7669235) )
@ -1794,6 +1843,11 @@ ROM_START( rad_crdn )
ROM_LOAD( "cardnight.bin", 0x000000, 0x100000, CRC(d19eba08) SHA1(cedb9fe785f2a559f518a1d8ecf80d500ddc63c7) )
ROM_END
ROM_START( rad_crdnp )
ROM_REGION( 0x100000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "cardnight.bin", 0x000000, 0x100000, CRC(d19eba08) SHA1(cedb9fe785f2a559f518a1d8ecf80d500ddc63c7) )
ROM_END
ROM_START( rad_bb2 )
ROM_REGION( 0x200000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "baseball2.bin", 0x000000, 0x200000, CRC(bdbf6202) SHA1(18d5cc2d77cbb734629a7a5b6e0f419d21beedbd) )
@ -1804,6 +1858,11 @@ ROM_START( rad_mtrk )
ROM_LOAD( "monstertruck.bin", 0x000000, 0x400000, CRC(dccda0a7) SHA1(7953cf29643672f8367639555b797c20bb533eab) )
ROM_END
ROM_START( rad_mtrkp ) // rom was dumped from NTSC unit, assuming to be the same
ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "monstertruck.bin", 0x000000, 0x400000, CRC(dccda0a7) SHA1(7953cf29643672f8367639555b797c20bb533eab) )
ROM_END
ROM_START( eka_strt )
ROM_REGION( 0x080000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "ekarastartcart.bin", 0x000000, 0x080000, CRC(8c12c0c2) SHA1(8cc1b098894af25a4bfccada884125b66f5fe8b2) )
@ -1811,15 +1870,25 @@ ROM_END
/* Standalone TV Games */
CONS( 2006, taitons1, 0, 0, xavix, xavix, xavix_state, taitons1, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1", MACHINE_IS_SKELETON )
CONS( 2006, taitons1, 0, 0, xavix, xavix, xavix_state, taitons1, "Bandai / SSD Company LTD / Taito", "Let's! TV Play Classic - Taito Nostalgia 1", MACHINE_IS_SKELETON )
CONS( 2000, rad_ping, 0, 0, xavix, xavix, xavix_state, xavix, "Radica / SSD Company LTD / Simmer Technology", "Play TV Ping Pong", MACHINE_IS_SKELETON ) // "Simmer Technology" is also known as "Hummer Technology Co., Ltd"
CONS( 2003, rad_mtrk, 0, 0, xavix, rad_mtrk, xavix_state, xavix, "Radica / SSD Company LTD", "Play TV Monster Truck", MACHINE_IS_SKELETON )
CONS( 200?, rad_box, 0, 0, xavix, rad_box, xavix_state, rad_box, "Radica / SSD Company LTD", "Play TV Boxing", MACHINE_IS_SKELETON)
CONS( 200?, rad_crdn, 0, 0, xavix, rad_crdn, xavix_state, rad_crdn, "Radica / SSD Company LTD", "Play TV Card Night", MACHINE_IS_SKELETON)
CONS( 2002, rad_bb2, 0, 0, xavix, xavix, xavix_state, xavix, "Radica / SSD Company LTD", "Play TV Baseball 2", MACHINE_IS_SKELETON ) // contains string "Radica RBB2 V1.0"
CONS( 2000, rad_ping, 0, 0, xavix, xavix, xavix_state, xavix, "Radica / SSD Company LTD / Simmer Technology", "Play TV Ping Pong", MACHINE_IS_SKELETON ) // "Simmer Technology" is also known as "Hummer Technology Co., Ltd"
CONS (200?, eka_strt, 0, 0, xavix, xavix, xavix_state, xavix, "Takara / SSD Company LTD", "e-kara Starter", MACHINE_IS_SKELETON)
CONS( 2003, rad_mtrk, 0, 0, xavix, rad_mtrk, xavix_state, xavix, "Radica / SSD Company LTD", "Play TV Monster Truck (NTSC)", MACHINE_IS_SKELETON )
CONS( 2003, rad_mtrkp, rad_mtrk, 0, xavixp, rad_mtrkp,xavix_state, xavix, "Radica / SSD Company LTD", "ConnecTV Monster Truck (PAL)", MACHINE_IS_SKELETON )
CONS( 200?, rad_box, 0, 0, xavix, rad_box, xavix_state, rad_box, "Radica / SSD Company LTD", "Play TV Boxing (NTSC)", MACHINE_IS_SKELETON)
CONS( 200?, rad_boxp, rad_box, 0, xavixp, rad_boxp, xavix_state, rad_box, "Radica / SSD Company LTD", "ConnecTV Boxing (PAL)", MACHINE_IS_SKELETON)
CONS( 200?, rad_crdn, 0, 0, xavix, rad_crdn, xavix_state, rad_crdn, "Radica / SSD Company LTD", "Play TV Card Night (NTSC)", MACHINE_IS_SKELETON)
CONS( 200?, rad_crdnp, rad_crdn, 0, xavixp, rad_crdnp,xavix_state, rad_crdn, "Radica / SSD Company LTD", "ConnecTV Card Night (PAL)", MACHINE_IS_SKELETON)
CONS( 2002, rad_bb2, 0, 0, xavix, xavix, xavix_state, xavix, "Radica / SSD Company LTD", "Play TV Baseball 2", MACHINE_IS_SKELETON ) // contains string "Radica RBB2 V1.0"
CONS( 2001, rad_bass, 0, 0, xavix, xavix, xavix_state, rad_box, "Radica / SSD Company LTD", "Play TV Bass Fishin'", MACHINE_IS_SKELETON)
CONS( 2001, rad_bassp, rad_bass, 0, xavixp, xavixp, xavix_state, rad_box, "Radica / SSD Company LTD", "ConnecTV Bass Fishin'", MACHINE_IS_SKELETON)
CONS (200?, eka_strt, 0, 0, xavix, xavix, xavix_state, xavix, "Takara / SSD Company LTD", "e-kara Starter", MACHINE_IS_SKELETON)
/* The 'XaviXPORT' isn't a real console, more of a TV adapter, all the actual hardware (CPU including video hw, sound hw) is in the cartridges and controllers
and can vary between games, see notes at top of driver.
@ -1830,11 +1899,14 @@ CONS (200?, eka_strt, 0, 0, xavix, xavix, xavix_state, xavix, "Takara /
Furthermore it also seems to require some regular 6502 opcodes to be replaced with custom ones, yet the other games expect these to act normally. This
leads me to believe that XaviX Tennis is almost certainly a Super XaviX title.
The CPU die on XaviX Tennis is internally marked as NEC 85054-611 and is very different to thw two below
The CPU die on XaviX Tennis is internally marked as NEC 85054-611 and is very different to the two below
Radica Monster truck die is marked SSD PL7351 with SSD98 also printed on the die
Radia Ping Pong die is marked SSD PA7270 with SSD97 also printed on the die (otherwise looks identical to Monster Truck)
Boxing, Baseball 2 and Card Night all have the SSD98 logo
Boxing, Bass Fishin' and Card Night are all PA7351-107. Baseball 2 looks like PL7351-181.
Star Wars Saga Edition also seems to be making use of additional opcodes, meaning it could also be Super Xavix, or something in-between (unless they're
caused by the bad dump, but it looks intentional)

View File

@ -38983,9 +38983,14 @@ xsleenaj // TA-0019 (c) 1986
taitons1 //
rad_ping //
rad_mtrk //
rad_mtrkp //
rad_bb2 //
rad_box //
rad_boxp //
rad_crdn //
rad_crdnp //
rad_bass //
rad_bassp //
eka_strt //
xavtenni //
ttv_sw //