Add CPU.handle_interrupts
This commit is contained in:
parent
c6106203eb
commit
b4c81fa3f9
3 changed files with 50 additions and 13 deletions
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue