mirror of
https://github.com/holub/mame
synced 2025-04-25 17:56:43 +03:00
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:
parent
18f8fd523c
commit
ebbb4d5fc8
@ -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 */
|
||||
|
@ -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.
|
||||
|
@ -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)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user