diff options
Diffstat (limited to 'src/devices/machine/40105.h')
-rw-r--r-- | src/devices/machine/40105.h | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/src/devices/machine/40105.h b/src/devices/machine/40105.h index 67d3a58274e..47a8ce0b1ab 100644 --- a/src/devices/machine/40105.h +++ b/src/devices/machine/40105.h @@ -2,7 +2,18 @@ // copyright-holders:Curt Coder /********************************************************************** - CMOS 40105 FIFO Register emulation + CD40105/HC40105 4-bit x 16-word FIFO Register + +*********************************************************************** + ____ ____ + /OE 1 |* \_/ | 16 Vcc + DIR 2 | | 15 /SO + SI 3 | | 14 DOR + D0 4 | | 13 Q0 + D1 5 | 40105 | 12 Q1 + D2 6 | | 11 Q2 + D3 7 | | 10 Q3 + GND 8 |___________| 9 MR **********************************************************************/ @@ -20,11 +31,15 @@ // INTERFACE CONFIGURATION MACROS ///************************************************************************* -#define MCFG_40105_ADD(_tag, _dir, _dor) \ - MCFG_DEVICE_ADD(_tag, CMOS_40105, 0) \ - downcast<cmos_40105_device *>(device)->set_dir_callback(DEVCB_##_dir); \ +#define MCFG_40105_DATA_IN_READY_CB(_dir) \ + downcast<cmos_40105_device *>(device)->set_dir_callback(DEVCB_##_dir); + +#define MCFG_40105_DATA_OUT_READY_CB(_dor) \ downcast<cmos_40105_device *>(device)->set_dor_callback(DEVCB_##_dor); +#define MCFG_40105_DATA_OUT_CB(_out) \ + downcast<cmos_40105_device *>(device)->set_data_out_callback(DEVCB_##_out); + ///************************************************************************* @@ -37,13 +52,15 @@ class cmos_40105_device : public device_t { public: // construction/destruction - cmos_40105_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + cmos_40105_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); template<class _dir> void set_dir_callback(_dir dir) { m_write_dir.set_callback(dir); } template<class _dor> void set_dor_callback(_dor dor) { m_write_dor.set_callback(dor); } + template<class _out> void set_data_out_callback(_out out) { m_write_q.set_callback(out); } - uint8_t read(); - void write(uint8_t data); + u8 read(); + void write(u8 data); + DECLARE_WRITE8_MEMBER(write); DECLARE_WRITE_LINE_MEMBER( si_w ); DECLARE_WRITE_LINE_MEMBER( so_w ); @@ -57,24 +74,30 @@ protected: virtual void device_reset() override; private: + // private helpers + void load_input(); + void output_ready(); + + // callbacks devcb_write_line m_write_dir; devcb_write_line m_write_dor; + devcb_write8 m_write_q; - std::queue<uint8_t> m_fifo; + std::queue<u8> m_fifo; - uint8_t m_d; - uint8_t m_q; + u8 m_d; + u8 m_q; - int m_dir; - int m_dor; - int m_si; - int m_so; + bool m_dir; + bool m_dor; + bool m_si; + bool m_so; }; // device type definition -extern const device_type CMOS_40105; - +extern const device_type CD40105; +extern const device_type HC40105; #endif |