diff --git a/src/gba/gba-gpio.c b/src/gba/gba-gpio.c index 87d6b00c0..92b2f50a0 100644 --- a/src/gba/gba-gpio.c +++ b/src/gba/gba-gpio.c @@ -242,7 +242,14 @@ unsigned _rtcOutput(struct GBACartridgeGPIO* gpio) { } void _rtcUpdateClock(struct GBACartridgeGPIO* gpio) { - time_t t = time(0); + time_t t; + struct GBARTCSource* rtc = gpio->p->rtcSource; + if (rtc) { + rtc->sample(rtc); + t = rtc->unixTime(rtc); + } else { + t = time(0); + } struct tm date; #ifdef _WIN32 date = *localtime(&t); diff --git a/src/gba/gba-sensors.h b/src/gba/gba-sensors.h index 301f7f496..45645fc51 100644 --- a/src/gba/gba-sensors.h +++ b/src/gba/gba-sensors.h @@ -23,4 +23,10 @@ struct GBALuminanceSource { uint8_t (*readLuminance)(struct GBALuminanceSource*); }; +struct GBARTCSource { + void (*sample)(struct GBARTCSource*); + + time_t (*unixTime)(struct GBARTCSource*); +}; + #endif diff --git a/src/gba/gba.c b/src/gba/gba.c index 5f4131d5e..b72d7f2ba 100644 --- a/src/gba/gba.c +++ b/src/gba/gba.c @@ -156,6 +156,8 @@ static void GBAInit(struct ARMCore* cpu, struct ARMComponent* component) { gba->springIRQ = 0; gba->keySource = 0; gba->rotationSource = 0; + gba->luminanceSource = 0; + gba->rtcSource = 0; gba->rumble = 0; gba->rr = 0; diff --git a/src/gba/gba.h b/src/gba/gba.h index 8d90cce02..522d3e3db 100644 --- a/src/gba/gba.h +++ b/src/gba/gba.h @@ -116,6 +116,7 @@ struct GBA { uint32_t busyLoop; struct GBARotationSource* rotationSource; struct GBALuminanceSource* luminanceSource; + struct GBARTCSource* rtcSource; struct GBARumble* rumble; struct GBARRContext* rr;