Add Interrupt module
This commit is contained in:
parent
de755822d3
commit
4df4aea484
4 changed files with 71 additions and 1 deletions
39
src/interrupt.ml
Normal file
39
src/interrupt.ml
Normal file
|
@ -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 []
|
Loading…
Add table
Add a link
Reference in a new issue