From be1b7517bfcd8939b29011347a1f720e6be1e3e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Sun, 3 Jul 2022 04:58:06 +0100 Subject: [PATCH] feat: new roms support --- .gitignore | 2 +- examples/sdl/src/main.rs | 2 +- examples/web/index.ts | 2 +- res/roms/firstwhite.gb | Bin 0 -> 32768 bytes res/roms/ld_r_r.gb | Bin 0 -> 32768 bytes res/roms/opus5.gb | Bin 0 -> 32768 bytes res/roms/rtc3test.gb | Bin 0 -> 32768 bytes res/roms/special.gb | Bin 0 -> 32768 bytes src/mmu.rs | 7 ++++--- 9 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 res/roms/firstwhite.gb create mode 100644 res/roms/ld_r_r.gb create mode 100644 res/roms/opus5.gb create mode 100644 res/roms/rtc3test.gb create mode 100644 res/roms/special.gb diff --git a/.gitignore b/.gitignore index 4a77473d..be3d44f6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,5 +5,5 @@ Cargo.lock /.idea /target -/res/roms +/res/roms.prop /examples/*/target diff --git a/examples/sdl/src/main.rs b/examples/sdl/src/main.rs index 6369ac3e..50af56f8 100644 --- a/examples/sdl/src/main.rs +++ b/examples/sdl/src/main.rs @@ -80,7 +80,7 @@ fn main() { let mut game_boy = GameBoy::new(); game_boy.load_boot_static(); - game_boy.load_rom_file("../../res/roms/ld_r_r.gb"); + game_boy.load_rom_file("../../res/roms/firstwhite.gb"); //game_boy.load_rom_file("../../res/roms/opus5.gb"); let mut counter = 0; diff --git a/examples/web/index.ts b/examples/web/index.ts index 076502df..68cd9aaa 100644 --- a/examples/web/index.ts +++ b/examples/web/index.ts @@ -49,7 +49,7 @@ const KEYS: Record<string, number> = { }; // @ts-ignore: ts(2580) -const ROM_PATH = require("../../res/roms/tetris.gb"); +const ROM_PATH = require("../../res/roms/firstwhite.gb"); type State = { gameBoy: GameBoy; diff --git a/res/roms/firstwhite.gb b/res/roms/firstwhite.gb new file mode 100644 index 0000000000000000000000000000000000000000..6d35132175512a3f349dcb4378cfebad2694af6d GIT binary patch literal 32768 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 bGz3ONU^E0qLtr!nMnhmU1V%$(=!XCR{NS*N literal 0 HcmV?d00001 diff --git a/res/roms/ld_r_r.gb b/res/roms/ld_r_r.gb new file mode 100644 index 0000000000000000000000000000000000000000..d497bfd1275361bc847fa94dc87b43729f180b5d GIT binary patch literal 32768 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 TXb6mkz-S1JhQMeD5FG*lJ{)}* literal 0 HcmV?d00001 diff --git a/res/roms/opus5.gb b/res/roms/opus5.gb new file mode 100644 index 0000000000000000000000000000000000000000..a3b8028a31c98b753f0b03d8b8faa2da4232ef14 GIT binary patch literal 32768 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 bqaiRF0;3@?8UmvsFd71*Aut*O0~Z1SKy@PI literal 0 HcmV?d00001 diff --git a/res/roms/rtc3test.gb b/res/roms/rtc3test.gb new file mode 100644 index 0000000000000000000000000000000000000000..06836967eb2927b31c99de201a44cfd709380268 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/res/roms/special.gb b/res/roms/special.gb new file mode 100644 index 0000000000000000000000000000000000000000..ad3e9984f967b77b7ffdf768842ce3c04517d059 GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/src/mmu.rs b/src/mmu.rs index 4eab0ec2..0a1be916 100644 --- a/src/mmu.rs +++ b/src/mmu.rs @@ -94,15 +94,16 @@ impl Mmu { match addr & 0xf000 { // BOOT (256 B) + ROM0 (4 KB/16 KB) 0x0000 => { - println!("Writing to BOOT") + self.rom[addr as usize] = value; + println!("Writing to BOOT at 0x{:04x}", addr) } // ROM0 (12 KB/16 KB) 0x1000 | 0x2000 | 0x3000 => { - println!("Writing to ROM 0"); + println!("Writing to ROM 0 at 0x{:04x}", addr); } // ROM1 (Unbanked) (16 KB) 0x4000 | 0x5000 | 0x6000 | 0x7000 => { - println!("Writing to ROM 1"); + println!("Writing to ROM 1 at 0x{:04x}", addr); } // Graphics: VRAM (8 KB) 0x8000 | 0x9000 => { -- GitLab