2021-09-28 23:09:38 +00:00
|
|
|
|
|
|
|
#[macro_use]
|
|
|
|
mod error;
|
|
|
|
mod memory;
|
2021-09-30 00:11:48 +00:00
|
|
|
mod cpus;
|
2021-09-30 06:21:11 +00:00
|
|
|
mod devices;
|
2021-09-28 23:09:38 +00:00
|
|
|
|
2021-09-30 06:21:11 +00:00
|
|
|
use crate::memory::{AddressSpace, MemoryBlock};
|
2021-09-30 00:11:48 +00:00
|
|
|
use crate::cpus::m68k::MC68010;
|
2021-09-30 06:21:11 +00:00
|
|
|
use crate::devices::mc68681::MC68681;
|
2021-09-28 23:09:38 +00:00
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let mut space = AddressSpace::new();
|
2021-09-30 06:21:11 +00:00
|
|
|
let monitor = MemoryBlock::load("monitor.bin").unwrap();
|
2021-09-28 23:09:38 +00:00
|
|
|
for byte in monitor.contents.iter() {
|
|
|
|
print!("{:02x} ", byte);
|
|
|
|
}
|
2021-09-30 06:21:11 +00:00
|
|
|
space.insert(0x00000000, Box::new(monitor));
|
2021-09-28 23:09:38 +00:00
|
|
|
|
2021-09-30 06:21:11 +00:00
|
|
|
let ram = MemoryBlock::new(vec![0; 0x00100000]);
|
|
|
|
space.insert(0x00100000, Box::new(ram));
|
2021-09-28 23:09:38 +00:00
|
|
|
|
2021-10-01 03:27:01 +00:00
|
|
|
let mut serial = MC68681::new();
|
2021-10-01 19:25:23 +00:00
|
|
|
serial.open().unwrap();
|
2021-09-30 06:21:11 +00:00
|
|
|
space.insert(0x00700000, Box::new(serial));
|
2021-09-30 04:52:38 +00:00
|
|
|
|
2021-09-28 23:09:38 +00:00
|
|
|
let mut cpu = MC68010::new();
|
2021-10-02 02:27:05 +00:00
|
|
|
cpu.set_breakpoint(0x0ea0);
|
2021-10-01 19:25:23 +00:00
|
|
|
cpu.use_tracing = true;
|
2021-09-28 23:09:38 +00:00
|
|
|
while cpu.is_running() {
|
2021-09-30 04:52:38 +00:00
|
|
|
match cpu.step(&mut space) {
|
|
|
|
Ok(()) => { },
|
|
|
|
Err(err) => {
|
2021-10-01 19:25:23 +00:00
|
|
|
cpu.dump_state(&mut space);
|
2021-09-30 04:52:38 +00:00
|
|
|
panic!("{:?}", err);
|
|
|
|
},
|
|
|
|
}
|
2021-10-01 19:25:23 +00:00
|
|
|
|
|
|
|
//serial.step();
|
2021-09-28 23:09:38 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|