#![allow(dead_code)]
use crate::libs::memory::Memory;
use super::z80_base::Z80Data;
pub fn split_word(word: u16) -> (u8, u8) {
((word >> 8) as u8, (word & 0xff) as u8)
}
pub fn join_bytes(h: u8, l: u8) -> u16 {
(l as u16) | ((h as u16) << 8)
}
pub fn tern_op_b(cond: bool, ret1: u8, ret2: u8) -> u8 {
if cond {
return ret1;
}
ret2
}
pub fn sign_extend(v: u8) -> i16 {
i16::from(v as i8)
}
pub fn assert_pc(data: &Z80Data, addr: u16) {
assert!(
data.pc() == addr,
"cur.pc:0x{:04x} ~= tgt.pc:0x{:04x}",
data.pc(),
addr
);
}
pub fn read_word(memory: &Memory, addr: u16) -> u16 {
let l = memory.read_byte(addr);
let h = memory.read_byte(addr + 1);
join_bytes(h, l)
}
pub fn peek_stack(data: &Z80Data, memory: &Memory, depth: usize) {
let sp = data.sp;
let mut s = format!("SP(0x{:04x}): ", sp);
for i in 0..depth {
s.push_str(format!("0x{:04x} ", read_word(memory, sp + 2 * i as u16)).as_str());
}
println!("{}", s);
}