diff --git a/src/bit.ml b/src/bit.ml index d6e50cc..38a3725 100644 --- a/src/bit.ml +++ b/src/bit.ml @@ -4,3 +4,9 @@ let is_set num i = else (num lsr i) land 0b00000001 <> 0 +let two_complement n = + (lnot n) + 1 + +let signed_byte n = + if n land 0x80 <> 0 then -((two_complement n) land 0xFF) + else n diff --git a/src/cpu.ml b/src/cpu.ml index 784b988..e594efb 100644 --- a/src/cpu.ml +++ b/src/cpu.ml @@ -127,14 +127,6 @@ let pop_stack cpu mem = cpu.reg.sp <- (cpu.reg.sp + 1) mod 0xFFFF; merge_bytes low high -let two_complement n = - (lnot n) + 1 - -let signed_byte n = - if n land 0x80 <> 0 then -((two_complement n) land 0xFF) - else n - - (** http://imrannazar.com/GameBoy-Z80-Opcode-Map @@ -172,7 +164,7 @@ let run cpu (mem: Memory.map) = (* jump *) | '\x20' -> let n = read_pc_byte cpu mem in - let s = signed_byte n in + let s = Bit.signed_byte n in let inst = sprintf "JR \tNZ, 0x%02X (%d)" n s in if cpu.flag.z = false then begin