emuladoor/src/main.rs

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