git.y1.nz

SameBoy

Accurate GB/GBC emulator
download: https://git.y1.nz/archives/sameboy.tar.gz
README | Files | Log | Refs | LICENSE

commit bd6843444f7e3cf3d67a312a93110af8fea9148e
parent 29d69600759931360b91d5999b93273431f5c165
Author: Lior Halphon <LIJI32@gmail.com>
Date:   Sun,  1 Jan 2023 22:59:16 +0200

Emulate cart open bus behavior. Fixes #516

Diffstat:
MCore/gb.h1+
MCore/memory.c14++++++++++----
2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/Core/gb.h b/Core/gb.h @@ -435,6 +435,7 @@ struct GB_gameboy_internal_s { int32_t ir_sensor; bool effective_ir_input; uint16_t address_bus; + uint8_t data_bus; // cart data bus ) /* DMA and HDMA */ diff --git a/Core/memory.c b/Core/memory.c @@ -379,14 +379,14 @@ static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) case 5: return gb->rtc_latched.data[(addr & 3) ^ 3]; default: - return 0xFF; + return gb->data_bus; } } else if ((!gb->mbc_ram_enable) && gb->cartridge_type->mbc_type != GB_CAMERA && gb->cartridge_type->mbc_type != GB_HUC1 && gb->cartridge_type->mbc_type != GB_HUC3) { - return 0xFF; + return gb->data_bus; } if (gb->cartridge_type->mbc_type == GB_HUC1 && gb->huc1.ir_mode) { @@ -403,7 +403,7 @@ static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) gb->rtc_latched.high &= 0xC1; return gb->rtc_latched.data[gb->mbc_ram_bank]; } - return 0xFF; + return gb->data_bus; } if (gb->camera_registers_mapped) { @@ -411,7 +411,7 @@ static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) } if (!gb->mbc_ram || !gb->mbc_ram_size) { - return 0xFF; + return gb->data_bus; } if (gb->cartridge_type->mbc_type == GB_CAMERA) { @@ -777,6 +777,12 @@ uint8_t GB_read_memory(GB_gameboy_t *gb, uint16_t addr) if (unlikely(gb->read_memory_callback)) { data = gb->read_memory_callback(gb, addr, data); } + if ((addr & 0xE000) != 0xA000 && bus_for_addr(gb, addr) == GB_BUS_MAIN && addr < 0xFF00) { + gb->data_bus = data; + } + else { + gb->data_bus = 0xFF; + } return data; }

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.