1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 /********************************************************************** 4 5 Western Digital WD11C00-17 PC/XT Host Interface Logic Device 6 7 **********************************************************************/ 8 9 #ifndef MAME_MACHINE_WD11C00_17_H 10 #define MAME_MACHINE_WD11C00_17_H 11 12 #pragma once 13 14 15 //************************************************************************** 16 // TYPE DEFINITIONS 17 //************************************************************************** 18 19 // ======================> wd11c00_17_device 20 21 class wd11c00_17_device : public device_t 22 { 23 public: 24 // construction/destruction 25 wd11c00_17_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 26 out_irq5_callback()27 auto out_irq5_callback() { return m_out_irq5_cb.bind(); } out_drq3_callback()28 auto out_drq3_callback() { return m_out_drq3_cb.bind(); } out_mr_callback()29 auto out_mr_callback() { return m_out_mr_cb.bind(); } out_busy_callback()30 auto out_busy_callback() { return m_out_busy_cb.bind(); } out_req_callback()31 auto out_req_callback() { return m_out_req_cb.bind(); } out_ra3_callback()32 auto out_ra3_callback() { return m_out_ra3_cb.bind(); } in_rd322_callback()33 auto in_rd322_callback() { return m_in_rd322_cb.bind(); } in_ramcs_callback()34 auto in_ramcs_callback() { return m_in_ramcs_cb.bind(); } out_ramwr_callback()35 auto out_ramwr_callback() { return m_out_ramwr_cb.bind(); } in_cs1010_callback()36 auto in_cs1010_callback() { return m_in_cs1010_cb.bind(); } out_cs1010_callback()37 auto out_cs1010_callback() { return m_out_cs1010_cb.bind(); } 38 39 uint8_t io_r(offs_t offset); 40 void io_w(offs_t offset, uint8_t data); 41 42 void dack3_w(int state); 43 uint8_t dack_r(); 44 void dack_w(uint8_t data); 45 46 uint8_t read(offs_t offset); 47 void write(offs_t offset, uint8_t data); 48 49 void ireq_w(int state); 50 void io_w(int state); 51 void cd_w(int state); 52 void clct_w(int state); 53 void mode_w(int state); 54 55 int busy_r(); 56 int ecc_not_0_r(); 57 58 protected: 59 // device-level overrides 60 virtual void device_start() override; 61 virtual void device_reset() override; 62 63 private: 64 inline void check_interrupt(); 65 inline void increment_address(); 66 inline uint8_t read_data(); 67 inline void write_data(uint8_t data); 68 inline void software_reset(); 69 inline void select(); 70 71 devcb_write_line m_out_irq5_cb; 72 devcb_write_line m_out_drq3_cb; 73 devcb_write_line m_out_mr_cb; 74 devcb_write_line m_out_busy_cb; 75 devcb_write_line m_out_req_cb; 76 devcb_write_line m_out_ra3_cb; 77 devcb_read8 m_in_rd322_cb; 78 devcb_read8 m_in_ramcs_cb; 79 devcb_write8 m_out_ramwr_cb; 80 devcb_read8 m_in_cs1010_cb; 81 devcb_write8 m_out_cs1010_cb; 82 83 uint8_t m_status; 84 uint8_t m_mask; 85 86 offs_t m_ra; 87 88 int m_mode; 89 int m_ecc_not_0; 90 91 int m_irq5; 92 int m_drq3; 93 int m_busy; 94 int m_req; 95 int m_ra3; 96 }; 97 98 99 // device type definition 100 DECLARE_DEVICE_TYPE(WD11C00_17, wd11c00_17_device) 101 102 #endif // MAME_MACHINE_WD11C00_17_H 103