Skip to content
Snippets Groups Projects
Verified Commit 1703d41b authored by João Magalhães's avatar João Magalhães :rocket:
Browse files

feat: new loading of fonts

parent 3a0693ea
No related branches found
No related tags found
1 merge request!3Working version of the neo implementation 🥳
Pipeline #613 passed
...@@ -112,7 +112,7 @@ impl Chip8Neo { ...@@ -112,7 +112,7 @@ impl Chip8Neo {
0x4000 => self.pc += if self.regs[x] != byte { 2 } else { 0 }, 0x4000 => self.pc += if self.regs[x] != byte { 2 } else { 0 },
0x5000 => self.pc += if self.regs[x] == self.regs[y] { 2 } else { 0 }, 0x5000 => self.pc += if self.regs[x] == self.regs[y] { 2 } else { 0 },
0x6000 => self.regs[x] = byte, 0x6000 => self.regs[x] = byte,
0x7000 => self.regs[x] += byte, 0x7000 => self.regs[x] = self.regs[x].wrapping_add(byte),
0x8000 => match nibble { 0x8000 => match nibble {
0x0 => self.regs[x] = self.regs[y], 0x0 => self.regs[x] = self.regs[y],
0x1 => self.regs[x] |= self.regs[y], 0x1 => self.regs[x] |= self.regs[y],
...@@ -125,7 +125,7 @@ impl Chip8Neo { ...@@ -125,7 +125,7 @@ impl Chip8Neo {
} }
0x5 => { 0x5 => {
self.regs[0xf] = (self.regs[x] >= self.regs[y]) as u8; self.regs[0xf] = (self.regs[x] >= self.regs[y]) as u8;
self.regs[x] = self.regs[x] - self.regs[y]; self.regs[x] = self.regs[x].saturating_sub(self.regs[y]);
} }
0x6 => { 0x6 => {
self.regs[0xf] = self.regs[x] & 0x01; self.regs[0xf] = self.regs[x] & 0x01;
...@@ -133,7 +133,7 @@ impl Chip8Neo { ...@@ -133,7 +133,7 @@ impl Chip8Neo {
} }
0x7 => { 0x7 => {
self.regs[0xf] = (self.regs[y] >= self.regs[x]) as u8; self.regs[0xf] = (self.regs[y] >= self.regs[x]) as u8;
self.regs[x] = self.regs[y] - self.regs[x]; self.regs[x] = self.regs[y].saturating_sub(self.regs[x]);
} }
0xe => { 0xe => {
self.regs[0xf] = (self.regs[x] & 0x80) >> 7; self.regs[0xf] = (self.regs[x] & 0x80) >> 7;
...@@ -156,15 +156,16 @@ impl Chip8Neo { ...@@ -156,15 +156,16 @@ impl Chip8Neo {
0x07 => self.regs[x] = self.dt, 0x07 => self.regs[x] = self.dt,
0x15 => self.dt = self.regs[x], 0x15 => self.dt = self.regs[x],
0x18 => self.st = self.regs[x], 0x18 => self.st = self.regs[x],
0x29 => self.i = self.regs[x] as u16 * 5,
0x33 => { 0x33 => {
self.ram[self.i as usize] = self.regs[x] / 100; self.ram[self.i as usize] = self.regs[x] / 100;
self.ram[self.i as usize + 1] = (self.regs[x] / 10) % 10; self.ram[self.i as usize + 1] = (self.regs[x] / 10) % 10;
self.ram[self.i as usize + 2] = self.regs[x] % 10; self.ram[self.i as usize + 2] = self.regs[x] % 10;
} }
0x55 => self.ram[self.i as usize..(self.i as usize + x)] 0x55 => self.ram[self.i as usize..self.i as usize + x + 1]
.clone_from_slice(&self.regs[0..x]), .clone_from_slice(&self.regs[0..x + 1]),
0x65 => self.regs[0..x] 0x65 => self.regs[0..x + 1]
.clone_from_slice(&self.ram[self.i as usize..(self.i as usize + x)]), .clone_from_slice(&self.ram[self.i as usize..self.i as usize + x + 1]),
_ => println!( _ => println!(
"unimplemented instruction 0xf000, instruction 0x{:04x}", "unimplemented instruction 0xf000, instruction 0x{:04x}",
instruction instruction
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment