static void set_pc_bit(const device_config *device, int bit, int state) { i8255a_t *i8255a = get_safe_token(device); /* set output latch bit */ i8255a->output[PORT_C] &= ~(1 << bit); i8255a->output[PORT_C] |= state << bit; switch (group_mode(i8255a, GROUP_A)) { case MODE_1: if (port_mode(i8255a, PORT_A) == MODE_OUTPUT) { switch (bit) { case 3: set_intr(i8255a, PORT_A, state); break; case 6: set_inte(i8255a, PORT_A, state); break; case 7: set_obf(i8255a, PORT_A, state); break; } } else { switch (bit) { case 3: set_intr(i8255a, PORT_A, state); break; case 4: set_inte(i8255a, PORT_A, state); break; case 5: set_ibf(i8255a, PORT_A, state); break; } } break; case MODE_2: switch (bit) { case 3: set_intr(i8255a, PORT_A, state); break; case 4: set_inte2(i8255a, state); break; case 5: set_ibf(i8255a, PORT_A, state); break; case 6: set_inte1(i8255a, state); break; case 7: set_obf(i8255a, PORT_A, state); break; } break; } if (group_mode(i8255a, GROUP_B) == MODE_1) { switch (bit) { case 0: set_intr(i8255a, PORT_B, state); break; case 1: if (port_mode(i8255a, PORT_B) == MODE_OUTPUT) set_obf(i8255a, PORT_B, state); else set_ibf(i8255a, PORT_B, state); break; case 2: set_inte(i8255a, PORT_B, state); break; } } output_pc(i8255a); }
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); }
static void write_mode2(i8255a_t *i8255a, UINT8 data) { /* latch output data */ i8255a->output[PORT_A] = data; /* write data to port */ devcb_call_write8(&i8255a->out_port_func[PORT_A], 0, data); /* set output buffer full flag */ set_obf(i8255a, PORT_A, 0); /* clear interrupt */ set_intr(i8255a, PORT_A, 0); }
void i8255_device::write_mode2(UINT8 data) { // latch output data m_output[PORT_A] = data; // write data to port m_out_port_func[PORT_A](0, data); // set output buffer full flag set_obf(PORT_A, 0); // clear interrupt set_intr(PORT_A, 0); }
static void write_mode1(i8255a_t *i8255a, int port, UINT8 data) { if (port_mode(i8255a, port) == MODE_OUTPUT) { /* latch output data */ i8255a->output[port] = data; /* write data to port */ devcb_call_write8(&i8255a->out_port_func[port], 0, data); /* set output buffer full flag */ set_obf(i8255a, port, 0); /* clear interrupt */ set_intr(i8255a, port, 0); } }
void i8255_device::write_mode1(int port, UINT8 data) { if (port_mode(port) == MODE_OUTPUT) { // latch output data m_output[port] = data; // write data to port m_out_port_func[port](0, data); // set output buffer full flag set_obf(port, 0); // clear interrupt set_intr(port, 0); } }
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 i8255_device::set_pc_bit(int bit, int state) { // set output latch bit m_output[PORT_C] &= ~(1 << bit); m_output[PORT_C] |= state << bit; switch (group_mode(GROUP_A)) { case MODE_1: if (port_mode(PORT_A) == MODE_OUTPUT) { switch (bit) { case 3: set_intr(PORT_A, state); break; case 6: set_inte(PORT_A, state); break; case 7: set_obf(PORT_A, state); break; default: break; } } else { switch (bit) { case 3: set_intr(PORT_A, state); break; case 4: set_inte(PORT_A, state); break; case 5: set_ibf(PORT_A, state); break; default: break; } } break; case MODE_2: switch (bit) { case 3: set_intr(PORT_A, state); break; case 4: set_inte2(state); break; case 5: set_ibf(PORT_A, state); break; case 6: set_inte1(state); break; case 7: set_obf(PORT_A, state); break; default: break; } break; } if (group_mode(GROUP_B) == MODE_1) { switch (bit) { case 0: set_intr(PORT_B, state); break; case 1: if (port_mode(PORT_B) == MODE_OUTPUT) set_obf(PORT_B, state); else set_ibf(PORT_B, state); break; case 2: set_inte(PORT_B, state); break; default: break; } } output_pc(); }