diff --git a/src/storage.rs b/src/storage.rs index 255de5a..4a4dd7a 100644 --- a/src/storage.rs +++ b/src/storage.rs @@ -13,7 +13,7 @@ use std::{ collections::VecDeque, fmt::Display, fs::File, - io::{Read, Seek, SeekFrom}, + io::{self, Read, Seek, SeekFrom}, }; use toml::Value; @@ -48,7 +48,7 @@ pub struct Storage { // 0x4-0x8: Sector count // 0x8-0xA: Command (W) / Status(R) // 0xA-0xC: Data -// 0xC-0x11: Start address for DMA +// 0xC-0x10: Start address for DMA impl Card for Storage { fn new(data: Value) -> anyhow::Result<(Self, Option>)> { @@ -86,7 +86,7 @@ impl Card for Storage { } NullableResult::Ok(self.read_data.pop_front().unwrap_or(0)) } - 0xC..=0x10 => NullableResult::Ok(u32_get_be_byte(self.start_addresss, address - 0xD)), + 0xC..=0xF => NullableResult::Ok(u32_get_be_byte(self.start_addresss, address - 0xC)), (0xFE..=0xFF) => NullableResult::Ok(u16_get_be_byte(ID, address - 0xFE)), _ => NullableResult::Null, } @@ -109,7 +109,11 @@ impl Card for Storage { .unwrap(); let mut buf = Vec::new(); buf.resize(self.count as usize * SECTOR_SIZE as usize, 0); - file.read_exact(&mut buf).unwrap(); + match file.read_exact(&mut buf) { + Ok(_) => (), + Err(e) if e.kind() == io::ErrorKind::UnexpectedEof => (), + Err(e) => Err(e).unwrap(), + } self.read_data.extend(buf); self.status.set(Status::DATA_READY, true); } @@ -120,7 +124,11 @@ impl Card for Storage { .unwrap(); let mut buf = Vec::new(); buf.resize(self.count as usize * SECTOR_SIZE as usize, 0); - file.read_exact(&mut buf).unwrap(); + match file.read_exact(&mut buf) { + Ok(_) => (), + Err(e) if e.kind() == io::ErrorKind::UnexpectedEof => (), + Err(e) => Err(e).unwrap(), + } self.read_data.extend(buf); self.status.set(Status::BUSY, true); self.transfer = true;