void ttl74153_device::update() { int sel; int section; sel = (m_b << 1) | m_a; /* process both sections */ for (section = 0; section < 2; section++) { if (m_enable[section]) m_output[section] = 0; // row 1 in truth table else m_output[section] = m_input_lines[section][sel]; } /* call callback if either of the outputs changed */ if (!m_output_cb.isnull() && ((m_output[0] != m_last_output[0]) || (m_output[1] != m_last_output[1]))) { m_last_output[0] = m_output[0]; m_last_output[1] = m_output[1]; m_output_cb(); } }
void mm5837_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { int tap_14 = BIT(m_shift, 13); int tap_17 = BIT(m_shift, 16); int zero = (m_shift == 0) ? 1 : 0; m_shift <<= 1; m_shift |= tap_14 ^ tap_17 ^ zero; m_output_cb(BIT(m_shift, 16)); }
void ttl74148_device::update() { if (m_enable_input) { // row 1 in truth table m_output = 0x07; m_output_valid = 1; m_enable_output = 1; } else { int bit0, bit1, bit2; /* this comes straight off the data sheet schematics */ bit0 = !(((!m_input_lines[1]) & m_input_lines[2] & m_input_lines[4] & m_input_lines[6]) | ((!m_input_lines[3]) & m_input_lines[4] & m_input_lines[6]) | ((!m_input_lines[5]) & m_input_lines[6]) | (!m_input_lines[7])); bit1 = !(((!m_input_lines[2]) & m_input_lines[4] & m_input_lines[5]) | ((!m_input_lines[3]) & m_input_lines[4] & m_input_lines[5]) | (!m_input_lines[6]) | (!m_input_lines[7])); bit2 = !((!m_input_lines[4]) | (!m_input_lines[5]) | (!m_input_lines[6]) | (!m_input_lines[7])); m_output = (bit2 << 2) | (bit1 << 1) | bit0; m_output_valid = (m_input_lines[0] & m_input_lines[1] & m_input_lines[2] & m_input_lines[3] & m_input_lines[4] & m_input_lines[5] & m_input_lines[6] & m_input_lines[7]); m_enable_output = !m_output_valid; } /* call callback if any of the outputs changed */ if (!m_output_cb.isnull() && ((m_output != m_last_output) || (m_output_valid != m_last_output_valid) || (m_enable_output != m_last_enable_output))) { m_last_output = m_output; m_last_output_valid = m_output_valid; m_last_enable_output = m_enable_output; m_output_cb(); } }