parent
de755822d3
commit
4df4aea484
@ -0,0 +1,39 @@ |
||||
(** |
||||
* Copyright (c) 2016, Fabien Freling |
||||
* All rights reserved. |
||||
* |
||||
* This source code is licensed under the BSD 2-clause license found in the |
||||
* LICENSE file at the top level directory of this source tree. |
||||
*) |
||||
|
||||
(* let IME = ref false;; *) |
||||
|
||||
type t = |
||||
| V_Blank |
||||
| LCD_Stat |
||||
| Timer |
||||
| Serial |
||||
| Joypad |
||||
|
||||
let get_flags byte = |
||||
|
||||
let nth_interrupt i = |
||||
match i with |
||||
| 0 -> V_Blank |
||||
| 1 -> LCD_Stat |
||||
| 2 -> Timer |
||||
| 3 -> Serial |
||||
| 4 -> Joypad |
||||
| _ -> failwith "Invalid interrupt index." in |
||||
|
||||
let rec get_flag byte i accu = |
||||
match i with |
||||
| 0 | 1 | 2 | 3 | 4 -> |
||||
if Bit.is_set byte i then |
||||
let interrupt = nth_interrupt i in |
||||
get_flag byte (i + 1) (interrupt :: accu) |
||||
else |
||||
get_flag byte (i + 1) accu |
||||
| _ -> accu in |
||||
|
||||
get_flag byte 0 [] |
@ -0,0 +1,30 @@ |
||||
open OUnit2 |
||||
|
||||
|
||||
let test_interrupt _ = |
||||
let input_refs = [ |
||||
( 0b00000000, [] ); |
||||
( 0b00000001, [ Interrupt.V_Blank ] ); |
||||
( 0b00000010, [ Interrupt.LCD_Stat ] ); |
||||
( 0b00000100, [ Interrupt.Timer ] ); |
||||
( 0b00001000, [ Interrupt.Serial ] ); |
||||
( 0b00010000, [ Interrupt.Joypad ] ); |
||||
] in |
||||
|
||||
let test = |
||||
function ( byte, ref_flags ) -> |
||||
let computed_flags = Interrupt.get_flags byte in |
||||
List.iter2 (fun f1 f2 -> assert_equal f1 f2) ref_flags computed_flags in |
||||
|
||||
List.iter test input_refs |
||||
|
||||
|
||||
(* Name the test cases and group them together *) |
||||
let suite = |
||||
"suite">::: |
||||
[ |
||||
"test interrupt parsing">:: test_interrupt |
||||
] |
||||
|
||||
let () = |
||||
run_test_tt_main suite |
Loading…
Reference in new issue