summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2021-06-26 00:48:16 +1000
committer Vas Crabb <vas@vastheman.com>2021-06-26 00:48:16 +1000
commit9cb80f73ab6f9acf9cd3828092f768de17710e06 (patch)
tree6d7d16c17d51d6e65ef82b2eaed8e925f12012a0
parent0e5ec10b7879f26caff70e5e23bb67fec9e7eeb2 (diff)
vsmjtria.cpp: Get comms minimally working - managed to deal and start playing a VS game.
-rw-r--r--src/mame/drivers/vsmjtria.cpp54
1 files changed, 32 insertions, 22 deletions
diff --git a/src/mame/drivers/vsmjtria.cpp b/src/mame/drivers/vsmjtria.cpp
index 6835680731b..c75a784f287 100644
--- a/src/mame/drivers/vsmjtria.cpp
+++ b/src/mame/drivers/vsmjtria.cpp
@@ -30,8 +30,6 @@ TODO:
#include "speaker.h"
#include "tilemap.h"
-#include "layout/generic.h"
-
namespace {
@@ -40,7 +38,7 @@ class vsmjtria_state : public driver_device
public:
vsmjtria_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
+ m_cpu(*this, "cpu%u", 0U),
m_gfxdecode(*this, "gfxdecode%u", 0U),
m_colorram(*this, "colorram%u", 0U),
m_videoram(*this, "videoram%u", 0U),
@@ -57,7 +55,7 @@ protected:
virtual void video_start() override;
private:
- required_device<cpu_device> m_maincpu;
+ required_device_array<cpu_device, 2> m_cpu;
required_device_array<gfxdecode_device, 2> m_gfxdecode;
required_shared_ptr_array<uint8_t, 2> m_colorram;
required_shared_ptr_array<uint8_t, 2> m_videoram;
@@ -67,6 +65,7 @@ private:
tilemap_t *m_bg_tilemap[2];
uint8_t m_keyboard_cmd[2];
+ template <uint8_t Which> void nmi_w(uint8_t data);
template <uint8_t Which> void ctrl_w(uint8_t data);
uint8_t p1_keyboard_r();
uint8_t p2_keyboard_r();
@@ -92,6 +91,12 @@ void vsmjtria_state::machine_start()
}
template <uint8_t Which>
+void vsmjtria_state::nmi_w(uint8_t data)
+{
+ m_cpu[Which]->pulse_input_line(INPUT_LINE_NMI, m_cpu[Which]->minimum_quantum_time());
+}
+
+template <uint8_t Which>
void vsmjtria_state::ctrl_w(uint8_t data)
{
flip_screen_set(data & 0x01);
@@ -189,7 +194,8 @@ void vsmjtria_state::main_io_map(address_map &map)
map(0x8020, 0x8020).r("ay0", FUNC(ay8910_device::data_r));
map(0x8020, 0x8021).w("ay0", FUNC(ay8910_device::address_data_w));
map(0x8060, 0x8060).w(FUNC(vsmjtria_state::ctrl_w<0>));
- // 0x80e0 latch to and from subcpu?
+ map(0x80c0, 0x80c0).w(FUNC(vsmjtria_state::nmi_w<1>));
+ map(0x80e0, 0x80e0).r("latch1", FUNC(generic_latch_8_device::read)).w("latch0", FUNC(generic_latch_8_device::write));
}
void vsmjtria_state::sub_prg_map(address_map &map)
@@ -208,7 +214,8 @@ void vsmjtria_state::sub_io_map(address_map &map)
map(0x8020, 0x8020).r("ay1", FUNC(ay8910_device::data_r));
map(0x8020, 0x8021).w("ay1", FUNC(ay8910_device::address_data_w));
map(0x8060, 0x8060).w(FUNC(vsmjtria_state::ctrl_w<1>));
- // 0x80e0 latch to and from maincpu?
+ map(0x80c0, 0x80c0).w(FUNC(vsmjtria_state::nmi_w<0>));
+ map(0x80e0, 0x80e0).r("latch0", FUNC(generic_latch_8_device::read)).w("latch1", FUNC(generic_latch_8_device::write));
}
@@ -216,7 +223,7 @@ static INPUT_PORTS_START( vsmjtria )
// TODO: coins?
PORT_START("P1_KEY0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) // for single player mode
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) PORT_NAME("P1 Single Start")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_M )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_I )
@@ -258,7 +265,7 @@ static INPUT_PORTS_START( vsmjtria )
PORT_START("P1_KEY4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) // selects VS mode for player 1
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(1) PORT_NAME("P1 VS Start")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
@@ -266,7 +273,7 @@ static INPUT_PORTS_START( vsmjtria )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("P2_KEY0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 )
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START2 ) PORT_NAME("P2 Single Start")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_M ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_I ) PORT_PLAYER(2)
@@ -308,7 +315,7 @@ static INPUT_PORTS_START( vsmjtria )
PORT_START("P2_KEY4")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) // selects VS mode for player 2
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_FLIP_FLOP ) PORT_PLAYER(2) PORT_NAME("P2 VS Start")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
@@ -440,19 +447,24 @@ GFXDECODE_END
void vsmjtria_state::vsmjtria(machine_config &config)
{
- Z80(config, m_maincpu, 20_MHz_XTAL / 5); // divider guessed
- m_maincpu->set_addrmap(AS_PROGRAM, &vsmjtria_state::main_prg_map);
- m_maincpu->set_addrmap(AS_IO, &vsmjtria_state::main_io_map);
- m_maincpu->set_vblank_int("lscreen", FUNC(vsmjtria_state::irq0_line_hold));
+ config.set_perfect_quantum("cpu0"); // crude way to make comms work - does it have FIFOs rather than latches?
+
+ Z80(config, m_cpu[0], 20_MHz_XTAL / 5); // divider guessed
+ m_cpu[0]->set_addrmap(AS_PROGRAM, &vsmjtria_state::main_prg_map);
+ m_cpu[0]->set_addrmap(AS_IO, &vsmjtria_state::main_io_map);
+ m_cpu[0]->set_vblank_int("lscreen", FUNC(vsmjtria_state::irq0_line_hold));
- z80_device &sub(Z80(config, "subcpu", 20_MHz_XTAL / 5)); // divider guessed
- sub.set_addrmap(AS_PROGRAM, &vsmjtria_state::sub_prg_map);
- sub.set_addrmap(AS_IO, &vsmjtria_state::sub_io_map);
- sub.set_vblank_int("rscreen", FUNC(vsmjtria_state::irq0_line_hold));
+ Z80(config, m_cpu[1], 20_MHz_XTAL / 5); // divider guessed
+ m_cpu[1]->set_addrmap(AS_PROGRAM, &vsmjtria_state::sub_prg_map);
+ m_cpu[1]->set_addrmap(AS_IO, &vsmjtria_state::sub_io_map);
+ m_cpu[1]->set_vblank_int("rscreen", FUNC(vsmjtria_state::irq0_line_hold));
NVRAM(config, "nvram0", nvram_device::DEFAULT_ALL_0);
NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0);
+ GENERIC_LATCH_8(config, "latch0");
+ GENERIC_LATCH_8(config, "latch1");
+
i8255_device &ppi0(I8255(config, "ppi0"));
ppi0.in_pa_callback().set_log("ppi0 pa read");
ppi0.in_pb_callback().set(FUNC(vsmjtria_state::p1_keyboard_r));
@@ -475,8 +487,6 @@ void vsmjtria_state::vsmjtria(machine_config &config)
GFXDECODE(config, m_gfxdecode[0], "palette0", gfx_vsmjtria_main);
GFXDECODE(config, m_gfxdecode[1], "palette1", gfx_vsmjtria_sub);
- config.set_default_layout(layout_dualhsxs);
-
screen_device &lscreen(SCREEN(config, "lscreen", SCREEN_TYPE_RASTER));
lscreen.set_refresh_hz(60);
lscreen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
@@ -507,11 +517,11 @@ void vsmjtria_state::vsmjtria(machine_config &config)
}
ROM_START( vsmjtria )
- ROM_REGION( 0x10000, "maincpu", 0 ) // only 5.n8 and 6.n12 differ, and only for 2 bytes
+ ROM_REGION( 0x10000, "cpu0", 0 ) // only 5.n8 and 6.n12 differ, and only for 2 bytes
ROM_LOAD( "dyna 5.n8", 0x0000, 0x8000, CRC(526e3e6e) SHA1(db7b116f285761b040bb3b5cb3e00f5bf78606a9) )
ROM_LOAD( "dyna 41.n7", 0x8000, 0x8000, CRC(0c150add) SHA1(856de25fe43b656ea7c3066f838de6581df896c9) )
- ROM_REGION( 0x10000, "subcpu", 0 )
+ ROM_REGION( 0x10000, "cpu1", 0 )
ROM_LOAD( "dyna 6.n12", 0x0000, 0x8000, CRC(f1b09d7a) SHA1(89b653ce332f3b1c1c9f7b82e3636dfb329ebd93) )
ROM_LOAD( "dyna 41.n13", 0x8000, 0x8000, CRC(0c150add) SHA1(856de25fe43b656ea7c3066f838de6581df896c9) )