summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/emma2.cpp
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2020-05-15 17:25:40 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2020-05-15 17:25:40 +1000
commita8a043cfad150a070014ba588901a8d595a3fea5 (patch)
tree14e575213c3bf599d10f4803b0d6c5aee505e6df /src/mame/drivers/emma2.cpp
parent1726cfe706d87669df4e8a8a63d6c95fe094b7ee (diff)
(nw) emma2: added pwm device
Diffstat (limited to 'src/mame/drivers/emma2.cpp')
-rw-r--r--src/mame/drivers/emma2.cpp33
1 files changed, 10 insertions, 23 deletions
diff --git a/src/mame/drivers/emma2.cpp b/src/mame/drivers/emma2.cpp
index e348dd17dc8..b8446b2772e 100644
--- a/src/mame/drivers/emma2.cpp
+++ b/src/mame/drivers/emma2.cpp
@@ -52,6 +52,7 @@ To Do:
#include "machine/6821pia.h"
#include "imagedev/cassette.h"
#include "speaker.h"
+#include "video/pwm.h"
#include "emma2.lh"
@@ -64,8 +65,8 @@ public:
, m_cassette(*this, "cassette")
, m_via(*this, "via")
, m_pia(*this, "pia")
- , m_keyboard(*this, "X%u", 0)
- , m_digits(*this, "digit%u", 0U)
+ , m_display(*this, "display")
+ , m_io_keyboard(*this, "X%u", 0U)
{ }
void emma2(machine_config &config);
@@ -75,18 +76,16 @@ private:
DECLARE_WRITE8_MEMBER(digit_w);
DECLARE_READ8_MEMBER(keyboard_r);
virtual void machine_reset() override;
- virtual void machine_start() override;
void mem_map(address_map &map);
uint8_t m_digit;
- bool m_dig_change;
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cassette;
required_device<via6522_device> m_via;
required_device<pia6821_device> m_pia;
- required_ioport_array<8> m_keyboard;
- output_finder<8> m_digits;
+ required_device<pwm_display_device> m_display;
+ required_ioport_array<8> m_io_keyboard;
};
void emma2_state::mem_map(address_map &map)
@@ -156,38 +155,24 @@ WRITE8_MEMBER( emma2_state::digit_w )
m_cassette->output( BIT(data, 6) ? +1.0 : -1.0);
data &= 7;
- if (data != m_digit)
- {
- m_digit = data;
- m_dig_change = true;
- }
+ m_digit = data;
}
WRITE8_MEMBER( emma2_state::segment_w )
{
- if (m_dig_change)
- {
- m_dig_change = false;
- m_digits[m_digit] = data;
- }
+ m_display->matrix(1<<m_digit, data);
}
READ8_MEMBER( emma2_state::keyboard_r )
{
- u8 data = m_keyboard[m_digit]->read();
+ u8 data = m_io_keyboard[m_digit]->read();
data |= ((m_cassette)->input() < 0.0) ? 0x80 : 0;
return data;
}
-void emma2_state::machine_start()
-{
- m_digits.resolve();
-}
-
void emma2_state::machine_reset()
{
m_digit = 0;
- m_dig_change = 0;
}
void emma2_state::emma2(machine_config &config)
@@ -198,6 +183,8 @@ void emma2_state::emma2(machine_config &config)
/* video hardware */
config.set_default_layout(layout_emma2);
+ PWM_DISPLAY(config, m_display).set_size(8, 8);
+ m_display->set_segmask(0xff, 0xff);
/* Devices */
VIA6522(config, m_via, 1'000'000); // #2 from cpu