summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commite5e5c41dce7b7d115b4b2c4debbb568342979909 (patch)
treeef2386a4f0a97ae2bde21b5d337022f5147c0d67
parentfd3f7f769ca154a6bd82a7ad89544c5feeca3893 (diff)
swim1: Remove the q3 clock, sync is just not usable
-rw-r--r--src/devices/machine/swim1.cpp34
-rw-r--r--src/devices/machine/swim1.h16
-rw-r--r--src/mame/drivers/mac.cpp4
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);