implemented work ram

This commit is contained in:
kirjavascript 2021-04-24 23:58:02 +01:00
parent a3e16e6429
commit e30e60fa24
3 changed files with 38 additions and 15 deletions

View file

@ -25,10 +25,7 @@ impl Emulator {
let buf: Vec<u8> = include_bytes!("../../notes/res/s1.bin").to_vec();
let mem = mem::Mem {
rom: rom::Rom::from_vec(buf),
};
let mem = mem::Mem::new(rom::Rom::from_vec(buf));
let int_ctrl = AutoInterruptController::new();
let mut core = ConfiguredCore::new_with(0x206, int_ctrl, mem);

View file

@ -3,7 +3,6 @@ use r68k_emu::ram::AddressSpace;
use crate::rom::Rom;
// file:///home/cake/dev/trueLMAO/target/doc/src/r68k_emu/ram/pagedmem.rs.html#102-140
// wrapping_add
pub struct Mem {
pub rom: Rom,
@ -30,26 +29,53 @@ impl AddressBus for Mem {
_ => todo!(),
}
}
fn read_word(&self, _address_space: AddressSpace, address: u32) -> u32 {
fn read_word(&self, address_space: AddressSpace, address: u32) -> u32 {
match address {
0..=0x3FFFFE => self.rom.read_word(address) as _,
// 0xFF0000..=0xFFFFFE => self.work_ram[address as usize - 0xFF0000] as _,
0..=0x3FFFFF => self.rom.read_word(address) as _,
0xFF0000..=0xFFFFFE => {
self.read_byte(address_space, address) << 8
| self.read_byte(address_space, address + 1)
},
_ => todo!(),
}
}
fn read_long(&self, _address_space: AddressSpace, address: u32) -> u32 {
fn read_long(&self, address_space: AddressSpace, address: u32) -> u32 {
match address {
0..=0x3FFFFF => self.rom.read_long(address),
0xFF0000..=0xFFFFFC => {
self.read_word(address_space, address) << 16
| self.read_word(address_space, address + 2)
},
_ => todo!(),
}
}
fn write_byte(&mut self, _address_space: AddressSpace, address: u32, value: u32) {
todo!();
match address {
0..=0x3FFFFF => {},
0xFF0000..=0xFFFFFF => {
self.work_ram[address as usize - 0xFF0000] = value as u8;
},
_ => todo!(),
}
}
fn write_word(&mut self, _address_space: AddressSpace, address: u32, value: u32) {
todo!();
fn write_word(&mut self, address_space: AddressSpace, address: u32, value: u32) {
match address {
0..=0x3FFFFF => {},
0xFF0000..=0xFFFFFE => {
self.write_byte(address_space, address, value >> 8);
self.write_byte(address_space, address + 1, value && 0xFF);
},
_ => todo!(),
}
}
fn write_long(&mut self, _address_space: AddressSpace, address: u32, value: u32) {
todo!();
match address {
0..=0x3FFFFF => {},
0xFF0000..=0xFFFFFC => {
self.write_word(address_space, address, value >> 16);
self.write_work(address_space, address + 2, value && 0xFFFF);
},
_ => todo!(),
}
}
}

View file

@ -13,11 +13,11 @@ impl Rom {
}
pub fn read_word(&self, addr: u32) -> u16 {
((self.read_byte(addr) as u16) << 8) + self.read_byte(addr + 1) as u16
((self.read_byte(addr) as u16) << 8) | self.read_byte(addr + 1) as u16
}
pub fn read_long(&self, addr: u32) -> u32 {
((self.read_word(addr) as u32) << 16) + self.read_word(addr + 2) as u32
((self.read_word(addr) as u32) << 16) | self.read_word(addr + 2) as u32
}
pub fn read_string(&self, range: std::ops::Range<usize>) -> String {