diff --git a/roms/cpu_instrs_individual/01-special.gb b/roms/cpu_instrs_individual/01-special.gb new file mode 100644 index 0000000..ad3e998 Binary files /dev/null and b/roms/cpu_instrs_individual/01-special.gb differ diff --git a/roms/cpu_instrs_individual/02-interrupts.gb b/roms/cpu_instrs_individual/02-interrupts.gb new file mode 100644 index 0000000..2089594 Binary files /dev/null and b/roms/cpu_instrs_individual/02-interrupts.gb differ diff --git a/roms/cpu_instrs_individual/03-op sp,hl.gb b/roms/cpu_instrs_individual/03-op sp,hl.gb new file mode 100644 index 0000000..50b3cc7 Binary files /dev/null and b/roms/cpu_instrs_individual/03-op sp,hl.gb differ diff --git a/roms/cpu_instrs_individual/04-op r,imm.gb b/roms/cpu_instrs_individual/04-op r,imm.gb new file mode 100644 index 0000000..58ca7b8 Binary files /dev/null and b/roms/cpu_instrs_individual/04-op r,imm.gb differ diff --git a/roms/cpu_instrs_individual/05-op rp.gb b/roms/cpu_instrs_individual/05-op rp.gb new file mode 100644 index 0000000..1c19d92 Binary files /dev/null and b/roms/cpu_instrs_individual/05-op rp.gb differ diff --git a/roms/cpu_instrs_individual/06-ld r,r.gb b/roms/cpu_instrs_individual/06-ld r,r.gb new file mode 100644 index 0000000..d497bfd Binary files /dev/null and b/roms/cpu_instrs_individual/06-ld r,r.gb differ diff --git a/roms/cpu_instrs_individual/07-jr,jp,call,ret,rst.gb b/roms/cpu_instrs_individual/07-jr,jp,call,ret,rst.gb new file mode 100644 index 0000000..5c8d20b Binary files /dev/null and b/roms/cpu_instrs_individual/07-jr,jp,call,ret,rst.gb differ diff --git a/roms/cpu_instrs_individual/08-misc instrs.gb b/roms/cpu_instrs_individual/08-misc instrs.gb new file mode 100644 index 0000000..4da139b Binary files /dev/null and b/roms/cpu_instrs_individual/08-misc instrs.gb differ diff --git a/roms/cpu_instrs_individual/09-op r,r.gb b/roms/cpu_instrs_individual/09-op r,r.gb new file mode 100644 index 0000000..e30e6ec Binary files /dev/null and b/roms/cpu_instrs_individual/09-op r,r.gb differ diff --git a/roms/cpu_instrs_individual/10-bit ops.gb b/roms/cpu_instrs_individual/10-bit ops.gb new file mode 100644 index 0000000..8988458 Binary files /dev/null and b/roms/cpu_instrs_individual/10-bit ops.gb differ diff --git a/roms/cpu_instrs_individual/11-op a,(hl).gb b/roms/cpu_instrs_individual/11-op a,(hl).gb new file mode 100644 index 0000000..0634b7f Binary files /dev/null and b/roms/cpu_instrs_individual/11-op a,(hl).gb differ diff --git a/roms/cpu_instrs_individual/cpu_instrs.gb b/roms/cpu_instrs_individual/cpu_instrs.gb new file mode 100644 index 0000000..7b06221 Binary files /dev/null and b/roms/cpu_instrs_individual/cpu_instrs.gb differ diff --git a/src/bus.rs b/src/bus.rs index cf51d46..f92ebc5 100644 --- a/src/bus.rs +++ b/src/bus.rs @@ -43,7 +43,7 @@ pub struct Bus { impl Bus { pub fn new() -> Self { - let game_rom = match ROM::load_file("roms/cpu_instrs.gb".to_string()) { + let game_rom = match ROM::load_file("roms/cpu_instrs_individual/01-special.gb".to_string()) { Ok(rom) => rom, _ => ROM::from_bytes(&[0; 0xFFFF]) }; diff --git a/src/cpu.rs b/src/cpu.rs index beb9e4d..91ff45d 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -87,16 +87,16 @@ pub struct Registers { impl Registers { pub fn new() -> Self { Self { - a: 0, - f: 0b00000000, // The first 4 lower bits are always set to 0 - b: 0, - c: 0, - d: 0, - e: 0, - h: 0, - l: 0, - sp: 0, - pc: 0x100, // On power up, the Gameboy executes the instruction at hex 100 + a: 0x01, + f: 0xB0, // The first 4 lower bits are always set to 0 + b: 0x00, + c: 0x00, + d: 0x00, + e: 0xD8, + h: 0x01, + l: 0x4D, + sp: 0xFFFE, + pc: 0x0100, // On power up, the Gameboy executes the instruction at hex 100 } } @@ -275,9 +275,20 @@ impl CPU { let program_counter = self.registers.get(Register::PC); let parameter_bytes = CPU::read_parameter_bytes(program_counter, bus); let opcode = CPU::parse_opcode(¶meter_bytes); - println!("{:?}", opcode); - println!("PC: {:04X?}", self.registers.get(Register::PC)); - println!("{:02X?}", ¶meter_bytes); + // println!("Opcode: {:02X?} | PC: {:04X?} | Params: {:02X?}", opcode, self.registers.get(Register::PC), ¶meter_bytes); + println!("A: {:02X} F: {:02X} B: {:02X} C: {:02X} D: {:02X} E: {:02X} H: {:02X} L: {:02X} SP: {:04X} PC: 00:{:04X} {:02X?}", + self.registers.get(Register::A), + self.registers.get(Register::F), + self.registers.get(Register::B), + self.registers.get(Register::C), + self.registers.get(Register::D), + self.registers.get(Register::E), + self.registers.get(Register::H), + self.registers.get(Register::L), + self.registers.get(Register::SP), + self.registers.get(Register::PC), + parameter_bytes, + ); self.exec(opcode, bus); }