From 0b0353c92339c2acf02646f6f38200f59751f647 Mon Sep 17 00:00:00 2001 From: Garrett Dickinson Date: Sun, 31 Mar 2024 19:27:07 -0500 Subject: [PATCH] Add basic program loading, memory map, etc --- programs/ibm_logo.ch8 | Bin 0 -> 132 bytes programs/test.ch8 | Bin 0 -> 14 bytes src/chip8.rs | 106 ++++++++++++++++++++++++++++++++++++++++-- src/main.rs | 21 ++++++++- src/util.rs | 6 +++ 5 files changed, 126 insertions(+), 7 deletions(-) create mode 100644 programs/ibm_logo.ch8 create mode 100644 programs/test.ch8 diff --git a/programs/ibm_logo.ch8 b/programs/ibm_logo.ch8 new file mode 100644 index 0000000000000000000000000000000000000000..113338e67097e0a2ad227e5b79b3a5d1a586a660 GIT binary patch literal 132 zcmZR0ut+O`Cz0cVd;#Yo%M0?0JPJT;mPO$}l4DUCm@K^@FQoCG;Xi{76av{Gt_6cV z5Ly6P{~H({0AT|Vg6SU&e;Dk5a@Gu%3_lotFf*_-@H6aZ_|5Q{;W2|VOes`300ZwW A9{>OV literal 0 HcmV?d00001 diff --git a/programs/test.ch8 b/programs/test.ch8 new file mode 100644 index 0000000000000000000000000000000000000000..feda8b1627483194266224319a50a69755882142 GIT binary patch literal 14 UcmXSTUjT$3j2o319x(g`06x?Q!T = &contents.expect(""); - // let magic_num: &[u8] = &bytes[0..4]; + let file_data: &Vec = &contents.expect(""); + if file_data.len() > chip8::MAX_PRG_SIZE.into() { + eprintln!("Error loading file, program size too large!"); + exit(1); + } + else if file_data.len() == 0 { + eprintln!("Error loading file, no program data found!"); + exit(1); + } + + let mut program: [u8; chip8::MAX_PRG_SIZE] = [0; chip8::MAX_PRG_SIZE]; + for i in 0..file_data.len() { + program[i] = file_data[i]; + } + + println!("Read {} bytes of program data", file_data.len()); + chip8::start_emulation(program); + } } else { diff --git a/src/util.rs b/src/util.rs index 1504663..c6c6ac5 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,3 +1,9 @@ pub fn print_help() { print!("Usage: saltnvinegar [CHIP8_FILE]\n"); +} + +pub fn u8_tuple_to_u16(u8_in: (u8, u8)) -> u16 { + let head_byte: u16 = u16::from(u8_in.0) << 8; + let tail_byte: u16 = u16::from(u8_in.1); + return head_byte + tail_byte; } \ No newline at end of file