mirror of
https://github.com/danbulant/chip8
synced 2026-05-27 06:01:46 +00:00
small improvements
This commit is contained in:
parent
3a3e394f09
commit
fe923d3df2
1 changed files with 10 additions and 10 deletions
20
src/main.rs
20
src/main.rs
|
|
@ -12,7 +12,7 @@ fn main() {
|
||||||
Some(file_path) => {
|
Some(file_path) => {
|
||||||
let mut file = File::open(file_path).unwrap();
|
let mut file = File::open(file_path).unwrap();
|
||||||
let mut data = Vec::new();
|
let mut data = Vec::new();
|
||||||
let len = file.read_to_end(&mut data).unwrap();
|
file.read_to_end(&mut data).unwrap();
|
||||||
|
|
||||||
let mut chip8 = Chip8::new();
|
let mut chip8 = Chip8::new();
|
||||||
chip8.load_rom(data);
|
chip8.load_rom(data);
|
||||||
|
|
@ -29,7 +29,7 @@ type Address = u16;
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct Chip8 {
|
struct Chip8 {
|
||||||
/// 4K memory
|
/// 4K memory
|
||||||
memory: [u8; 4096],
|
memory: [u8; 262144], // 2^18
|
||||||
/// registers
|
/// registers
|
||||||
v: [u8; 16],
|
v: [u8; 16],
|
||||||
/// current address
|
/// current address
|
||||||
|
|
@ -44,7 +44,7 @@ struct Chip8 {
|
||||||
sound_timer: u8,
|
sound_timer: u8,
|
||||||
/// graphics (64x32 black and white)
|
/// graphics (64x32 black and white)
|
||||||
display: [[bool; HEIGHT]; WIDTH],
|
display: [[bool; HEIGHT]; WIDTH],
|
||||||
start_time: Instant,
|
// start_time: Instant,
|
||||||
last_processed_timers: Instant
|
last_processed_timers: Instant
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -54,7 +54,7 @@ const HEIGHT: usize = 32;
|
||||||
impl Chip8 {
|
impl Chip8 {
|
||||||
fn new() -> Chip8 {
|
fn new() -> Chip8 {
|
||||||
let mut c = Chip8 {
|
let mut c = Chip8 {
|
||||||
memory: [0; 4096],
|
memory: [0; 262144],
|
||||||
v: [0; 16],
|
v: [0; 16],
|
||||||
i: 0,
|
i: 0,
|
||||||
pc: 0x200,
|
pc: 0x200,
|
||||||
|
|
@ -62,7 +62,7 @@ impl Chip8 {
|
||||||
delay_timer: 0,
|
delay_timer: 0,
|
||||||
sound_timer: 0,
|
sound_timer: 0,
|
||||||
display: [[false; HEIGHT]; WIDTH],
|
display: [[false; HEIGHT]; WIDTH],
|
||||||
start_time: Instant::now(),
|
// start_time: Instant::now(),
|
||||||
last_processed_timers: Instant::now()
|
last_processed_timers: Instant::now()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -98,7 +98,7 @@ impl Chip8 {
|
||||||
let first = ((current & 0xF000) as u16 >> 12) as u8;
|
let first = ((current & 0xF000) as u16 >> 12) as u8;
|
||||||
let first_raw = (current & 0xF000) as u16;
|
let first_raw = (current & 0xF000) as u16;
|
||||||
let second = ((current & 0x0F00 as u16) >> 8 as u16) as u8;
|
let second = ((current & 0x0F00 as u16) >> 8 as u16) as u8;
|
||||||
let second_raw = (current & 0x0F00) as u16;
|
// let second_raw = (current & 0x0F00) as u16;
|
||||||
let third = ((current & 0x00F0) as u16 >> 4) as u8;
|
let third = ((current & 0x00F0) as u16 >> 4) as u8;
|
||||||
let third_raw = (current & 0x00F0) as u16;
|
let third_raw = (current & 0x00F0) as u16;
|
||||||
let fourth = (current & 0x000F) as u8;
|
let fourth = (current & 0x000F) as u8;
|
||||||
|
|
@ -166,7 +166,7 @@ impl Chip8 {
|
||||||
self.v[second as usize] = last_two;
|
self.v[second as usize] = last_two;
|
||||||
} else if first == 7 {
|
} else if first == 7 {
|
||||||
// ADD; Vx += NN
|
// ADD; Vx += NN
|
||||||
debug_eprintln!("ADD V{second} += {last_two:#x} ({last_two})");
|
debug_eprintln!("ADD V{second} += {last_two:#x} ({last_two}) => {:#x} ({})", self.v[second as usize] + last_two, self.v[second as usize] + last_two);
|
||||||
self.v[second as usize] += last_two;
|
self.v[second as usize] += last_two;
|
||||||
} else if first == 8 {
|
} else if first == 8 {
|
||||||
debug_eprintln!("eights");
|
debug_eprintln!("eights");
|
||||||
|
|
@ -220,7 +220,7 @@ impl Chip8 {
|
||||||
// sprite (bit coded XOR (set bits flip the bit value)) from I
|
// sprite (bit coded XOR (set bits flip the bit value)) from I
|
||||||
// VF set to 1 if any bit is set to 0
|
// VF set to 1 if any bit is set to 0
|
||||||
|
|
||||||
debug_eprintln!("DRW X=V{second} Y=V{third} W=16 H={fourth}");
|
debug_eprintln!("DRW X=V{second} Y=V{third} W=16 H={fourth} I={:#x}", self.i);
|
||||||
|
|
||||||
let x = self.v[second as usize] % (WIDTH as u8);
|
let x = self.v[second as usize] % (WIDTH as u8);
|
||||||
let y = self.v[third as usize] % (HEIGHT as u8);
|
let y = self.v[third as usize] % (HEIGHT as u8);
|
||||||
|
|
@ -234,7 +234,7 @@ impl Chip8 {
|
||||||
let sprite_y = sprite_y;
|
let sprite_y = sprite_y;
|
||||||
let sprite_row = self.memory[self.i as usize + sprite_y];
|
let sprite_row = self.memory[self.i as usize + sprite_y];
|
||||||
let y = (sprite_y + y as usize) % HEIGHT;
|
let y = (sprite_y + y as usize) % HEIGHT;
|
||||||
debug_eprintln!("\n{:#b} ({:#x})", sprite_row, sprite_row);
|
// debug_eprintln!("\n{:#b} ({:#x})", sprite_row, sprite_row);
|
||||||
for b in 0..8 {
|
for b in 0..8 {
|
||||||
let x = (x as usize + b as usize) % WIDTH;
|
let x = (x as usize + b as usize) % WIDTH;
|
||||||
// println!("x{x} y{y}");
|
// println!("x{x} y{y}");
|
||||||
|
|
@ -285,7 +285,7 @@ impl Chip8 {
|
||||||
debug_eprintln!("sound({second})");
|
debug_eprintln!("sound({second})");
|
||||||
self.sound_timer = self.v[second as usize];
|
self.sound_timer = self.v[second as usize];
|
||||||
} else if last_two == 0x1E {
|
} else if last_two == 0x1E {
|
||||||
debug_eprintln!("I += V{second}");
|
debug_eprintln!("I += V{second} ({:#x}; {})", self.i + self.v[second as usize] as u16, self.i + self.v[second as usize] as u16);
|
||||||
self.i += self.v[second as usize] as u16;
|
self.i += self.v[second as usize] as u16;
|
||||||
} else if last_two == 0x29 {
|
} else if last_two == 0x29 {
|
||||||
// I = sprite_addr[Vx]
|
// I = sprite_addr[Vx]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue