Add CPU.handle_interrupts

This commit is contained in:
Fabien Freling 2016-03-01 23:15:56 +01:00
parent c6106203eb
commit b4c81fa3f9
3 changed files with 50 additions and 13 deletions

View file

@ -6,7 +6,11 @@
* LICENSE file at the top level directory of this source tree.
*)
let ime = ref false;;
(** Interrupt Master Enable flag *)
let gIME = ref false
let ie_addr = 0xFFFF
let if_addr = 0xFFF0
type t =
| V_Blank
@ -15,6 +19,14 @@ type t =
| Serial
| Joypad
let get_flag_mask = function
| V_Blank -> 0b00000001
| LCD_Stat -> 0b00000010
| Timer -> 0b00000100
| Serial -> 0b00001000
| Joypad -> 0b00010000
(** Return the list of interrupt flags sorted by priority. *)
let get_flags byte =
@ -38,3 +50,17 @@ let get_flags byte =
| _ -> List.rev accu in
get_flag byte 0 []
(** Interrupt Enable *)
let get_IE mem = Memory.get mem ie_addr |> int_of_char
(** Interrupt Flag *)
let get_IF mem = Memory.get mem if_addr |> int_of_char
let reset_IF_flag flag mem =
let if_reg = get_IF mem in
let flag_mask = get_flag_mask flag in
let new_if_reg = if_reg land (lnot flag_mask) |> char_of_int in
Memory.set mem if_addr new_if_reg