diff options
author | Aaditya Dhruv <[email protected]> | 2022-12-31 12:56:21 +0530 |
---|---|---|
committer | Aaditya Dhruv <[email protected]> | 2022-12-31 13:43:12 +0530 |
commit | c615da0bd8cbfc55d5df88715e1772ef4dfa0a71 (patch) | |
tree | d72533025e7a6cfd1c0fccf1dfb025f5d74f5a35 | |
parent | c3b0a01907346cd76d5619a6ffa5c19364e0e823 (diff) |
basic init, rendering of display for chip
-rw-r--r-- | src/lib.rs | 73 |
1 files changed, 71 insertions, 2 deletions
@@ -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 + } } |