fox32: Dump RAM if bad opcode

This commit is contained in:
Ry 2022-04-17 13:29:17 -07:00
parent a8ff66c3a0
commit 7f796dd989
2 changed files with 9 additions and 1 deletions

View File

@ -268,6 +268,8 @@ impl Cpu {
println!("{:#010X}: bad opcode {:#06X}", self.instruction_pointer, opcode); println!("{:#010X}: bad opcode {:#06X}", self.instruction_pointer, opcode);
println!("size instr . cond dest src"); println!("size instr . cond dest src");
println!("{:02b} {:06b} {:01b} {:03b} {:02b} {:02b}", size, instruction, empty, condition, destination, source); println!("{:02b} {:06b} {:01b} {:03b} {:02b} {:02b}", size, instruction, empty, condition, destination, source);
println!("dumping RAM");
self.bus.memory.dump();
panic!("bad opcode"); panic!("bad opcode");
} }
} }

View File

@ -5,6 +5,7 @@ use crate::error;
use std::cell::UnsafeCell; use std::cell::UnsafeCell;
use std::sync::Arc; use std::sync::Arc;
use std::io::Write; use std::io::Write;
use std::fs::File;
pub const MEMORY_RAM_SIZE: usize = 0x04000000; // 64 MiB pub const MEMORY_RAM_SIZE: usize = 0x04000000; // 64 MiB
pub const MEMORY_ROM_SIZE: usize = 0x00080000; // 512 KiB pub const MEMORY_ROM_SIZE: usize = 0x00080000; // 512 KiB
@ -54,6 +55,11 @@ impl Memory {
pub fn ram(&self) -> &mut MemoryRam { &mut self.inner().ram } pub fn ram(&self) -> &mut MemoryRam { &mut self.inner().ram }
pub fn rom(&self) -> &mut MemoryRom { &mut self.inner().rom } pub fn rom(&self) -> &mut MemoryRom { &mut self.inner().rom }
pub fn dump(&self) {
let mut file = File::create("memory.dump").expect("failed to open memory dump file");
file.write_all(self.ram()).expect("failed to write memory dump file");
}
pub fn read_8(&self, address: u32) -> u8 { pub fn read_8(&self, address: u32) -> u8 {
let address = address as usize; let address = address as usize;