summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2018-03-02 21:45:23 +1100
committer Vas Crabb <vas@vastheman.com>2018-03-02 21:45:23 +1100
commit54701050f73e4c0f3589e83472e8ad63ca1b36c8 (patch)
tree3210cfbb3c1517e34392bcbf01ba5816cd823746
parent9663775fbaba5069857c1f38ce42cb796492b71a (diff)
just a little more cleanup (nw)
-rw-r--r--src/mame/drivers/acefruit.cpp104
-rw-r--r--src/mame/drivers/glasgow.cpp25
-rw-r--r--src/mame/drivers/gts1.cpp77
-rw-r--r--src/mame/drivers/jpmsys5.cpp250
-rw-r--r--src/mame/includes/jpmsys5.h132
5 files changed, 312 insertions, 276 deletions
diff --git a/src/mame/drivers/acefruit.cpp b/src/mame/drivers/acefruit.cpp
index fb5d893f686..b9b23cff8c0 100644
--- a/src/mame/drivers/acefruit.cpp
+++ b/src/mame/drivers/acefruit.cpp
@@ -22,49 +22,67 @@ Inputs and Dip Switches by Stephh
class acefruit_state : public driver_device
{
public:
- acefruit_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
+ enum
+ {
+ TIMER_ACEFRUIT_REFRESH
+ };
+
+ acefruit_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_videoram(*this, "videoram"),
m_colorram(*this, "colorram"),
m_spriteram(*this, "spriteram"),
m_gfxdecode(*this, "gfxdecode"),
m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_port_payout(*this, "PAYOUT"),
+ m_port_coinage(*this, "COINAGE"),
+ m_lamps(*this, "lamp%u", 0U),
+ m_solenoids(*this, "solenoid%u", 0U),
+ m_refresh_timer(nullptr)
+ { }
- required_device<cpu_device> m_maincpu;
- required_shared_ptr<uint8_t> m_videoram;
- required_shared_ptr<uint8_t> m_colorram;
- required_shared_ptr<uint8_t> m_spriteram;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
- emu_timer *m_refresh_timer;
+ DECLARE_DRIVER_INIT(sidewndr);
+
+ DECLARE_CUSTOM_INPUT_MEMBER(sidewndr_payout_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(starspnr_coinage_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(starspnr_payout_r);
+
+ void acefruit(machine_config &config);
+
+protected:
DECLARE_WRITE8_MEMBER(acefruit_colorram_w);
DECLARE_WRITE8_MEMBER(acefruit_coin_w);
DECLARE_WRITE8_MEMBER(acefruit_sound_w);
DECLARE_WRITE8_MEMBER(acefruit_lamp_w);
DECLARE_WRITE8_MEMBER(acefruit_solenoid_w);
- DECLARE_CUSTOM_INPUT_MEMBER(sidewndr_payout_r);
- DECLARE_CUSTOM_INPUT_MEMBER(starspnr_coinage_r);
- DECLARE_CUSTOM_INPUT_MEMBER(starspnr_payout_r);
- DECLARE_DRIVER_INIT(sidewndr);
+
+ virtual void machine_start() override;
virtual void video_start() override;
+ virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
DECLARE_PALETTE_INIT(acefruit);
uint32_t screen_update_acefruit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(acefruit_vblank);
void acefruit_update_irq(int vpos);
- enum
- {
- TIMER_ACEFRUIT_REFRESH
- };
-
- void acefruit(machine_config &config);
void acefruit_io(address_map &map);
void acefruit_map(address_map &map);
-protected:
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+
+private:
+ required_device<cpu_device> m_maincpu;
+ required_shared_ptr<uint8_t> m_videoram;
+ required_shared_ptr<uint8_t> m_colorram;
+ required_shared_ptr<uint8_t> m_spriteram;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
+ optional_ioport m_port_payout;
+ optional_ioport m_port_coinage;
+ output_finder<16> m_lamps;
+ output_finder<8> m_solenoids;
+ emu_timer *m_refresh_timer;
};
@@ -109,6 +127,12 @@ void acefruit_state::device_timer(emu_timer &timer, device_timer_id id, int para
}
}
+void acefruit_state::machine_start()
+{
+ m_lamps.resolve();
+ m_solenoids.resolve();
+}
+
void acefruit_state::video_start()
{
m_refresh_timer = timer_alloc(TIMER_ACEFRUIT_REFRESH);
@@ -211,9 +235,9 @@ CUSTOM_INPUT_MEMBER(acefruit_state::sidewndr_payout_r)
switch (bit_mask)
{
case 0x01:
- return ((ioport("PAYOUT")->read() & bit_mask) >> 0);
+ return ((m_port_payout->read() & bit_mask) >> 0);
case 0x02:
- return ((ioport("PAYOUT")->read() & bit_mask) >> 1);
+ return ((m_port_payout->read() & bit_mask) >> 1);
default:
logerror("sidewndr_payout_r : invalid %02X bit_mask\n",bit_mask);
return 0;
@@ -227,13 +251,13 @@ CUSTOM_INPUT_MEMBER(acefruit_state::starspnr_coinage_r)
switch (bit_mask)
{
case 0x01:
- return ((ioport("COINAGE")->read() & bit_mask) >> 0);
+ return ((m_port_coinage->read() & bit_mask) >> 0);
case 0x02:
- return ((ioport("COINAGE")->read() & bit_mask) >> 1);
+ return ((m_port_coinage->read() & bit_mask) >> 1);
case 0x04:
- return ((ioport("COINAGE")->read() & bit_mask) >> 2);
+ return ((m_port_coinage->read() & bit_mask) >> 2);
case 0x08:
- return ((ioport("COINAGE")->read() & bit_mask) >> 3);
+ return ((m_port_coinage->read() & bit_mask) >> 3);
default:
logerror("starspnr_coinage_r : invalid %02X bit_mask\n",bit_mask);
return 0;
@@ -247,11 +271,11 @@ CUSTOM_INPUT_MEMBER(acefruit_state::starspnr_payout_r)
switch (bit_mask)
{
case 0x01:
- return ((ioport("PAYOUT")->read() & bit_mask) >> 0);
+ return ((m_port_payout->read() & bit_mask) >> 0);
case 0x02:
- return ((ioport("PAYOUT")->read() & bit_mask) >> 1);
+ return ((m_port_payout->read() & bit_mask) >> 1);
case 0x04:
- return ((ioport("PAYOUT")->read() & bit_mask) >> 2);
+ return ((m_port_payout->read() & bit_mask) >> 2);
default:
logerror("starspnr_payout_r : invalid %02X bit_mask\n",bit_mask);
return 0;
@@ -275,22 +299,14 @@ WRITE8_MEMBER(acefruit_state::acefruit_sound_w)
WRITE8_MEMBER(acefruit_state::acefruit_lamp_w)
{
- int i;
-
- for( i = 0; i < 8; i++ )
- {
- output().set_lamp_value( ( offset * 8 ) + i, ( data >> i ) & 1 );
- }
+ for (int i = 0; i < 8; i++)
+ m_lamps[(offset << 3) | i] = BIT(data, i);
}
WRITE8_MEMBER(acefruit_state::acefruit_solenoid_w)
{
- int i;
-
- for( i = 0; i < 8; i++ )
- {
- output().set_indexed_value( "solenoid", i, ( data >> i ) & 1 );
- }
+ for (int i = 0; i < 8; i++)
+ m_solenoids[i] = BIT(data, i);
}
PALETTE_INIT_MEMBER(acefruit_state, acefruit)
diff --git a/src/mame/drivers/glasgow.cpp b/src/mame/drivers/glasgow.cpp
index aab161e606f..e786abada79 100644
--- a/src/mame/drivers/glasgow.cpp
+++ b/src/mame/drivers/glasgow.cpp
@@ -59,8 +59,13 @@ public:
, m_maincpu(*this, "maincpu")
, m_beep(*this, "beeper")
, m_keyboard(*this, "LINE.%u", 0)
- { }
+ { }
+ void glasgow(machine_config &config);
+ void amsterd(machine_config &config);
+ void dallas32(machine_config &config);
+
+protected:
DECLARE_WRITE16_MEMBER(glasgow_lcd_w);
DECLARE_WRITE16_MEMBER(glasgow_lcd_flag_w);
DECLARE_READ16_MEMBER(glasgow_keys_r);
@@ -88,12 +93,10 @@ public:
DECLARE_MACHINE_START(glasgow);
DECLARE_MACHINE_RESET(glasgow);
- void glasgow(machine_config &config);
- void dallas32(machine_config &config);
- void amsterd(machine_config &config);
void amsterd_mem(address_map &map);
void dallas32_mem(address_map &map);
void glasgow_mem(address_map &map);
+
private:
uint8_t m_lcd_shift_counter;
uint8_t m_led7;
@@ -117,15 +120,15 @@ private:
required_ioport_array<8> m_keyboard;
};
-typedef struct
- {
+struct BOARD_FIELD // FIXME: global structure
+{
uint8_t field;
uint8_t piece;
- } BOARD_FIELD;
+} BOARD_FIELD;
-BOARD_FIELD l_board[8][8];
+BOARD_FIELD l_board[8][8]; // FIXME: mutable global state
- /* starts at bottom left corner */
+/* starts at bottom left corner */
const BOARD_FIELD l_start_board[8][8] =
{
{ {7,10}, {6,8}, {5,9}, {4,11}, {3,12}, {2,9}, {1,8}, {0,10} },
@@ -730,6 +733,7 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(glasgow_state::amsterd)
glasgow(config);
+
/* basic machine hardware */
MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(amsterd_mem)
@@ -737,10 +741,11 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(glasgow_state::dallas32)
glasgow(config);
+
/* basic machine hardware */
MCFG_CPU_REPLACE("maincpu", M68020, 14000000)
MCFG_CPU_PROGRAM_MAP(dallas32_mem)
- MCFG_MACHINE_START_OVERRIDE(glasgow_state, dallas32 )
+ MCFG_MACHINE_START_OVERRIDE(glasgow_state, dallas32)
MCFG_DEVICE_REMOVE("nmi_timer")
MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", glasgow_state, update_nmi32, attotime::from_hz(50))
diff --git a/src/mame/drivers/gts1.cpp b/src/mame/drivers/gts1.cpp
index 93458345dbd..93b8d27499c 100644
--- a/src/mame/drivers/gts1.cpp
+++ b/src/mame/drivers/gts1.cpp
@@ -75,12 +75,8 @@ ToDo:
#include "gts1.lh"
#define VERBOSE 1
+#include "logmacro.h"
-#if VERBOSE
-#define LOG(x) logerror x
-#else
-#define LOG(x)
-#endif
class gts1_state : public genpin_class
{
@@ -88,11 +84,15 @@ public:
gts1_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_dips(*this, "DSW%u", 0)
, m_switches(*this, "X.%u", 0)
{ }
DECLARE_DRIVER_INIT(gts1);
+ void gts1(machine_config &config);
+
+protected:
DECLARE_READ8_MEMBER (gts1_solenoid_r);
DECLARE_WRITE8_MEMBER(gts1_solenoid_w);
DECLARE_READ8_MEMBER (gts1_switches_r);
@@ -106,13 +106,16 @@ public:
DECLARE_WRITE8_MEMBER(gts1_io_w);
DECLARE_READ8_MEMBER (gts1_pa_r);
DECLARE_WRITE8_MEMBER(gts1_do_w);
- void gts1(machine_config &config);
+
+ virtual void machine_reset() override;
+
+ void gts1_map(address_map &map);
void gts1_data(address_map &map);
void gts1_io(address_map &map);
- void gts1_map(address_map &map);
+
private:
- virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
+ required_ioport_array<3> m_dips;
required_ioport_array<5> m_switches;
uint8_t m_strobe; //!< switches strobe lines (5 lower bits used)
uint8_t m_nvram_addr; //!< NVRAM address
@@ -346,7 +349,7 @@ DRIVER_INIT_MEMBER(gts1_state,gts1)
READ8_MEMBER (gts1_state::gts1_solenoid_r)
{
uint8_t data = 0;
- LOG(("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data));
+ LOG("%s: solenoid[%02x] -> %x\n", __FUNCTION__, offset, data);
return data;
}
@@ -355,45 +358,45 @@ WRITE8_MEMBER(gts1_state::gts1_solenoid_w)
switch (offset)
{
case 0:
- LOG(("%s: outhole <- %x\n", __FUNCTION__, data));
+ LOG("%s: outhole <- %x\n", __FUNCTION__, data);
break;
case 1:
- LOG(("%s: knocker <- %x\n", __FUNCTION__, data));
+ LOG("%s: knocker <- %x\n", __FUNCTION__, data);
break;
case 2:
- LOG(("%s: tens chime <- %x\n", __FUNCTION__, data));
+ LOG("%s: tens chime <- %x\n", __FUNCTION__, data);
break;
case 3:
- LOG(("%s: hundreds chime <- %x\n", __FUNCTION__, data));
+ LOG("%s: hundreds chime <- %x\n", __FUNCTION__, data);
break;
case 4:
- LOG(("%s: thousands chime <- %x\n", __FUNCTION__, data));
+ LOG("%s: thousands chime <- %x\n", __FUNCTION__, data);
break;
case 5:
- LOG(("%s: no. 6 <- %x\n", __FUNCTION__, data));
+ LOG("%s: no. 6 <- %x\n", __FUNCTION__, data);
break;
case 6:
- LOG(("%s: no. 7 <- %x\n", __FUNCTION__, data));
+ LOG("%s: no. 7 <- %x\n", __FUNCTION__, data);
break;
case 7:
- LOG(("%s: no. 8 <- %x\n", __FUNCTION__, data));
+ LOG("%s: no. 8 <- %x\n", __FUNCTION__, data);
break;
case 8: case 9: case 10: case 11:
- LOG(("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data));
+ LOG("%s: not used [%x] <- %x\n", __FUNCTION__, offset, data);
break;
case 12: // spare
- LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data));
+ LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data);
break;
case 13: // RAM control E2
- LOG(("%s: RAM control E2 <- %x\n", __FUNCTION__, data));
+ LOG("%s: RAM control E2 <- %x\n", __FUNCTION__, data);
m_nvram_e2 = (data & 1) ? true : false;
break;
case 14: // RAM control W/R
- LOG(("%s: RAM control W/R <- %x\n", __FUNCTION__, data));
+ LOG("%s: RAM control W/R <- %x\n", __FUNCTION__, data);
m_nvram_wr = (data & 1) ? true : false;
break;
case 15: // spare
- LOG(("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data));
+ LOG("%s: spare [%x] <- %x\n", __FUNCTION__, offset, data);
break;
}
}
@@ -409,13 +412,13 @@ READ8_MEMBER (gts1_state::gts1_switches_r)
}
}
}
- LOG(("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data));
+ LOG("%s: switches[%x,%x] -> %x\n", __FUNCTION__, m_strobe, offset, data);
return data;
}
WRITE8_MEMBER(gts1_state::gts1_switches_w)
{
- LOG(("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data));
+ LOG("%s: switches[%x] <- %x\n", __FUNCTION__, offset, data);
if (offset < 5) {
// outputs O-0 to O-4 are the 5 strobe lines
m_strobe = (m_strobe & ~(1 << offset)) | ((data & 1) << offset);
@@ -462,7 +465,7 @@ WRITE8_MEMBER(gts1_state::gts1_display_w)
};
uint8_t a = ttl7448_mod[(data >> 0) & 15];
uint8_t b = ttl7448_mod[(data >> 4) & 15];
- // LOG(("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b));
+ // LOG("%s: offset:%d data:%02x a:%02x b:%02x\n", __FUNCTION__, offset, data, a, b);
if ((offset % 8) < 7) {
output().set_indexed_value("digit8_", offset, a);
output().set_indexed_value("digit8_", offset + 16, b);
@@ -505,7 +508,7 @@ READ8_MEMBER (gts1_state::gts1_nvram_r)
uint8_t* nvram = memregion("nvram")->base();
assert(nvram != nullptr);
data = nvram[m_nvram_addr];
- LOG(("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data));
+ LOG("%s: nvram[%02x] -> %x\n", __FUNCTION__, m_nvram_addr, data);
}
break;
case 1: // group B
@@ -533,7 +536,7 @@ WRITE8_MEMBER(gts1_state::gts1_nvram_w)
break;
case 2: // group C - data bits 3:0 of NVRAM
if (m_nvram_wr && m_nvram_e2) {
- LOG(("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15));
+ LOG("%s: nvram[%02x] <- %x\n", __FUNCTION__, m_nvram_addr, data & 15);
uint8_t* nvram = memregion("nvram")->base();
assert(nvram != nullptr);
nvram[m_nvram_addr] = data & 15;
@@ -553,7 +556,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
switch (offset) {
case 0: // group A switches S01-S04, S09-S12, S17-S20
if (m_z30_out & 1) {
- uint8_t dsw0 = ioport("DSW0")->read();
+ uint8_t dsw0 = m_dips[0]->read();
if (0 == BIT(dsw0,0)) // S01
data &= ~(1 << 3);
if (0 == BIT(dsw0,1)) // S02
@@ -564,7 +567,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
data &= ~(1 << 0);
}
if (m_z30_out & 2) {
- uint8_t dsw1 = ioport("DSW1")->read();
+ uint8_t dsw1 = m_dips[1]->read();
if (0 == BIT(dsw1,0)) // S09
data &= ~(1 << 0);
if (0 == BIT(dsw1,1)) // S10
@@ -575,7 +578,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
data &= ~(1 << 3);
}
if (m_z30_out & 4) {
- uint8_t dsw2 = ioport("DSW2")->read();
+ uint8_t dsw2 = m_dips[2]->read();
if (0 == BIT(dsw2,0)) // S17
data &= ~(1 << 0);
if (0 == BIT(dsw2,1)) // S18
@@ -588,7 +591,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
break;
case 1: // group B switches S05-S08, S09-S12, S17-S20
if (m_z30_out & 1) {
- uint8_t dsw0 = ioport("DSW0")->read();
+ uint8_t dsw0 = m_dips[0]->read();
if (0 == BIT(dsw0,4)) // S05
data &= ~(1 << 3);
if (0 == BIT(dsw0,5)) // S06
@@ -599,7 +602,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
data &= ~(1 << 0);
}
if (m_z30_out & 2) {
- uint8_t dsw1 = ioport("DSW1")->read();
+ uint8_t dsw1 = m_dips[1]->read();
if (0 == BIT(dsw1,4)) // S13
data &= ~(1 << 0);
if (0 == BIT(dsw1,5)) // S14
@@ -610,7 +613,7 @@ READ8_MEMBER (gts1_state::gts1_lamp_apm_r)
data &= ~(1 << 3);
}
if (m_z30_out & 4) {
- uint8_t dsw2 = ioport("DSW2")->read();
+ uint8_t dsw2 = m_dips[2]->read();
if (0 == BIT(dsw2,4)) // S21
data &= ~(1 << 0);
if (0 == BIT(dsw2,5)) // S22
@@ -654,13 +657,13 @@ WRITE8_MEMBER(gts1_state::gts1_lamp_apm_w)
READ8_MEMBER (gts1_state::gts1_io_r)
{
const uint8_t data = 0x0f;
- LOG(("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data));
+ LOG("%s: unmapped io[%02x] -> %x\n", __FUNCTION__, offset, data);
return data;
}
WRITE8_MEMBER(gts1_state::gts1_io_w)
{
- LOG(("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data));
+ LOG("%s: unmapped io[%02x] <- %x\n", __FUNCTION__, offset, data);
}
READ8_MEMBER (gts1_state::gts1_pa_r)
@@ -668,7 +671,7 @@ READ8_MEMBER (gts1_state::gts1_pa_r)
// return ROM nibble
uint8_t *ROM = memregion("maincpu")->base();
uint8_t data = ROM[0x2000 + m_6351_addr] & 0x0f;
- LOG(("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data));
+ LOG("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data);
return data;
}
@@ -676,7 +679,7 @@ WRITE8_MEMBER(gts1_state::gts1_do_w)
{
// write address lines (DO1-4 to A0-3, DIO1-4 to A4-7)
m_6351_addr = (m_6351_addr & 0x300) | data;
- LOG(("%s: ROM addr:%02x\n", __FUNCTION__, m_6351_addr));
+ LOG("%s: ROM addr:%02x\n", __FUNCTION__, m_6351_addr);
}
diff --git a/src/mame/drivers/jpmsys5.cpp b/src/mame/drivers/jpmsys5.cpp
index 9e801ccd5d1..26ab8b59d9f 100644
--- a/src/mame/drivers/jpmsys5.cpp
+++ b/src/mame/drivers/jpmsys5.cpp
@@ -68,12 +68,12 @@ enum int_levels
*
*************************************/
-WRITE_LINE_MEMBER(jpmsys5_state::generate_tms34061_interrupt)
+WRITE_LINE_MEMBER(jpmsys5v_state::generate_tms34061_interrupt)
{
m_maincpu->set_input_line(INT_TMS34061, state);
}
-WRITE16_MEMBER(jpmsys5_state::sys5_tms34061_w)
+WRITE16_MEMBER(jpmsys5v_state::sys5_tms34061_w)
{
int func = (offset >> 19) & 3;
int row = (offset >> 7) & 0x1ff;
@@ -96,7 +96,7 @@ WRITE16_MEMBER(jpmsys5_state::sys5_tms34061_w)
m_tms34061->write(space, col | 1, row, func, data & 0xff);
}
-READ16_MEMBER(jpmsys5_state::sys5_tms34061_r)
+READ16_MEMBER(jpmsys5v_state::sys5_tms34061_r)
{
uint16_t data = 0;
int func = (offset >> 19) & 3;
@@ -122,7 +122,7 @@ READ16_MEMBER(jpmsys5_state::sys5_tms34061_r)
return data;
}
-WRITE16_MEMBER(jpmsys5_state::ramdac_w)
+WRITE16_MEMBER(jpmsys5v_state::ramdac_w)
{
if (offset == 0)
{
@@ -147,7 +147,7 @@ WRITE16_MEMBER(jpmsys5_state::ramdac_w)
}
}
-uint32_t jpmsys5_state::screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t jpmsys5v_state::screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int x, y;
@@ -179,12 +179,11 @@ uint32_t jpmsys5_state::screen_update_jpmsys5v(screen_device &screen, bitmap_rgb
void jpmsys5_state::sys5_draw_lamps()
{
- int i;
- for (i = 0; i <8; i++)
+ for (int i = 0; i < 8; i++)
{
- output().set_lamp_value( (16*m_lamp_strobe)+i, (m_muxram[(4*m_lamp_strobe)] & (1 << i)) !=0);
- output().set_lamp_value((16*m_lamp_strobe)+i+8, (m_muxram[(4*m_lamp_strobe) +1 ] & (1 << i)) !=0);
- output().set_indexed_value("sys5led",(8*m_lamp_strobe)+i,(m_muxram[(4*m_lamp_strobe) +2 ] & (1 << i)) !=0);
+ m_lamps [(m_lamp_strobe << 4) | i] = BIT(m_muxram[(m_lamp_strobe << 2) | 0], i);
+ m_lamps [(m_lamp_strobe << 4) | i | 8] = BIT(m_muxram[(m_lamp_strobe << 2) | 1], i);
+ m_sys5leds[(m_lamp_strobe << 3) | i] = BIT(m_muxram[(m_lamp_strobe << 2) | 2], i);
}
}
@@ -194,11 +193,9 @@ void jpmsys5_state::sys5_draw_lamps()
*
****************************************/
-WRITE16_MEMBER(jpmsys5_state::rombank_w)
+WRITE16_MEMBER(jpmsys5v_state::rombank_w)
{
- uint8_t *rom = memregion("maincpu")->base();
- data &= 0x1f;
- membank("bank1")->set_base(&rom[0x20000 + 0x20000 * data]);
+ m_rombank->set_entry(data & 0x1f);
}
READ16_MEMBER(jpmsys5_state::coins_r)
@@ -304,7 +301,7 @@ ADDRESS_MAP_START(jpmsys5_state::m68000_awp_map_saa)
AM_RANGE(0x04c100, 0x04c105) AM_READWRITE(jpm_upd7759_r, jpm_upd7759_w) // do the SAA boards have the UPD?
ADDRESS_MAP_END
-ADDRESS_MAP_START(jpmsys5_state::m68000_map)
+ADDRESS_MAP_START(jpmsys5v_state::m68000_map)
AM_IMPORT_FROM(jpm_sys5_common_map)
AM_RANGE(0x01fffe, 0x01ffff) AM_WRITE(rombank_w) // extra on video system (rom board?) (although regular games do write here?)
AM_RANGE(0x020000, 0x03ffff) AM_ROMBANK("bank1") // extra on video system (rom board?)
@@ -318,63 +315,56 @@ ADDRESS_MAP_END
- /*************************************
- *
- * Touchscreen controller simulation
- *
- *************************************/
+/*************************************
+*
+* Touchscreen controller simulation
+*
+*************************************/
/* Serial bit transmission callback */
-TIMER_CALLBACK_MEMBER(jpmsys5_state::touch_cb)
+TIMER_CALLBACK_MEMBER(jpmsys5v_state::touch_cb)
{
switch (m_touch_state)
{
- case IDLE:
- {
- break;
- }
- case START:
- {
- m_touch_shift_cnt = 0;
- m_acia6850_2->write_rxd(0);
- m_touch_state = DATA;
- break;
- }
- case DATA:
- {
- m_acia6850_2->write_rxd((m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1);
+ case IDLE:
+ break;
- if (++m_touch_shift_cnt == 8)
- m_touch_state = STOP1;
+ case START:
+ m_touch_shift_cnt = 0;
+ m_acia6850[2]->write_rxd(0);
+ m_touch_state = DATA;
+ break;
- break;
- }
- case STOP1:
+ case DATA:
+ m_acia6850[2]->write_rxd((m_touch_data[m_touch_data_count] >> (m_touch_shift_cnt)) & 1);
+
+ if (++m_touch_shift_cnt == 8)
+ m_touch_state = STOP1;
+
+ break;
+
+ case STOP1:
+ m_acia6850[2]->write_rxd(1);
+ m_touch_state = STOP2;
+ break;
+
+ case STOP2:
+ m_acia6850[2]->write_rxd(1);
+
+ if (++m_touch_data_count == 3)
{
- m_acia6850_2->write_rxd(1);
- m_touch_state = STOP2;
- break;
+ m_touch_timer->reset();
+ m_touch_state = IDLE;
}
- case STOP2:
+ else
{
- m_acia6850_2->write_rxd(1);
-
- if (++m_touch_data_count == 3)
- {
- m_touch_timer->reset();
- m_touch_state = IDLE;
- }
- else
- {
- m_touch_state = START;
- }
-
- break;
+ m_touch_state = START;
}
+ break;
}
}
-INPUT_CHANGED_MEMBER(jpmsys5_state::touchscreen_press)
+INPUT_CHANGED_MEMBER(jpmsys5v_state::touchscreen_press)
{
if (newval == 0)
{
@@ -382,8 +372,8 @@ INPUT_CHANGED_MEMBER(jpmsys5_state::touchscreen_press)
/* Each touch screen packet is 3 bytes */
m_touch_data[0] = 0x2a;
- m_touch_data[1] = 0x7 - (ioport("TOUCH_Y")->read() >> 5) + 0x30;
- m_touch_data[2] = (ioport("TOUCH_X")->read() >> 5) + 0x30;
+ m_touch_data[1] = 0x7 - (m_touch_axes[1]->read() >> 5) + 0x30;
+ m_touch_data[2] = (m_touch_axes[0]->read() >> 5) + 0x30;
/* Start sending the data to the 68000 serially */
m_touch_data_count = 0;
@@ -453,7 +443,7 @@ static INPUT_PORTS_START( monopoly )
PORT_BIT( 0xc3, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("TOUCH_PUSH")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, jpmsys5_state,touchscreen_press, nullptr)
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CHANGED_MEMBER(DEVICE_SELF, jpmsys5v_state,touchscreen_press, nullptr)
PORT_START("TOUCH_X")
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(45) PORT_KEYDELTA(15)
@@ -476,37 +466,26 @@ READ8_MEMBER(jpmsys5_state::u29_porta_r)
{
int meter_bit =0;
- if (m_meters != nullptr)
+ if (m_meters)
{
int combined_meter = m_meters->GetActivity(0) | m_meters->GetActivity(1) |
m_meters->GetActivity(2) | m_meters->GetActivity(3) |
m_meters->GetActivity(4) | m_meters->GetActivity(5) |
m_meters->GetActivity(6) | m_meters->GetActivity(7);
- if(combined_meter)
- {
+ if (combined_meter)
meter_bit = 0x80;
- }
- else
- {
- meter_bit = 0x00;
- }
-
- return m_direct_port->read() | meter_bit;
}
- else
- return m_direct_port->read() | meter_bit;
+ return m_direct_port->read() | meter_bit;
}
WRITE8_MEMBER(jpmsys5_state::u29_portb_w)
{
- if (m_meters != nullptr)
+ if (m_meters)
{
- for (int meter = 0; meter < 8; meter ++)
- {
+ for (int meter = 0; meter < 8; meter++)
m_meters->update(meter, (data & (1 << meter)));
- }
}
}
@@ -539,11 +518,8 @@ WRITE_LINE_MEMBER(jpmsys5_state::u26_o1_callback)
{
if (!state) //falling edge
{
- m_lamp_strobe++;
- if (m_lamp_strobe >15)
- {
- m_lamp_strobe =0;
- }
+ if (++m_lamp_strobe > 15)
+ m_lamp_strobe = 0;
}
sys5_draw_lamps();
}
@@ -577,36 +553,27 @@ WRITE_LINE_MEMBER(jpmsys5_state::a2_tx_w)
m_a2_data_out = state;
}
-WRITE_LINE_MEMBER(jpmsys5_state::write_acia_clock)
-{
- m_acia6850_0->write_txc(state);
- m_acia6850_0->write_rxc(state);
- m_acia6850_1->write_txc(state);
- m_acia6850_1->write_rxc(state);
- m_acia6850_2->write_txc(state);
- m_acia6850_2->write_rxc(state);
-}
-
/*************************************
*
* Initialisation
*
*************************************/
-MACHINE_START_MEMBER(jpmsys5_state,jpmsys5v)
+void jpmsys5v_state::machine_start()
{
- membank("bank1")->set_base(memregion("maincpu")->base()+0x20000);
- m_touch_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jpmsys5_state::touch_cb),this));
+ jpmsys5_state::machine_start();
+
+ m_rombank->configure_entries(0, 32, memregion("maincpu")->base() + 0x20000, 0x20000);
+ m_rombank->set_entry(0);
+ m_touch_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jpmsys5v_state::touch_cb),this));
}
-MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5v)
+void jpmsys5v_state::machine_reset()
{
+ jpmsys5_state::machine_reset();
+
m_touch_timer->reset();
m_touch_state = IDLE;
- m_acia6850_2->write_rxd(1);
- m_acia6850_2->write_dcd(0);
- m_vfd->reset();
-
}
@@ -616,40 +583,42 @@ MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5v)
*
*************************************/
-MACHINE_CONFIG_START(jpmsys5_state::jpmsys5v)
+MACHINE_CONFIG_START(jpmsys5v_state::jpmsys5v)
MCFG_CPU_ADD("maincpu", M68000, XTAL(8'000'000))
MCFG_CPU_PROGRAM_MAP(m68000_map)
MCFG_DEVICE_ADD("acia6850_0", ACIA6850, 0)
- MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5_state, a0_tx_w))
- MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
+ MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5v_state, a0_tx_w))
+ MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5v_state, acia_irq))
MCFG_DEVICE_ADD("acia6850_1", ACIA6850, 0)
- MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5_state, a1_tx_w))
- MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
+ MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5v_state, a1_tx_w))
+ MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5v_state, acia_irq))
MCFG_DEVICE_ADD("acia6850_2", ACIA6850, 0)
- MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5_state, a2_tx_w))
- MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
+ MCFG_ACIA6850_TXD_HANDLER(WRITELINE(jpmsys5v_state, a2_tx_w))
+ MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5v_state, acia_irq))
MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ?
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jpmsys5_state, write_acia_clock))
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia6850_0", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_0", acia6850_device, write_rxc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_rxc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_rxc))
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_S16LF01_ADD("vfd",0)//for debug ports
- MCFG_MACHINE_START_OVERRIDE(jpmsys5_state,jpmsys5v)
- MCFG_MACHINE_RESET_OVERRIDE(jpmsys5_state,jpmsys5v)
-
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(XTAL(40'000'000) / 4, 676, 20*4, 147*4, 256, 0, 254)
- MCFG_SCREEN_UPDATE_DRIVER(jpmsys5_state, screen_update_jpmsys5v)
+ MCFG_SCREEN_UPDATE_DRIVER(jpmsys5v_state, screen_update_jpmsys5v)
MCFG_DEVICE_ADD("tms34061", TMS34061, 0)
MCFG_TMS34061_ROWSHIFT(8) /* VRAM address is (row << rowshift) | col */
MCFG_TMS34061_VRAM_SIZE(0x40000) /* size of video RAM */
- MCFG_TMS34061_INTERRUPT_CB(WRITELINE(jpmsys5_state, generate_tms34061_interrupt)) /* interrupt gen callback */
+ MCFG_TMS34061_INTERRUPT_CB(WRITELINE(jpmsys5v_state, generate_tms34061_interrupt)) /* interrupt gen callback */
MCFG_PALETTE_ADD("palette", 16)
@@ -663,18 +632,18 @@ MACHINE_CONFIG_START(jpmsys5_state::jpmsys5v)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_DEVICE_ADD("6821pia", PIA6821, 0)
- MCFG_PIA_READPA_HANDLER(READ8(jpmsys5_state, u29_porta_r))
- MCFG_PIA_WRITEPB_HANDLER(WRITE8(jpmsys5_state, u29_portb_w))
- MCFG_PIA_CA2_HANDLER(WRITELINE(jpmsys5_state, u29_ca2_w))
- MCFG_PIA_CB2_HANDLER(WRITELINE(jpmsys5_state, u29_cb2_w))
- MCFG_PIA_IRQA_HANDLER(WRITELINE(jpmsys5_state, pia_irq))
- MCFG_PIA_IRQB_HANDLER(WRITELINE(jpmsys5_state, pia_irq))
+ MCFG_PIA_READPA_HANDLER(READ8(jpmsys5v_state, u29_porta_r))
+ MCFG_PIA_WRITEPB_HANDLER(WRITE8(jpmsys5v_state, u29_portb_w))
+ MCFG_PIA_CA2_HANDLER(WRITELINE(jpmsys5v_state, u29_ca2_w))
+ MCFG_PIA_CB2_HANDLER(WRITELINE(jpmsys5v_state, u29_cb2_w))
+ MCFG_PIA_IRQA_HANDLER(WRITELINE(jpmsys5v_state, pia_irq))
+ MCFG_PIA_IRQB_HANDLER(WRITELINE(jpmsys5v_state, pia_irq))
/* 6840 PTM */
MCFG_DEVICE_ADD("6840ptm", PTM6840, 1000000)
MCFG_PTM6840_EXTERNAL_CLOCKS(0, 0, 0)
- MCFG_PTM6840_O1_CB(WRITELINE(jpmsys5_state, u26_o1_callback))
- MCFG_PTM6840_IRQ_CB(WRITELINE(jpmsys5_state, ptm_irq))
+ MCFG_PTM6840_O1_CB(WRITELINE(jpmsys5v_state, u26_o1_callback))
+ MCFG_PTM6840_IRQ_CB(WRITELINE(jpmsys5v_state, ptm_irq))
MACHINE_CONFIG_END
READ16_MEMBER(jpmsys5_state::mux_awp_r)
@@ -812,15 +781,16 @@ INPUT_PORTS_END
*
*************************************/
-MACHINE_START_MEMBER(jpmsys5_state,jpmsys5)
+void jpmsys5_state::machine_start()
{
-// membank("bank1")->set_base(memregion("maincpu")->base()+0x20000);
+ m_lamps.resolve();
+ m_sys5leds.resolve();
}
-MACHINE_RESET_MEMBER(jpmsys5_state,jpmsys5)
+void jpmsys5_state::machine_reset()
{
- m_acia6850_2->write_rxd(1);
- m_acia6850_2->write_dcd(0);
+ m_acia6850[2]->write_rxd(1);
+ m_acia6850[2]->write_dcd(0);
m_vfd->reset();
}
@@ -850,13 +820,16 @@ MACHINE_CONFIG_START(jpmsys5_state::jpmsys5_ym)
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ?
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jpmsys5_state, write_acia_clock))
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia6850_0", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_0", acia6850_device, write_rxc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_rxc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_rxc))
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_S16LF01_ADD("vfd",0)
- MCFG_MACHINE_START_OVERRIDE(jpmsys5_state,jpmsys5)
- MCFG_MACHINE_RESET_OVERRIDE(jpmsys5_state,jpmsys5)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("upd7759", UPD7759, UPD7759_STANDARD_CLOCK)
@@ -903,13 +876,16 @@ MACHINE_CONFIG_START(jpmsys5_state::jpmsys5)
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(jpmsys5_state, acia_irq))
MCFG_DEVICE_ADD("acia_clock", CLOCK, 10000) // What are the correct ACIA clocks ?
- MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jpmsys5_state, write_acia_clock))
+ MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("acia6850_0", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_0", acia6850_device, write_rxc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_1", acia6850_device, write_rxc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia6850_2", acia6850_device, write_rxc))
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_S16LF01_ADD("vfd",0)
- MCFG_MACHINE_START_OVERRIDE(jpmsys5_state,jpmsys5)
- MCFG_MACHINE_RESET_OVERRIDE(jpmsys5_state,jpmsys5)
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("upd7759", UPD7759, UPD7759_STANDARD_CLOCK)
@@ -1036,8 +1012,8 @@ ROM_END
/* Video based titles */
-GAME( 1994, monopoly , 0 , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 1)", 0 )
-GAME( 1994, monopolya , monopoly , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 2)", 0 )
-GAME( 1995, monoplcl , monopoly , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly Classic (JPM) (SYSTEM5 VIDEO)", 0 )
-GAME( 1995, monopldx , 0 , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Monopoly Deluxe (JPM) (SYSTEM5 VIDEO)", 0 )
-GAME( 199?, cashcade , 0 , jpmsys5v, monopoly, jpmsys5_state, 0, ROT0, "JPM", "Cashcade (JPM) (SYSTEM5 VIDEO)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) // shows a loading error.. is the set incomplete?
+GAME( 1994, monopoly , 0 , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 1)", 0 )
+GAME( 1994, monopolya , monopoly , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly (JPM) (SYSTEM5 VIDEO, set 2)", 0 )
+GAME( 1995, monoplcl , monopoly , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly Classic (JPM) (SYSTEM5 VIDEO)", 0 )
+GAME( 1995, monopldx , 0 , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Monopoly Deluxe (JPM) (SYSTEM5 VIDEO)", 0 )
+GAME( 199?, cashcade , 0 , jpmsys5v, monopoly, jpmsys5v_state, 0, ROT0, "JPM", "Cashcade (JPM) (SYSTEM5 VIDEO)", MACHINE_NOT_WORKING|MACHINE_NO_SOUND ) // shows a loading error.. is the set incomplete?
diff --git a/src/mame/includes/jpmsys5.h b/src/mame/includes/jpmsys5.h
index b8f49400b94..47d5fa0fe9a 100644
--- a/src/mame/includes/jpmsys5.h
+++ b/src/mame/includes/jpmsys5.h
@@ -1,5 +1,9 @@
// license:BSD-3-Clause
// copyright-holders:Philip Bennett, James Wallace, David Haywood
+#ifndef MAME_INCLUDES_JPMSYS5_H
+#define MAME_INCLUDES_JPMSYS5_H
+
+#pragma once
#include "cpu/m68000/m68000.h"
#include "machine/6821pia.h"
@@ -20,54 +24,27 @@ public:
jpmsys5_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_acia6850_0(*this, "acia6850_0"),
- m_acia6850_1(*this, "acia6850_1"),
- m_acia6850_2(*this, "acia6850_2"),
+ m_acia6850(*this, "acia6850_%u", 0U),
m_upd7759(*this, "upd7759"),
- m_tms34061(*this, "tms34061"),
m_vfd(*this, "vfd"),
m_direct_port(*this, "DIRECT"),
- m_palette(*this, "palette"),
- m_meters(*this, "meters") { }
+ m_meters(*this, "meters"),
+ m_lamps(*this, "lamp%u", 0U),
+ m_sys5leds(*this, "sys5led%u", 0U)
+ { }
- required_device<cpu_device> m_maincpu;
- required_device<acia6850_device> m_acia6850_0;
- required_device<acia6850_device> m_acia6850_1;
- required_device<acia6850_device> m_acia6850_2;
- required_device<upd7759_device> m_upd7759;
- optional_device<tms34061_device> m_tms34061;
- optional_device<s16lf01_device> m_vfd;
- required_ioport m_direct_port;
- optional_device<palette_device> m_palette;
- optional_device<meters_device> m_meters; //jpmsys5v doesn't use this
+ void jpmsys5(machine_config &config);
+ void jpmsys5_ym(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
- uint8_t m_palette_val[16][3];
- int m_pal_addr;
- int m_pal_idx;
- int m_touch_state;
- emu_timer *m_touch_timer;
- int m_touch_data_count;
- int m_touch_data[3];
- int m_touch_shift_cnt;
- int m_lamp_strobe;
- int m_mpxclk;
- int m_muxram[255];
- int m_alpha_clock;
- int m_chop;
- uint8_t m_a0_data_out;
- uint8_t m_a1_data_out;
- uint8_t m_a2_data_out;
- DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt);
- DECLARE_WRITE16_MEMBER(sys5_tms34061_w);
- DECLARE_READ16_MEMBER(sys5_tms34061_r);
- DECLARE_WRITE16_MEMBER(ramdac_w);
- DECLARE_WRITE16_MEMBER(rombank_w);
DECLARE_READ16_MEMBER(coins_r);
DECLARE_WRITE16_MEMBER(coins_w);
DECLARE_READ16_MEMBER(unk_r);
DECLARE_WRITE16_MEMBER(mux_w);
DECLARE_READ16_MEMBER(mux_r);
- DECLARE_INPUT_CHANGED_MEMBER(touchscreen_press);
DECLARE_WRITE16_MEMBER(jpm_upd7759_w);
DECLARE_READ16_MEMBER(jpm_upd7759_r);
DECLARE_WRITE_LINE_MEMBER(ptm_irq);
@@ -81,21 +58,80 @@ public:
DECLARE_WRITE_LINE_MEMBER(a0_tx_w);
DECLARE_WRITE_LINE_MEMBER(a1_tx_w);
DECLARE_WRITE_LINE_MEMBER(a2_tx_w);
- DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
DECLARE_READ16_MEMBER(mux_awp_r);
DECLARE_READ16_MEMBER(coins_awp_r);
void sys5_draw_lamps();
- DECLARE_MACHINE_START(jpmsys5v);
- DECLARE_MACHINE_RESET(jpmsys5v);
- DECLARE_MACHINE_START(jpmsys5);
- DECLARE_MACHINE_RESET(jpmsys5);
- uint32_t screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- TIMER_CALLBACK_MEMBER(touch_cb);
- void jpmsys5(machine_config &config);
- void jpmsys5_ym(machine_config &config);
- void jpmsys5v(machine_config &config);
+
void jpm_sys5_common_map(address_map &map);
void m68000_awp_map(address_map &map);
void m68000_awp_map_saa(address_map &map);
+
+ required_device<cpu_device> m_maincpu;
+ required_device_array<acia6850_device, 3> m_acia6850;
+
+private:
+ required_device<upd7759_device> m_upd7759;
+ optional_device<s16lf01_device> m_vfd;
+ required_ioport m_direct_port;
+ optional_device<meters_device> m_meters; //jpmsys5v doesn't use this
+ output_finder<16 * 16> m_lamps;
+ output_finder<16 * 8> m_sys5leds;
+
+ int m_lamp_strobe;
+ int m_mpxclk;
+ int m_muxram[255];
+ int m_alpha_clock;
+ int m_chop;
+ uint8_t m_a0_data_out;
+ uint8_t m_a1_data_out;
+ uint8_t m_a2_data_out;
+};
+
+
+class jpmsys5v_state : public jpmsys5_state
+{
+public:
+ jpmsys5v_state(const machine_config &mconfig, device_type type, const char *tag) :
+ jpmsys5_state(mconfig, type, tag),
+ m_tms34061(*this, "tms34061"),
+ m_palette(*this, "palette"),
+ m_rombank(*this, "bank1"),
+ m_touch_axes(*this, { "TOUCH_X", "TOUCH_Y" }),
+ m_touch_timer(nullptr)
+ { }
+
+ DECLARE_INPUT_CHANGED_MEMBER(touchscreen_press);
+
+ void jpmsys5v(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_WRITE_LINE_MEMBER(generate_tms34061_interrupt);
+ DECLARE_WRITE16_MEMBER(sys5_tms34061_w);
+ DECLARE_READ16_MEMBER(sys5_tms34061_r);
+ DECLARE_WRITE16_MEMBER(ramdac_w);
+ DECLARE_WRITE16_MEMBER(rombank_w);
+ uint32_t screen_update_jpmsys5v(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ TIMER_CALLBACK_MEMBER(touch_cb);
+
void m68000_map(address_map &map);
+
+private:
+ required_device<tms34061_device> m_tms34061;
+ required_device<palette_device> m_palette;
+ required_memory_bank m_rombank;
+ required_ioport_array<2> m_touch_axes;
+
+ uint8_t m_palette_val[16][3];
+ int m_pal_addr;
+ int m_pal_idx;
+ int m_touch_state;
+ emu_timer *m_touch_timer;
+ int m_touch_data_count;
+ int m_touch_data[3];
+ int m_touch_shift_cnt;
};
+
+#endif // MAME_INCLUDES_JPMSYS5_H