diff options
author | Astatin <[email protected]> | 2025-06-29 00:32:41 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-06-29 00:32:41 +0200 |
commit | 4cb95575feedda5e2006d706a9e85db6569043ca (patch) | |
tree | 15f89bc7d0845f8920237961bf9bdedee38ed8b7 /src/state.rs | |
parent | 00c5b36a37d9b7e8b7009b3a176397e5ce808cbd (diff) |
Fix (rewrite ?) FIFO serial communication
Diffstat (limited to 'src/state.rs')
-rw-r--r-- | src/state.rs | 32 |
1 files changed, 2 insertions, 30 deletions
diff --git a/src/state.rs b/src/state.rs index 980cbad..2c54a44 100644 --- a/src/state.rs +++ b/src/state.rs @@ -167,15 +167,6 @@ pub struct Memory<S: Serial, A: Audio> { pub timer_enabled: bool, pub timer_speed: u8, - - pub serial_data: u8, - - pub serial_control: u8, -} - -mod serial_control_flags { - pub const CLOCK_SELECT: u8 = 0b1; - pub const TRANSFER_ENABLE: u8 = 0b10000000; } impl<S: Serial, A: Audio> Memory<S, A> { @@ -214,30 +205,11 @@ impl<S: Serial, A: Audio> Memory<S, A> { timer_enabled: false, timer_speed: 0, serial, - serial_control: 0, - serial_data: 0, } } - pub fn update_serial(&mut self) { - if self.serial.new_transfer() { - println!("TRANSFER ENABLED"); - self.serial_control |= serial_control_flags::TRANSFER_ENABLE; - } - - if self.serial.clock_master() { - self.serial_control |= serial_control_flags::CLOCK_SELECT; - } else { - self.serial_control &= !serial_control_flags::CLOCK_SELECT; - } - - if (self.serial_control & serial_control_flags::CLOCK_SELECT != 0 - || self.serial.new_transfer()) - && self.serial_control & serial_control_flags::TRANSFER_ENABLE != 0 - { - self.serial.write(self.serial_data); - self.serial_data = self.serial.read(); - self.serial_control &= !serial_control_flags::TRANSFER_ENABLE; + pub fn update_serial(&mut self, cycles: u128) { + if self.serial.update_serial(cycles) { self.io[0x0f] |= 0b1000; } } |