extern crate sdl2; mod renderer; use crate::renderer::Renderer; use sdl2::event::Event; use sdl2::rect::Point; use simplelog::*; use std::fs::File; use std::time::Duration; const ROM_PATH: &'static str = "./roms/dk.nes"; const NES_WIDTH: u32 = 256; const NES_HEIGHT: u32 = 240; const WINDOW_SCALE: u32 = 3; const WINDOW_WIDTH: u32 = NES_WIDTH * WINDOW_SCALE; const WINDOW_HEIGHT: u32 = NES_HEIGHT * WINDOW_SCALE; fn main() -> Result<(), String> { CombinedLogger::init(vec![ TermLogger::new( LevelFilter::Info, Config::default(), TerminalMode::Mixed, ColorChoice::Auto, ), WriteLogger::new( LevelFilter::Debug, Config::default(), File::create("./logs/latest.log").unwrap(), ), ]) .unwrap(); let sdl_context = sdl2::init()?; let video_subsystem = sdl_context.video()?; let window = video_subsystem .window("NesRust", WINDOW_WIDTH, WINDOW_HEIGHT) .position_centered() .opengl() .build() .map_err(|e| e.to_string())?; let mut renderer = Renderer::new(window, WINDOW_SCALE)?; let mut event_pump = sdl_context.event_pump()?; 'running: loop { for event in event_pump.poll_iter() { match event { Event::Quit { .. } => break 'running, _ => {} } } renderer.draw(&Point::new(1, 1))?; ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60)); // Main loop } Ok(()) // let mut window = UIWindow::new("NesRust", 800, 600, 60); // // // let mut system = System::new(); // // system.insert_rom(ROM_PATH).expect("Failed to insert ROM"); // loop { // // system.cycle(); // if window.poll_events() { // break; // } // // // TODO: System loop // // window.render(); // window.wait(); // } }