51 lines
1.5 KiB
Rust
51 lines
1.5 KiB
Rust
use std::path::PathBuf;
|
|
|
|
use structopt::StructOpt;
|
|
|
|
use ferretro_components::base::ControlFlow;
|
|
use ferretro_components::prelude::*;
|
|
use ferretro_components::provided::stdlib::*;
|
|
|
|
mod ansi_video;
|
|
mod term_input;
|
|
|
|
#[derive(StructOpt)]
|
|
struct Opt {
|
|
/// Emulator core to use.
|
|
#[structopt(short, long, parse(from_os_str))]
|
|
core: PathBuf,
|
|
/// Path to ROM.
|
|
#[structopt(parse(from_os_str))]
|
|
rom: PathBuf,
|
|
/// Directory containing BIOS files
|
|
#[structopt(short, long, parse(from_os_str))]
|
|
system: Option<PathBuf>,
|
|
}
|
|
|
|
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
|
|
let opt: Opt = Opt::from_args();
|
|
let mut emu = RetroComponentBase::new(&opt.core);
|
|
emu.register_component(ansi_video::AnsiVideoComponent::default())?;
|
|
emu.register_component(term_input::TermiosInputComponent::default())?;
|
|
emu.register_component(StatefulInputComponent::default())?;
|
|
emu.register_component(PathBufComponent {
|
|
sys_path: opt.system.clone(),
|
|
libretro_path: Some(opt.core.to_path_buf()),
|
|
core_assets_path: None,
|
|
save_path: Some(std::env::temp_dir()),
|
|
})?;
|
|
let mut vars_comp = VariableStoreComponent::default();
|
|
vars_comp.insert("mgba_skip_bios", "ON");
|
|
vars_comp.insert("mgba_sgb_borders", "OFF");
|
|
emu.register_component(vars_comp)?;
|
|
emu.register_component(SleepFramerateLimitComponent::default())?;
|
|
|
|
emu.init()?;
|
|
emu.load_game(&opt.rom)?;
|
|
|
|
while let ControlFlow::Continue = emu.run() {
|
|
}
|
|
|
|
Ok(())
|
|
}
|