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, } fn main() -> Result<(), Box> { 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(()) }