Skip to content
Snippets Groups Projects
Verified Commit 897e93c8 authored by João Magalhães's avatar João Magalhães :rocket:
Browse files

fix: small rom bank tweaks

parent 892c6116
No related branches found
No related tags found
No related merge requests found
Pipeline #969 failed
......@@ -98,23 +98,26 @@ fn main() {
//game_boy.load_rom_file("../../res/roms.prop/dr_mario.gb");
//game_boy.load_rom_file("../../res/roms.prop/alleyway.gb");
//game_boy.load_rom_file("../../res/roms.prop/super_mario.gb");
let rom = game_boy.load_rom_file("../../res/roms.prop/super_mario_2.gb");
println!("{}", rom);
//let rom = game_boy.load_rom_file("../../res/roms.prop/super_mario_2.gb");
//game_boy.load_rom_file("../../res/roms/firstwhite.gb");
//game_boy.load_rom_file("../../res/roms/opus5.gb");
//game_boy.load_rom_file("../../res/roms/paradius/cpu/01-special.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/02-interrupts.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/03-op sp,hl.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/04-op r,imm.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/05-op rp.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/06-ld r,r.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/07-jr,jp,call,ret,rst.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/08-misc instrs.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/09-op r,r.gb"); // PASSED
//game_boy.load_rom_file("../../res/roms/paradius/cpu/10-bit ops.gb"); //
//game_boy.load_rom_file("../../res/roms/paradius/cpu/11-op a,(hl).gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/cpu_instrs.gb"); // CRASHED
let rom = game_boy.load_rom_file("../../res/roms/paradius/interrupt_time/interrupt_time.gb"); // CRASHED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/01-special.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/02-interrupts.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/03-op sp,hl.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/04-op r,imm.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/05-op rp.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/06-ld r,r.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/07-jr,jp,call,ret,rst.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/08-misc instrs.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/09-op r,r.gb"); // PASSED
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/10-bit ops.gb"); //
//let rom = game_boy.load_rom_file("../../res/roms/paradius/cpu/11-op a,(hl).gb"); //let rom PASSED
println!("ROM Information:\n{}", rom);
let mut counter = 0u32;
......
File added
File added
use core::fmt;
use std::fmt::{Display, Formatter};
use std::{
cmp::max,
fmt::{Display, Formatter},
};
use crate::debugln;
......@@ -257,6 +260,8 @@ impl Cartridge {
self.ram_offset = 0x0000;
self.set_mbc();
self.allocate_ram();
self.set_rom_bank(1);
self.set_ram_bank(0);
}
fn set_mbc(&mut self) {
......@@ -264,7 +269,8 @@ impl Cartridge {
}
fn allocate_ram(&mut self) {
self.ram_data = vec![0; self.ram_size().ram_banks() as usize * RAM_BANK_SIZE]
let ram_banks = max(self.ram_size().ram_banks(), 1);
self.ram_data = vec![0; ram_banks as usize * RAM_BANK_SIZE];
}
}
......@@ -320,11 +326,12 @@ pub static MBC1: Mbc = Mbc {
write_rom: |rom: &mut Cartridge, addr: u16, value: u8| {
match addr & 0xf000 {
0x0000 | 0x1000 => {
debugln!("RAM enable => {}", value);
println!("RAM enable => {}", value);
}
0x2000 | 0x3000 => {
// @todo this is slow and must be pre-computed in cartridge
let mut rom_bank = value & (rom.rom_size().rom_banks() * 2 - 1) as u8;
let mut rom_bank = value & 0x1f;
rom_bank = rom_bank & (rom.rom_size().rom_banks() * 2 - 1) as u8;
if rom_bank == 0 {
rom_bank = 1;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment