Playing around with reading gameboy roms, and maybe emulation

Start

+3
.gitignore
···
+
/target
+
/LegallyObtainedRom.gb
+
.idea/
+7
Cargo.lock
···
+
# This file is automatically @generated by Cargo.
+
# It is not intended for manual editing.
+
version = 4
+
+
[[package]]
+
name = "GameBoyPlayground"
+
version = "0.1.0"
+6
Cargo.toml
···
+
[package]
+
name = "GameBoyPlayground"
+
version = "0.1.0"
+
edition = "2024"
+
+
[dependencies]
+1
README.md
···
+
# GameBoyPlayground
+50
src/main.rs
···
+
use std::fs::File;
+
use std::io::{Read, Seek, SeekFrom, Write};
+
+
+
const ROM_NAME: &str = "LegallyObtainedRom.gb";
+
+
pub enum Error {
+
CartridgeReadError,
+
}
+
+
struct CartridgeHeader {
+
//Should be 80 bytes (0x014F(335) - 0x0100(256)) + 1 to include the last address
+
buffer: [u8; 80],
+
}
+
+
+
impl CartridgeHeader {
+
fn new(rom_location: &str ) -> Result<Self, Error> {
+
let mut rom_file = File::open(rom_location)?;
+
rom_file.seek(SeekFrom::Start(CartridgeHeaderAddress::CartridgeHeaderStart as u64))?;
+
let mut header_buffer: [u8; 80] = [0; 80];
+
rom_file.read_exact(&mut header_buffer)?;
+
Ok(Self {
+
buffer: header_buffer
+
})
+
}
+
}
+
+
+
pub enum CartridgeHeaderAddress {
+
CartridgeHeaderStart = 0x0100,
+
CartridgeHeaderEnd = 0x014F
+
}
+
+
+
fn main() -> std::io::Result<()> {
+
let mut rom_file = File::open(ROM_NAME)?;
+
rom_file.seek(SeekFrom::Start(CartridgeHeaderAddress::CartridgeHeaderStart as u64))?;
+
let mut header_buffer: [u8; 80] = [0; 80];
+
rom_file.read_exact(&mut header_buffer)?;
+
let mut byte_index = 0x0100;
+
for byte in header_buffer.iter() {
+
// println!("{}", *byte as char);
+
print!("{:02x} ", byte_index);
+
byte_index += 1;
+
+
}
+
+
Ok(())
+
}