open Printf let rec run (cpu: Cpu.t) (mem: Memory.map) (screen: Screen.t) = Cpu.run cpu mem; run cpu mem screen (** Power up sequence http://bgb.bircd.org/pandocs.htm#powerupsequence *) let power_up cartridge = (** Nintendo logo scrolling *) if not (Cartridge.check_nintendo_logo cartridge) then print_endline "Invalid ROM." else print_endline "Valid ROM."; Cartridge.print_info cartridge; let cpu = Cpu.init_cpu in let mem = Memory.init cartridge in let screen = Screen.init in Graphics.open_graph ""; Graphics.resize_window Screen.width Screen.height; run cpu mem screen let () = if Array.length Sys.argv < 2 then begin prerr_endline "Please specify a ROM."; eprintf "Usage: %s path/to/rom\n" Sys.argv.(0); exit 1; end; let cartridge = Cartridge.read_cartridge Sys.argv.(1) in match cartridge with | None -> print_endline "Invalid ROM file." | Some c -> power_up c