diff options
Diffstat (limited to 'src/devices/machine/phi.h')
-rw-r--r-- | src/devices/machine/phi.h | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/src/devices/machine/phi.h b/src/devices/machine/phi.h index 6a1e9bfaad5..59b538e8fc8 100644 --- a/src/devices/machine/phi.h +++ b/src/devices/machine/phi.h @@ -49,6 +49,10 @@ #define MCFG_PHI_DMARQ_WRITE_CB(_write) \ downcast<phi_device &>(*device).set_dmarq_write_cb(DEVCB_##_write); +// Set read callback for SYS_CNTRL signal +#define MCFG_PHI_SYS_CNTRL_READ_CB(_read) \ + downcast<phi_device &>(*device).set_sys_cntrl_read_cb(DEVCB_##_read); + class phi_device : public device_t { public: @@ -68,11 +72,23 @@ public: PHI_488_SIGNAL_COUNT }; - template<class Object> devcb_base& set_dio_read_cb(Object &&cb) { return m_dio_read_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_488_signal_write_cb(phi_488_signal_t signal , Object &&cb) { return m_signal_wr_fns[ signal ].set_callback(std::forward<Object>(cb)); } - 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_dmarq_write_cb(Object &&cb) { return m_dmarq_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)); } + + 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_488_signal_write_cb(phi_488_signal_t signal , Object &&cb) + { return m_signal_wr_fns[ signal ].set_callback(std::forward<Object>(cb)); } + + 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_dmarq_write_cb(Object &&cb) + { return m_dmarq_write_func.set_callback(std::forward<Object>(cb)); } + + template <class Object> devcb_base &set_sys_cntrl_read_cb(Object &&cb) + { return m_sys_cntrl_read_func.set_callback(std::forward<Object>(cb)); } DECLARE_WRITE_LINE_MEMBER(eoi_w); DECLARE_WRITE_LINE_MEMBER(dav_w); @@ -83,6 +99,8 @@ public: DECLARE_WRITE_LINE_MEMBER(atn_w); DECLARE_WRITE_LINE_MEMBER(ren_w); + DECLARE_WRITE8_MEMBER(bus_dio_w); + void set_ext_signal(phi_488_signal_t signal , int state); // Register read/write @@ -127,7 +145,7 @@ private: devcb_write_line m_signal_wr_fns[ PHI_488_SIGNAL_COUNT ]; devcb_write_line m_int_write_func; devcb_write_line m_dmarq_write_func; - + devcb_read_line m_sys_cntrl_read_func; bool m_int_line; bool m_dmarq_line; @@ -172,12 +190,11 @@ private: PHI_T_SPAS, PHI_T_TACS, // The following are non-standard states for IDENTIFY sequencing - PHI_T_ID1, // Untalked - PHI_T_ID2, // Addressed by secondary address - PHI_T_ID3, // Sending 1st byte - PHI_T_ID4, // Waiting to send 2nd byte - PHI_T_ID5, // Sending 2nd byte - PHI_T_ID6 // 2nd byte sent, end of sequence + PHI_T_ID1, // Addressed by secondary address + PHI_T_ID2, // Sending 1st byte + PHI_T_ID3, // Waiting to send 2nd byte + PHI_T_ID4, // Sending 2nd byte + PHI_T_ID5 // 2nd byte sent, end of sequence }; int m_t_state; @@ -201,6 +218,9 @@ private: int m_sr_state; + // RL (Remote Local) states + bool m_rl_rems; // false: LOCS, true: REMS + // PP (Parallel poll) states enum { PHI_PP_PPIS, @@ -209,7 +229,6 @@ private: }; int m_pp_state; - bool m_pp_pacs; uint8_t m_ppr_msg; bool m_s_sense; @@ -218,7 +237,6 @@ private: PHI_C_CIDS, PHI_C_CADS, PHI_C_CACS, - PHI_C_CPWS, PHI_C_CPPS, PHI_C_CSBS, PHI_C_CSHS, @@ -228,6 +246,18 @@ private: }; int m_c_state; + + // Secondary address decoder states + enum { + PHI_SA_NONE, + PHI_SA_PACS, + PHI_SA_TPAS, + PHI_SA_LPAS, + PHI_SA_UNT + }; + + int m_sa_state; + uint8_t m_be_counter; uint16_t m_reg_status; uint16_t m_reg_int_cond; @@ -244,8 +274,8 @@ private: NBA_CMD_FROM_OFIFO, NBA_BYTE_FROM_OFIFO, NBA_FROM_SPAS, - NBA_FROM_ID3, - NBA_FROM_ID5 + NBA_FROM_ID2, + NBA_FROM_ID4 } nba_origin_t; int m_nba_origin; @@ -275,7 +305,12 @@ private: uint8_t my_address(void) const; bool tcs_msg(void) const; bool rpp_msg(void) const; + uint8_t get_pp_response(); bool controller_in_charge(void) const; + void configure_pp_response(); + void update_pp(); + void update_interrupt(); + void update_dmarq(); }; // device type definition |