Fix address masking in sc64 read/write (#222)
* fix address masking for sc64 * more * more
This commit is contained in:
parent
778a0a4015
commit
55ab1cb60b
@ -102,7 +102,15 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u
|
||||
's' => {
|
||||
format_sdcard(device);
|
||||
// read sd card
|
||||
let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64;
|
||||
let (phys_address, cached, err) = device::memory::translate_address(
|
||||
device,
|
||||
device.sc64.regs[SC64_DATA0_REG as usize] as u64,
|
||||
device::memory::AccessType::Write,
|
||||
);
|
||||
if err {
|
||||
panic!("TLB exception in SC64");
|
||||
}
|
||||
|
||||
let offset = (device.sc64.sector * 512) as usize;
|
||||
let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize;
|
||||
let mut i = 0;
|
||||
@ -115,11 +123,12 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u
|
||||
.unwrap(),
|
||||
);
|
||||
|
||||
device.memory.memory_map_write[(address >> 16) as usize](
|
||||
device::memory::data_write(
|
||||
device,
|
||||
address + i as u64,
|
||||
phys_address + i as u64,
|
||||
data,
|
||||
0xFFFFFFFF,
|
||||
cached,
|
||||
);
|
||||
} else {
|
||||
panic!("sd card read out of bounds")
|
||||
@ -130,17 +139,26 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u
|
||||
'S' => {
|
||||
format_sdcard(device);
|
||||
// write sd card
|
||||
let address = device.sc64.regs[SC64_DATA0_REG as usize] as u64;
|
||||
let (phys_address, cached, err) = device::memory::translate_address(
|
||||
device,
|
||||
device.sc64.regs[SC64_DATA0_REG as usize] as u64,
|
||||
device::memory::AccessType::Read,
|
||||
);
|
||||
if err {
|
||||
panic!("TLB exception in SC64");
|
||||
}
|
||||
|
||||
let offset = (device.sc64.sector * 512) as usize;
|
||||
let length = (device.sc64.regs[SC64_DATA1_REG as usize] * 512) as usize;
|
||||
let mut i = 0;
|
||||
|
||||
while i < length {
|
||||
if offset + i < device.ui.saves.sdcard.0.len() {
|
||||
let data = device.memory.memory_map_read[(address >> 16) as usize](
|
||||
let data = device::memory::data_read(
|
||||
device,
|
||||
address + i as u64,
|
||||
phys_address + i as u64,
|
||||
device::memory::AccessSize::Word,
|
||||
cached,
|
||||
)
|
||||
.to_be_bytes();
|
||||
device.ui.saves.sdcard.0[(offset + i)..(offset + i + 4)]
|
||||
|
||||
Reference in New Issue
Block a user