2015-02-23 16:10:40 +01:00
|
|
|
open Printf
|
|
|
|
|
2015-02-27 22:24:26 +01:00
|
|
|
let rec run (cpu: Cpu.t) (cartridge: Cartridge.t) =
|
|
|
|
Cpu.run cpu cartridge;
|
|
|
|
run cpu cartridge
|
|
|
|
|
2015-02-23 16:10:40 +01:00
|
|
|
(** Power up sequence
|
|
|
|
http://bgb.bircd.org/pandocs.htm#powerupsequence *)
|
2015-02-23 15:43:37 +01:00
|
|
|
let power_up cartridge =
|
|
|
|
(** Nintendo logo scrolling *)
|
|
|
|
if not (Cartridge.check_nintendo_logo cartridge)
|
|
|
|
then print_endline "Invalid ROM."
|
2015-02-23 16:10:40 +01:00
|
|
|
else
|
|
|
|
print_endline "Valid ROM.";
|
2015-03-05 23:00:28 +01:00
|
|
|
Cartridge.print_info cartridge;
|
2015-02-27 22:24:26 +01:00
|
|
|
|
|
|
|
let cpu = Cpu.init_cpu in
|
|
|
|
run cpu cartridge
|
2015-02-23 16:10:40 +01:00
|
|
|
|
2015-02-23 15:43:37 +01:00
|
|
|
|
2015-02-21 17:11:18 +01:00
|
|
|
let () =
|
2015-02-27 22:24:26 +01:00
|
|
|
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;
|
2015-02-23 15:43:37 +01:00
|
|
|
|
|
|
|
let cartridge = Cartridge.read_cartridge Sys.argv.(1) in
|
|
|
|
match cartridge with
|
|
|
|
| None -> print_endline "Invalid ROM file."
|
|
|
|
| Some c -> power_up c
|