Compare commits
2 Commits
483cd3fc8d
...
983de3302e
Author | SHA1 | Date |
---|---|---|
Michael Kohl | 983de3302e | |
Michael Kohl | 6022ddf04c |
|
@ -0,0 +1,53 @@
|
|||
const MEMORY_SIZE: usize = 4096;
|
||||
const WIDTH: u32 = 64;
|
||||
const HEIGHT: u32 = 32;
|
||||
|
||||
pub const SCALE_FACTOR: u32 = 10;
|
||||
pub const WINDOW_WIDTH: u32 = WIDTH * SCALE_FACTOR;
|
||||
pub const WINDOW_HEIGHT: u32 = HEIGHT * SCALE_FACTOR;
|
||||
|
||||
type Memory = [u8; MEMORY_SIZE];
|
||||
|
||||
pub struct Chip8 {
|
||||
memory: Memory,
|
||||
}
|
||||
|
||||
impl Chip8 {
|
||||
pub fn new() -> Chip8 {
|
||||
Chip8 {
|
||||
memory: [0; MEMORY_SIZE],
|
||||
}
|
||||
}
|
||||
|
||||
pub fn memory_set(&mut self, index: usize, value: u8) -> () {
|
||||
self.memory[index] = value;
|
||||
}
|
||||
|
||||
pub fn memory_get(&self, index: usize) -> u8 {
|
||||
self.memory[index]
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn it_has_the_correct_size() {
|
||||
assert_eq!(Chip8::new().memory.len(), MEMORY_SIZE);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn it_can_write_the_memory() {
|
||||
let mut chip8 = Chip8::new();
|
||||
chip8.memory_set(2, 42);
|
||||
assert_eq!(chip8.memory[0..3], [0, 0, 42]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn it_can_read_the_memory() {
|
||||
let mut chip8 = Chip8::new();
|
||||
chip8.memory_set(2, 42);
|
||||
assert_eq!(chip8.memory_get(2), 42);
|
||||
}
|
||||
}
|
76
src/main.rs
76
src/main.rs
|
@ -1,42 +1,62 @@
|
|||
use sdl2::pixels::Color;
|
||||
use sdl2::event::Event;
|
||||
use sdl2::keyboard::Keycode;
|
||||
use sdl2::pixels::Color;
|
||||
use sdl2::rect::Rect;
|
||||
|
||||
mod chip8;
|
||||
|
||||
const EMULATOR_WINDOW_TITLE: &str = "Rust CHIP-8";
|
||||
|
||||
fn main() -> Result<(), String> {
|
||||
let sdl_context = sdl2::init()?;
|
||||
let video_subsystem = sdl_context.video()?;
|
||||
let mut chip8 = chip8::Chip8::new();
|
||||
chip8.memory_set(42, 42);
|
||||
println!("{}", &chip8.memory_get(42));
|
||||
|
||||
let window = video_subsystem.window("Rust CHIP-8", 640, 320)
|
||||
.position_centered().build()
|
||||
.expect("could not initialize video subsystem");
|
||||
let sdl_context = sdl2::init()?;
|
||||
let video_subsystem = sdl_context.video()?;
|
||||
|
||||
let mut canvas = window.into_canvas().build().expect("could not make a canvas");
|
||||
let window = video_subsystem
|
||||
.window(
|
||||
EMULATOR_WINDOW_TITLE,
|
||||
chip8::WINDOW_WIDTH,
|
||||
chip8::WINDOW_HEIGHT,
|
||||
)
|
||||
.position_centered()
|
||||
.build()
|
||||
.expect("Could not initialize video subsystem");
|
||||
|
||||
canvas.set_draw_color(Color::RGB(0, 0, 0));
|
||||
canvas.clear();
|
||||
let mut canvas = window
|
||||
.into_canvas()
|
||||
.build()
|
||||
.expect("Could not make a canvas");
|
||||
|
||||
let mut event_pump = sdl_context.event_pump()?;
|
||||
let mut i = 0;
|
||||
canvas.set_draw_color(Color::RGB(0, 0, 0));
|
||||
canvas.clear();
|
||||
|
||||
'mainloop: loop {
|
||||
i = (i + 1) % 255;
|
||||
canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
|
||||
canvas.fill_rect(Rect::new(10, 10, 620, 300))?;
|
||||
let mut event_pump = sdl_context.event_pump()?;
|
||||
let mut i = 0;
|
||||
|
||||
for event in event_pump.poll_iter() {
|
||||
match event {
|
||||
Event::Quit {..} |
|
||||
Event::KeyDown { keycode: Some(Keycode::Escape), .. } => {
|
||||
break 'mainloop;
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
'mainloop: loop {
|
||||
i = (i + 1) % 255;
|
||||
canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
|
||||
canvas.fill_rect(Rect::new(10, 10, 620, 300))?;
|
||||
|
||||
for event in event_pump.poll_iter() {
|
||||
match event {
|
||||
Event::Quit { .. }
|
||||
| Event::KeyDown {
|
||||
keycode: Some(Keycode::Escape),
|
||||
..
|
||||
} => {
|
||||
break 'mainloop;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
canvas.present();
|
||||
::std::thread::sleep(::std::time::Duration::new(0, 1_000_000_000u32 / 60));
|
||||
}
|
||||
|
||||
canvas.present();
|
||||
::std::thread::sleep(::std::time::Duration::new(0, 1_000_000_000u32 / 60));
|
||||
}
|
||||
|
||||
Ok(())
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue