summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2021-02-18 16:57:19 -0500
committer AJR <ajrhacker@users.noreply.github.com>2021-02-18 16:57:19 -0500
commit214cb32fe75ed98eed3e96d5afa6c521960cd75c (patch)
tree34818e183d48fe07bbff498c050c9db6174f16da
parentbe97d5438d41961721684e2f9071d982ede22361 (diff)
kl5c80a12, kl5c80a16: Emulate on-chip parallel ports
* getbass: Add EEPROM for I/O CPU
-rw-r--r--src/devices/cpu/z80/kl5c80a12.cpp208
-rw-r--r--src/devices/cpu/z80/kl5c80a12.h47
-rw-r--r--src/devices/cpu/z80/kl5c80a16.cpp99
-rw-r--r--src/devices/cpu/z80/kl5c80a16.h30
-rw-r--r--src/mame/drivers/ddenlovr.cpp88
-rw-r--r--src/mame/drivers/model3.cpp9
-rw-r--r--src/mame/drivers/sigmab98.cpp94
7 files changed, 437 insertions, 138 deletions
diff --git a/src/devices/cpu/z80/kl5c80a12.cpp b/src/devices/cpu/z80/kl5c80a12.cpp
index 7f79c37dec9..b5674d3b339 100644
--- a/src/devices/cpu/z80/kl5c80a12.cpp
+++ b/src/devices/cpu/z80/kl5c80a12.cpp
@@ -14,7 +14,7 @@
— USART (KP51) (unemulated)
— 16-bit timer/counters (KP64, KP63) (KP64 unemulated)
— 16-level interrupt controller (KP69)
- — Parallel ports (KP65, KP66) (unemulated)
+ — Parallel ports (KP65, KP66)
— 512-byte high-speed RAM
— External bus interface unit (unemulated)
@@ -39,6 +39,16 @@ kl5c80a12_device::kl5c80a12_device(const machine_config &mconfig, const char *ta
address_map_constructor(FUNC(kl5c80a12_device::internal_ram), this),
address_map_constructor(FUNC(kl5c80a12_device::internal_io), this))
, m_kp69(*this, "kp69")
+ , m_porta_in_callback(*this)
+ , m_porta_out_callback(*this)
+ , m_portb_in_callback(*this)
+ , m_portb_out_callback(*this)
+ , m_porta_data{0, 0}
+ , m_porta_direction{0, 0}
+ , m_porta_3state{0, 0}
+ , m_portb_data{0, 0, 0}
+ , m_portb_direction(0)
+ , m_portb_3state{0, 0, 0}
{
}
@@ -61,6 +71,9 @@ void kl5c80a12_device::internal_io(address_map &map)
{
map(0x00, 0x07).mirror(0xff00).rw(FUNC(kl5c80a12_device::mmu_r), FUNC(kl5c80a12_device::mmu_w));
map(0x20, 0x25).mirror(0xff00).rw("timerb", FUNC(kp63_3channel_device::read), FUNC(kp63_3channel_device::write));
+ map(0x2c, 0x2f).mirror(0xff00).rw(FUNC(kl5c80a12_device::porta_r), FUNC(kl5c80a12_device::porta_w));
+ map(0x30, 0x32).mirror(0xff00).rw(FUNC(kl5c80a12_device::portb_r), FUNC(kl5c80a12_device::portb_w));
+ map(0x33, 0x33).mirror(0xff00).rw(FUNC(kl5c80a12_device::portb_control_r), FUNC(kl5c80a12_device::portb_control_w));
map(0x34, 0x34).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::isrl_r), FUNC(kp69_device::lerl_pgrl_w));
map(0x35, 0x35).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::isrh_r), FUNC(kp69_device::lerh_pgrh_w));
map(0x36, 0x36).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::imrl_r), FUNC(kp69_device::imrl_w));
@@ -69,6 +82,24 @@ void kl5c80a12_device::internal_io(address_map &map)
//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void kl5c80a12_device::device_resolve_objects()
+{
+ // Resolve parallel port callbacks
+ for (int i = 0; i < 2; i++)
+ m_porta_in_callback[i].resolve_safe(m_porta_3state[i]);
+ m_porta_out_callback.resolve_all_safe();
+ for (int i = 0; i < 3; i++)
+ m_portb_in_callback[i].resolve_safe(m_portb_3state[i]);
+ m_portb_out_callback.resolve_all_safe();
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -77,6 +108,12 @@ void kl5c80a12_device::device_start()
kc82_device::device_start();
m_kp69->add_to_state(*this, KP69_IRR);
+
+ // Register save state
+ save_item(NAME(m_porta_data));
+ save_item(NAME(m_porta_direction));
+ save_item(NAME(m_portb_data));
+ save_item(NAME(m_portb_direction));
}
@@ -87,6 +124,18 @@ void kl5c80a12_device::device_start()
void kl5c80a12_device::device_reset()
{
kc82_device::device_reset();
+
+ // Reset parallel port registers
+ std::fill(std::begin(m_porta_data), std::end(m_porta_data), 0x00);
+ std::fill(std::begin(m_porta_direction), std::end(m_porta_direction), 0x00);
+ std::fill(std::begin(m_portb_data), std::end(m_portb_data), 0x00);
+ m_portb_direction = 0x00;
+
+ // Reset parallel port outputs
+ for (int i = 0; i < 2; i++)
+ m_porta_out_callback[i](0, m_porta_3state[i], 0x00);
+ for (int i = 0; i < 3; i++)
+ m_portb_out_callback[i](0, m_portb_3state[i], 0x00);
}
@@ -117,3 +166,160 @@ void kl5c80a12_device::device_config_complete()
{
set_daisy_config(pseudo_daisy_config);
}
+
+
+//**************************************************************************
+// KP65 PARALLEL PORT
+//**************************************************************************
+
+//-------------------------------------------------
+// porta_r - read from parallel port A data or
+// direction register
+//-------------------------------------------------
+
+u8 kl5c80a12_device::porta_r(offs_t offset)
+{
+ const unsigned n = offset >> 1;
+ if (BIT(offset, 0))
+ return m_porta_direction[n];
+ else
+ {
+ u8 data = m_porta_data[n];
+ const u8 dir = m_porta_direction[n];
+ if (dir != 0xff)
+ data = (data & dir) | (m_porta_in_callback[n](0, u8(~dir)) & ~dir);
+ return data;
+ }
+}
+
+
+//-------------------------------------------------
+// porta_w - write to parallel port A data or
+// direction register
+//-------------------------------------------------
+
+void kl5c80a12_device::porta_w(offs_t offset, u8 data)
+{
+ const unsigned n = offset >> 1;
+ u8 dir = m_porta_direction[n];
+ if (BIT(offset, 0))
+ {
+ if (dir == data)
+ return;
+ m_porta_direction[n] = dir = data;
+ data = m_porta_data[n];
+ }
+ else
+ {
+ u8 old_data = std::exchange(m_porta_data[n], data);
+ if (((old_data ^ data) & dir) == 0)
+ return;
+ }
+
+ // Update port output
+ m_porta_out_callback[n](0, (data & dir) | (m_porta_3state[n] & ~dir), dir);
+}
+
+
+//**************************************************************************
+// KP66 PARALLEL PORT
+//**************************************************************************
+
+//-------------------------------------------------
+// portb_r - read from parallel port B data
+// register
+//-------------------------------------------------
+
+u8 kl5c80a12_device::portb_r(offs_t offset)
+{
+ u8 data = m_portb_data[offset];
+ const u8 dir = std::array<u8, 4>{{0x00, 0x0f, 0xf0, 0xff}}[BIT(m_portb_direction, offset * 2, 2)];
+ if (dir != 0xff)
+ data = (data & dir) | (m_portb_in_callback[offset](0, u8(~dir)) & ~dir);
+ return data;
+}
+
+
+//-------------------------------------------------
+// portb_update_output - update output for one
+// port in parallel port B
+//-------------------------------------------------
+
+void kl5c80a12_device::portb_update_output(unsigned n)
+{
+ const u8 dir = std::array<u8, 4>{{0x00, 0x0f, 0xf0, 0xff}}[BIT(m_portb_direction, n * 2, 2)];
+ m_portb_out_callback[n](0, (m_portb_data[n] & dir) | (m_portb_3state[n] & ~dir), dir);
+}
+
+
+//-------------------------------------------------
+// portb_w - write to parallel port B data
+// register
+//-------------------------------------------------
+
+void kl5c80a12_device::portb_w(offs_t offset, u8 data)
+{
+ const u8 old_data = std::exchange(m_portb_data[offset], data);
+ const u8 dir = std::array<u8, 4>{{0x00, 0x0f, 0xf0, 0xff}}[BIT(m_portb_direction, offset * 2, 2)];
+ if (((old_data ^ data) & dir) != 0)
+ portb_update_output(offset);
+}
+
+
+//-------------------------------------------------
+// portb_control_r - read from parallel port B
+// direction register
+//-------------------------------------------------
+
+u8 kl5c80a12_device::portb_control_r()
+{
+ return m_portb_direction;
+}
+
+
+//-------------------------------------------------
+// portb_control_w - write to parallel port B
+// direction register or bit command
+//-------------------------------------------------
+
+void kl5c80a12_device::portb_control_w(u8 data)
+{
+ if ((data & 0xc0) == 0xc0)
+ {
+ // Bit set/reset command
+ const unsigned b = BIT(data, 1, 3);
+ const unsigned n = BIT(data, 4, 2);
+ if (n < 3)
+ {
+ if (BIT(m_portb_data[n], b) != BIT(data, 0))
+ {
+ m_portb_data[n] ^= 1 << b;
+ if (BIT(m_portb_direction, n * 2 + (b < 4 ? 0 : 1)))
+ portb_update_output(n);
+ }
+ }
+ else
+ {
+ if ((data & 0x0d) == 0x0d)
+ logerror("%s: Attempt to set bit %d in port B direction register\n", machine().describe_context(), BIT(data, 1, 3));
+ else if (BIT(m_portb_direction, b) != BIT(data, 0))
+ {
+ m_portb_direction ^= 1 << b;
+ portb_update_output(b >> 1);
+ }
+ }
+ }
+ else if ((data & 0xc0) == 0)
+ {
+ // Write direction register
+ const u8 old_dir = std::exchange(m_portb_direction, data);
+ if (((data ^ old_dir) & 0x03) != 0)
+ portb_update_output(0);
+ if (((data ^ old_dir) & 0x0c) != 0)
+ portb_update_output(1);
+ if (((data ^ old_dir) & 0x30) != 0)
+ portb_update_output(2);
+ }
+ else
+ logerror("%s: Writing %02X to port B command register\n", machine().describe_context(), data);
+}
diff --git a/src/devices/cpu/z80/kl5c80a12.h b/src/devices/cpu/z80/kl5c80a12.h
index ebe1cb3bea3..28434f8c8f6 100644
--- a/src/devices/cpu/z80/kl5c80a12.h
+++ b/src/devices/cpu/z80/kl5c80a12.h
@@ -30,10 +30,30 @@ public:
// device type constructor
kl5c80a12_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ // callback configuration
+ auto in_p0_callback() { return m_porta_in_callback[0].bind(); }
+ auto out_p0_callback() { return m_porta_out_callback[0].bind(); }
+ auto in_p1_callback() { return m_porta_in_callback[1].bind(); }
+ auto out_p1_callback() { return m_porta_out_callback[1].bind(); }
+ auto in_p2_callback() { return m_portb_in_callback[0].bind(); }
+ auto out_p2_callback() { return m_portb_out_callback[0].bind(); }
+ auto in_p3_callback() { return m_portb_in_callback[1].bind(); }
+ auto out_p3_callback() { return m_portb_out_callback[1].bind(); }
+ auto in_p4_callback() { return m_portb_in_callback[2].bind(); }
+ auto out_p4_callback() { return m_portb_out_callback[2].bind(); }
+
+ // misc. configuration
+ void set_p0_3state(u8 value) { m_porta_3state[0] = value; }
+ void set_p1_3state(u8 value) { m_porta_3state[1] = value; }
+ void set_p2_3state(u8 value) { m_portb_3state[0] = value; }
+ void set_p3_3state(u8 value) { m_portb_3state[1] = value; }
+ void set_p4_3state(u8 value) { m_portb_3state[2] = value; }
+
protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_config_complete() override;
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
@@ -42,12 +62,39 @@ protected:
virtual u64 execute_cycles_to_clocks(u64 cycles) const noexcept override { return (cycles * 2); }
private:
+ // internal I/O handlers
+ u8 porta_r(offs_t offset);
+ void porta_w(offs_t offset, u8 data);
+ u8 portb_r(offs_t offset);
+ void portb_w(offs_t offset, u8 data);
+ u8 portb_control_r();
+ void portb_control_w(u8 data);
+
+ // internal helpers
+ void portb_update_output(unsigned n);
+
// internal address maps
void internal_ram(address_map &map);
void internal_io(address_map &map);
// subdevice finders
required_device<kp69_device> m_kp69;
+
+ // callback objects
+ devcb_read8::array<2> m_porta_in_callback;
+ devcb_write8::array<2> m_porta_out_callback;
+ devcb_read8::array<3> m_portb_in_callback;
+ devcb_write8::array<3> m_portb_out_callback;
+
+ // parallel port A state
+ u8 m_porta_data[2];
+ u8 m_porta_direction[2];
+ u8 m_porta_3state[2];
+
+ // parallel port B state
+ u8 m_portb_data[3];
+ u8 m_portb_direction;
+ u8 m_portb_3state[3];
};
diff --git a/src/devices/cpu/z80/kl5c80a16.cpp b/src/devices/cpu/z80/kl5c80a16.cpp
index 8fa31925366..d92cc9142de 100644
--- a/src/devices/cpu/z80/kl5c80a16.cpp
+++ b/src/devices/cpu/z80/kl5c80a16.cpp
@@ -11,7 +11,7 @@
— Synchronous serial port (KP62) (unemulated)
— 16-bit timer/counters (KP63A)
— 16-level interrupt controller (KP69)
- — Parallel ports (KP67) (unemulated)
+ — Parallel ports (KP67)
— External bus/DRAM interface unit (unemulated)
***************************************************************************/
@@ -35,6 +35,11 @@ kl5c80a16_device::kl5c80a16_device(const machine_config &mconfig, const char *ta
address_map_constructor(),
address_map_constructor(FUNC(kl5c80a16_device::internal_io), this))
, m_kp69(*this, "kp69")
+ , m_port_in_callback(*this)
+ , m_port_out_callback(*this)
+ , m_port_data{0, 0, 0, 0}
+ , m_port_direction{0x0f, 0, 0, 0}
+ , m_port_3state{0, 0, 0, 0}
{
}
@@ -51,6 +56,22 @@ void kl5c80a16_device::internal_io(address_map &map)
map(0x35, 0x35).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::isrh_r), FUNC(kp69_device::lerh_pgrh_w));
map(0x36, 0x36).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::imrl_r), FUNC(kp69_device::imrl_w));
map(0x37, 0x37).mirror(0xff00).rw(m_kp69, FUNC(kp69_device::imrh_r), FUNC(kp69_device::ivr_imrh_w));
+ map(0x38, 0x3f).mirror(0xff00).rw(FUNC(kl5c80a16_device::port_r), FUNC(kl5c80a16_device::port_w));
+}
+
+
+//-------------------------------------------------
+// device_resolve_objects - resolve objects that
+// may be needed for other devices to set
+// initial conditions at start time
+//-------------------------------------------------
+
+void kl5c80a16_device::device_resolve_objects()
+{
+ // Resolve parallel port callbacks
+ for (int i = 0; i < 4; i++)
+ m_port_in_callback[i].resolve_safe(m_port_3state[i]);
+ m_port_out_callback.resolve_all_safe();
}
@@ -63,6 +84,10 @@ void kl5c80a16_device::device_start()
kc82_device::device_start();
m_kp69->add_to_state(*this, KP69_IRR);
+
+ // Register save state
+ save_item(NAME(m_port_data));
+ save_item(NAME(m_port_direction));
}
@@ -73,6 +98,14 @@ void kl5c80a16_device::device_start()
void kl5c80a16_device::device_reset()
{
kc82_device::device_reset();
+
+ // Reset parallel port registers (Port 0 direction is fixed to upper 4 bits input & lower 4 bits output)
+ std::fill(std::begin(m_port_data), std::end(m_port_data), 0x00);
+ std::fill(std::begin(m_port_direction) + 1, std::end(m_port_direction), 0x00);
+
+ // Reset parallel port outputs
+ for (int i = 1; i < 4; i++)
+ m_port_out_callback[i](0, m_port_3state[i] & ~m_port_direction[i], m_port_direction[i]);
}
@@ -104,3 +137,67 @@ void kl5c80a16_device::device_config_complete()
{
set_daisy_config(pseudo_daisy_config);
}
+
+
+//**************************************************************************
+// KP67 PARALLEL PORT
+//**************************************************************************
+
+//-------------------------------------------------
+// port_r - read from parallel port data or
+// direction register
+//-------------------------------------------------
+
+u8 kl5c80a16_device::port_r(offs_t offset)
+{
+ if (BIT(offset, 0))
+ return m_port_direction[offset >> 1];
+ else
+ {
+ u8 data = m_port_data[offset >> 1];
+ const u8 dir = m_port_direction[offset >> 1];
+ if (dir != 0xff)
+ data = (data & dir) | (m_port_in_callback[offset >> 1](0, u8(~dir)) & ~dir);
+ return data;
+ }
+}
+
+
+//-------------------------------------------------
+// port_w - write to parallel port data or
+// direction register or bit control
+//-------------------------------------------------
+
+void kl5c80a16_device::port_w(offs_t offset, u8 data)
+{
+ unsigned p = offset >> 1;
+ u8 dir = m_port_direction[p];
+ if (offset == 1)
+ {
+ // Bit set/reset command
+ const unsigned b = BIT(data, 1, 3);
+ p = BIT(data, 4, 2);
+ if (BIT(m_port_data[p], b) == BIT(data, 0))
+ return;
+ data = (m_port_data[p] ^= 1 << b);
+ dir = m_port_direction[p];
+ if (!BIT(dir, b))
+ return;
+ }
+ else if (BIT(offset, 0))
+ {
+ if (dir == data)
+ return;
+ m_port_direction[p] = dir = data;
+ data = m_port_data[p];
+ }
+ else
+ {
+ u8 old_data = std::exchange(m_port_data[p], data);
+ if (((old_data ^ data) & dir) == 0)
+ return;
+ }
+
+ // Update port output
+ m_port_out_callback[offset >> 1](0, (data & dir) | (m_port_3state[offset >> 1] & ~dir), dir);
+}
diff --git a/src/devices/cpu/z80/kl5c80a16.h b/src/devices/cpu/z80/kl5c80a16.h
index 1593787010b..d3ac8eda636 100644
--- a/src/devices/cpu/z80/kl5c80a16.h
+++ b/src/devices/cpu/z80/kl5c80a16.h
@@ -30,10 +30,27 @@ public:
// device type constructor
kl5c80a16_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+ // callback configuration
+ auto in_p0_callback() { return m_port_in_callback[0].bind(); }
+ auto out_p0_callback() { return m_port_out_callback[0].bind(); }
+ auto in_p1_callback() { return m_port_in_callback[1].bind(); }
+ auto out_p1_callback() { return m_port_out_callback[1].bind(); }
+ auto in_p2_callback() { return m_port_in_callback[2].bind(); }
+ auto out_p2_callback() { return m_port_out_callback[2].bind(); }
+ auto in_p3_callback() { return m_port_in_callback[3].bind(); }
+ auto out_p3_callback() { return m_port_out_callback[3].bind(); }
+
+ // misc. configuration
+ void set_p0_3state(u8 value) { m_port_3state[0] = value; }
+ void set_p1_3state(u8 value) { m_port_3state[1] = value; }
+ void set_p2_3state(u8 value) { m_port_3state[2] = value; }
+ void set_p3_3state(u8 value) { m_port_3state[3] = value; }
+
protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_config_complete() override;
+ virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() override;
@@ -42,11 +59,24 @@ protected:
virtual u64 execute_cycles_to_clocks(u64 cycles) const noexcept override { return (cycles * 2); }
private:
+ // internal I/O handlers
+ u8 port_r(offs_t offset);
+ void port_w(offs_t offset, u8 data);
+
// internal address map
void internal_io(address_map &map);
// subdevice finders
required_device<kp69_device> m_kp69;
+
+ // callback objects
+ devcb_read8::array<4> m_port_in_callback;
+ devcb_write8::array<4> m_port_out_callback;
+
+ // parallel port state
+ u8 m_port_data[4];
+ u8 m_port_direction[4];
+ u8 m_port_3state[4];
};
diff --git a/src/mame/drivers/ddenlovr.cpp b/src/mame/drivers/ddenlovr.cpp
index 72f1b38e2a1..51981206859 100644
--- a/src/mame/drivers/ddenlovr.cpp
+++ b/src/mame/drivers/ddenlovr.cpp
@@ -2867,11 +2867,6 @@ uint8_t ddenlovr_state::hanakanz_rand_r()
void hanakanz_state::hanakanz_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
@@ -2889,11 +2884,6 @@ void hanakanz_state::hanakanz_portmap(address_map &map)
void hanakanz_state::hkagerou_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
@@ -2912,11 +2902,6 @@ void hanakanz_state::hkagerou_portmap(address_map &map)
void hanakanz_state::kotbinyo_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
@@ -2937,11 +2922,6 @@ void hanakanz_state::kotbinyo_portmap(address_map &map)
void hanakanz_state::kotbinsp_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
@@ -2971,11 +2951,6 @@ uint8_t hanakanz_state::mjreach1_protection_r()
void hanakanz_state::mjreach1_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::hanakanz_busy_r), FUNC(hanakanz_state::hanakanz_oki_bank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::hanakanz_dsw_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x80, 0x80).w(FUNC(hanakanz_state::hanakanz_blitter_data_w));
map(0x81, 0x81).w(FUNC(hanakanz_state::hanakanz_palette_w));
map(0x83, 0x84).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
@@ -3966,11 +3941,6 @@ uint8_t hanakanz_state::jongtei_busy_r()
void hanakanz_state::jongtei_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::jongtei_busy_r), FUNC(hanakanz_state::jongtei_okibank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x40, 0x40).portr("SYSTEM");
map(0x41, 0x42).r(FUNC(hanakanz_state::hanakanz_keyb_r));
map(0x43, 0x43).w(FUNC(hanakanz_state::hanakanz_coincounter_w));
@@ -4023,11 +3993,6 @@ uint8_t hanakanz_state::mjgnight_protection_r()
void hanakanz_state::mjgnight_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::jongtei_busy_r), FUNC(hanakanz_state::jongtei_okibank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_rombank_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x40, 0x40).portr("SYSTEM");
map(0x41, 0x42).r(FUNC(hanakanz_state::hanakanz_keyb_r));
map(0x46, 0x46).w(FUNC(hanakanz_state::mjgnight_coincounter_w));
@@ -4600,11 +4565,6 @@ uint8_t hanakanz_state::daimyojn_year_hack_r(offs_t offset)
void hanakanz_state::daimyojn_portmap(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(hanakanz_state::jongtei_busy_r), FUNC(hanakanz_state::daimyojn_okibank_w));
- map(0x2e, 0x2e).w(FUNC(hanakanz_state::daimyojn_palette_sel_w));
- map(0x30, 0x30).w(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
- map(0x31, 0x31).w(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
- map(0x32, 0x32).r(FUNC(hanakanz_state::hanakanz_dsw_r));
map(0x40, 0x40).w(FUNC(hanakanz_state::daimyojn_blitter_data_palette_w));
map(0x42, 0x44).r(FUNC(hanakanz_state::hanakanz_gfxrom_r));
map(0x80, 0x8f).rw("rtc", FUNC(msm6242_device::read), FUNC(msm6242_device::write));
@@ -10092,9 +10052,15 @@ void mmpanic_state::mmpanic(machine_config &config)
void hanakanz_state::hanakanz(machine_config &config)
{
/* basic machine hardware */
- KL5C80A12(config, m_maincpu, 20'000'000); // KL5C80A12
- m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
- m_maincpu->set_addrmap(AS_IO, &hanakanz_state::hanakanz_portmap);
+ kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, 20'000'000));
+ maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
+ maincpu.set_addrmap(AS_IO, &hanakanz_state::hanakanz_portmap);
+ maincpu.in_p0_callback().set(FUNC(hanakanz_state::hanakanz_busy_r));
+ maincpu.out_p0_callback().set(FUNC(hanakanz_state::hanakanz_oki_bank_w));
+ maincpu.out_p1_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
+ maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_rombank_w));
+ maincpu.out_p3_callback().set(FUNC(hanakanz_state::hanakanz_dsw_w));
+ maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,hanakanz)
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
@@ -10137,9 +10103,15 @@ void hanakanz_state::hkagerou(machine_config &config)
void hanakanz_state::kotbinyo(machine_config &config)
{
/* basic machine hardware */
- KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !!
- m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
- m_maincpu->set_addrmap(AS_IO, &hanakanz_state::kotbinyo_portmap);
+ kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, XTAL(20'000'000))); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !!
+ maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
+ maincpu.set_addrmap(AS_IO, &hanakanz_state::kotbinyo_portmap);
+ maincpu.in_p0_callback().set(FUNC(hanakanz_state::hanakanz_busy_r));
+ maincpu.out_p0_callback().set(FUNC(hanakanz_state::hanakanz_oki_bank_w));
+ maincpu.out_p1_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
+ maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_rombank_w));
+ maincpu.out_p3_callback().set(FUNC(hanakanz_state::hanakanz_dsw_w));
+ maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,hanakanz)
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
@@ -10540,9 +10512,15 @@ void ddenlovr_state::hparadis(machine_config &config)
void hanakanz_state::jongtei(machine_config &config)
{
/* basic machine hardware */
- KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // KL5C80A12
- m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
- m_maincpu->set_addrmap(AS_IO, &hanakanz_state::jongtei_portmap);
+ kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, XTAL(20'000'000)));
+ maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
+ maincpu.set_addrmap(AS_IO, &hanakanz_state::jongtei_portmap);
+ maincpu.in_p0_callback().set(FUNC(hanakanz_state::jongtei_busy_r));
+ maincpu.out_p0_callback().set(FUNC(hanakanz_state::jongtei_okibank_w));
+ maincpu.out_p1_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
+ maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_rombank_w));
+ maincpu.out_p3_callback().set(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
+ maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,hanakanz)
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
@@ -10754,9 +10732,15 @@ void ddenlovr_state::seljan2(machine_config &config)
void hanakanz_state::daimyojn(machine_config &config)
{
/* basic machine hardware */
- KL5C80A12(config, m_maincpu, XTAL(20'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
- m_maincpu->set_addrmap(AS_IO, &hanakanz_state::daimyojn_portmap);
+ kl5c80a12_device &maincpu(KL5C80A12(config, m_maincpu, XTAL(20'000'000)));
+ maincpu.set_addrmap(AS_PROGRAM, &hanakanz_state::hanakanz_map);
+ maincpu.set_addrmap(AS_IO, &hanakanz_state::daimyojn_portmap);
+ maincpu.in_p0_callback().set(FUNC(hanakanz_state::jongtei_busy_r));
+ maincpu.out_p0_callback().set(FUNC(hanakanz_state::daimyojn_okibank_w));
+ maincpu.out_p1_callback().set(FUNC(hanakanz_state::daimyojn_palette_sel_w));
+ maincpu.out_p2_callback().set(FUNC(hanakanz_state::hanakanz_blitter_reg_w));
+ maincpu.out_p3_callback().set(FUNC(hanakanz_state::jongtei_dsw_keyb_w));
+ maincpu.in_p4_callback().set(FUNC(hanakanz_state::hanakanz_dsw_r));
MCFG_MACHINE_START_OVERRIDE(hanakanz_state,mjflove)
MCFG_MACHINE_RESET_OVERRIDE(hanakanz_state,hanakanz)
diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp
index 1244cac840e..d0dc44103a4 100644
--- a/src/mame/drivers/model3.cpp
+++ b/src/mame/drivers/model3.cpp
@@ -6140,6 +6140,7 @@ void model3_state::getbass_iocpu_mem(address_map &map)
void model3_state::getbass_iocpu_io(address_map &map)
{
map.global_mask(0xff);
+ //map(0x40, 0x47).w("iodac", FUNC(ad7805_device::write8));
map(0x60, 0x6f).rw("io60", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write));
map(0x70, 0x7f).rw("io70", FUNC(sega_315_5649_device::read), FUNC(sega_315_5649_device::write));
}
@@ -6151,9 +6152,17 @@ void model3_state::getbass(machine_config &config)
kl5c80a16_device &iocpu(KL5C80A16(config, "iocpu", 32_MHz_XTAL / 2));
iocpu.set_addrmap(AS_PROGRAM, &model3_state::getbass_iocpu_mem);
iocpu.set_addrmap(AS_IO, &model3_state::getbass_iocpu_io);
+ iocpu.in_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::do_read)).lshift(3);
+ iocpu.out_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::di_write)).bit(4);
+ iocpu.out_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::clk_write)).bit(5);
+ iocpu.out_p2_callback().set("ioeeprom", FUNC(eeprom_serial_93cxx_device::cs_write)).bit(6);
SEGA_315_5296(config, "io60", 32_MHz_XTAL);
SEGA_315_5649(config, "io70", 0);
+
+ EEPROM_93C46_16BIT(config, "ioeeprom"); // AK93C45
+
+ //AD7805(config, "iodac");
}
void model3_state::model3_15(machine_config &config)
diff --git a/src/mame/drivers/sigmab98.cpp b/src/mame/drivers/sigmab98.cpp
index 0ec089f9b74..50aea20f0e4 100644
--- a/src/mame/drivers/sigmab98.cpp
+++ b/src/mame/drivers/sigmab98.cpp
@@ -310,9 +310,7 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER(gocowboy_int);
TIMER_DEVICE_CALLBACK_MEMBER(timer_1khz);
- uint8_t coin_counter_r();
void coin_counter_w(uint8_t data);
- uint8_t leds_r();
void leds_w(uint8_t data);
void hopper_w(uint8_t data);
uint8_t coin_hopper_r();
@@ -330,12 +328,8 @@ private:
void animalc_map(address_map &map);
void gocowboy_io(address_map &map);
void gocowboy_map(address_map &map);
- void haekaka_io(address_map &map);
void haekaka_map(address_map &map);
- void itazuram_io(address_map &map);
void itazuram_map(address_map &map);
- void pyenaget_io(address_map &map);
- void tdoboon_io(address_map &map);
void tdoboon_map(address_map &map);
// Required devices
@@ -968,10 +962,6 @@ void sammymdl_state::show_3_outputs()
#endif
}
// Port 31
-uint8_t sammymdl_state::coin_counter_r()
-{
- return m_out[0];
-}
void sammymdl_state::coin_counter_w(uint8_t data)
{
machine().bookkeeping().coin_counter_w(0, data & 0x01 ); // coin1 in
@@ -989,10 +979,6 @@ void sammymdl_state::coin_counter_w(uint8_t data)
}
// Port 32
-uint8_t sammymdl_state::leds_r()
-{
- return m_out[1];
-}
void sammymdl_state::leds_w(uint8_t data)
{
m_leds[0] = BIT(data, 0); // button
@@ -1039,11 +1025,6 @@ void sammymdl_state::animalc_map(address_map &map)
void sammymdl_state::animalc_io(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
- map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
- map(0x30, 0x30).portr("BUTTON");
- map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
- map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::leds_w));
map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
@@ -1085,11 +1066,6 @@ void sammymdl_state::gocowboy_leds_w(uint8_t data)
void sammymdl_state::gocowboy_io(address_map &map)
{
map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
- map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
- map(0x30, 0x30).portr("BUTTON");
- map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
- map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::gocowboy_leds_w));
map(0x90, 0x90).rw("oki", FUNC(okim9810_device::read), FUNC(okim9810_device::write));
map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
@@ -1145,21 +1121,6 @@ void sammymdl_state::haekaka_map(address_map &map)
map(0x73013, 0x73013).r(FUNC(sammymdl_state::haekaka_vblank_r));
}
-void sammymdl_state::haekaka_io(address_map &map)
-{
- map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
- map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
- map(0x30, 0x30).portr("BUTTON");
- map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::haekaka_coin_counter_w));
- map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::haekaka_leds_w));
- map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
- map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
- map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
- map(0xb0, 0xb0).w(FUNC(sammymdl_state::hopper_w));
- map(0xc0, 0xc0).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // 1
-}
-
/***************************************************************************
Itazura Monkey
***************************************************************************/
@@ -1177,31 +1138,6 @@ void sammymdl_state::itazuram_map(address_map &map)
map(0x73013, 0x73013).r(FUNC(sammymdl_state::haekaka_vblank_r)).nopw(); // IRQ Ack?
}
-void sammymdl_state::itazuram_io(address_map &map)
-{
- map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
- map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
- map(0x30, 0x30).portr("BUTTON");
- map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
- map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::leds_w));
- map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
- map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
- map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
- map(0xb0, 0xb0).w(FUNC(sammymdl_state::hopper_w));
- map(0xc0, 0xc0).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // 1
-}
-
-/***************************************************************************
- Pye-nage Taikai
-***************************************************************************/
-
-void sammymdl_state::pyenaget_io(address_map &map)
-{
- haekaka_io(map);
- map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
-}
-
/***************************************************************************
Taihou de Doboon
***************************************************************************/
@@ -1218,21 +1154,6 @@ void sammymdl_state::tdoboon_map(address_map &map)
map(0x73013, 0x73013).r(FUNC(sammymdl_state::haekaka_vblank_r));
}
-void sammymdl_state::tdoboon_io(address_map &map)
-{
- map.global_mask(0xff);
- map(0x2c, 0x2c).rw(FUNC(sammymdl_state::eeprom_r), FUNC(sammymdl_state::eeprom_w));
- map(0x2e, 0x2e).r(FUNC(sammymdl_state::coin_hopper_r));
- map(0x30, 0x30).portr("BUTTON");
- map(0x31, 0x31).rw(FUNC(sammymdl_state::coin_counter_r), FUNC(sammymdl_state::coin_counter_w));
- map(0x32, 0x32).rw(FUNC(sammymdl_state::leds_r), FUNC(sammymdl_state::leds_w));
- map(0x90, 0x90).w("oki", FUNC(okim9810_device::write));
- map(0x91, 0x91).w("oki", FUNC(okim9810_device::tmp_register_w));
- map(0x92, 0x92).r("oki", FUNC(okim9810_device::read));
- map(0xb0, 0xb0).w(FUNC(sammymdl_state::hopper_w));
- map(0xc0, 0xc0).w("watchdog", FUNC(watchdog_timer_device::reset_w)); // 1
-}
-
/***************************************************************************
@@ -1660,6 +1581,12 @@ void sammymdl_state::sammymdl(machine_config &config)
KL5C80A12(config, m_maincpu, XTAL(20'000'000)); // !! KL5C80A12CFP @ 10MHz? (actually 4 times faster than Z80) !!
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::animalc_map);
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::animalc_io);
+ m_maincpu->in_p0_callback().set(FUNC(sammymdl_state::eeprom_r));
+ m_maincpu->out_p0_callback().set(FUNC(sammymdl_state::eeprom_w));
+ m_maincpu->in_p1_callback().set(FUNC(sammymdl_state::coin_hopper_r));
+ m_maincpu->in_p2_callback().set_ioport("BUTTON");
+ m_maincpu->out_p3_callback().set(FUNC(sammymdl_state::coin_counter_w));
+ m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::leds_w));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // battery backed RAM
EEPROM_93C46_8BIT(config, "eeprom");
@@ -1698,7 +1625,6 @@ void sammymdl_state::animalc(machine_config &config)
sammymdl(config);
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::animalc_map);
- m_maincpu->set_addrmap(AS_IO, &sammymdl_state::animalc_io);
}
void sammymdl_state::gocowboy(machine_config &config)
@@ -1707,6 +1633,7 @@ void sammymdl_state::gocowboy(machine_config &config)
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::gocowboy_map);
m_maincpu->set_addrmap(AS_IO, &sammymdl_state::gocowboy_io);
+ m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::gocowboy_leds_w));
TIMER(config, "scantimer").configure_scanline(FUNC(sammymdl_state::gocowboy_int), "screen", 0, 1);
TIMER(config, "1khztimer").configure_periodic(FUNC(sammymdl_state::timer_1khz), attotime::from_msec(1));
@@ -1723,7 +1650,8 @@ void sammymdl_state::haekaka(machine_config &config)
sammymdl(config);
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::haekaka_map);
- m_maincpu->set_addrmap(AS_IO, &sammymdl_state::haekaka_io);
+ m_maincpu->out_p3_callback().set(FUNC(sammymdl_state::haekaka_coin_counter_w));
+ m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::haekaka_leds_w));
m_screen->screen_vblank().set(m_kp69, FUNC(kp69_device::ir_w<2>));
}
@@ -1736,7 +1664,6 @@ void sammymdl_state::itazuram(machine_config &config)
TIMER(config, "1khztimer").configure_periodic(FUNC(sammymdl_state::timer_1khz), attotime::from_msec(1));
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::itazuram_map);
- m_maincpu->set_addrmap(AS_IO, &sammymdl_state::itazuram_io);
m_screen->screen_vblank().set_nop();
}
@@ -1746,7 +1673,7 @@ void sammymdl_state::pyenaget(machine_config &config)
sammymdl(config);
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::haekaka_map);
- m_maincpu->set_addrmap(AS_IO, &sammymdl_state::pyenaget_io);
+ m_maincpu->out_p4_callback().set(FUNC(sammymdl_state::haekaka_leds_w));
m_screen->screen_vblank().set(m_kp69, FUNC(kp69_device::ir_w<2>));
}
@@ -1756,7 +1683,6 @@ void sammymdl_state::tdoboon(machine_config &config)
sammymdl(config);
m_maincpu->set_addrmap(AS_PROGRAM, &sammymdl_state::tdoboon_map);
- m_maincpu->set_addrmap(AS_IO, &sammymdl_state::tdoboon_io);
m_screen->screen_vblank().set(m_kp69, FUNC(kp69_device::ir_w<2>));
m_screen->set_visarea(0,0x140-1, 0+4,0xf0+4-1);