diff options
author | Vas Crabb <vas@vastheman.com> | 2018-06-11 20:16:28 +1000 |
---|---|---|
committer | Vas Crabb <vas@vastheman.com> | 2018-06-11 20:16:28 +1000 |
commit | 0aa81fc184b225547091a10f4accb8f3ae7064da (patch) | |
tree | 1b4c65e7cca4f6208a529f3dfb2193c30e2a2a70 /src/devices/machine | |
parent | a3f8d7a94ea46b84a8632b494d19ce211d0d6f87 (diff) |
Revert "Add 9122c floppy (#3647)"
This reverts commit c63c4e111e8ff196de5790bcf227b3ab2a92bb88.
Diffstat (limited to 'src/devices/machine')
-rw-r--r-- | src/devices/machine/i8291a.cpp | 1082 | ||||
-rw-r--r-- | src/devices/machine/i8291a.h | 415 |
2 files changed, 0 insertions, 1497 deletions
diff --git a/src/devices/machine/i8291a.cpp b/src/devices/machine/i8291a.cpp deleted file mode 100644 index abecc800996..00000000000 --- a/src/devices/machine/i8291a.cpp +++ /dev/null @@ -1,1082 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders: Sven Schnelle -/********************************************************************* - - i8291a.cpp - - Intel 8291A GPIB controller - - *********************************************************************/ - -#include "emu.h" - - -#include "i8291a.h" - -#include "logmacro.h" -#define LOG_STATE_MASK (LOG_GENERAL << 1) -#define LOG_STATE(...) LOGMASKED(LOG_STATE_MASK, __VA_ARGS__) -#define LOG_REG_MASK (LOG_STATE_MASK << 1) -#define LOG_REG(...) LOGMASKED(LOG_REG_MASK, __VA_ARGS__) -#define LOG_INT_MASK (LOG_REG_MASK << 1) -#define LOG_INT(...) LOGMASKED(LOG_INT_MASK, __VA_ARGS__) -#define LOG_CMD_MASK (LOG_INT_MASK << 1) -#define LOG_CMD(...) LOGMASKED(LOG_CMD_MASK, __VA_ARGS__) -#undef VERBOSE -#define VERBOSE (LOG_GENERAL)//|LOG_REG_MASK|LOG_CMD_MASK|LOG_STATE_MASK|LOG_STATE_MASK) - -DEFINE_DEVICE_TYPE(I8291A, i8291a_device, "i8291a", "I8291A") - -i8291a_device::i8291a_device(const machine_config &mconfig, const char *tag, - device_t *owner, uint32_t clock) : - device_t(mconfig, I8291A, tag, owner, clock), - m_int_write_func(*this), - m_dreq_write_func(*this), - m_trig_write_func(*this), - m_eoi_write_func{*this}, - m_dav_write_func{*this}, - m_nrfd_write_func{*this}, - m_ndac_write_func{*this}, - m_srq_write_func{*this}, - m_dio_write_func{*this}, - m_dio_read_func{*this} - { -} - -void i8291a_device::device_reset() -{ - m_pon = true; - m_ints1 = 0; - m_ints2 = 0; - m_auxa = 0; - m_auxb = 0; - m_spoll_mode = 0; - // TODO: clear parallel poll - m_address_status &= ~REG_ADDRESS_STATUS_EOI; - m_rdy = true; - m_nba = false; - m_send_eoi = false; - m_ist = false; - m_eoi = false; - m_ifc = false; - m_srq = false; - m_dav = false; - m_ndac = false; - m_nrfd = false; - m_atn = false; - m_ren = false; - update_state(m_t_state, TalkerState::TIDS); - update_state(m_tp_state, TalkerPrimaryState::TPIS); - update_state(m_tsp_state, TalkerSerialPollState::SPIS); - update_state(m_l_state, ListenerState::LIDS); - update_state(m_rl_state, RemoteLocalState::LOCS); - update_state(m_pp_state, ParallelPollState::PPIS); - update_state(m_dc_state, DeviceClearState::DCIS); - update_state(m_dt_state, DeviceTriggerState::DTIS); - update_state(m_sh_state, SourceHandshake::SIDS); - update_state(m_ah_state, AcceptorHandshake::AIDS); -} - -void i8291a_device::device_start() -{ - m_int_write_func.resolve_safe(); - m_dreq_write_func.resolve_safe(); - m_dav_write_func.resolve_safe(); - m_nrfd_write_func.resolve_safe(); - m_ndac_write_func.resolve_safe(); - m_eoi_write_func.resolve_safe(); - m_srq_write_func.resolve_safe(); - m_dio_read_func.resolve_safe(0xff); - m_dio_write_func.resolve_safe(); - -} - -READ8_MEMBER(i8291a_device::din_r) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, m_din); - m_din_flag = false; - m_ints1 &= ~REG_INTS1_BI; - update_int(); - run_fsm(); - return m_din; -} - -void i8291a_device::update_int() -{ - bool dreq = ((m_ie2 & REG_IE2_DMAO) && (m_ints1 & REG_INTS1_BO)) | - ((m_ie2 & REG_IE2_DMAI) && (m_ints1 & REG_INTS1_BI)); - - if (m_dreq_out != dreq) { - LOG_INT("%s: dreq %s\n", __FUNCTION__, dreq ? "true" : "false"); - m_dreq_write_func(dreq); - m_dreq_out = dreq; - } - - bool intr = false; - - if (m_ints1 & m_ie1) - intr = true; - - if ((m_ints2 & m_ie2) & 0x0f) - intr = true; - - if (intr) { - m_ints2 |= REG_INTS2_INT; - m_address0 |= REG_ADDRESS0_INT; - } else { - m_ints2 &= ~REG_INTS2_INT; - m_address0 &= ~REG_ADDRESS0_INT; - } - - if (m_intr_out != intr) { - LOG_INT("%s: intr %s\n", __FUNCTION__, intr ? "true" : "false"); - m_int_write_func(intr); - m_intr_out = intr; - } - - - -} - -READ8_MEMBER(i8291a_device::ints1_r) -{ - uint8_t ret = m_ints1; - LOG_REG("%s: %02X\n", __FUNCTION__, ret); - m_ints1 = 0; - update_int(); - return ret; -} - -READ8_MEMBER(i8291a_device::ints2_r) -{ - uint8_t ret = m_ints2; - LOG_REG("%s: %02X\n", __FUNCTION__, ret); - m_ints2 = 0; - update_int(); - return ret; -} - -READ8_MEMBER(i8291a_device::spoll_stat_r) -{ - LOG_REG("%s\n", __FUNCTION__); - return 0; -} - -READ8_MEMBER(i8291a_device::addr_stat_r) -{ - LOG_REG("%s = %02X\n", __FUNCTION__, m_address_status); - return m_address_status; -} - -READ8_MEMBER(i8291a_device::cpt_r) -{ - LOG_REG("%s\n", __FUNCTION__); - return m_cpt; -} - -READ8_MEMBER(i8291a_device::addr0_r) -{ - //LOG_REG("%s = %02X\n", __FUNCTION__, m_address0); - return m_address0; -} - -READ8_MEMBER(i8291a_device::addr1_r) -{ - LOG_REG("%s = %02X\n", __FUNCTION__, m_address1); - return m_address1; -} - -WRITE8_MEMBER(i8291a_device::dout_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - if (m_nba) - return; - m_dout = data; - m_nba = true; - run_fsm(); -} - -WRITE8_MEMBER(i8291a_device::ie1_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - m_ie1 = data; - run_fsm(); -} - -WRITE8_MEMBER(i8291a_device::ie2_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - m_ie2 = data; - run_fsm(); -} - -WRITE8_MEMBER(i8291a_device::spoll_mode_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - m_spoll_mode = data; - run_fsm(); -} - -WRITE8_MEMBER(i8291a_device::addr_mode_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - m_address_mode = data & 3; - run_fsm(); -} - -WRITE8_MEMBER(i8291a_device::aux_mode_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - switch (data >> 5) { - case 0: - switch (data) { - case AUXCMD_IMMEDIATE_EXEC_PON: - LOG_REG("AUXCMD_IMMEDIATE_EXEC_PON\n"); - m_pon = 0; - m_rdy = 1; - break; - - case AUXCMD_CLEAR_PP: - LOG_REG("AUXCMD_CLEAR_PP\n"); - m_ist = false; - break; - - case AUXCMD_CHIP_RESET: - LOG_REG("AUXCMD_CHIP_RESET\n"); - device_reset(); - break; - - case AUXCMD_FINISH_HANDSHAKE: - LOG_REG("AUXCMD_FINISH_HANDSHAKE\n"); - break; - - case AUXCMD_TRIGGER: - LOG_REG("AUXCMD_TRIGGER\n"); - update_state(m_dt_state, DeviceTriggerState::DTAS); - break; - - case AUXCMD_CLEAR_RTL: - LOG_REG("AUXCMD_CLEAR_RTL\n"); - m_rtl = false; - break; - - case AUXCMD_SET_RTL: - LOG_REG("AUXCMD_SET_RTL\n"); - m_rtl = true; - break; - - case AUXCMD_SET_PP: - LOG_REG("AUXCMD_SET_PP\n"); - m_ist = true; - break; - - case AUXCMD_SEND_EOI: - LOG_REG("AUXCMD_SEND_EOI\n"); - m_send_eoi = true; - break; - - case AUXCMD_NON_VALID_SA: - LOG_REG("AUXCMD_NON_VALID_SA\n"); - m_apt_flag = false; - break; - - case AUXCMD_VALID_SA: - LOG_REG("AUXCMD_VALID_SA: APT %d\n", m_apt_flag); - if (m_tp_state == TalkerPrimaryState::TPAS) - update_state(m_t_state, TalkerState::TADS); - - if (m_lp_state == ListenerPrimaryState::LPAS) { - update_state(m_l_state, ListenerState::LADS); - if ((m_address_mode & 3) != 1 && m_lp_state == ListenerPrimaryState::LPAS) { - if (m_rl_state == RemoteLocalState::LOCS && !m_rtl) - update_state(m_rl_state, RemoteLocalState::REMS); - if (m_rl_state == RemoteLocalState::LWLS) - update_state(m_rl_state, RemoteLocalState::RWLS); - } - } - - m_cpt_flag = false; - m_apt_flag = false; - break; - - case AUXCMD_PON: - LOG_REG("AUXCMD_PON\n"); - device_reset(); - break; - } - case 1: - /* preset internal clock counter */ - break; - case 4: - LOG_REG("AUXA = %02X\n", data & 0x1f); - /* AUXA write */ - m_auxa = data; - break; - case 5: - LOG_REG("AUXB = %02X\n", data & 0x1f); - m_auxb = data; - break; - case 3: - LOG_REG("PPOLL %s\n", (data & 0x10) ? "disable" : "enable"); - m_lpe = !!!(data & 0x10); - m_pp_sense = data & 0x08; - m_pp_line = data & 7; - break; - default: - break; - - } - run_fsm(); -} - -WRITE8_MEMBER(i8291a_device::addr01_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - if (data & REG_ADDRESS01_ARS) - m_address1 = data & ~REG_ADDRESS01_ARS; - else - m_address0 = data & ~REG_ADDRESS01_ARS; - run_fsm(); -} - -WRITE8_MEMBER(i8291a_device::eos_w) -{ - LOG_REG("%s: %02X\n", __FUNCTION__, data); - m_eos = data; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::nrfd_w) -{ - m_nrfd = !state; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::ndac_w) -{ - m_ndac = !state; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::dav_w) -{ - m_dav = !state; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::eoi_w) -{ - m_eoi = !state; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::srq_w) -{ - m_srq = !state; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::ifc_w) -{ - m_ifc = !state; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::atn_w) -{ - m_atn = !state; - run_fsm(); -} - -WRITE_LINE_MEMBER(i8291a_device::ren_w) -{ - m_ren = !state; - run_fsm(); -} - -void i8291a_device::set_dav(bool state) -{ - if (m_dav_out == state) { - m_dav_out = !state; - m_dav_write_func(m_dav_out); - } -} - -void i8291a_device::set_nrfd(bool state) -{ - if (m_nrfd_out == state) { - m_nrfd_out = !state; - m_nrfd_write_func(m_nrfd_out); - } -} - -void i8291a_device::set_ndac(bool state) -{ - if (m_ndac_out == state) { - m_ndac_out = !state; - m_ndac_write_func(m_ndac_out); - } -} - -void i8291a_device::set_eoi(bool state) -{ - if (m_eoi_out == state) { - m_eoi_out = !state; - m_eoi_write_func(m_eoi_out); - } -} - -void i8291a_device::set_srq(bool state) -{ - if (m_srq_out == state) { - m_srq_out = !state; - m_srq_write_func(m_srq_out); - } -} - -void i8291a_device::run_sh_fsm() -{ - - if (m_pon || m_atn || !(m_t_state == TalkerState::TACS || m_t_state == TalkerState::SPAS)) { - update_state(m_sh_state, SourceHandshake::SIDS); - } - - switch (m_sh_state) { - case SourceHandshake::SIDS: - m_dio_write_func(0xff); - set_eoi(false); - m_nba = false; - if (m_t_state == TalkerState::TACS || m_t_state == TalkerState::SPAS) { - update_state(m_sh_state, SourceHandshake::SGNS); - m_ints1 |= REG_INTS1_BO; - } - break; - - case SourceHandshake::SGNS: - set_dav(false); - - if (m_nba) { - update_state(m_sh_state, SourceHandshake::SDYS); - m_ints1 &= ~REG_INTS1_BO; - } - break; - - case SourceHandshake::SDYS: - if (!m_nrfd) - update_state(m_sh_state, SourceHandshake::STRS); - break; - - case SourceHandshake::STRS: - m_nba = false; - m_dio_write_func(~m_dout); - set_eoi(m_send_eoi); - - set_dav(true); - if (!m_ndac) { - m_send_eoi = false; - m_ints1 |= REG_INTS1_BO; - update_state(m_sh_state, SourceHandshake::SGNS); - } - break; - } -} - -void i8291a_device::handle_command() -{ - if (m_din <= 0x1f) { - switch (m_din) { - case IFCMD_DCL: - LOG_CMD("DCL\n"); - update_state(m_dc_state, DeviceClearState::DCAS); - break; - case IFCMD_GTL: - LOG_CMD("GTL\n"); - if (m_l_state == ListenerState::LADS) - update_state(m_rl_state, RemoteLocalState::LWLS); - if (m_rl_state == RemoteLocalState::REMS && - m_l_state == ListenerState::LADS && m_rtl) - update_state(m_rl_state, RemoteLocalState::LOCS); - break; - case IFCMD_SDC: - LOG_CMD("SDC\n"); - if (m_l_state == ListenerState::LADS) - update_state(m_dc_state, DeviceClearState::DCAS); - break; - case IFCMD_GET: - LOG_CMD("GET\n"); - break; - case IFCMD_LLO: - LOG_CMD("LLO\n"); - if (m_rl_state == RemoteLocalState::LOCS) - update_state(m_rl_state, RemoteLocalState::LWLS); - if (m_rl_state == RemoteLocalState::REMS) - update_state(m_rl_state, RemoteLocalState::RWLS); - break; - case IFCMD_SPE: - LOG_CMD("SPE\n"); - update_state(m_tsp_state, TalkerSerialPollState::SPMS); - break; - case IFCMD_SPD: - LOG_CMD("SPD\n"); - update_state(m_tsp_state, TalkerSerialPollState::SPIS); - break; - case 0: - break; - default: - LOG("unhandled message: %02X\n", m_din); - if (m_auxb & REG_AUXB_CPT_ENABLE) { - m_cpt_flag = m_din; - m_ints1 |= REG_INTS1_CPT; - } - break; - } - } else if (m_din >= 0x20 && m_din <= 0x3f) { - bool addr_matched = false; - LOG_CMD("MLA%d - mode %d, my addr0 %s%s%02x addr1 %s%s%02x\n", m_din & 0x1f, - m_address_mode & 3, - (m_address0 & REG_ADDRESS_DT) ? "DT " : "", - (m_address0 & REG_ADDRESS_DL) ? "DL " : "", - m_address0 & 0x1f, - (m_address1 & REG_ADDRESS_DT) ? "DT " : "", - (m_address1 & REG_ADDRESS_DL) ? "DL " : "", - m_address1 & 0x1f); - - if ((m_din & 0x1f) == (m_address0 & 0x1f) && !(m_address0 & REG_ADDRESS_DL)) { - LOG_CMD("Address 0 matched (mode %02X)\n", m_address_mode); - m_address_status &= ~REG_ADDRESS_STATUS_MJMN; - addr_matched = true; - } - - if ((m_address_mode & 3) != 2 && (m_din & 0x1f) == (m_address1 & 0x1f) && !(m_address1 & REG_ADDRESS_DL)) { - LOG_CMD("Address 1 matched (mode %02X)\n", m_address_mode); - m_address_status |= REG_ADDRESS_STATUS_MJMN; - addr_matched = true; - } - - if (addr_matched) { - update_state(m_lp_state, ListenerPrimaryState::LPAS); - if (addr_matched && (m_address_mode & 3) == 1 && m_l_state == ListenerState::LIDS) - update_state(m_l_state, ListenerState::LADS); - } else { - update_state(m_lp_state, ListenerPrimaryState::LPIS); - update_state(m_l_state, ListenerState::LIDS); - m_address_status &= ~(REG_ADDRESS_STATUS_MJMN); - } - - if (addr_matched && (m_address_mode & 3) == 1 && m_rl_state == RemoteLocalState::LWLS) - update_state(m_rl_state, RemoteLocalState::RWLS); - } else if (m_din >= 0x40 && m_din <= 0x5f) { - bool addr_matched = false; - - LOG_CMD("MTA%d\n", m_din & 0x1f); - - if ((m_din & 0x1f) == (m_address0 & 0x1f) && !(m_address0 & REG_ADDRESS_DT)) { - LOG_STATE("Address 0 matched (mode %02X)\n", m_address_mode); - m_address_status &= ~REG_ADDRESS_STATUS_MJMN; - addr_matched = true; - } - - if ((m_address_mode & 3) != 2 && (m_din & 0x1f) == (m_address1 & 0x1f) && !(m_address1 & REG_ADDRESS_DT)) { - LOG_STATE("Address 1 matched (mode %02X)\n", m_address_mode); - m_address_status |= REG_ADDRESS_STATUS_MJMN; - addr_matched = true; - } - - if(addr_matched) { - update_state(m_tp_state, TalkerPrimaryState::TPAS); - if ((m_address_mode & 3) == 1 && m_t_state == TalkerState::TIDS) - update_state(m_t_state, TalkerState::TADS); - } else { - update_state(m_tp_state, TalkerPrimaryState::TPIS); - update_state(m_t_state, TalkerState::TIDS); - } - - } else if (m_din >= 0x60 && m_din <= 0x7f) { - LOG_CMD("MSA%d\n", m_din & 0x1f); - if ((m_address_mode & 3) == 2 && m_t_state == TalkerState::TIDS) - update_state(m_t_state, TalkerState::TADS); - - if ((m_address_mode & 3) != 1 && m_rl_state == RemoteLocalState::LWLS) - update_state(m_rl_state, RemoteLocalState::RWLS); - - if ((m_address_mode & 3) == 3) { - /* In address mode 3, MSA is passed to host for verification */ - m_ints1 |= REG_INTS1_APT; - m_cpt = m_din; - m_apt_flag = true; - } - } -} - -void i8291a_device::run_ah_fsm() -{ - bool f2 = m_atn || m_l_state == ListenerState::LACS || m_l_state == ListenerState::LADS; - - if ((m_pon || !f2) && m_ah_state != AcceptorHandshake::AIDS) { - LOG_STATE("reset AH: pon %d f2 %d\n", m_pon, f2); - update_state(m_ah_state, AcceptorHandshake::AIDS); - set_nrfd(false); - set_ndac(false); - return; - } - - switch (m_ah_state) { - case AcceptorHandshake::AIDS: - if (f2 && !m_pon) - update_state(m_ah_state, AcceptorHandshake::ANRS); - break; - case AcceptorHandshake::ANRS: - set_nrfd(true); - set_ndac(true); - m_cpt_flag = false; - m_apt_flag = false; - //LOG("m_rdy: %d m_cpt_flag: %d m_apt_flag: %d, m_din_flag %d\n", m_rdy, m_cpt_flag, m_apt_flag, m_din_flag); - if (m_atn || m_rdy) - update_state(m_ah_state, AcceptorHandshake::ACRS); - break; - - case AcceptorHandshake::ACRS: - set_nrfd(false); - if (m_dav) - update_state(m_ah_state, AcceptorHandshake::ADYS); - break; - case AcceptorHandshake::ADYS: - if (!m_dav) { - update_state(m_ah_state, AcceptorHandshake::ACRS); - } else { - update_state(m_ah_state, AcceptorHandshake::ACDS); - } - break; - case AcceptorHandshake::ACDS: - - if (!m_rdy) { - update_state(m_ah_state, AcceptorHandshake::AWNS); - break; - } - m_din = ~m_dio_read_func(); - set_nrfd(true); - - if (m_atn) { - /* Received command */ - m_din &= ~0x80; // TODO: parity - handle_command(); - if (!m_cpt_flag && !m_apt_flag) - update_state(m_ah_state, AcceptorHandshake::AWNS); - } else { - /* Received data */ - m_din_flag = true; - m_ints1 |= REG_INTS1_BI; - if (m_eoi) - m_ints1 |= REG_INTS1_END; - // TODO: END on EOS - } - break; - case AcceptorHandshake::AWNS: - set_ndac(false); - // TODO: T3 delay, rdy holdoff - - if (!m_dav) - update_state(m_ah_state, AcceptorHandshake::ANRS); - break; - } -} - -void i8291a_device::run_t_fsm() -{ - switch (m_t_state) { - case TalkerState::TIDS: - m_address_status &= ~REG_ADDRESS_STATUS_TA; - break; - - case TalkerState::TADS: - m_address_status |= REG_ADDRESS_STATUS_TA; - if(!m_atn) { - if (m_tsp_state == TalkerSerialPollState::SPMS) - update_state(m_t_state, TalkerState::SPAS); - else - update_state(m_t_state, TalkerState::TACS); - } - - if (m_tp_state == TalkerPrimaryState::TPIS) - update_state(m_t_state, TalkerState::TIDS); - break; - // TODO: F4 function - case TalkerState::TACS: - m_address_status |= REG_ADDRESS_STATUS_TA; - if (m_atn) - update_state(m_t_state, TalkerState::TADS); // TODO: T2 delay - break; - - case TalkerState::SPAS: - if (m_atn) - update_state(m_t_state, TalkerState::TADS); // TODO: T2 delay - break; - } -} - -void i8291a_device::run_tp_fsm() -{ - switch (m_tp_state) { - case TalkerPrimaryState::TPIS: - m_address_status &= ~REG_ADDRESS_STATUS_TPAS; - break; - case TalkerPrimaryState::TPAS: - m_address_status |= REG_ADDRESS_STATUS_TPAS; - break; - } -} - -void i8291a_device::run_tsp_fsm() -{ - if (m_pon || m_ifc) - update_state(m_tsp_state, TalkerSerialPollState::SPIS); - - switch(m_tsp_state) { - case TalkerSerialPollState::SPIS: - break; - case TalkerSerialPollState::SPMS: - break; - } -} - -void i8291a_device::run_l_fsm() -{ - switch (m_l_state) { - case ListenerState::LIDS: - m_address_status &= ~REG_ADDRESS_STATUS_LA; - break; - case ListenerState::LADS: - m_address_status |= REG_ADDRESS_STATUS_LA; - if (m_lp_state == ListenerPrimaryState::LPIS) - update_state(m_l_state, ListenerState::LIDS); - break; - case ListenerState::LACS: - break; - } -} - -void i8291a_device::run_dc_fsm() -{ - switch (m_dc_state) { - case DeviceClearState::DCIS: - break; - case DeviceClearState::DCAS: - m_ints1 |= REG_INTS1_DEC; - update_state(m_dc_state, DeviceClearState::DCIS); - break; - } -} - -void i8291a_device::run_dt_fsm() -{ - switch (m_dt_state) { - case DeviceTriggerState::DTIS: - break; - case DeviceTriggerState::DTAS: - m_trig_write_func(true); - m_trig_write_func(false); - update_state(m_dt_state, DeviceTriggerState::DTIS); - break; - } -} - -void i8291a_device::run_pp_fsm() -{ - if (m_pon) - update_state(m_pp_state, ParallelPollState::PPIS); - - switch (m_pp_state) { - case ParallelPollState::PPIS: - if (m_lpe && !m_pon) - update_state(m_pp_state, ParallelPollState::PPSS); - break; - - case ParallelPollState::PPSS: - if (!m_lpe) { - update_state(m_pp_state, ParallelPollState::PPIS); - break; - } - - if (m_atn && m_eoi) - update_state(m_pp_state, ParallelPollState::PPAS); - break; - - case ParallelPollState::PPAS: - if (!m_atn || !m_eoi) { - m_dio_write_func(0xff); - update_state(m_pp_state, ParallelPollState::PPSS); - break; - } - - if (m_ist == m_pp_sense) - m_dio_write_func(0x7f); // XXX ~(1 << (7 - m_pp_line))); - else - m_dio_write_func(0xff); - break; - } -} - -void i8291a_device::run_sp_fsm() -{ - switch (m_sp_state) { - case SerialPollState::APRS: - break; - case SerialPollState::NPRS: - break; - case SerialPollState::SRQS: - break; - } -} - -void i8291a_device::run_rl_fsm() -{ - if (m_pon || !m_ren) - update_state(m_rl_state, RemoteLocalState::LOCS); - - switch (m_rl_state) { - case RemoteLocalState::LOCS: - break; - case RemoteLocalState::LWLS: - break; - case RemoteLocalState::REMS: - break; - case RemoteLocalState::RWLS: - break; - } -} - -void i8291a_device::run_lp_fsm() -{ - switch(m_lp_state) { - case ListenerPrimaryState::LPIS: - m_address_status &= ~REG_ADDRESS_STATUS_LPAS; - break; - case ListenerPrimaryState::LPAS: - m_address_status |= REG_ADDRESS_STATUS_LPAS; - break; - } -} - -void i8291a_device::run_fsm() -{ - if (m_ignore_ext_signals) - return; - m_ignore_ext_signals = true; - do { - m_state_changed = false; - - auto m_l_state_old = m_l_state; - auto m_t_state_old = m_t_state; - auto m_rl_state_old = m_rl_state; - run_sh_fsm(); - run_ah_fsm(); - run_t_fsm(); - run_tp_fsm(); - run_tsp_fsm(); - run_l_fsm(); - run_lp_fsm(); - run_dc_fsm(); - run_dt_fsm(); - run_sp_fsm(); - run_pp_fsm(); - run_rl_fsm(); - - if ((m_t_state_old == TalkerState::TIDS && m_t_state == TalkerState::TADS) || - (m_t_state_old == TalkerState::TADS && m_t_state == TalkerState::TIDS) || - (m_l_state_old == ListenerState::LIDS && m_l_state == ListenerState::LADS) || - (m_l_state_old == ListenerState::LADS && m_l_state == ListenerState::LIDS)) - m_ints2 |= REG_INTS2_ADSC; - - if ((m_rl_state_old == RemoteLocalState::LOCS && m_rl_state == RemoteLocalState::REMS) || - (m_rl_state_old == RemoteLocalState::REMS && m_rl_state == RemoteLocalState::LOCS) || - (m_rl_state_old == RemoteLocalState::LWLS && m_rl_state == RemoteLocalState::RWLS) || - (m_rl_state_old == RemoteLocalState::RWLS && m_rl_state == RemoteLocalState::LWLS)) - m_ints2 |= REG_INTS2_REMC; - - if ((m_rl_state_old == RemoteLocalState::LOCS && m_rl_state == RemoteLocalState::LWLS) || - (m_rl_state_old == RemoteLocalState::REMS && m_rl_state == RemoteLocalState::RWLS) || - (m_rl_state_old == RemoteLocalState::LWLS && m_rl_state == RemoteLocalState::LOCS) || - (m_rl_state_old == RemoteLocalState::RWLS && m_rl_state == RemoteLocalState::REMS)) - m_ints2 |= REG_INTS2_REMC; - - m_rdy = !m_apt_flag && !m_cpt_flag && !m_din_flag; - update_int(); - } while (m_state_changed); - m_ignore_ext_signals = false; -} - - -const char *i8291a_device::get_state_name(DeviceClearState state) -{ - switch(state) { - case DeviceClearState::DCIS: - return "DICS"; - case DeviceClearState::DCAS: - return "DCAS"; - } - return "Unknown"; -} - -const char *i8291a_device::get_state_name(DeviceTriggerState state) -{ - switch(state) { - case DeviceTriggerState::DTIS: - return "DTIS"; - case DeviceTriggerState::DTAS: - return "DTAS"; - } - return "Unknown"; -} - - -const char *i8291a_device::get_state_name(ParallelPollState state) -{ - switch(state){ - case ParallelPollState::PPIS: - return "PPIS"; - case ParallelPollState::PPSS: - return "PPSS"; - case ParallelPollState::PPAS: - return "PPAS"; - } - return "Unknown"; -} - - -const char *i8291a_device::get_state_name(SerialPollState state) -{ - switch(state) { - case SerialPollState::APRS: - return "APRS"; - case SerialPollState::NPRS: - return "NPRS"; - case SerialPollState::SRQS: - return "SRQS"; - } - return "Unknown"; -} - -const char *i8291a_device::get_state_name(RemoteLocalState state) -{ - switch(state) { - case RemoteLocalState::LOCS: - return "LOCS"; - case RemoteLocalState::LWLS: - return "LWLS"; - case RemoteLocalState::REMS: - return "REMS"; - case RemoteLocalState::RWLS: - return "RWLS"; - } - return "Unknown"; -} - -const char *i8291a_device::get_state_name(ListenerPrimaryState state) -{ - switch(state) { - case ListenerPrimaryState::LPIS: - return "LPIS"; - case ListenerPrimaryState::LPAS: - return "LPAS"; - } - return "Unknown"; -} - -const char *i8291a_device::get_state_name(SourceHandshake state) -{ - switch(state) { - case SourceHandshake::SIDS: - return "SIDS"; - case SourceHandshake::SGNS: - return "SGNS"; - case SourceHandshake::SDYS: - return "SDYS"; - case SourceHandshake::STRS: - return "STRS"; - } - return "Unknown"; -} - - -const char *i8291a_device::get_state_name(AcceptorHandshake state) -{ - switch(state) { - case AcceptorHandshake::AIDS: - return "AIDS"; - case AcceptorHandshake::ANRS: - return "ANRS"; - case AcceptorHandshake::ACRS: - return "ACRS"; - case AcceptorHandshake::ADYS: - return "ADYS"; - case AcceptorHandshake::ACDS: - return "ACDS"; - case AcceptorHandshake::AWNS: - return "AWNS"; - } - return "Unknown"; -} - -const char *i8291a_device::get_state_name(TalkerState state) -{ - switch(state) { - case TalkerState::TIDS: - return "TIDS"; - case TalkerState::TADS: - return "TADS"; - case TalkerState::TACS: - return "TACS"; - case TalkerState::SPAS: - return "SPAS"; - } - return "Unknown"; -} - -const char *i8291a_device::get_state_name(TalkerPrimaryState state) -{ - switch(state) { - case TalkerPrimaryState::TPIS: - return "TPIS"; - case TalkerPrimaryState::TPAS: - return "TPAS"; - } - return "Unknown"; -} - - -const char *i8291a_device::get_state_name(ListenerState state) -{ - switch(state) { - case ListenerState::LIDS: - return "LIDS"; - case ListenerState::LADS: - return "LADS"; - case ListenerState::LACS: - return "LACS"; - } - return "Unknown"; -} - -const char *i8291a_device::get_state_name(TalkerSerialPollState state) -{ - switch(state) { - case TalkerSerialPollState::SPIS: - return "SPIS"; - case TalkerSerialPollState::SPMS: - return "SPMS"; - } - return "Unknown"; -} - -void i8291a_device::map(address_map &map) -{ - map(0x00, 0x00).rw(FUNC(i8291a_device::din_r), FUNC(i8291a_device::dout_w)); - map(0x01, 0x01).rw(FUNC(i8291a_device::ints1_r), FUNC(i8291a_device::ie1_w)); - map(0x02, 0x02).rw(FUNC(i8291a_device::ints2_r), FUNC(i8291a_device::ie2_w)); - map(0x03, 0x03).rw(FUNC(i8291a_device::spoll_stat_r), FUNC(i8291a_device::spoll_mode_w)); - map(0x04, 0x04).rw(FUNC(i8291a_device::addr_stat_r), FUNC(i8291a_device::addr_mode_w)); - map(0x05, 0x05).rw(FUNC(i8291a_device::cpt_r), FUNC(i8291a_device::aux_mode_w)); - map(0x06, 0x06).rw(FUNC(i8291a_device::addr0_r), FUNC(i8291a_device::addr01_w)); - map(0x07, 0x07).rw(FUNC(i8291a_device::addr1_r), FUNC(i8291a_device::eos_w)); - -} diff --git a/src/devices/machine/i8291a.h b/src/devices/machine/i8291a.h deleted file mode 100644 index 72561161a9b..00000000000 --- a/src/devices/machine/i8291a.h +++ /dev/null @@ -1,415 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders: Sven Schnelle -/********************************************************************* - - i8291a.h - - I8291A GPIB controller - -*********************************************************************/ - -#ifndef MAME_MACHINE_I8291A_H -#define MAME_MACHINE_I8291A_H - - -#pragma once - - -#define MCFG_I8291A_INT_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_int_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_DREQ_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_dreq_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_TRIG_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_trig_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_DIO_READ_CB(_read) \ - downcast<i8291a_device &>(*device).set_dio_read_cb(DEVCB_##_read); - -#define MCFG_I8291A_DIO_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_dio_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_EOI_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_eoi_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_DAV_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_dav_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_NRFD_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_nrfd_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_NDAC_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_ndac_write_cb(DEVCB_##_write); - -#define MCFG_I8291A_SRQ_WRITE_CB(_write) \ - downcast<i8291a_device &>(*device).set_srq_write_cb(DEVCB_##_write); - - -class i8291a_device : public device_t -{ -public: - // construction/destruction - i8291a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - template <class Object> devcb_base& set_int_write_cb(Object &&cb) - { return m_int_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_dreq_write_cb(Object &&cb) - { return m_dreq_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_trig_write_cb(Object &&cb) - { return m_trig_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_eoi_write_cb(Object &&cb) - { return m_eoi_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_dav_write_cb(Object &&cb) - { return m_dav_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_nrfd_write_cb(Object &&cb) - { return m_nrfd_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_ndac_write_cb(Object &&cb) - { return m_ndac_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_srq_write_cb(Object &&cb) - { return m_srq_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_dio_write_cb(Object &&cb) - { return m_dio_write_func.set_callback(std::forward<Object>(cb)); } - - template <class Object> devcb_base& set_dio_read_cb(Object &&cb) - { return m_dio_read_func.set_callback(std::forward<Object>(cb)); } - - // Signal inputs - DECLARE_WRITE_LINE_MEMBER(reset_w); - DECLARE_WRITE_LINE_MEMBER(dack_w); - - // signal output - devcb_write_line m_int_write_func; - devcb_write_line m_dreq_write_func; - devcb_write_line m_trig_write_func; - devcb_write_line m_eoi_write_func; - devcb_write_line m_dav_write_func; - devcb_write_line m_nrfd_write_func; - devcb_write_line m_ndac_write_func; - devcb_write_line m_srq_write_func; - - devcb_write8 m_dio_write_func; - devcb_read8 m_dio_read_func; - - void set_dav(bool state); - void set_nrfd(bool state); - void set_ndac(bool state); - void set_eoi(bool state); - void set_srq(bool state); - - // GPIB port - DECLARE_WRITE_LINE_MEMBER(eoi_w); - DECLARE_WRITE_LINE_MEMBER(dav_w); - DECLARE_WRITE_LINE_MEMBER(nrfd_w); - DECLARE_WRITE_LINE_MEMBER(ndac_w); - DECLARE_WRITE_LINE_MEMBER(ifc_w); - DECLARE_WRITE_LINE_MEMBER(srq_w); - DECLARE_WRITE_LINE_MEMBER(atn_w); - DECLARE_WRITE_LINE_MEMBER(ren_w); - DECLARE_WRITE8_MEMBER(dio_w); - - // register r/w functions - - DECLARE_WRITE8_MEMBER(dout_w); - DECLARE_WRITE8_MEMBER(ie1_w); - DECLARE_WRITE8_MEMBER(ie2_w); - DECLARE_WRITE8_MEMBER(spoll_mode_w); - DECLARE_WRITE8_MEMBER(addr_mode_w); - DECLARE_WRITE8_MEMBER(aux_mode_w); - DECLARE_WRITE8_MEMBER(addr01_w); - DECLARE_WRITE8_MEMBER(eos_w); - - DECLARE_READ8_MEMBER(din_r); - DECLARE_READ8_MEMBER(ints1_r); - DECLARE_READ8_MEMBER(ints2_r); - DECLARE_READ8_MEMBER(spoll_stat_r); - DECLARE_READ8_MEMBER(addr_stat_r); - DECLARE_READ8_MEMBER(cpt_r); - DECLARE_READ8_MEMBER(addr0_r); - DECLARE_READ8_MEMBER(addr1_r); - void map(address_map &map); - -private: - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - - void update_int(void); - void handle_command(void); - void run_fsm(); - void run_sh_fsm(); - void run_ah_fsm(); - void run_dt_fsm(); - void run_dc_fsm(); - void run_l_fsm(); - void run_lp_fsm(); - void run_t_fsm(); - void run_tp_fsm(); - void run_tsp_fsm(); - void run_sp_fsm(); - void run_pp_fsm(); - void run_rl_fsm(); - - // registers - - uint8_t m_din; - uint8_t m_dout; - uint8_t m_ints1; - uint8_t m_ints2; - uint8_t m_ie1; - uint8_t m_ie2; - uint8_t m_address0; - uint8_t m_address1; - uint8_t m_eos; - uint8_t m_spoll_mode; - uint8_t m_address_mode; - uint8_t m_address_status; - uint8_t m_cpt; - - uint8_t m_auxa; - uint8_t m_auxb; - - bool m_atn; - bool m_ren; - bool m_nrfd; - bool m_ndac; - bool m_dav; - bool m_srq; - bool m_ifc; - bool m_eoi; - uint8_t m_dio; - - bool m_nrfd_out; - bool m_ndac_out; - bool m_dav_out; - bool m_srq_out; - bool m_eoi_out; - - // internal signals - - bool m_pon; - bool m_rdy; - bool m_lpe; - bool m_ist; - bool m_rtl; - bool m_apt_flag; - bool m_cpt_flag; - bool m_din_flag; - bool m_nba; - - bool m_pp_sense; - bool m_pp_line; - - bool m_send_eoi; - - static constexpr int REG_INTS1_BI = (1 << 0); - static constexpr int REG_INTS1_BO = (1 << 1); - static constexpr int REG_INTS1_ERR = (1 << 2); - static constexpr int REG_INTS1_DEC = (1 << 3); - static constexpr int REG_INTS1_END = (1 << 4); - static constexpr int REG_INTS1_GET = (1 << 5); - static constexpr int REG_INTS1_APT = (1 << 6); - static constexpr int REG_INTS1_CPT = (1 << 7); - - static constexpr int REG_INTS2_ADSC = (1 << 0); - static constexpr int REG_INTS2_REMC = (1 << 1); - static constexpr int REG_INTS2_LLOC = (1 << 2); - static constexpr int REG_INTS2_SPC = (1 << 3); - static constexpr int REG_INTS2_REM = (1 << 4); - static constexpr int REG_INTS2_LLO = (1 << 5); - static constexpr int REG_INTS2_SPAS = (1 << 6); - static constexpr int REG_INTS2_INT = (1 << 7); - - static constexpr int REG_IE2_DMAI = (1 << 4); - static constexpr int REG_IE2_DMAO = (1 << 5); - - static constexpr int REG_ADDRESS01_ARS = (1 << 7); - static constexpr int REG_ADDRESS0_INT = (1 << 7); - static constexpr int REG_ADDRESS_DT = (1 << 6); - static constexpr int REG_ADDRESS_DL = (1 << 5); - - static constexpr int REG_ADDRESS_STATUS_MJMN = 1 << 0; - static constexpr int REG_ADDRESS_STATUS_TA = 1 << 1; - static constexpr int REG_ADDRESS_STATUS_LA = 1 << 2; - static constexpr int REG_ADDRESS_STATUS_TPAS = 1 << 3; - static constexpr int REG_ADDRESS_STATUS_LPAS = 1 << 4; - static constexpr int REG_ADDRESS_STATUS_EOI = 1 << 5; - static constexpr int REG_ADDRESS_STATUS_LON = 1 << 6; - static constexpr int REG_ADDRESS_STATUS_TON = 1 << 7; - - static constexpr int REG_AUXB_CPT_ENABLE = 1 << 0; - static constexpr int REG_AUXB_EOI_SPAS_ENABLE = 1 << 1; - static constexpr int REG_AUXB_HS_TRANSFER = 1 << 2; - static constexpr int REG_AUXB_INT_ACTIVE_LOW = 1 << 3; - static constexpr int REG_AUXB_RFD_HOLDOFF_GET_DEC = 1 << 4; - - static constexpr int REG_AUXA_RFD_HOLDOFF_DATA = 1 << 0; - static constexpr int REG_AUXA_RFD_HOLDOFF_END = 1 << 1; - static constexpr int REG_AUXA_END_ON_EOS = 1 << 2; - static constexpr int REG_AUXA_EOI_ON_EOS = 1 << 3; - static constexpr int REG_AUXA_EOS_8BIT = 1 << 4; - - // AUX CMDs - static constexpr int AUXCMD_IMMEDIATE_EXEC_PON = 0; - static constexpr int AUXCMD_CLEAR_PP = 1; - static constexpr int AUXCMD_CHIP_RESET = 2; - static constexpr int AUXCMD_FINISH_HANDSHAKE = 3; - static constexpr int AUXCMD_TRIGGER = 4; - static constexpr int AUXCMD_CLEAR_RTL = 5; - static constexpr int AUXCMD_SEND_EOI = 6; - static constexpr int AUXCMD_NON_VALID_SA = 7; - static constexpr int AUXCMD_PON = 8; - static constexpr int AUXCMD_SET_PP = 9; - static constexpr int AUXCMD_SET_RTL = 13; - static constexpr int AUXCMD_VALID_SA = 15; - - // Interface commands - // TODO: stolen from tms9914, move to common header file. PHI also defines this - - static constexpr uint8_t IFCMD_MASK = 0x7f; // Mask of valid bits in if. commands - static constexpr uint8_t IFCMD_ACG_MASK = 0x70; // Mask of ACG commands - static constexpr uint8_t IFCMD_ACG_VALUE = 0x00; // Value of ACG commands - static constexpr uint8_t IFCMD_UCG_MASK = 0x70; // Mask of UCG commands - static constexpr uint8_t IFCMD_UCG_VALUE = 0x10; // Value of UCG commands - static constexpr uint8_t IFCMD_GROUP_MASK = 0x60; // Mask of group id - static constexpr uint8_t IFCMD_LAG_VALUE = 0x20; // Value of LAG commands - static constexpr uint8_t IFCMD_TAG_VALUE = 0x40; // Value of TAG commands - static constexpr uint8_t IFCMD_SCG_VALUE = 0x60; // Value of SCG commands - static constexpr uint8_t IFCMD_GTL = 0x01; // Go to local - static constexpr uint8_t IFCMD_SDC = 0x04; // Selected device clear - static constexpr uint8_t IFCMD_GET = 0x08; // Group execute trigger - static constexpr uint8_t IFCMD_TCT = 0x09; // Take control - static constexpr uint8_t IFCMD_LLO = 0x11; // Local lock-out - static constexpr uint8_t IFCMD_DCL = 0x14; // Device clear - static constexpr uint8_t IFCMD_SPE = 0x18; // Serial poll enable - static constexpr uint8_t IFCMD_SPD = 0x19; // Serial poll disable - static constexpr uint8_t IFCMD_UNL = 0x3f; // Unlisten - static constexpr uint8_t IFCMD_UNT = 0x5f; // Untalk - - enum class SourceHandshake { - SIDS, - SGNS, - SDYS, - STRS - }; - - enum class AcceptorHandshake { - AIDS, - ANRS, - ACRS, - AWNS, - ADYS, - ACDS - }; - - enum class TalkerState { - TIDS, - TADS, - SPAS, - TACS - }; - - enum class TalkerPrimaryState { - TPIS, - TPAS - }; - - enum class ListenerPrimaryState { - LPIS, - LPAS - }; - - enum class TalkerSerialPollState { - SPIS, - SPMS - }; - - enum class SerialPollState { - NPRS, - SRQS, - APRS - }; - - enum class ListenerState { - LIDS, - LADS, - LACS - }; - - enum class RemoteLocalState { - LOCS, - REMS, - RWLS, - LWLS - }; - - enum class ParallelPollState { - PPIS, - PPSS, - PPAS - }; - - enum class DeviceClearState { - DCIS, - DCAS - }; - - enum class DeviceTriggerState { - DTIS, - DTAS - }; - - const char *get_state_name(AcceptorHandshake state); - const char *get_state_name(SourceHandshake state); - const char *get_state_name(TalkerState state); - const char *get_state_name(TalkerPrimaryState state); - const char *get_state_name(TalkerSerialPollState state); - const char *get_state_name(ListenerState state); - const char *get_state_name(ListenerPrimaryState state); - const char *get_state_name(DeviceClearState state); - const char *get_state_name(DeviceTriggerState state); - const char *get_state_name(ParallelPollState state); - const char *get_state_name(SerialPollState state); - const char *get_state_name(RemoteLocalState state); - - template<typename T> void update_state(T &name, T state, int timeout = 0) - { - if (name != state) { - m_state_changed = true; - //logerror("%s: %s -> %s\n", __FUNCTION__, - // get_state_name(name), - // get_state_name(state)); - name = state; - } - } - - SourceHandshake m_sh_state; - AcceptorHandshake m_ah_state; - TalkerState m_t_state; - TalkerPrimaryState m_tp_state; - TalkerSerialPollState m_tsp_state; - ListenerState m_l_state; - ListenerPrimaryState m_lp_state; - RemoteLocalState m_rl_state; - SerialPollState m_sp_state; - ParallelPollState m_pp_state; - DeviceClearState m_dc_state; - DeviceTriggerState m_dt_state; - bool m_state_changed; - bool m_ignore_ext_signals; - bool m_intr_out; - bool m_dreq_out; -}; - -// device type definition -DECLARE_DEVICE_TYPE(I8291A, i8291a_device) - -#endif // MAME_MACHINE_I8291A_H |