diff options
Diffstat (limited to 'src/devices/machine/i8255.cpp')
-rw-r--r-- | src/devices/machine/i8255.cpp | 46 |
1 files changed, 14 insertions, 32 deletions
diff --git a/src/devices/machine/i8255.cpp b/src/devices/machine/i8255.cpp index 212eeda644f..06c242ba831 100644 --- a/src/devices/machine/i8255.cpp +++ b/src/devices/machine/i8255.cpp @@ -64,7 +64,6 @@ enum //************************************************************************** DEFINE_DEVICE_TYPE(I8255, i8255_device, "i8255", "Intel 8255 PPI") -decltype(I8255) I8255A = I8255; DEFINE_DEVICE_TYPE(AMS40489_PPI, ams40489_ppi_device, "ams40489_ppi", "Amstrad AMS40489 PPI") @@ -221,15 +220,15 @@ i8255_device::i8255_device(const machine_config &mconfig, device_type type, cons , m_force_portb_in(is_ams40489) , m_force_portc_out(is_ams40489) , m_dont_clear_output_latches(is_ams40489) - , m_in_pa_cb(*this) - , m_in_pb_cb(*this) - , m_in_pc_cb(*this) + , m_in_pa_cb(*this, 0) + , m_in_pb_cb(*this, 0) + , m_in_pc_cb(*this, 0) , m_out_pa_cb(*this) , m_out_pb_cb(*this) , m_out_pc_cb(*this) - , m_tri_pa_cb(*this) - , m_tri_pb_cb(*this) - , m_tri_pc_cb(*this) + , m_tri_pa_cb(*this, 0xff) + , m_tri_pb_cb(*this, 0xff) + , m_tri_pc_cb(*this, 0xff) , m_control(0) , m_intr{ 0, 0 } { @@ -240,20 +239,6 @@ i8255_device::i8255_device(const machine_config &mconfig, const char *tag, devic { } -void i8255_device::device_resolve_objects() -{ - // resolve callbacks - m_in_pa_cb.resolve_safe(0); - m_in_pb_cb.resolve_safe(0); - m_in_pc_cb.resolve_safe(0); - m_out_pa_cb.resolve_safe(); - m_out_pb_cb.resolve_safe(); - m_out_pc_cb.resolve_safe(); - m_tri_pa_cb.resolve_safe(0xff); - m_tri_pb_cb.resolve_safe(0xff); - m_tri_pc_cb.resolve_safe(0xff); -} - //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- @@ -460,10 +445,8 @@ void i8255_device::write_mode0(int port, uint8_t data) // write data to port if (port == PORT_A) m_out_pa_cb((offs_t)0, m_output[port]); - else if (port == PORT_B) - m_out_pb_cb((offs_t)0, m_output[port]); else - m_out_pc_cb((offs_t)0, m_output[port]); + m_out_pb_cb((offs_t)0, m_output[port]); } } @@ -478,10 +461,8 @@ void i8255_device::write_mode1(int port, uint8_t data) // write data to port if (port == PORT_A) m_out_pa_cb((offs_t)0, m_output[port]); - else if (port == PORT_B) - m_out_pb_cb((offs_t)0, m_output[port]); else - m_out_pc_cb((offs_t)0, m_output[port]); + m_out_pb_cb((offs_t)0, m_output[port]); // set output buffer full flag set_obf(port, 0); @@ -612,6 +593,7 @@ void i8255_device::set_mode(uint8_t data) if (port_mode(PORT_A) == MODE_OUTPUT) { m_out_pa_cb((offs_t)0, m_output[PORT_A]); + m_ibf[PORT_A] = 1; // correct? needed by SAM Coupe Blue Alpha sampler } else { @@ -877,7 +859,7 @@ uint8_t i8255_device::ackb_r() } -WRITE_LINE_MEMBER( i8255_device::pc2_w ) +void i8255_device::pc2_w(int state) { if (group_mode(GROUP_B) == 1) { @@ -895,7 +877,7 @@ WRITE_LINE_MEMBER( i8255_device::pc2_w ) else { // port B strobe - if (!m_ibf[PORT_B] && !state) + if (!state) { LOG("I8255 Port B Strobe\n"); @@ -910,12 +892,12 @@ WRITE_LINE_MEMBER( i8255_device::pc2_w ) } -WRITE_LINE_MEMBER( i8255_device::pc4_w ) +void i8255_device::pc4_w(int state) { if ((group_mode(GROUP_A) == 2) || ((group_mode(GROUP_A) == 1) && (port_mode(PORT_A) == MODE_INPUT))) { // port A strobe - if (!m_ibf[PORT_A] && !state) + if (!state) { LOG("I8255 Port A Strobe\n"); @@ -929,7 +911,7 @@ WRITE_LINE_MEMBER( i8255_device::pc4_w ) } -WRITE_LINE_MEMBER( i8255_device::pc6_w ) +void i8255_device::pc6_w(int state) { if ((group_mode(GROUP_A) == 2) || ((group_mode(GROUP_A) == 1) && (port_mode(PORT_A) == MODE_OUTPUT))) { |