diff --git a/src/mame/drivers/mephisto_glasgow.cpp b/src/mame/drivers/mephisto_glasgow.cpp index 225942115f1..9ec71765ae6 100644 --- a/src/mame/drivers/mephisto_glasgow.cpp +++ b/src/mame/drivers/mephisto_glasgow.cpp @@ -10,17 +10,17 @@ sp_rinter@gmx.de 16 KB RAM 4 Digit LCD -3* 74LS138 Decoder/Multiplexer -1*74LS74 Dual positive edge triggered D Flip Flop +3*74LS138 Decoder/Multiplexer +1*74LS74 Dual positive edge triggered D Flip Flop 1*74LS139 1of4 Demultiplexer -1*74LS05 HexInverter -1*NE555 R=100K C=10uF +1*74LS05 Hex Inverter +1*NE555 R=100K C=10uF 2*74LS04 Hex Inverter -1*74LS164 8 Bit Shift register -1*74121 Monostable Multivibrator with Schmitt Trigger Inputs -1*74LS20 Dual 4 Input NAND GAte +1*74LS164 8 Bit Shift register +1*74121 Monostable Multivibrator with Schmitt Trigger Inputs +1*74LS20 Dual 4 Input NAND GAte 1*74LS367 3 State Hex Buffers - +1*SG-10 Seiko 4-pin plastic XTAL chip "50H", to IPL0+2 Made playable by Robbbert in Nov 2009. @@ -33,13 +33,16 @@ How to play (quick guide) 6. You'll need to read the official user manual for advanced features, or if you get messages such as "Err1". +TODO: +- add waitstates(applies to glasgow, amsterd, others?), CPU is 12MHz but with DTACK + waitstates for slow EPROMs, effective speed is less than 10MHz +- LCD module is 8.8.:8.8 like mephisto_brikett/mm1 (so, add ":" in the middle) ***************************************************************************/ #include "emu.h" #include "cpu/m68000/m68000.h" #include "machine/mmboard.h" -#include "machine/timer.h" #include "sound/dac.h" #include "sound/volt_reg.h" #include "speaker.h" @@ -68,7 +71,6 @@ protected: DECLARE_WRITE8_MEMBER(glasgow_lcd_flag_w); DECLARE_READ8_MEMBER(glasgow_keys_r); DECLARE_WRITE8_MEMBER(glasgow_keys_w); - TIMER_DEVICE_CALLBACK_MEMBER(update_nmi); virtual void machine_start() override; virtual void machine_reset() override; @@ -97,12 +99,10 @@ public: protected: DECLARE_WRITE8_MEMBER(write_lcd); - DECLARE_WRITE8_MEMBER(write_lcd32); DECLARE_WRITE8_MEMBER(write_lcd_flag); DECLARE_WRITE8_MEMBER(write_beeper); DECLARE_WRITE8_MEMBER(write_board); DECLARE_READ8_MEMBER(read_newkeys); - TIMER_DEVICE_CALLBACK_MEMBER(update_nmi32); void amsterd_mem(address_map &map); void dallas32_mem(address_map &map); @@ -151,15 +151,6 @@ WRITE8_MEMBER( glasgow_state::glasgow_keys_w ) } WRITE8_MEMBER( amsterd_state::write_lcd ) -{ - if (m_lcd_shift_counter & 4) - m_digits[m_lcd_shift_counter & 3] = data ^ 0xff; - - m_lcd_shift_counter--; - m_lcd_shift_counter &= 7; -} - -WRITE8_MEMBER( amsterd_state::write_lcd32 ) { if (m_lcd_shift_counter & 4) m_digits[m_lcd_shift_counter & 3] = data; @@ -170,13 +161,11 @@ WRITE8_MEMBER( amsterd_state::write_lcd32 ) WRITE8_MEMBER( amsterd_state::write_lcd_flag ) { - //beep_set_state(0, (data & 1) ? 1 : 0); m_key_select = 1; // The key function in the rom expects after writing to // the a value from the second key row; m_led7 = data ? 255 : 0; - } WRITE8_MEMBER( amsterd_state::write_board ) @@ -191,21 +180,11 @@ WRITE8_MEMBER( amsterd_state::write_beeper ) m_dac->write(BIT(data, 0)); } -READ8_MEMBER( amsterd_state::read_newkeys ) //Amsterdam, Roma, Dallas 32, Roma 32 +READ8_MEMBER( amsterd_state::read_newkeys ) { return m_keyboard[m_key_select & 1]->read(); } -TIMER_DEVICE_CALLBACK_MEMBER( glasgow_state::update_nmi) -{ - m_maincpu->set_input_line(7, HOLD_LINE); -} - -TIMER_DEVICE_CALLBACK_MEMBER( amsterd_state::update_nmi32 ) -{ - m_maincpu->set_input_line(6, HOLD_LINE); // this was 7 in the old code, which is correct? -} - void glasgow_state::machine_start() { m_digits.resolve(); @@ -253,7 +232,7 @@ void amsterd_state::dallas32_mem(address_map &map) { map(0x000000, 0x00ffff).rom(); map(0x010000, 0x01ffff).ram(); // 64KB - map(0x800002, 0x800002).w(FUNC(amsterd_state::write_lcd32)); + map(0x800002, 0x800002).w(FUNC(amsterd_state::write_lcd)); map(0x800004, 0x800004).w(FUNC(amsterd_state::write_beeper)); map(0x800008, 0x800008).w(FUNC(amsterd_state::write_lcd_flag)); map(0x800010, 0x800010).w(FUNC(amsterd_state::write_board)); @@ -311,13 +290,12 @@ void glasgow_state::glasgow(machine_config &config) { /* basic machine hardware */ M68000(config, m_maincpu, 12_MHz_XTAL); + m_maincpu->set_periodic_int(FUNC(glasgow_state::irq5_line_hold), attotime::from_hz(50)); m_maincpu->set_addrmap(AS_PROGRAM, &glasgow_state::glasgow_mem); MEPHISTO_SENSORS_BOARD(config, m_board); m_board->set_delay(attotime::from_msec(200)); - TIMER(config, "nmi_timer").configure_periodic(FUNC(glasgow_state::update_nmi), attotime::from_hz(50)); - /* video hardware */ config.set_default_layout(layout_mephisto_glasgow); @@ -343,10 +321,8 @@ void amsterd_state::dallas32(machine_config &config) /* basic machine hardware */ M68020(config.replace(), m_maincpu, 14_MHz_XTAL); + m_maincpu->set_periodic_int(FUNC(amsterd_state::irq5_line_hold), attotime::from_hz(50)); m_maincpu->set_addrmap(AS_PROGRAM, &amsterd_state::dallas32_mem); - - config.device_remove("nmi_timer"); - TIMER(config, "nmi_timer").configure_periodic(FUNC(amsterd_state::update_nmi32), attotime::from_hz(50)); } diff --git a/src/mame/layout/mephisto_mirage.lay b/src/mame/layout/mephisto_mirage.lay index 30bac0e0b60..6ac133edfcb 100644 --- a/src/mame/layout/mephisto_mirage.lay +++ b/src/mame/layout/mephisto_mirage.lay @@ -181,16 +181,16 @@ - - + + - - - - - - + + + + + + @@ -487,7 +487,7 @@ - +