diff options
Diffstat (limited to 'src/devices/machine/iwm.h')
-rw-r--r-- | src/devices/machine/iwm.h | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/devices/machine/iwm.h b/src/devices/machine/iwm.h index 7ef2b8a4b4c..73045890d0d 100644 --- a/src/devices/machine/iwm.h +++ b/src/devices/machine/iwm.h @@ -32,10 +32,13 @@ public: virtual void set_floppy(floppy_image_device *floppy) override; virtual floppy_image_device *get_floppy() const override; + virtual void sync() override; + protected: virtual void device_start() override; virtual void device_reset() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + + TIMER_CALLBACK_MEMBER(update_timer_tick); private: enum { @@ -49,8 +52,10 @@ private: S_IDLE, SR_WINDOW_EDGE_0, SR_WINDOW_EDGE_1, + SW_WINDOW_LOAD, SW_WINDOW_MIDDLE, - SW_WINDOW_END + SW_WINDOW_END, + SW_UNDERRUN, }; floppy_image_device *m_floppy; @@ -58,19 +63,18 @@ private: double m_q3_fclk_ratio, m_fclk_q3_ratio; u64 m_last_sync, m_next_state_change, m_sync_update, m_async_update; u64 m_flux_write_start; - std::array<u64, 16> m_flux_write; + std::array<u64, 65536> m_flux_write; u32 m_flux_write_count; u32 m_q3_clock; int m_active, m_rw, m_rw_state; - u8 m_data, m_whd, m_mode, m_status, m_control; + u8 m_data, m_whd, m_mode, m_status, m_control, m_rw_bit_count; u8 m_rsh, m_wsh; + u8 m_devsel; + bool m_q3_clock_active; - void sync(); u8 control(int offset, u8 data); u64 time_to_cycles(const attotime &tm) const; attotime cycles_to_time(u64 cycles) const; - u64 fclk_to_q3(u64 cycles) const; - u64 q3_to_fclk(u64 cycles) const; void mode_w(u8 data); void data_w(u8 data); @@ -78,9 +82,10 @@ private: u64 window_size() const; u64 half_window_size() const; u64 read_register_update_delay() const; - u64 write_sync_half_window_size() const; inline bool is_sync() const; - void flush_write(); + void flush_write(u64 when = 0); + void write_clock_start(); + void write_clock_stop(); }; DECLARE_DEVICE_TYPE(IWM, iwm_device) |