diff options
author | Olivier Galibert <galibert@pobox.com> | 2021-01-23 13:31:33 +0100 |
---|---|---|
committer | Olivier Galibert <galibert@pobox.com> | 2021-01-24 22:53:26 +0100 |
commit | e5e5c41dce7b7d115b4b2c4debbb568342979909 (patch) | |
tree | ef2386a4f0a97ae2bde21b5d337022f5147c0d67 | |
parent | fd3f7f769ca154a6bd82a7ad89544c5feeca3893 (diff) |
swim1: Remove the q3 clock, sync is just not usable
-rw-r--r-- | src/devices/machine/swim1.cpp | 34 | ||||
-rw-r--r-- | src/devices/machine/swim1.h | 16 | ||||
-rw-r--r-- | src/mame/drivers/mac.cpp | 4 |
3 files changed, 11 insertions, 43 deletions
diff --git a/src/devices/machine/swim1.cpp b/src/devices/machine/swim1.cpp index 9c49fd94dad..f789a4e01cb 100644 --- a/src/devices/machine/swim1.cpp +++ b/src/devices/machine/swim1.cpp @@ -11,20 +11,9 @@ DEFINE_DEVICE_TYPE(SWIM1, swim1_device, "swim1", "Apple SWIM1 (Sander/Wozniak Integrated Machine) version 1 floppy controller") -swim1_device::swim1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, uint32_t q3_clock) : - applefdintf_device(mconfig, SWIM1, tag, owner, clock), - m_q3_clock(q3_clock) -{ - m_iwm_q3_fclk_ratio = double(clock)/double(q3_clock); // ~0.125 - m_iwm_fclk_q3_ratio = double(q3_clock)/double(clock); // ~8 -} - swim1_device::swim1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - applefdintf_device(mconfig, SWIM1, tag, owner, clock), - m_q3_clock(0) + applefdintf_device(mconfig, SWIM1, tag, owner, clock) { - m_iwm_q3_fclk_ratio = 0; - m_iwm_fclk_q3_ratio = 0; } void swim1_device::device_start() @@ -414,16 +403,6 @@ attotime swim1_device::cycles_to_time(u64 cycles) const return attotime::from_ticks(cycles, clock()); } -u64 swim1_device::iwm_q3_to_fclk(u64 cycles) const -{ - return u64(m_iwm_q3_fclk_ratio * double(cycles) + 0.5); -} - -u64 swim1_device::iwm_fclk_to_q3(u64 cycles) const -{ - return u64(m_iwm_fclk_q3_ratio * double(cycles) + 0.5); -} - void swim1_device::ism_fifo_clear() { m_ism_fifo_pos = 0; @@ -502,11 +481,6 @@ u64 swim1_device::iwm_read_register_update_delay() const return m_iwm_mode & 0x08 ? 4 : 8; } -u64 swim1_device::iwm_write_sync_half_window_size() const -{ - return m_iwm_mode & 0x08 ? 2 : 4; -} - void swim1_device::iwm_sync() { if(!m_iwm_active) @@ -602,7 +576,7 @@ void swim1_device::iwm_sync() case S_IDLE: m_iwm_wsh = m_iwm_data; m_iwm_rw_state = SW_WINDOW_MIDDLE; - m_iwm_next_state_change = iwm_q3_to_fclk(iwm_fclk_to_q3(m_last_sync) + iwm_write_sync_half_window_size()); + // m_iwm_next_state_change = iwm_q3_to_fclk(iwm_fclk_to_q3(m_last_sync) + iwm_write_sync_half_window_size()); m_flux_write_count = 0; break; @@ -610,14 +584,14 @@ void swim1_device::iwm_sync() if(m_iwm_wsh & 0x80) m_flux_write[m_flux_write_count++] = m_last_sync; m_iwm_wsh <<= 1; - m_iwm_next_state_change = iwm_q3_to_fclk(iwm_fclk_to_q3(m_last_sync) + iwm_write_sync_half_window_size()); + // m_iwm_next_state_change = iwm_q3_to_fclk(iwm_fclk_to_q3(m_last_sync) + iwm_write_sync_half_window_size()); m_iwm_rw_state = SW_WINDOW_END; break; case SW_WINDOW_END: if(m_flux_write_count == m_flux_write.size()) flush_write(); - m_iwm_next_state_change = iwm_q3_to_fclk(iwm_fclk_to_q3(m_last_sync) + iwm_write_sync_half_window_size()); + // m_iwm_next_state_change = iwm_q3_to_fclk(iwm_fclk_to_q3(m_last_sync) + iwm_write_sync_half_window_size()); m_iwm_rw_state = SW_WINDOW_MIDDLE; break; } diff --git a/src/devices/machine/swim1.h b/src/devices/machine/swim1.h index 47e1032e128..2c362e41da7 100644 --- a/src/devices/machine/swim1.h +++ b/src/devices/machine/swim1.h @@ -22,7 +22,6 @@ class swim1_device : public applefdintf_device { public: // construction/destruction - swim1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, uint32_t q3_clock); swim1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual u8 read(offs_t offset) override; @@ -61,19 +60,17 @@ private: std::array<u64, 32> m_flux_write; u32 m_flux_write_count; u64 m_last_sync; - double m_iwm_q3_fclk_ratio, m_iwm_fclk_q3_ratio; - [[maybe_unused]] u32 m_q3_clock; u8 m_ism_param[16]; u8 m_ism_mode, m_ism_setup; - [[maybe_unused]] u8 m_ism_error; + u8 m_ism_error; u8 m_ism_param_idx, m_ism_fifo_pos; - [[maybe_unused]] u8 m_ism_tss_sr, m_ism_tss_output, m_ism_current_bit; + u8 m_ism_tss_sr, m_ism_tss_output, m_ism_current_bit; u16 m_ism_fifo[2]; - [[maybe_unused]] u16 m_ism_sr; + u16 m_ism_sr; u16 m_ism_crc; - [[maybe_unused]] u16 m_ism_mfm_sync_counter; - [[maybe_unused]] u32 m_ism_half_cycles_before_change; + u16 m_ism_mfm_sync_counter; + u32 m_ism_half_cycles_before_change; u64 m_iwm_next_state_change, m_iwm_sync_update, m_iwm_async_update; int m_iwm_active, m_iwm_rw, m_iwm_rw_state; @@ -85,12 +82,9 @@ private: attotime cycles_to_time(u64 cycles) const; void flush_write(u64 when = 0); - u64 iwm_fclk_to_q3(u64 cycles) const; - u64 iwm_q3_to_fclk(u64 cycles) const; u64 iwm_window_size() const; u64 iwm_half_window_size() const; u64 iwm_read_register_update_delay() const; - u64 iwm_write_sync_half_window_size() const; inline bool iwm_is_sync() const; void iwm_mode_w(u8 data); void iwm_data_w(u8 data); diff --git a/src/mame/drivers/mac.cpp b/src/mame/drivers/mac.cpp index 15d81790f85..30af5f132a0 100644 --- a/src/mame/drivers/mac.cpp +++ b/src/mame/drivers/mac.cpp @@ -738,10 +738,10 @@ void mac_state::add_base_devices(machine_config &config, bool rtc, int woz_versi #if NEW_SWIM switch (woz_version) { case 0: - IWM(config, m_fdc, C7M, 1021800*2, true); + IWM(config, m_fdc, C7M, 1021800*4, true); break; case 1: - SWIM1(config, m_fdc, C15M, 1021800*2); + SWIM1(config, m_fdc, C15M); break; case 2: SWIM2(config, m_fdc, C15M); |