xavix - did a little work to push rad_box to run the game, which shou… (#3244)

* xavix - did a little work to push rad_box to run the game, which should hopefully allow me to figure out some more video regs etc. as it uses them in a different way again

(also some misc documentation changes to other files)

* formatting (nw)
This commit is contained in:
David Haywood 2018-02-19 21:27:25 +00:00 committed by R. Belmont
parent 18f8fd523c
commit ebbb4d5fc8
3 changed files with 93 additions and 35 deletions

View File

@ -9033,7 +9033,7 @@ ROM_END
NEO-AEG PROGBK2S (2003.10.16) (NEO-PCM2 PLAYMORE) / NEO-AEG CHAFIO (2003.7.24) (NEO-CMC 7050)
****************************************/
ROM_START( samsho5 ) /* Encrypted Set */ /* MVS VERSION */
ROM_START( samsho5 ) /* Encrypted Set */ /* MVS VERSION, Build Date: Tue Aug 26 22:27:30 2003 */
ROM_REGION( 0x800000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT )
ROM_LOAD16_WORD_SWAP( "270-p1.p1", 0x000000, 0x400000, CRC(4a2a09e6) SHA1(2644de02cdab8ccc605488a7c76b8c9cd1d5bcb9) ) /* mask rom TC5332205 */
ROM_LOAD16_WORD_SWAP( "270-p2.sp2", 0x400000, 0x400000, CRC(e0c74c85) SHA1(df24a4ee76438e40c2f04a714175a7f85cacdfe0) ) /* mask rom TC5332205 */
@ -9066,11 +9066,11 @@ ROM_START( samsho5 ) /* Encrypted Set */ /* MVS VERSION */
ROM_LOAD16_BYTE( "270-c8.c8", 0x3000001, 0x800000, CRC(02c530a6) SHA1(7a3fafa6075506c6ef78cc4ec2cb72118ec83cb9) ) /* Plane 2,3 */ /* mask rom TC5364205 */
ROM_END
/* handwritten labels, possible hack of samsho5h?
/* handwritten labels, but appears to be a legitimate alt revision based on the build date at 0xA6C00
p1.bin 270-p1c.p1 90.607002%
p2.bin 270-p2c.sp2 99.999763% (all bytes that differ do so by only bits 0x20 or 0x02, which is suspicious)
p2.bin 270-p2c.sp2 99.999763% (all bytes that differ do so by only bits 0x20 or 0x02)
*/
ROM_START( samsho5a ) /* Encrypted Set, Alternate Set */ /* MVS VERSION */
ROM_START( samsho5a ) /* Encrypted Set, Alternate Set */ /* MVS VERSION, Build Date: Mon Oct 20 10:11:27 2003 */
ROM_REGION( 0x800000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT )
ROM_LOAD16_WORD_SWAP( "p1.bin", 0x000000, 0x400000, CRC(7795fffe) SHA1(2e74a4dbed553a01f1cb2f3db896375de5f1d212) ) /* EPROM */
ROM_LOAD16_WORD_SWAP( "p2.bin", 0x400000, 0x400000, CRC(2b844fe9) SHA1(899fe6457db4a724bdd9c7e4a912eab50a5221d3) ) /* EPROM */
@ -9103,7 +9103,7 @@ ROM_START( samsho5a ) /* Encrypted Set, Alternate Set */ /* MVS VERSION */
ROM_LOAD16_BYTE( "270-c8.c8", 0x3000001, 0x800000, CRC(02c530a6) SHA1(7a3fafa6075506c6ef78cc4ec2cb72118ec83cb9) ) /* Plane 2,3 */ /* mask rom TC5364205 */
ROM_END
ROM_START( samsho5h ) /* Encrypted Set, Alternate Set */ /* AES VERSION */
ROM_START( samsho5h ) /* Encrypted Set, Alternate Set */ /* AES VERSION, Build Date: Tue Oct 28 02:24:45 2003 */
ROM_REGION( 0x800000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT )
ROM_LOAD16_WORD_SWAP( "270-p1c.p1", 0x000000, 0x400000, CRC(bf956089) SHA1(c538289069bf338b9fa7ecc5c9143763dbb776a8) ) /* mask rom TC5332205 */
ROM_LOAD16_WORD_SWAP( "270-p2c.sp2", 0x400000, 0x400000, CRC(943a6b1d) SHA1(12bd02fc197456da6ee86f066086094cef0f4bf9) ) /* mask rom TC5332205 */

View File

@ -15,17 +15,11 @@
this is presumably for the bitmap layer on Qix
--
Known games on this hardare
Known games on this hardware
Tetris
Space Invaders
---
Other games that might be on this hardware
Skateboarding
+ some of the earlier PlayTV games (not Soccer, that's XaviX, see xavix.cpp)
---
The XaviX ones seem to have a XaviX logo on the external packaging while the
ones for this driver don't seem to have any specific marking.

View File

@ -58,7 +58,8 @@ public:
m_in0(*this, "IN0"),
m_in1(*this, "IN1"),
m_gfxdecode(*this, "gfxdecode"),
m_alt_addressing(0)
m_alt_addressing(0),
m_alt_addressing_base(0)
{ }
// devices
@ -150,6 +151,8 @@ public:
DECLARE_DRIVER_INIT(xavix);
DECLARE_DRIVER_INIT(taitons1);
DECLARE_DRIVER_INIT(rad_box);
DECLARE_DRIVER_INIT(rad_crdn);
void xavix_map(address_map &map);
protected:
@ -242,6 +245,7 @@ private:
int get_current_address_byte();
int m_alt_addressing;
int m_alt_addressing_base;
};
void xavix_state::set_data_address(int address, int bit)
@ -395,14 +399,19 @@ void xavix_state::draw_tilemap(screen_device &screen, bitmap_ind16 &bitmap, cons
// and expected a fixed layout, still need to handle that.
int count;
count = tileregs[0x0]<<8;
count = 0;// ;
for (int y = 0; y < ydimension; y++)
{
for (int x = 0; x < xdimension; x++)
{
int bpp, pal, scrolly, scrollx;
int tile = mainspace.read_byte(count);
tile |= mainspace.read_byte(count + (ydimension*xdimension)) << 8;
int tile = 0;
// 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;
count++;
bpp = (tileregs[0x3] & 0x0e) >> 1;
@ -568,24 +577,30 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
{
drawheight = 16;
drawwidth = 16;
if (m_alt_addressing)
if (m_alt_addressing == 1)
tile = tile * 128;
else if (m_alt_addressing == 2)
tile = tile * 8;
}
else if ((attr1 & 0x0c) == 0x08)
{
drawheight = 16;
drawwidth = 8;
xpos += 4;
if (m_alt_addressing)
if (m_alt_addressing == 1)
tile = tile * 64;
else if (m_alt_addressing == 2)
tile = tile * 8;
}
else if ((attr1 & 0x0c) == 0x04)
{
drawheight = 8;
drawwidth = 16;
ypos -= 4;
if (m_alt_addressing)
if (m_alt_addressing == 1)
tile = tile * 64;
else if (m_alt_addressing == 2)
tile = tile * 8;
}
else if ((attr1 & 0x0c) == 0x00)
{
@ -593,12 +608,14 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
drawwidth = 8;
xpos += 4;
ypos -= 4;
if (m_alt_addressing)
if (m_alt_addressing == 1)
tile = tile * 32;
else if (m_alt_addressing == 2)
tile = tile * 8;
}
if (m_alt_addressing)
tile += 0xd8000;
tile += m_alt_addressing_base;
ypos = 0xff - ypos;
@ -608,7 +625,7 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
xpos &= 0xff;
ypos &= 0xff;
if (ypos >=192)
if (ypos >= 192)
ypos -= 256;
int bpp = 1;
@ -617,9 +634,9 @@ void xavix_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, cons
bpp += 1;
draw_tile(screen, bitmap, cliprect, tile, bpp, xpos, ypos, drawheight, drawwidth, flipx, 0, pal, 0);
draw_tile(screen, bitmap, cliprect, tile, bpp, xpos-256, ypos, drawheight, drawwidth, flipx, 0, pal, 0); // wrap-x
draw_tile(screen, bitmap, cliprect, tile, bpp, xpos, ypos-256, drawheight, drawwidth, flipx, 0, pal, 0); // wrap-y
draw_tile(screen, bitmap, cliprect, tile, bpp, xpos-256, ypos-256, drawheight, drawwidth, flipx, 0, pal, 0); // wrap-x,y
draw_tile(screen, bitmap, cliprect, tile, bpp, xpos - 256, ypos, drawheight, drawwidth, flipx, 0, pal, 0); // wrap-x
draw_tile(screen, bitmap, cliprect, tile, bpp, xpos, ypos - 256, drawheight, drawwidth, flipx, 0, pal, 0); // wrap-y
draw_tile(screen, bitmap, cliprect, tile, bpp, xpos - 256, ypos - 256, drawheight, drawwidth, flipx, 0, pal, 0); // wrap-x,y
/*
if ((m_spr_ypos[i] != 0x81) && (m_spr_ypos[i] != 0x80) && (m_spr_ypos[i] != 0x00))
@ -834,9 +851,12 @@ INTERRUPT_GEN_MEMBER(xavix_state::interrupt)
// if (m_irq_enable_data != 0)
// m_maincpu->set_input_line(INPUT_LINE_IRQ0,HOLD_LINE);
// this logic is clearly VERY wrong
if (m_irq_enable_data != 0)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
if (m_6ff8)
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
}
@ -1164,13 +1184,13 @@ WRITE8_MEMBER(xavix_state::xavix_6fc0_w) // also related to tilemap 1?
WRITE8_MEMBER(xavix_state::tmap1_regs_w)
{
/*
0x0 seems to be where the tilemap is in ram (02 in monster truck, 0f in ekara)
0x0 pointer to address where tile data is
it gets set to 0x40 in monster truck test mode, which is outside of ram but test mode requires a fixed 'column scan' layout
so that might be special
0x1 unknown (gets set to 0x03 on the course select, uninitialzied before that)
0x1 pointer to middle tile bits (if needed, depends on mode) (usually straight after the ram needed for above)
0x2 unused?
0x2 pointer to tile highest tile bits (if needed, depends on mode) (usually straight after the ram needed for above)
0x3 ---- bbb- - = ? b = bpp (0x36 xavix logo, 0x3c title screen, 0x36 course select)
@ -1294,7 +1314,7 @@ ADDRESS_MAP_START(xavix_state::xavix_map)
AM_RANGE(0x006100, 0x0061ff) AM_RAM AM_SHARE("spr_attr1")
AM_RANGE(0x006200, 0x0062ff) AM_RAM AM_SHARE("spr_ypos") // cleared to 0x80 by both games, maybe enable registers?
AM_RANGE(0x006300, 0x0063ff) AM_RAM AM_SHARE("spr_xpos")
AM_RANGE(0x006400, 0x0064ff) AM_RAM // 6400 range unused by code, does it exist?
AM_RANGE(0x006400, 0x0064ff) AM_RAM // 6400 range gets populated in some cases, but it seems to be more like work ram, data doesn't matter and must be ignored?
AM_RANGE(0x006500, 0x0065ff) AM_RAM AM_SHARE("spr_addr_lo")
AM_RANGE(0x006600, 0x0066ff) AM_RAM AM_SHARE("spr_addr_md")
AM_RANGE(0x006700, 0x0067ff) AM_RAM AM_SHARE("spr_addr_hi")
@ -1482,6 +1502,36 @@ 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_crdn )
PORT_INCLUDE(xavix)
PORT_MODIFY("IN0")
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_box )
PORT_INCLUDE(xavix)
PORT_MODIFY("IN0")
// 6 types of punch and some navigation controls?
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Left Jan")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Left Hook")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Left Uppercut")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Left Jab")
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Left Hook")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Left Uppercut")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
PORT_MODIFY("IN1")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Block")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) // needs to be high to pass warning screen?
INPUT_PORTS_END
/* correct, 4bpp gfxs */
static const gfx_layout charlayout =
{
@ -1656,8 +1706,22 @@ DRIVER_INIT_MEMBER(xavix_state, taitons1)
{
DRIVER_INIT_CALL(xavix);
m_alt_addressing = 1;
m_alt_addressing_base = 0xd8000;
}
DRIVER_INIT_MEMBER(xavix_state, rad_box)
{
DRIVER_INIT_CALL(xavix);
m_alt_addressing = 2;
m_alt_addressing_base = 0x20000;
}
DRIVER_INIT_MEMBER(xavix_state, rad_crdn)
{
DRIVER_INIT_CALL(xavix);
m_alt_addressing = 2;
m_alt_addressing_base = 0x00000;
}
/***************************************************************************
@ -1704,11 +1768,11 @@ ROM_END
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, xavix, xavix_state, xavix, "Radica / SSD Company LTD", "Play TV Boxing", MACHINE_IS_SKELETON)
CONS( 200?, rad_crdn, 0, 0, xavix, xavix, xavix_state, xavix, "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( 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 (200?, eka_strt, 0, 0, xavix, xavix, xavix_state, xavix, "Takara / SSD Company LTD", "e-kara Starter", MACHINE_IS_SKELETON)