void i8255_device::set_mode(uint8_t data) { m_control = data; // group A m_output[PORT_A] = 0; m_input[PORT_A] = 0; m_ibf[PORT_A] = 0; m_obf[PORT_A] = 1; m_inte[PORT_A] = 0; m_inte1 = 0; m_inte2 = 0; if (port_mode(PORT_A) == MODE_OUTPUT) { m_out_pa_cb((offs_t)0, m_output[PORT_A]); } else { // TTL inputs float high m_out_pa_cb((offs_t)0, 0xff); } if (LOG) { logerror("I8255 '%s' Group A Mode: %u\n", tag(), group_mode(GROUP_A)); logerror("I8255 '%s' Port A Mode: %s\n", tag(), (port_mode(PORT_A) == MODE_OUTPUT) ? "output" : "input"); logerror("I8255 '%s' Port C Upper Mode: %s\n", tag(), (port_c_upper_mode() == MODE_OUTPUT) ? "output" : "input"); logerror("I8255 '%s' Group B Mode: %u\n", tag(), group_mode(GROUP_B)); logerror("I8255 '%s' Port B Mode: %s\n", tag(), (port_mode(PORT_B) == MODE_OUTPUT) ? "output" : "input"); logerror("I8255 '%s' Port C Lower Mode: %s\n", tag(), (port_c_lower_mode() == MODE_OUTPUT) ? "output" : "input"); } // group B m_output[PORT_B] = 0; m_input[PORT_B] = 0; m_ibf[PORT_B] = 0; m_obf[PORT_B] = 1; m_inte[PORT_B] = 0; if (port_mode(PORT_B) == MODE_OUTPUT) { m_out_pb_cb((offs_t)0, m_output[PORT_B]); } else { // TTL inputs float high m_out_pb_cb((offs_t)0, 0xff); } m_output[PORT_C] = 0; m_input[PORT_C] = 0; output_pc(); }
void i8255_device::set_mode(uint8_t data) { m_control = data; // group A m_output[PORT_A] = 0; m_input[PORT_A] = 0; m_ibf[PORT_A] = 0; m_obf[PORT_A] = 1; m_inte[PORT_A] = 0; m_inte1 = 0; m_inte2 = 0; if (port_mode(PORT_A) == MODE_OUTPUT) { m_out_pa_cb((offs_t)0, m_output[PORT_A]); } else { // TTL inputs floating m_out_pa_cb((offs_t)0, m_tri_pa_cb(0)); } LOG("I8255 Group A Mode: %u\n", group_mode(GROUP_A)); LOG("I8255 Port A Mode: %s\n", (port_mode(PORT_A) == MODE_OUTPUT) ? "output" : "input"); LOG("I8255 Port C Upper Mode: %s\n", (port_c_upper_mode() == MODE_OUTPUT) ? "output" : "input"); LOG("I8255 Group B Mode: %u\n", group_mode(GROUP_B)); LOG("I8255 Port B Mode: %s\n", (port_mode(PORT_B) == MODE_OUTPUT) ? "output" : "input"); LOG("I8255 Port C Lower Mode: %s\n", (port_c_lower_mode() == MODE_OUTPUT) ? "output" : "input"); // group B m_output[PORT_B] = 0; m_input[PORT_B] = 0; m_ibf[PORT_B] = 0; m_obf[PORT_B] = 1; m_inte[PORT_B] = 0; if (port_mode(PORT_B) == MODE_OUTPUT) { m_out_pb_cb((offs_t)0, m_output[PORT_B]); } else { // TTL inputs floating m_out_pb_cb((offs_t)0, m_tri_pb_cb(0)); } m_output[PORT_C] = 0; m_input[PORT_C] = 0; output_pc(); }
inline void i8355_device::write_port(int port, UINT8 data) { m_output[port] = data; if (port == 0) {m_out_pa_cb((offs_t)0, m_output[port] & m_ddr[port]);} else {m_out_pb_cb((offs_t)0, m_output[port] & m_ddr[port]);} }
void i8255_device::write_mode2(uint8_t data) { // latch output data m_output[PORT_A] = data; // write data to port m_out_pa_cb((offs_t)0, data); // set output buffer full flag set_obf(PORT_A, 0); // clear interrupt set_intr(PORT_A, 0); }
inline void i8155_device::write_port(int port, UINT8 data) { switch (get_port_mode(port)) { case PORT_MODE_OUTPUT: m_output[port] = data; 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]); break; } }
void i8255_device::write_mode0(int port, uint8_t data) { if (port_mode(port) == MODE_OUTPUT) { // latch output data m_output[port] = 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]); } }
void i8255_device::write_mode1(int port, uint8_t data) { if (port_mode(port) == MODE_OUTPUT) { // latch output data m_output[port] = 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]); // set output buffer full flag set_obf(port, 0); // clear interrupt set_intr(port, 0); } }
void mos6530_base_t::update_pa() { UINT8 out = m_pa_out; UINT8 ddr = m_pa_ddr; UINT8 data = (out & ddr) | (ddr ^ 0xff); if (m_out_pa_cb.isnull()) { m_out_pa0_cb(BIT(data, 0)); m_out_pa1_cb(BIT(data, 1)); m_out_pa2_cb(BIT(data, 2)); m_out_pa3_cb(BIT(data, 3)); m_out_pa4_cb(BIT(data, 4)); m_out_pa5_cb(BIT(data, 5)); m_out_pa6_cb(BIT(data, 6)); m_out_pa7_cb(BIT(data, 7)); } else { m_out_pa_cb(data); } }