This repository has been archived on 2024-12-14. You can view files and clone it, but cannot push or open issues or pull requests.
rustboyadvance-ng/src/bin/main.rs
Michel Heily a4925b7233 Fix SP values for "--skip-bios"
Former-commit-id: d89d3c9c6b5d062137442df4017d59dea047270f
2019-07-15 07:31:29 +03:00

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);
}
}