Playing around with reading gameboy roms, and maybe emulation

Compare changes

Choose any two refs to compare.

-229
Cargo.lock
···
[[package]]
name = "GameBoyPlayground"
version = "0.1.0"
-
dependencies = [
-
"minifb",
-
]
-
-
[[package]]
-
name = "bitflags"
-
version = "1.3.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-
[[package]]
-
name = "bitflags"
-
version = "2.9.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
-
-
[[package]]
-
name = "cc"
-
version = "1.2.30"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7"
-
dependencies = [
-
"shlex",
-
]
-
-
[[package]]
-
name = "cfg-if"
-
version = "1.0.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
-
-
[[package]]
-
name = "gdi32-sys"
-
version = "0.1.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8e3eb92c1107527888f86b6ebb0b7f82794777dbf172a932998660a0a2e26c11"
-
dependencies = [
-
"winapi 0.2.8",
-
"winapi-build",
-
]
-
-
[[package]]
-
name = "kernel32-sys"
-
version = "0.2.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
-
dependencies = [
-
"winapi 0.2.8",
-
"winapi-build",
-
]
-
-
[[package]]
-
name = "lazy_static"
-
version = "0.2.11"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "76f033c7ad61445c5b347c7382dd1237847eb1bce590fe50365dcb33d546be73"
-
-
[[package]]
-
name = "lazy_static"
-
version = "1.5.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
-
-
[[package]]
-
name = "libc"
-
version = "0.2.174"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
-
-
[[package]]
-
name = "libredox"
-
version = "0.1.6"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "4488594b9328dee448adb906d8b126d9b7deb7cf5c22161ee591610bb1be83c0"
-
dependencies = [
-
"bitflags 2.9.1",
-
"libc",
-
"redox_syscall",
-
]
-
-
[[package]]
-
name = "minifb"
-
version = "0.10.7"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "8cebe353532532dd30eaab68ece91e624ccf6f97453f2da84042f5915450a137"
-
dependencies = [
-
"cc",
-
"gdi32-sys",
-
"kernel32-sys",
-
"orbclient",
-
"time",
-
"user32-sys",
-
"winapi 0.2.8",
-
"x11-dl",
-
]
-
-
[[package]]
-
name = "orbclient"
-
version = "0.3.48"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43"
-
dependencies = [
-
"libc",
-
"libredox",
-
"sdl2",
-
"sdl2-sys",
-
]
-
-
[[package]]
-
name = "pkg-config"
-
version = "0.3.32"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
-
-
[[package]]
-
name = "redox_syscall"
-
version = "0.5.15"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "7e8af0dde094006011e6a740d4879319439489813bd0bcdc7d821beaeeff48ec"
-
dependencies = [
-
"bitflags 2.9.1",
-
]
-
-
[[package]]
-
name = "sdl2"
-
version = "0.35.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "f7959277b623f1fb9e04aea73686c3ca52f01b2145f8ea16f4ff30d8b7623b1a"
-
dependencies = [
-
"bitflags 1.3.2",
-
"lazy_static 1.5.0",
-
"libc",
-
"sdl2-sys",
-
]
-
-
[[package]]
-
name = "sdl2-sys"
-
version = "0.35.2"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e3586be2cf6c0a8099a79a12b4084357aa9b3e0b0d7980e3b67aaf7a9d55f9f0"
-
dependencies = [
-
"cfg-if",
-
"libc",
-
"version-compare",
-
]
-
-
[[package]]
-
name = "shlex"
-
version = "1.3.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
-
-
[[package]]
-
name = "time"
-
version = "0.1.45"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
-
dependencies = [
-
"libc",
-
"wasi",
-
"winapi 0.3.9",
-
]
-
-
[[package]]
-
name = "user32-sys"
-
version = "0.1.3"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "e6b719983b952c04198829b51653c06af36f0e44c967fcc1a2bb397ceafbf80a"
-
dependencies = [
-
"winapi 0.2.8",
-
"winapi-build",
-
]
-
-
[[package]]
-
name = "version-compare"
-
version = "0.1.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
-
-
[[package]]
-
name = "wasi"
-
version = "0.10.0+wasi-snapshot-preview1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
-
-
[[package]]
-
name = "winapi"
-
version = "0.2.8"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
-
-
[[package]]
-
name = "winapi"
-
version = "0.3.9"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
-
dependencies = [
-
"winapi-i686-pc-windows-gnu",
-
"winapi-x86_64-pc-windows-gnu",
-
]
-
-
[[package]]
-
name = "winapi-build"
-
version = "0.1.1"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
-
-
[[package]]
-
name = "winapi-i686-pc-windows-gnu"
-
version = "0.4.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-
-
[[package]]
-
name = "winapi-x86_64-pc-windows-gnu"
-
version = "0.4.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-
-
[[package]]
-
name = "x11-dl"
-
version = "2.14.0"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "326c500cdc166fd7c70dd8c8a829cd5c0ce7be5a5d98c25817de2b9bdc67faf8"
-
dependencies = [
-
"lazy_static 0.2.11",
-
"libc",
-
"pkg-config",
-
]
-1
Cargo.toml
···
edition = "2024"
[dependencies]
-
minifb = "0.10.7"
+3 -9
src/cartridge_header.rs
···
pub struct CartridgeHeader {
//Should be 80 bytes (0x014F(335) - 0x0100(256)) + 1 to include the last address
-
pub buffer: [u8; 80],
+
pub _buffer: [u8; 80],
pub title: [char; 16],
pub manufacturer_code: [char; 4],
pub cgb_flag: CGBFlag,
···
for (i, true_logo_byte) in NINTENDO_LOGO.iter().enumerate() {
let rom_byte = nintendo_logo_from_rom[i];
if rom_byte != *true_logo_byte {
-
return Err(Error::CartridgeReadError);
+
return Err(Error::NotAValidRom);
}
}
···
]);
Ok(Self {
-
buffer: header_buffer
+
_buffer: header_buffer
.try_into()
.map_err(|_| Error::CartridgeReadError)?,
title: title_chars,
···
global_checksum,
})
}
-
-
fn print_test(&self) {
-
for byte in self.buffer.iter() {
-
print!("{} ", *byte as char);
-
}
-
}
}
+1 -1
src/enums.rs
···
CartridgeHeaderStart = 0x0100,
CartridgeHeaderEnd = 0x014F,
// 0100-0103 — Entry point
-
EntryPointEnd = 0x0103,
+
_EntryPointEnd = 0x0103,
// 0104-0133 — Nintendo logo
NintendoLogoStart = 0x0104,
NintendoLogoEnd = 0x00133,
+8 -1
README.md
···
-
# GameBoyPlayground
+
# DMG Playground
+
+
Just some experiments with Gameboy emulation. Right now it just reads
+
the [Cartridge Header](https://gbdev.io/pandocs/The_Cartridge_Header.html) of a GB rom and parses it
+
out
+
+
1. Obtain a `LegallyObtainedRom.gb` and name it as such in the root of the project
+
2. `cargo run` You should see it list out things like the name of the game, etc