git.y1.nz

SameBoy

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

commit 71c6fa45e0ddb386ce6848fb05c5a972d449c9f2
parent a13469c4e2c97873be4725e18074f09ea3ab048f
Author: Lior Halphon <LIJI32@gmail.com>
Date:   Fri, 26 Feb 2021 00:40:18 +0200

Accurate RTC emulation

Diffstat:
MCore/memory.c8+++++++-
MCore/timing.c6++++++
2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/Core/memory.c b/Core/memory.c @@ -192,7 +192,10 @@ static uint8_t read_mbc_ram(GB_gameboy_t *gb, uint16_t addr) if (gb->cartridge_type->has_rtc && gb->cartridge_type->mbc_type != GB_HUC3 && gb->mbc3_rtc_mapped && gb->mbc_ram_bank <= 4) { /* RTC read */ - gb->rtc_latched.high |= ~0xC1; /* Not all bytes in RTC high are used. */ + gb->rtc_latched.seconds &= 0x3F; + gb->rtc_latched.minutes &= 0x3F; + gb->rtc_latched.hours &= 0x1F; + gb->rtc_latched.high &= 0xC1; return gb->rtc_latched.data[gb->mbc_ram_bank]; } @@ -693,6 +696,9 @@ static void write_mbc_ram(GB_gameboy_t *gb, uint16_t addr, uint8_t value) } if (gb->cartridge_type->has_rtc && gb->mbc3_rtc_mapped && gb->mbc_ram_bank <= 4) { + if (gb->mbc_ram_bank == 0) { + gb->rtc_cycles = 0; + } gb->rtc_latched.data[gb->mbc_ram_bank] = gb->rtc_real.data[gb->mbc_ram_bank] = value; return; } diff --git a/Core/timing.c b/Core/timing.c @@ -254,6 +254,10 @@ static void GB_rtc_run(GB_gameboy_t *gb, uint8_t cycles) current_time = time(NULL); break; case GB_RTC_MODE_ACCURATE: + if (gb->cartridge_type->mbc_type != GB_HUC3 && (gb->rtc_real.high & 0x40)) { + gb->rtc_cycles -= cycles; + return; + } if (gb->rtc_cycles < GB_get_unmultiplied_clock_rate(gb) * 2) return; gb->rtc_cycles -= GB_get_unmultiplied_clock_rate(gb) * 2; current_time = gb->last_rtc_second + 1; @@ -299,6 +303,8 @@ static void GB_rtc_run(GB_gameboy_t *gb, uint8_t cycles) if (gb->rtc_real.high & 1) { /* Bit 8 of days*/ gb->rtc_real.high |= 0x80; /* Overflow bit */ } + + gb->rtc_real.high ^= 1; } } }

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