50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
use std::{path::PathBuf, process};
|
|
|
|
use anyhow::Result;
|
|
use app::App;
|
|
use clap::Parser;
|
|
use emulator::EmulatorBuilder;
|
|
use thread_priority::{ThreadBuilder, ThreadPriority};
|
|
use winit::event_loop::{ControlFlow, EventLoop};
|
|
|
|
mod app;
|
|
mod audio;
|
|
mod controller;
|
|
mod emulator;
|
|
mod graphics;
|
|
mod input;
|
|
|
|
#[derive(Parser)]
|
|
struct Args {
|
|
rom: Option<PathBuf>,
|
|
}
|
|
|
|
fn main() -> Result<()> {
|
|
let args = Args::parse();
|
|
|
|
let (mut builder, client) = EmulatorBuilder::new();
|
|
if let Some(path) = args.rom {
|
|
builder = builder.with_rom(&path);
|
|
}
|
|
|
|
ThreadBuilder::default()
|
|
.name("Emulator".to_owned())
|
|
.priority(ThreadPriority::Max)
|
|
.spawn_careless(move || {
|
|
let mut emulator = match builder.build() {
|
|
Ok(e) => e,
|
|
Err(err) => {
|
|
eprintln!("Error initializing emulator: {err}");
|
|
process::exit(1);
|
|
}
|
|
};
|
|
emulator.run();
|
|
})?;
|
|
|
|
let event_loop = EventLoop::with_user_event().build().unwrap();
|
|
event_loop.set_control_flow(ControlFlow::Poll);
|
|
let proxy = event_loop.create_proxy();
|
|
event_loop.run_app(&mut App::new(client, proxy))?;
|
|
Ok(())
|
|
}
|