diff options
author | 2018-03-02 21:45:23 +1100 | |
---|---|---|
committer | 2018-03-02 21:45:23 +1100 | |
commit | 54701050f73e4c0f3589e83472e8ad63ca1b36c8 (patch) | |
tree | 3210cfbb3c1517e34392bcbf01ba5816cd823746 | |
parent | 9663775fbaba5069857c1f38ce42cb796492b71a (diff) |
just a little more cleanup (nw)
-rw-r--r-- | src/mame/drivers/acefruit.cpp | 104 | ||||
-rw-r--r-- | src/mame/drivers/glasgow.cpp | 25 | ||||
-rw-r--r-- | src/mame/drivers/gts1.cpp | 77 | ||||
-rw-r--r-- | src/mame/drivers/jpmsys5.cpp | 250 | ||||
-rw-r--r-- | src/mame/includes/jpmsys5.h | 132 |
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 |