Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

new XaviX additions - 3 working games, 3 not working #12812

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
6 changes: 6 additions & 0 deletions src/mame/mame.lst
Original file line number Diff line number Diff line change
Expand Up @@ -45702,6 +45702,7 @@ trkfldch // (c) 2007 Konami
tvgame // 2011

@source:tvgames/xavix.cpp
bistro //
ddrfammt //
ekara //
ekaraa //
Expand All @@ -45719,7 +45720,10 @@ epo_epp2
epo_epp3 //
epo_eppk //
epo_esdx //
epo_esht //
epo_guru //
epo_mms //
epo_quiz //
epo_tenn //
epo_tfp2 //
evio //
Expand Down Expand Up @@ -45765,6 +45769,7 @@ taikodp //
taitons1 //
taitons2 //
tak_daig
tak_gin //
tak_geig //
tcarnavi //
tomcpin //
Expand All @@ -45783,6 +45788,7 @@ duelmast //
epo_ebox //
epo_bowl //
epo_sdb //
tom_dpgm //
ttv_sw //
ttv_lotr //
ttv_mx //
Expand Down
115 changes: 113 additions & 2 deletions src/mame/tvgames/xavix.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ void xavix_state::xavix_lowbus_map(address_map &map)
map(0x6ffb, 0x6ffb).ram().w(FUNC(xavix_state::dispctrl_posirq_y_w)).share("posirq_y"); // increases / decreases when you jump in snowboard (snowboard, used to blank ground)

// Lightgun / pen 1 control
// map(0x6ffc, 0x6fff)
map(0x6ffc, 0x6fff).r(FUNC(xavix_state::lightgun_r));

// Sound RAM (tested by Gun Gun Revolution, games don't write here, so it's probably just RAM the sound hardware makes use of directly when mixing)
map(0x7400, 0x757f).ram();
Expand Down Expand Up @@ -543,6 +543,32 @@ static INPUT_PORTS_START( xavix_i2c )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("i2cmem", i2cmem_device, read_sda)
INPUT_PORTS_END

static INPUT_PORTS_START( epo_mms )
PORT_INCLUDE(xavix_i2c)

PORT_MODIFY("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Pad 1 - Pink")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Pad 2 - Orange")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Pad 3 - Purple")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Pad 4 - Green")

INPUT_PORTS_END

static INPUT_PORTS_START( tomshoot )
PORT_INCLUDE(xavix_i2c)

PORT_MODIFY("IN0")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)

PORT_START("GUN1_0")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(1)

PORT_START("GUN1_1")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(1)

INPUT_PORTS_END

static INPUT_PORTS_START( gungunrv )
PORT_INCLUDE(xavix_i2c)

Expand Down Expand Up @@ -1050,6 +1076,15 @@ static INPUT_PORTS_START( tak_geig )

INPUT_PORTS_END

static INPUT_PORTS_START( tak_gin )
PORT_INCLUDE(xavix)

PORT_MODIFY("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 )
INPUT_PORTS_END

static INPUT_PORTS_START( rad_bb )
PORT_INCLUDE(xavix)
Expand Down Expand Up @@ -1369,6 +1404,40 @@ static INPUT_PORTS_START( tcarnavi )
INPUT_PORTS_END


static INPUT_PORTS_START( epo_quiz )
PORT_INCLUDE(xavix)

PORT_MODIFY("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 A / 1 / Red / Down")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 B / 2 / Blue / Select")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 C / 3 / Yellow / Left")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("P1 D / 4 / Green / Right")

PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 A / 1 / Red / Down")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 B / 2 / Blue / Select")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 C / 3 / Yellow / Left")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2) PORT_NAME("P2 D / 4 / Green / Right")

PORT_MODIFY("IN1")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) PORT_NAME("P3 A / 1 / Red / Down")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) PORT_NAME("P3 B / 2 / Blue / Select")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_NAME("P3 C / 3 / Yellow / Left")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(3) PORT_NAME("P3 D / 4 / Green / Right")

PORT_MODIFY("AN0")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4) PORT_NAME("P4 A / 1 / Red / Down")
PORT_MODIFY("AN6")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4) PORT_NAME("P4 B / 2 / Blue / Select")
PORT_MODIFY("AN1")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_NAME("P4 C / 3 / Yellow / Left")
PORT_MODIFY("AN4")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(4) PORT_NAME("P4 D / 4 / Green / Right")

//PORT_MODIFY("AN7")
//PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_BUTTON8 ) // battery status

