diff options
Diffstat (limited to 'src/devices/cpu/cosmac/cosmac.h')
-rw-r--r-- | src/devices/cpu/cosmac/cosmac.h | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/src/devices/cpu/cosmac/cosmac.h b/src/devices/cpu/cosmac/cosmac.h index b6bf5fd4ab5..ff81cad2803 100644 --- a/src/devices/cpu/cosmac/cosmac.h +++ b/src/devices/cpu/cosmac/cosmac.h @@ -192,13 +192,24 @@ public: COSMAC_SC }; + auto wait_cb() { return m_read_wait.bind(); } + auto clear_cb() { return m_read_clear.bind(); } + auto ef1_cb() { return m_read_ef[0].bind(); } + auto ef2_cb() { return m_read_ef[1].bind(); } + auto ef3_cb() { return m_read_ef[2].bind(); } + auto ef4_cb() { return m_read_ef[3].bind(); } + auto q_cb() { return m_write_q.bind(); } + auto dma_rd_cb() { return m_read_dma.bind(); } + auto dma_wr_cb() { return m_write_dma.bind(); } + auto sc_cb() { return m_write_sc.bind(); } + auto tpb_cb() { return m_write_tpb.bind(); } template <class Object> devcb_base &set_wait_rd_callback(Object &&cb) { return m_read_wait.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_clear_rd_callback(Object &&cb) { return m_read_clear.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_ef1_rd_callback(Object &&cb) { return m_read_ef1.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_ef2_rd_callback(Object &&cb) { return m_read_ef2.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_ef3_rd_callback(Object &&cb) { return m_read_ef3.set_callback(std::forward<Object>(cb)); } - template <class Object> devcb_base &set_ef4_rd_callback(Object &&cb) { return m_read_ef4.set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_ef1_rd_callback(Object &&cb) { return m_read_ef[0].set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_ef2_rd_callback(Object &&cb) { return m_read_ef[1].set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_ef3_rd_callback(Object &&cb) { return m_read_ef[2].set_callback(std::forward<Object>(cb)); } + template <class Object> devcb_base &set_ef4_rd_callback(Object &&cb) { return m_read_ef[3].set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_q_wr_callback(Object &&cb) { return m_write_q.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_dma_rd_callback(Object &&cb) { return m_read_dma.set_callback(std::forward<Object>(cb)); } template <class Object> devcb_base &set_dma_wr_callback(Object &&cb) { return m_write_dma.set_callback(std::forward<Object>(cb)); } @@ -248,9 +259,9 @@ protected: inline void write_io_byte(offs_t address, uint8_t data); // execution logic - inline void run(); + inline void run_state(); inline void debug(); - inline void reset(); + inline void reset_state(); inline void initialize(); inline void fetch_instruction(); inline void execute_instruction(); @@ -259,7 +270,7 @@ protected: inline void interrupt(); inline void sample_wait_clear(); inline void sample_ef_lines(); - inline void output_state_code(); + virtual void output_state_code(); inline void set_q_flag(int state); inline void put_low_reg(int reg, uint8_t data); inline void put_high_reg(int reg, uint8_t data); @@ -376,14 +387,12 @@ protected: // device callbacks devcb_read_line m_read_wait; devcb_read_line m_read_clear; - devcb_read_line m_read_ef1; - devcb_read_line m_read_ef2; - devcb_read_line m_read_ef3; - devcb_read_line m_read_ef4; + devcb_read_line m_read_ef[4]; devcb_write_line m_write_q; devcb_read8 m_read_dma; devcb_write8 m_write_dma; devcb_write8 m_write_sc; + devcb_write_line m_write_tpb; // control modes enum class cosmac_mode : u8 @@ -398,9 +407,9 @@ protected: enum class cosmac_state : u8 { STATE_0_FETCH = 0, - STATE_1_RESET, STATE_1_INIT, STATE_1_EXECUTE, + STATE_1_EXECUTE_2ND, STATE_2_DMA_IN, STATE_2_DMA_OUT, STATE_3_INT @@ -419,6 +428,7 @@ protected: int m_dmain; // DMA input request int m_dmaout; // DMA output request int m_ef[4]; // external flags + int m_ef_line[4]; // external flags // registers uint8_t m_d; // data register (accumulator) @@ -461,6 +471,8 @@ protected: virtual cosmac_device::ophandler get_ophandler(uint8_t opcode) const override; + virtual void output_state_code() override; + static const ophandler s_opcodetable[256]; }; |