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::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(); }