diff options
| author | Samuel Perrouault <samuel.perrouault@gmail.com> | 2025-03-26 13:52:16 +0100 |
|---|---|---|
| committer | Samuel Perrouault <samuel.perrouault@gmail.com> | 2025-03-26 13:52:16 +0100 |
| commit | e63cd0f86c3aa6f66f616a1fe907263ccd679fb8 (patch) | |
| tree | 52e4b892d9aa77b7793a0a0add03f6305db6bb5c | |
| parent | b74d4624faa7358836b57719e7794272f5fbe757 (diff) | |
handle SE instruction
| -rw-r--r-- | src/chip8.rs | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/chip8.rs b/src/chip8.rs index 99ce428..0ea6d6d 100644 --- a/src/chip8.rs +++ b/src/chip8.rs @@ -49,10 +49,10 @@ impl Chip8 { pub fn cycle(&mut self) { let pc = self.pc as usize; let opcode = ((self.memory[pc] as u16) << 8) | self.memory[pc + 1] as u16; - let x = (opcode & 0x0F00) >> 8; - let y = (opcode & 0x00F0) >> 4; + let x = ((opcode & 0x0F00) >> 8) as usize; + let y = ((opcode & 0x00F0) >> 4) as usize; let n = opcode & 0x000F; - let nn = opcode & 0x00FF; + let nn = (opcode & 0x00FF) as u8; let nnn = opcode & 0x0FFF; self.pc += 2; match opcode & 0xF000 { @@ -71,13 +71,19 @@ impl Chip8 { eprintln!("JP {}", nnn); self.pc = nnn; } + 0x3000 => { + eprintln!("SE V{}, {}", x, nn); + if self.v[x] == nn { + self.pc += 2; + } + } 0x6000 => { eprintln!("LD V{}, {}", x, nn); - self.v[x as usize] = nn as u8; + self.v[x] = nn; } 0x7000 => { eprintln!("ADD V{}, {}", x, nn); - self.v[x as usize] += nn as u8; + self.v[x] += nn; } 0xA000 => { eprintln!("LD I, {}", nnn); @@ -85,8 +91,8 @@ impl Chip8 { } 0xD000 => { eprintln!("DRW V{}, V{}, {}", x, y, n); - let vx = self.v[x as usize] as u16; - let vy = self.v[y as usize] as u16; + let vx = self.v[x] as u16; + let vy = self.v[y] as u16; self.v[0xF] = 0; for yy in 0..n { let pixel = self.memory[(self.i + yy) as usize]; |
