pub struct EpsonRtc { /* private fields */ }Expand description
The Epson RTC-4513 register file + handshake state.
Implementations§
Source§impl EpsonRtc
impl EpsonRtc
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Build an RTC seeded to a fixed epoch (all-zero clock fields) rather than the host’s real wall-clock time (see the module doc’s determinism note).
Sourcepub fn read(&mut self, address: u32) -> u8
pub fn read(&mut self, address: u32) -> u8
$4840-$4842 register read (ares EpsonRTC::read, address & 3).
Sourcepub const fn write(&mut self, address: u32, data: u8)
pub const fn write(&mut self, address: u32, data: u8)
$4840-$4842 register write (ares EpsonRTC::write, address & 3, data & 15).
Sourcepub fn save_state(&self, w: &mut SaveWriter)
pub fn save_state(&self, w: &mut SaveWriter)
Write every clock field + the handshake state machine into a "RTC0" section. There is
no firmware/chip-ROM byte here to exclude (this is a pure register-file clean-room port,
per docs/adr/0003).
Sourcepub fn load_state(
&mut self,
r: &mut SaveReader<'_>,
) -> Result<(), SaveStateError>
pub fn load_state( &mut self, r: &mut SaveReader<'_>, ) -> Result<(), SaveStateError>
The inverse of Self::save_state.
§Errors
SaveStateError on truncated/corrupt input, a section with unconsumed trailing bytes,
or SaveStateError::Invalid if the encoded state discriminant doesn’t match one of
State’s four variants (a semantic enum constraint, not a hardware register width — the
same posture Obc1Board::load_state already applies to its own cursor fields). Every
clock/handshake field below is masked to the widest value rtc_write/write can ever
produce (nibble fields & 0x0F, single-bit flags & 0x01, the few wider-but-still-narrow
fields their own specific mask) so a hand-edited/corrupted save-state can’t inject a
physically-unwritable bit pattern into a register real hardware could never hold.