aboutsummaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorAaditya Dhruv <[email protected]>2022-12-31 12:56:21 +0530
committerAaditya Dhruv <[email protected]>2022-12-31 13:43:12 +0530
commitc615da0bd8cbfc55d5df88715e1772ef4dfa0a71 (patch)
treed72533025e7a6cfd1c0fccf1dfb025f5d74f5a35 /src/lib.rs
parentc3b0a01907346cd76d5619a6ffa5c19364e0e823 (diff)
basic init, rendering of display for chip
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs73
1 files changed, 71 insertions, 2 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 577bab9..6089af3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,4 +1,73 @@
-pub struct Chip8 {
- mem : [u32],
+//Basic struct to represent the Chip-8 interpreter structure
+use sdl2::keyboard::Keycode;
+use sdl2::rect::Rect;
+pub const WIDTH : u32 = 32;
+pub const HEIGHT : u32 = 64;
+pub const SCALE : u32 = 20;
+const DISPLAY_LENGTH : usize = (WIDTH * HEIGHT) as usize;
+
+
+pub struct Chip {
+ mem : [u8; 4096],
+ registers: [u8; 16],
+ index: u16,
+ pc: u16,
+ stack: [u16; 16],
+ sp: u8,
+ delay_timer: u8,
+ sound_timer: u8,
+ keys : [Keycode; 16],
+ fonts : [u32; 80],
+ display: [Rect; DISPLAY_LENGTH as usize]
+}
+
+impl Chip {
+ pub fn new() -> Self {
+ Chip {
+ mem : [0; 4096],
+ registers: [0; 16],
+ index: 0,
+ pc: 0,
+ stack: [0; 16],
+ sp: 0,
+ delay_timer: 0,
+ sound_timer: 0,
+ keys: [Keycode::Num1, Keycode::Num2, Keycode::Num3, Keycode::Num4, Keycode::Q, Keycode::W, Keycode::E, Keycode::R, Keycode::A, Keycode::S, Keycode::D, Keycode::F, Keycode::Z, Keycode::X, Keycode::C, Keycode::V],
+ fonts: [
+ 0xF0, 0x90, 0x90, 0x90, 0xF0, // 0
+ 0x20, 0x60, 0x20, 0x20, 0x70, // 1
+ 0xF0, 0x10, 0xF0, 0x80, 0xF0, // 2
+ 0xF0, 0x10, 0xF0, 0x10, 0xF0, // 3
+ 0x90, 0x90, 0xF0, 0x10, 0x10, // 4
+ 0xF0, 0x80, 0xF0, 0x10, 0xF0, // 5
+ 0xF0, 0x80, 0xF0, 0x90, 0xF0, // 6
+ 0xF0, 0x10, 0x20, 0x40, 0x40, // 7
+ 0xF0, 0x90, 0xF0, 0x90, 0xF0, // 8
+ 0xF0, 0x90, 0xF0, 0x10, 0xF0, // 9
+ 0xF0, 0x90, 0xF0, 0x90, 0x90, // A
+ 0xE0, 0x90, 0xE0, 0x90, 0xE0, // B
+ 0xF0, 0x80, 0x80, 0x80, 0xF0, // C
+ 0xE0, 0x90, 0x90, 0x90, 0xE0, // D
+ 0xF0, 0x80, 0xF0, 0x80, 0xF0, // E
+ 0xF0, 0x80, 0xF0, 0x80, 0x80 // F
+ ],
+ display: [Rect::new(0, 0, SCALE - 1, SCALE - 1); DISPLAY_LENGTH],
+ }
+ }
+ pub fn init(mut self) {
+
+ }
+
+ pub fn render(& mut self) -> &[Rect] {
+ for idx in 0..DISPLAY_LENGTH {
+ let (mut x_coord, mut y_coord) : (i32, i32) =((idx as i32 % WIDTH as i32), (idx as i32 / WIDTH as i32));
+ x_coord *= SCALE as i32;
+ y_coord *= SCALE as i32;
+ self.display[idx].set_x(x_coord);
+ self.display[idx].set_y(y_coord);
+
+ }
+ &self.display
+ }
}