summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2022-05-19 15:57:35 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2022-05-19 15:57:35 +1000
commit9863cbfcfdc986fe2b1426c58462d809ecaf28ff (patch)
tree0392b230ef19c45ff6242c4be36bace758d5bc6c /src/mame
parent5803e4145cfbe269fdd71ce3c1f7660950b751c7 (diff)
eacc: fixed various regressions
s9, wmg: fixed typos
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/drivers/eacc.cpp90
-rw-r--r--src/mame/drivers/s9.cpp4
-rw-r--r--src/mame/drivers/wmg.cpp2
3 files changed, 53 insertions, 43 deletions
diff --git a/src/mame/drivers/eacc.cpp b/src/mame/drivers/eacc.cpp
index fcc892d8dcf..57102dac044 100644
--- a/src/mame/drivers/eacc.cpp
+++ b/src/mame/drivers/eacc.cpp
@@ -51,8 +51,9 @@
#include "cpu/m6800/m6800.h"
#include "eacc.lh"
#include "machine/6821pia.h"
+#include "machine/7474.h"
+#include "machine/clock.h"
#include "machine/nvram.h"
-#include "machine/timer.h"
class eacc_state : public driver_device
@@ -63,6 +64,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_pia(*this, "pia")
, m_p_nvram(*this, "nvram")
+ , m_7474(*this, "7474")
, m_io_keyboard(*this, "X%u", 0U)
, m_digits(*this, "digit%u", 0U)
, m_leds(*this, "led%u", 0U)
@@ -75,23 +77,23 @@ protected:
virtual void machine_start() override;
private:
- DECLARE_READ_LINE_MEMBER( distance_r );
- DECLARE_READ_LINE_MEMBER( fuel_sensor_r );
+ DECLARE_WRITE_LINE_MEMBER(scan_w);
+ DECLARE_WRITE_LINE_MEMBER(cb2_w);
+ DECLARE_WRITE_LINE_MEMBER(inputs_w);
uint8_t keyboard_r();
- DECLARE_WRITE_LINE_MEMBER( cb2_w );
void digit_w(uint8_t data);
void segment_w(uint8_t data);
- TIMER_DEVICE_CALLBACK_MEMBER(cb1_timer);
- TIMER_DEVICE_CALLBACK_MEMBER(nmi_timer);
void mem_map(address_map &map);
+ void do_nmi(bool, bool);
uint8_t m_digit = 0U;
- bool m_cb1 = 0;
- bool m_cb2 = 0;
- bool m_nmi = 0;
+ bool m_cb2 = false;
+ bool m_scan = false;
+ bool m_disp = false;
required_device<m6802_cpu_device> m_maincpu;
required_device<pia6821_device> m_pia;
required_shared_ptr<uint8_t> m_p_nvram;
+ required_device<ttl7474_device> m_7474;
required_ioport_array<4> m_io_keyboard;
output_finder<7> m_digits;
output_finder<8> m_leds;
@@ -147,8 +149,8 @@ INPUT_PORTS_END
void eacc_state::machine_reset()
{
- m_cb2 = 0;
- m_pia->cb1_w(1);
+ m_cb2 = false; // pia is supposed to set this low at reset
+ m_digit = 0;
}
void eacc_state::machine_start()
@@ -156,41 +158,44 @@ void eacc_state::machine_start()
m_digits.resolve();
m_leds.resolve();
- save_item(NAME(m_cb1));
save_item(NAME(m_cb2));
- save_item(NAME(m_nmi));
+ save_item(NAME(m_scan));
+ save_item(NAME(m_digit));
+ save_item(NAME(m_disp));
}
-TIMER_DEVICE_CALLBACK_MEMBER(eacc_state::cb1_timer)
+WRITE_LINE_MEMBER( eacc_state::inputs_w )
{
- m_cb1 ^= 1; // 15hz
- if (m_cb2)
- m_pia->cb1_w(m_cb1);
+ if (state)
+ m_pia->ca1_w(machine().rand() & 1); // movement
+ else
+ m_pia->ca2_w(machine().rand() & 1); // fuel usage
}
-TIMER_DEVICE_CALLBACK_MEMBER(eacc_state::nmi_timer)
+void eacc_state::do_nmi(bool in_scan, bool in_cb2)
{
- if (m_cb2)
+ if (in_scan && in_cb2)
{
- m_nmi = true;
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
+ m_7474->clock_w(0);
+ }
+ else
+ {
+ m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
+ m_7474->clock_w(1);
}
}
-READ_LINE_MEMBER( eacc_state::distance_r )
-{
- return machine().rand() & 1; // needs random pulses to simulate movement
-}
-
-READ_LINE_MEMBER( eacc_state::fuel_sensor_r )
+WRITE_LINE_MEMBER( eacc_state::cb2_w )
{
- return machine().rand() & 1; // needs random pulses to simulate fuel usage
+ m_cb2 = state ? 1 : 0;
+ do_nmi(m_scan, m_cb2);
}
-WRITE_LINE_MEMBER( eacc_state::cb2_w )
+WRITE_LINE_MEMBER( eacc_state::scan_w )
{
- m_cb2 = state;
- m_pia->cb1_w((m_cb2) ? m_cb1 : 1);
+ m_scan = state ? 1 : 0;
+ do_nmi(m_scan, m_cb2);
}
uint8_t eacc_state::keyboard_r()
@@ -215,8 +220,9 @@ void eacc_state::segment_w(uint8_t data)
//d1 segment f
//d0 segment g
- if (!m_nmi)
+ if (m_disp)
{
+ m_disp = false;
if (BIT(m_digit, 7))
{
data ^= 0xff;
@@ -235,12 +241,8 @@ void eacc_state::segment_w(uint8_t data)
void eacc_state::digit_w(uint8_t data)
{
- if (m_nmi)
- {
- m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
- m_nmi = false;
- }
m_digit = data & 0xf8;
+ m_disp = true;
}
@@ -259,8 +261,6 @@ void eacc_state::eacc(machine_config &config)
PIA6821(config, m_pia, 0);
m_pia->readpb_handler().set(FUNC(eacc_state::keyboard_r));
- m_pia->readca1_handler().set(FUNC(eacc_state::distance_r));
- m_pia->readca2_handler().set(FUNC(eacc_state::fuel_sensor_r));
m_pia->writepa_handler().set(FUNC(eacc_state::segment_w));
m_pia->writepb_handler().set(FUNC(eacc_state::digit_w));
m_pia->cb2_handler().set(FUNC(eacc_state::cb2_w));
@@ -268,8 +268,18 @@ void eacc_state::eacc(machine_config &config)
m_pia->irqb_handler().set_inputline("maincpu", M6802_IRQ_LINE);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- TIMER(config, "eacc_nmi").configure_periodic(FUNC(eacc_state::nmi_timer), attotime::from_hz(600));
- TIMER(config, "eacc_cb1").configure_periodic(FUNC(eacc_state::cb1_timer), attotime::from_hz(30));
+
+ TTL7474(config, m_7474, 0);
+ m_7474->output_cb().set(m_pia, FUNC(pia6821_device::cb1_w));
+
+ clock_device &eacc_scan(CLOCK(config, "eacc_scan", 600)); // 74C14 with 100k & 10nF = 1200Hz, but article says 600.
+ eacc_scan.signal_handler().set(FUNC(eacc_state::scan_w));
+
+ clock_device &eacc_cb1(CLOCK(config, "eacc_cb1", 15)); // cpu E -> MM5369 -> 15Hz
+ eacc_cb1.signal_handler().set(m_7474, FUNC(ttl7474_device::d_w));
+
+ clock_device &eacc_rnd(CLOCK(config, "eacc_rnd", 30)); // random pulse for distance and fuel
+ eacc_rnd.signal_handler().set(FUNC(eacc_state::inputs_w));
}
diff --git a/src/mame/drivers/s9.cpp b/src/mame/drivers/s9.cpp
index 1277377fed2..f43f1e1777d 100644
--- a/src/mame/drivers/s9.cpp
+++ b/src/mame/drivers/s9.cpp
@@ -23,8 +23,8 @@ Here are the key codes to enable play:
Game NUM Start game End ball
-----------------------------------------------------------------------------------------------
-Sorcerer 532 AD hit 1 AD
-Space Huttle 535 ASD hit 1 ASD
+Sorcerer 532 ASD hit 1 ASD
+Space Shuttle 535 ASD hit 1 ASD
Comet 540 1 X
Status:
diff --git a/src/mame/drivers/wmg.cpp b/src/mame/drivers/wmg.cpp
index 659c11777a1..27cfde08d78 100644
--- a/src/mame/drivers/wmg.cpp
+++ b/src/mame/drivers/wmg.cpp
@@ -164,7 +164,7 @@ void wmg_state::wmg_banked_map(address_map &map)
map(0x0bff, 0x0bff).w(FUNC(wmg_state::watchdog_reset_w));
map(0x0c00, 0x0fff).rw(FUNC(wmg_state::wmg_nvram_r), FUNC(wmg_state::wmg_nvram_w));
map(0x1000, 0x4fff).rom().region("maincpu", 0x58000); // Defender roms
- // This one is actually banked in CPU 1, but its not something Mame can handle very well. Placed here instead. */
+ // This one is actually banked in CPU 1, but its not something Mame can handle very well. Placed here instead.
map(0xd000, 0xefff).ram().share("nvram");
}