blob: 840baff76cc1dcb72dc144183c93fb7e91f4d62f [file] [log] [blame] [edit]
From 22724803c1f335c6203bf1b7e45161d124261309 Mon Sep 17 00:00:00 2001
From: Leandro Nini <drfiemost@users.noreply.github.com>
Date: Mon, 22 Mar 2021 17:57:30 +0100
Subject: [PATCH 1/2] Do not switch bank if outside the range [1,31]
---
gme/Gbs_Emu.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/gme/Gbs_Emu.cpp b/gme/Gbs_Emu.cpp
index 9f751e5..542be4a 100644
--- a/gme/Gbs_Emu.cpp
+++ b/gme/Gbs_Emu.cpp
@@ -147,6 +147,9 @@ void Gbs_Emu::set_voice( int i, Blip_Buffer* c, Blip_Buffer* l, Blip_Buffer* r )
void Gbs_Emu::set_bank( int n )
{
+ if ((n<1) || (n>31))
+ return;
+
blargg_long addr = rom.mask_addr( n * (blargg_long) bank_size );
if ( addr == 0 && rom.size() > bank_size )
{
--
2.10.5
From 5a51d491618a2a50fd5a0790eb7a1b05abf9546c Mon Sep 17 00:00:00 2001
From: Leandro Nini <drfiemost@users.noreply.github.com>
Date: Tue, 23 Mar 2021 13:30:26 +0100
Subject: [PATCH 2/2] Rework bank switching, fixes #39
---
gme/Gbs_Emu.cpp | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/gme/Gbs_Emu.cpp b/gme/Gbs_Emu.cpp
index 542be4a..dc19215 100644
--- a/gme/Gbs_Emu.cpp
+++ b/gme/Gbs_Emu.cpp
@@ -147,19 +147,19 @@ void Gbs_Emu::set_voice( int i, Blip_Buffer* c, Blip_Buffer* l, Blip_Buffer* r )
void Gbs_Emu::set_bank( int n )
{
- if ((n<1) || (n>31))
- return;
-
- blargg_long addr = rom.mask_addr( n * (blargg_long) bank_size );
- if ( addr == 0 && rom.size() > bank_size )
+ // Only valid for MBC1 cartridges, but hopefully shouldn't hurt
+ n &= 0x1f;
+ if (n == 0)
+ {
+ n = 1;
+ }
+
+ blargg_long addr = n * (blargg_long) bank_size;
+ if (addr > rom.size())
{
- // TODO: what is the correct behavior? Current Game & Watch Gallery
- // rip requires that this have no effect or set to bank 1.
- //debug_printf( "Selected ROM bank 0\n" );
return;
- //n = 1;
}
- cpu::map_code( bank_size, bank_size, rom.at_addr( addr ) );
+ cpu::map_code( bank_size, bank_size, rom.at_addr( rom.mask_addr( addr ) ) );
}
void Gbs_Emu::update_timer()
--
2.10.5