65 lines
1.7 KiB
Rust
65 lines
1.7 KiB
Rust
#[macro_use]
|
|
extern crate clap;
|
|
|
|
use clap::{App, ArgMatches};
|
|
|
|
extern crate rustboyadvance_ng;
|
|
|
|
use rustboyadvance_ng::arm7tdmi::Core;
|
|
use rustboyadvance_ng::cartridge::Cartridge;
|
|
use rustboyadvance_ng::debugger::Debugger;
|
|
use rustboyadvance_ng::util::read_bin_file;
|
|
use rustboyadvance_ng::{GBAResult, GameBoyAdvance};
|
|
|
|
fn run_debug(matches: &ArgMatches) -> GBAResult<()> {
|
|
let skip_bios = match matches.occurrences_of("skip_bios") {
|
|
0 => false,
|
|
_ => true,
|
|
};
|
|
|
|
let bios_bin = read_bin_file(matches.value_of("bios").unwrap_or_default())?;
|
|
|
|
let gamepak = Cartridge::load(matches.value_of("game_rom").unwrap())?;
|
|
println!("loaded rom: {:#?}", gamepak.header);
|
|
|
|
let mut core = Core::new();
|
|
core.reset();
|
|
core.set_verbose(true);
|
|
if skip_bios {
|
|
core.gpr[13] = 0x0300_7f00;
|
|
core.gpr_banked_r13[0] = 0x0300_7f00; // USR/SYS
|
|
core.gpr_banked_r13[1] = 0x0300_7f00; // FIQ
|
|
core.gpr_banked_r13[2] = 0x0300_7fa0; // IRQ
|
|
core.gpr_banked_r13[3] = 0x0300_7fe0; // SVC
|
|
core.gpr_banked_r13[4] = 0x0300_7f00; // ABT
|
|
core.gpr_banked_r13[5] = 0x0300_7f00; // UND
|
|
|
|
core.pc = 0x0800_0000;
|
|
|
|
core.cpsr.set(0x5f);
|
|
}
|
|
|
|
let gba = GameBoyAdvance::new(core, bios_bin, gamepak);
|
|
|
|
let mut debugger = Debugger::new(gba);
|
|
|
|
println!("starting debugger...");
|
|
debugger.repl()?;
|
|
println!("ending debugger...");
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn main() {
|
|
let yaml = load_yaml!("cli.yml");
|
|
let matches = App::from_yaml(yaml).get_matches();
|
|
|
|
let result = match matches.subcommand() {
|
|
("debug", Some(m)) => run_debug(m),
|
|
_ => Ok(()),
|
|
};
|
|
|
|
if let Err(err) = result {
|
|
println!("Got an error: {:?}", err);
|
|
}
|
|
}
|