Struct rz80::Registers [] [src]

pub struct Registers {
    pub i: RegT,
    pub r: RegT,
    pub im: RegT,
    // some fields omitted
}

CPU register access

Examples

set the PC and SP registers:

use rz80::CPU;

let mut cpu = CPU::new();
cpu.reg.set_pc(0x0200);
cpu.reg.set_sp(0x01C0);

get the B, C and BC registers

use rz80::CPU;

let cpu = CPU::new();
let b = cpu.reg.b();
let c = cpu.reg.c();
let bc = cpu.reg.bc();
println!("B: {}, C: {}, BC: {}", b, c, bc);

8- or 16-bit wraparound happens during the set operation:

use rz80::CPU;

let mut cpu = CPU::new();

cpu.reg.set_a(0xFF);
let a = cpu.reg.a() + 1;
cpu.reg.set_a(a);
assert!(cpu.reg.a() == 0x00);

cpu.reg.set_hl(0x0000);
let hl = cpu.reg.hl() - 1;
cpu.reg.set_hl(hl);
assert!(cpu.reg.hl() == 0xFFFF);

Fields

i: RegT r: RegT im: RegT

Methods

impl Registers
[src]

fn new() -> Registers

initialize a new Registers object

fn reset(&mut self)

perform a CPU reset (clears some, but not all registers)

fn a(&self) -> RegT

get content of A register

fn f(&self) -> RegT

get content of F register (status flags)

fn b(&self) -> RegT

get content of B register

fn c(&self) -> RegT

get content of C register

fn d(&self) -> RegT

get content of D register

fn e(&self) -> RegT

get content of E register

fn h(&self) -> RegT

get content of H register

fn l(&self) -> RegT

get content of L register

fn w(&self) -> RegT

get content of undocumented W register (of WZ register pair)

fn set_a(&mut self, v: RegT)

set content of A register

fn set_f(&mut self, v: RegT)

set content of F register (status flags)

fn set_b(&mut self, v: RegT)

set content of B register

fn set_c(&mut self, v: RegT)

set content of C register

fn set_d(&mut self, v: RegT)

set content of D register

fn set_e(&mut self, v: RegT)

set content of E register

fn set_h(&mut self, v: RegT)

set content of H register

fn set_l(&mut self, v: RegT)

set content of L register

fn af(&self) -> RegT

get content of AF register pair

fn bc(&self) -> RegT

get content of BC register pair

fn de(&self) -> RegT

get content of DE register pair

fn hl(&self) -> RegT

get content of HL register pair

fn ix(&self) -> RegT

get content of IX register

fn iy(&self) -> RegT

get content of IY register

fn sp(&self) -> RegT

get content of SP register

fn wz(&self) -> RegT

get content of undocumented WZ register

fn af_(&self) -> RegT

get content of AF' register

fn bc_(&self) -> RegT

get content of BC' register

fn de_(&self) -> RegT

get content of DE' register

fn hl_(&self) -> RegT

get content of HL' register

fn wz_(&self) -> RegT

get content of undocumented WZ' register

fn pc(&self) -> RegT

get content of PC register

fn set_af(&mut self, v: RegT)

set content of AF register pair

fn set_bc(&mut self, v: RegT)

set content of BC register pair

fn set_de(&mut self, v: RegT)

set content of DE register pair

fn set_hl(&mut self, v: RegT)

set content of HL register pair

fn set_ix(&mut self, v: RegT)

set content of IX register

fn set_iy(&mut self, v: RegT)

set content of IY register

fn set_sp(&mut self, v: RegT)

set content of SP register

fn set_wz(&mut self, v: RegT)

set content of undocumented WZ register

fn set_af_(&mut self, v: RegT)

set content of AF' register

fn set_bc_(&mut self, v: RegT)

set content of BC' register

fn set_de_(&mut self, v: RegT)

set content of DE' register

fn set_hl_(&mut self, v: RegT)

set content of HL' register

fn set_wz_(&mut self, v: RegT)

set content of undocumented WZ' register

fn set_pc(&mut self, v: RegT)

set content of PC register

fn inc_pc(&mut self, inc: u16)

increment the PC register by some value

fn dec_pc(&mut self, dec: u16)

decrement the PC register by some value

fn r8(&self, r: usize) -> RegT

get 8-bit register by index (where index is 3-bit register id from Z80 instruction)

fn set_r8(&mut self, r: usize, v: RegT)

set 8-bit register by index (where index is 3-bit register id from Z80 instruction)

fn r8i(&self, r: usize) -> RegT

get 8-bit register by index, H,L never patched to IXH,IXL,IYH,IYL

fn set_r8i(&mut self, r: usize, v: RegT)

set 8-bit register by index, H,L never patched to IXH,IXL,IYH,IYL

fn r16i(&self, i: usize) -> RegT

get 16-bit register by direct index (AF, BC, DE, HL, etc)

fn set_r16i(&mut self, i: usize, v: RegT)

set 16-bit register by direct index (AF, BC, DE, ...)

fn r16sp(&self, r: usize) -> RegT

get 16-bit register by 2-bit index with mapping through SP-table

fn set_r16sp(&mut self, r: usize, v: RegT)

set 16-bit register by 2-bit index with mapping through SP-table

fn r16af(&self, r: usize) -> RegT

get 16-bit register by 2-bit index with mapping through AF-table

fn set_r16af(&mut self, r: usize, v: RegT)

set 16-bit register by 2-bit index with mapping through AF-table

fn swap(&mut self, i: usize, i_: usize)

swap 2 16-bit registers by direct index (HL, BC, DE, ...)

fn patch_ix(&mut self)

patch register mapping tables for use of IX instead of HL

fn patch_iy(&mut self)

patch register mapping tables for use of IY instead of HL

fn unpatch(&mut self)

unpatch register mapping tables to use HL instead of IX/IY