summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/iwm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/iwm.h')
-rw-r--r--src/devices/machine/iwm.h23
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)