moa/src/main.rs

70 lines
1.7 KiB
Rust
Raw Normal View History

#[macro_use]
mod error;
mod memory;
mod timers;
mod cpus;
2021-09-30 06:21:11 +00:00
mod devices;
2021-09-30 06:21:11 +00:00
use crate::memory::{AddressSpace, MemoryBlock};
use crate::cpus::m68k::MC68010;
2021-09-30 06:21:11 +00:00
use crate::devices::mc68681::MC68681;
2021-10-04 20:02:58 +00:00
use crate::devices::ata::AtaDevice;
fn main() {
let mut space = AddressSpace::new();
let monitor = MemoryBlock::load("binaries/monitor.bin").unwrap();
for byte in monitor.contents.iter() {
print!("{:02x} ", byte);
}
2021-09-30 06:21:11 +00:00
space.insert(0x00000000, Box::new(monitor));
let mut ram = MemoryBlock::new(vec![0; 0x00100000]);
ram.load_at(0, "binaries/kernel.bin").unwrap();
2021-09-30 06:21:11 +00:00
space.insert(0x00100000, Box::new(ram));
2021-10-04 20:02:58 +00:00
let mut ata = AtaDevice::new();
ata.load("binaries/disk-with-partition-table.img").unwrap();
2021-10-04 20:02:58 +00:00
space.insert(0x00600000, Box::new(ata));
let mut serial = MC68681::new();
serial.open().unwrap();
2021-09-30 06:21:11 +00:00
space.insert(0x00700000, Box::new(serial));
let mut cpu = MC68010::new();
2021-10-06 02:58:22 +00:00
//cpu.enable_tracing();
//cpu.add_breakpoint(0x0c94);
//cpu.add_breakpoint(0x103234);
2021-10-06 02:58:22 +00:00
//cpu.add_breakpoint(0x224);
//cpu.add_breakpoint(0x10407e);
while cpu.is_running() {
match cpu.step(&mut space) {
Ok(()) => { },
Err(err) => {
cpu.dump_state(&mut space);
panic!("{:?}", err);
},
}
//serial.step();
}
/*
// TODO I need to add a way to decode and dump the assembly for a section of code, in debugger
cpu.state.pc = 0x00100000;
cpu.state.pc = 0x0010c270;
while cpu.is_running() {
match cpu.decode_next(&mut space) {
Ok(()) => { },
Err(err) => {
cpu.dump_state(&mut space);
panic!("{:?}", err);
},
}
}
*/
}