Playing around with reading gameboy roms, and maybe emulation
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Start

Bailey Townsend 666bb56e

+67
+3
.gitignore
··· 1 + /target 2 + /LegallyObtainedRom.gb 3 + .idea/
+7
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "GameBoyPlayground" 7 + version = "0.1.0"
+6
Cargo.toml
··· 1 + [package] 2 + name = "GameBoyPlayground" 3 + version = "0.1.0" 4 + edition = "2024" 5 + 6 + [dependencies]
+1
README.md
··· 1 + # GameBoyPlayground
+50
src/main.rs
··· 1 + use std::fs::File; 2 + use std::io::{Read, Seek, SeekFrom, Write}; 3 + 4 + 5 + const ROM_NAME: &str = "LegallyObtainedRom.gb"; 6 + 7 + pub enum Error { 8 + CartridgeReadError, 9 + } 10 + 11 + struct CartridgeHeader { 12 + //Should be 80 bytes (0x014F(335) - 0x0100(256)) + 1 to include the last address 13 + buffer: [u8; 80], 14 + } 15 + 16 + 17 + impl CartridgeHeader { 18 + fn new(rom_location: &str ) -> Result<Self, Error> { 19 + let mut rom_file = File::open(rom_location)?; 20 + rom_file.seek(SeekFrom::Start(CartridgeHeaderAddress::CartridgeHeaderStart as u64))?; 21 + let mut header_buffer: [u8; 80] = [0; 80]; 22 + rom_file.read_exact(&mut header_buffer)?; 23 + Ok(Self { 24 + buffer: header_buffer 25 + }) 26 + } 27 + } 28 + 29 + 30 + pub enum CartridgeHeaderAddress { 31 + CartridgeHeaderStart = 0x0100, 32 + CartridgeHeaderEnd = 0x014F 33 + } 34 + 35 + 36 + fn main() -> std::io::Result<()> { 37 + let mut rom_file = File::open(ROM_NAME)?; 38 + rom_file.seek(SeekFrom::Start(CartridgeHeaderAddress::CartridgeHeaderStart as u64))?; 39 + let mut header_buffer: [u8; 80] = [0; 80]; 40 + rom_file.read_exact(&mut header_buffer)?; 41 + let mut byte_index = 0x0100; 42 + for byte in header_buffer.iter() { 43 + // println!("{}", *byte as char); 44 + print!("{:02x} ", byte_index); 45 + byte_index += 1; 46 + 47 + } 48 + 49 + Ok(()) 50 + }