INPUT_PORTS_END

/* correct, 4bpp gfxs */
static const gfx_layout char16layout =
{
Expand Down Expand Up @@ -1910,6 +1979,11 @@ ROM_START( epo_esdx )
ROM_LOAD("baseballdx.bin", 0x000000, 0x400000, CRC(fe2e832e) SHA1(e6343f5e5f52316538d918d0d67c15764aa40f65) )
ROM_END

ROM_START( epo_esht ) // ESTJ-MAIN REV:0 PCB
ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("tigers.u3", 0x000000, 0x400000, CRC(51a17ef3) SHA1(864190e91775716218be3ac0699570844d67d3e7) )
ROM_END

ROM_START( epo_epp )
ROM_REGION(0x100000, "bios", ROMREGION_ERASE00)
ROM_LOAD("excitepingpong.bin", 0x000000, 0x100000, CRC(1fdb9cbd) SHA1(8ed0c1f6d2708ab6e79f0b9553e587c6446e8338) )
Expand Down Expand Up @@ -1973,6 +2047,11 @@ ROM_START( epo_crok )
ROM_LOAD("sgm3244.u2", 0x000000, 0x400000, CRC(a801779b) SHA1(e6e4235dc7c7db3073737b10ba4bc5b00deca2c3) )
ROM_END

ROM_START( epo_mms )
ROM_REGION( 0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("mmnj-main-4.u4", 0x000000, 0x400000, CRC(22f14ca2) SHA1(122e735eb7c54a22de16f65cd43d2cae788e0102) )
ROM_END

ROM_START( tak_geig )
ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
ROM_LOAD("geigeki.bin", 0x000000, 0x400000, CRC(bd0c3576) SHA1(06f614dbec0225ce4ed866b98450912986d72faf) )
Expand Down Expand Up @@ -2023,6 +2102,10 @@ ROM_START( gungunrv )
ROM_LOAD("gungunrevolution.u1", 0x000000, 0x400000, CRC(4e34f624) SHA1(7acdd0991df78ecffd156381817ed4f85f6aef09) )
ROM_END

ROM_START( bistro )
ROM_REGION(0x200000, "bios", ROMREGION_ERASE00)
ROM_LOAD("bistro.u2", 0x000000, 0x200000, CRC(40865e05) SHA1(597a615c61f29c6f6e7ce997a229175cb151242f) )
ROM_END

/*
The e-kara cartridges require the BIOS rom to map into 2nd external bus space as they fetch palette data from
Expand Down Expand Up @@ -2133,6 +2216,12 @@ ROM_START( tak_daig )
ROM_RELOAD(0x000000, 0x200000)
ROM_END

// ASKJ MAIN-09 PCB
ROM_START( epo_quiz )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "quizmaster.u1", 0x000000, 0x400000, CRC(e91868b8) SHA1(0128603d755731dafe328b142292dc6e5fe00d78) )
ROM_END


// ガチンコ勝負! パチスロTV
ROM_START( gcslottv )
Expand Down Expand Up @@ -2161,6 +2250,13 @@ ROM_START( tvpc_dor )
ROM_LOAD( "tvpc_doreamon.u3", 0x000000, 0x400000, CRC(6f2edbb2) SHA1(98fa86f85e00aa40e7a585ff0bc930cb5ca88362) )
ROM_END

ROM_START( tak_gin ) // dumped from a PCB with 1x ROM Glob with TSOP pads, 1x unknown glob, 1x CPU glob. It also exists in a configuration with just 1x ROM glob (no pads) and 1x CPU glob - unknown if code is the same
ROM_REGION(0x200000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "snowboard.bin", 0x000000, 0x200000, CRC(79fdeae3) SHA1(ab08790e95cdccf3541ecbddb87ebf0dedb3718b) )
ROM_END



/* XaviX hardware titles (1st Generation)

These use
Expand Down Expand Up @@ -2232,6 +2328,8 @@ CONS( 2002, rad_jcon, 0, 0, xavix, rad_jcon, xavix_state,

CONS( 2002, epo_esdx, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Stadium DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

CONS( 2003, epo_esht, 0, 0, xavix_nv, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Stadium DX - Hanshin Tigers (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

// interrupt issues after the title screen cause it to hang
CONS( 2002, epo_tenn, 0, 0, xavix, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Tennis (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

Expand All @@ -2250,14 +2348,23 @@ CONS( 2002, epo_dmon, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_sta

CONS( 2003, epo_crok, 0, 0, xavix_i2c_24lc04, xavix_i2c,xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Croket! Itada Kinka! Banker Battle!! (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

// ミニモニ。ステージ!ダンスだぴょん!
CONS( 2002, epo_mms, 0, 0, xavix_i2c_24c02, epo_mms, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Mini-Moni Stage! Dance Dapyon! (Japan)", MACHINE_IMPERFECT_SOUND )

// オールスター感謝祭 超豪華!クイズ決定版~赤坂5丁目体感スタジオ~
CONS( 2004, epo_quiz, 0, 0, xavix, epo_quiz, xavix_state, init_xavix, "Takara / SSD Company LTD", "All-Star Thanksgiving Super Luxurious! Definitive Quiz Edition ~ Akasaka 5-Chome Experience Studio", MACHINE_IMPERFECT_SOUND )

CONS( 2005, has_wamg, 0, 0, xavix, has_wamg, xavix_state, init_xavix, "Hasbro / Milton Bradley / SSD Company LTD", "TV Wild Adventure Mini Golf (NTSC)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

CONS( 2002, tak_geig, 0, 0, xavix_nv, tak_geig, xavix_state, init_xavix, "Takara / SSD Company LTD", "Geigeki Go Go Shooting (Japan)", MACHINE_IMPERFECT_SOUND )

// 爆進スノボ ギンギンボーダーズ
CONS( 2001, tak_gin, 0, 0, xavix, tak_gin, xavix_state, init_xavix, "Takara / SSD Company LTD", "Gin-gin Boarders (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS )

// was also distributed by Atlus as an arcade cabinet in 2005, ROM almost certainly different (this one will auto-power off after inactivity, an arcade wouldn't do that)
CONS( 2003, jarajal, 0, 0, xavix_nv, jarajal, xavix_state, init_xavix, "Takara / SSD Company LTD", "Jara-Ja Land (Japan, home version)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

CONS( 2002, tomshoot, 0, 0, xavix_i2c_24c02, xavix_i2c,xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Shooting King (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
CONS( 2002, tomshoot, 0, 0, xavix_i2c_24c02, tomshoot,xavix_i2c_tomshoot_state, init_xavix, "Tomy / SSD Company LTD", "Shooting King (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

CONS( 2003, tcarnavi, 0, 0, xavix_nv, tcarnavi, xavix_state, init_xavix, "Tomy / SSD Company LTD", "Tomica Carnavi Drive (Japan)", MACHINE_IMPERFECT_SOUND )

Expand All @@ -2269,6 +2376,9 @@ CONS( 2001, gungunad, 0, 0, xavix_nv, xavix, xavix_state,

CONS( 2004, gungunrv, 0, 0, xavix_i2c_24lc04, gungunrv, xavix_i2c_state, init_xavix, "Takara / SSD Company LTD", "Gun Gun Revolution (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )

CONS( 2001, bistro, 0, 0, xavix, xavix, xavix_state, init_xavix, "Sega Toys / SSD Company LTD", "Bistro Kids (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )


/* Music titles: Emulation note:
Timers might not be 100%, PAL stuff uses different ways to do timing.
*/
Expand Down Expand Up @@ -2298,6 +2408,7 @@ CONS( 2004, jpopira, 0, 0, xavix_i2c_jpopira,jpopira, xavix_i2c_car

CONS( 2003, evio, 0, 0, xavix_cart_evio, evio, xavix_evio_cart_state,init_xavix, "Tomy / SSD Company LTD", "Evio (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? it's a violin controller


// 2 ROM expansion cartridges were available for this, in the form of other robots (the heads acts as cartridges) see takara_daigunder_dx_cart.xml
// a number of other robots were also available, but those act as controllers and don't plug into the ROM slot (presumably the signal sent is used to determine the character)
CONS( 2002, tak_daig, 0, 0, xavix_cart_daig, daig, xavix_daig_cart_state,init_xavix, "Takara / SSD Company LTD", "Bakutou Sengen Daigunder DX (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND /*|MACHINE_IS_BIOS_ROOT*/ ) // inputs? maybe IO interrupt?
Expand Down
67 changes: 38 additions & 29 deletions src/mame/tvgames/xavix.h
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ class xavix_state : public driver_device
m_mouse0y(*this, "MOUSE0Y"),
m_mouse1x(*this, "MOUSE1X"),
m_mouse1y(*this, "MOUSE1Y"),
m_lightgun(*this, "GUN1_%u", 0U),
m_maincpu(*this, "maincpu"),
m_nvram(*this, "nvram"),
m_screen(*this, "screen"),
Expand Down Expand Up @@ -134,6 +135,8 @@ class xavix_state : public driver_device
void ioevent_trg04(int state);
void ioevent_trg08(int state);

virtual void xavix_interrupt_extra() { }

int m_rgnlen = 0;
uint8_t* m_rgn = nullptr;

Expand Down Expand Up @@ -202,6 +205,7 @@ class xavix_state : public driver_device
optional_ioport m_mouse0y;
optional_ioport m_mouse1x;
optional_ioport m_mouse1y;
optional_ioport_array<2> m_lightgun;
required_device<xavix_device> m_maincpu;
optional_device<nvram_device> m_nvram;
required_device<screen_device> m_screen;
Expand Down Expand Up @@ -419,6 +423,8 @@ class xavix_state : public driver_device

uint8_t pal_ntsc_r();

virtual uint8_t lightgun_r(offs_t offset) { logerror("%s: unhandled lightgun_r %d\n", machine().describe_context(), offset); return 0xff; }

uint8_t xavix_memoryemu_txarray_r(offs_t offset);
void xavix_memoryemu_txarray_w(offs_t offset, uint8_t data);
uint8_t m_txarray[3]{};
Expand Down Expand Up @@ -633,42 +639,56 @@ class xavix_i2c_state : public xavix_state
required_device<i2cmem_device> m_i2cmem;
};

class xavix_i2c_ltv_tam_state : public xavix_i2c_state
class xavix_i2c_tomshoot_state : public xavix_i2c_state
{
public:
xavix_i2c_ltv_tam_state(const machine_config &mconfig, device_type type, const char *tag)
xavix_i2c_tomshoot_state(const machine_config& mconfig, device_type type, const char* tag)
: xavix_i2c_state(mconfig, type, tag)
{ }

void xavix_i2c_24lc04_tam(machine_config &config);
void xavix_interrupt_extra() override
{
ioevent_trg01(1); // causes reads from the lightgun 1 port
//ioevent_trg02(1); // causes reads from the lightgun 2 port
}

private:
virtual void write_io1(uint8_t data, uint8_t direction) override;

private:
uint8_t tam_anport0_r() { return m_mouse0x->read()^0x7f; }
uint8_t tam_anport1_r() { return m_mouse0y->read()^0x7f; }
uint8_t tam_anport2_r() { return m_mouse1x->read()^0x7f; }
uint8_t tam_anport3_r() { return m_mouse1y->read()^0x7f; }
};
virtual uint8_t lightgun_r(offs_t offset) override
{
uint16_t ret = m_lightgun[offset>>1]->read();

if (offset & 1)
ret >>= 8;
else
ret &= 0xff;

if (offset == 0)
ret += 0x20;

class xavix_i2c_lotr_state : public xavix_i2c_state
return ret;
}

};

class xavix_i2c_ltv_tam_state : public xavix_i2c_state
{
public:
xavix_i2c_lotr_state(const machine_config &mconfig, device_type type, const char *tag)
xavix_i2c_ltv_tam_state(const machine_config &mconfig, device_type type, const char *tag)
: xavix_i2c_state(mconfig, type, tag)
{ }

int camera_r();

protected:
//virtual void write_io1(uint8_t data, uint8_t direction) override;
};

void xavix_i2c_24lc04_tam(machine_config &config);

private:
virtual void write_io1(uint8_t data, uint8_t direction) override;

private:
uint8_t tam_anport0_r() { return m_mouse0x->read()^0x7f; }
uint8_t tam_anport1_r() { return m_mouse0y->read()^0x7f; }
uint8_t tam_anport2_r() { return m_mouse1x->read()^0x7f; }
uint8_t tam_anport3_r() { return m_mouse1y->read()^0x7f; }
};

class xavix_mtrk_state : public xavix_state
{
Expand Down Expand Up @@ -1011,16 +1031,5 @@ class xavix_hikara_state : public xavix_ekara_state

};

class xavix_duelmast_state : public xavix_i2c_state
{
public:
xavix_duelmast_state(const machine_config &mconfig, device_type type, const char *tag)
: xavix_i2c_state(mconfig, type, tag)
{ }

protected:
virtual uint8_t read_io1(uint8_t direction) override;
};


#endif // MAME_TVGAMES_XAVIX_H
Loading
Loading