void pia6821_device::control_b_w(UINT8 data) { int temp; // bit 7 and 6 are read only data &= 0x3f; LOG(("PIA #%s: control B write = %02X\n", tag(), data)); // update the control register m_ctl_b = data; if (C2_SET_MODE(m_ctl_b)) { // set/reset mode - bit value determines the new output temp = C2_SET(m_ctl_b); } else { // strobe mode - output is always high unless strobed temp = TRUE; } set_out_cb2(temp); // update externals update_interrupts(); }
static void control_b_w(const device_config *device, UINT8 data) { pia6821_state *p = get_token(device); int temp; /* bit 7 and 6 are read only */ data &= 0x3f; LOG(("PIA #%s: control B write = %02X\n", device->tag, data)); /* update the control register */ p->ctl_b = data; if (C2_SET_MODE(p->ctl_b)) /* set/reset mode - bit value determines the new output */ temp = C2_SET(p->ctl_b); else /* strobe mode - output is always high unless strobed */ temp = TRUE; set_out_cb2(device, temp); /* update externals */ update_interrupts(device); }
void pia6821_device::port_b_w(UINT8 data) { // buffer the output value m_out_b = data; send_to_out_b_func("port B write"); // CB2 in write strobe mode if(C2_STROBE_MODE(m_ctl_b)) { // this will cause a transition low set_out_cb2(FALSE); // if the CB2 strobe is cleared by the E, reset it right away if(STROBE_E_RESET(m_ctl_b)) { set_out_cb2(TRUE); } } }
static void port_b_w(const device_config *device, UINT8 data) { pia6821_state *p = get_token(device); /* buffer the output value */ p->out_b = data; send_to_out_b_func(device, "port B write"); /* CB2 in write strobe mode */ if (C2_STROBE_MODE(p->ctl_b)) { /* this will cause a transition low */ set_out_cb2(device, FALSE); /* if the CB2 strobe is cleared by the E, reset it right away */ if (STROBE_E_RESET(p->ctl_b)) set_out_cb2(device, TRUE); } }
UINT8 pia6821_device::port_b_r() { UINT8 ret = get_in_b_value(); // This read will implicitly clear the IRQ B1 flag. If CB2 is in write-strobe // mode with CB1 restore, and a CB1 active transition set the flag, // clearing it will cause CB2 to go high again. Note that this is different // from what happens with port A. if(m_irq_b1 && C2_STROBE_MODE(m_ctl_b) && STROBE_C1_RESET(m_ctl_b)) { set_out_cb2(TRUE); } // IRQ flags implicitly cleared by a read m_irq_b1 = FALSE; m_irq_b2 = FALSE; update_interrupts(); LOG(("PIA #%s: port B read = %02X\n", tag(), ret)); return ret; }
static UINT8 port_b_r(const device_config *device) { pia6821_state *p = get_token(device); UINT8 ret = get_in_b_value(device); /* This read will implicitly clear the IRQ B1 flag. If CB2 is in write-strobe mode with CB1 restore, and a CB1 active transition set the flag, clearing it will cause CB2 to go high again. Note that this is different from what happens with port A. */ if (p->irq_b1 && C2_STROBE_MODE(p->ctl_b) && STROBE_C1_RESET(p->ctl_b)) set_out_cb2(device, TRUE); /* IRQ flags implicitly cleared by a read */ p->irq_b1 = FALSE; p->irq_b2 = FALSE; update_interrupts(device); LOG(("PIA #%s: port B read = %02X\n", device->tag, ret)); return ret; }