summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/chip8.rs20
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];