From 7379b4570e5755a5a1da25181ba4f5d1ca461a98 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Wed, 9 Nov 2011 00:37:44 +0200 Subject: [PATCH 03/27] Don't use time() in emulating chips Instead of using time() in chip emulation, create new interface method currentTime(), defaulting to time(0). This way frontend can cleanly override the current time bsnes is using. --- snes/chip/bsx/satellaview/satellaview.cpp | 2 +- snes/chip/spc7110/spc7110.cpp | 2 +- snes/chip/srtc/srtc.cpp | 2 +- snes/interface/interface.cpp | 5 +++++ snes/interface/interface.hpp | 1 + 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/snes/chip/bsx/satellaview/satellaview.cpp b/snes/chip/bsx/satellaview/satellaview.cpp index 386fb628..3c980195 100755 --- a/snes/chip/bsx/satellaview/satellaview.cpp +++ b/snes/chip/bsx/satellaview/satellaview.cpp @@ -38,7 +38,7 @@ uint8 BSXSatellaview::mmio_read(unsigned addr) { if(counter == 0) { time_t rawtime; - time(&rawtime); + rawtime = SNES::interface->currentTime(); tm *t = localtime(&rawtime); regs.r2192_hour = t->tm_hour; diff --git a/snes/chip/spc7110/spc7110.cpp b/snes/chip/spc7110/spc7110.cpp index d2dc640b..74a817a6 100755 --- a/snes/chip/spc7110/spc7110.cpp +++ b/snes/chip/spc7110/spc7110.cpp @@ -101,7 +101,7 @@ void SPC7110::set_data_adjust(unsigned addr) { r4814 = addr; r4815 = addr >> 8; void SPC7110::update_time(int offset) { time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); - time_t current_time = time(0) - offset; + time_t current_time = SNES::interface->currentTime() - offset; //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by diff --git a/snes/chip/srtc/srtc.cpp b/snes/chip/srtc/srtc.cpp index 1b2fd2aa..78fc4c1f 100755 --- a/snes/chip/srtc/srtc.cpp +++ b/snes/chip/srtc/srtc.cpp @@ -31,7 +31,7 @@ void SRTC::reset() { void SRTC::update_time() { time_t rtc_time = (rtc[16] << 0) | (rtc[17] << 8) | (rtc[18] << 16) | (rtc[19] << 24); - time_t current_time = time(0); + time_t current_time = SNES::interface->currentTime(); //sizeof(time_t) is platform-dependent; though rtc[] needs to be platform-agnostic. //yet platforms with 32-bit signed time_t will overflow every ~68 years. handle this by diff --git a/snes/interface/interface.cpp b/snes/interface/interface.cpp index a0e3a81b..b3017c90 100755 --- a/snes/interface/interface.cpp +++ b/snes/interface/interface.cpp @@ -18,4 +18,9 @@ void Interface::message(const string &text) { print(text, "\n"); } +time_t Interface::currentTime() +{ + return time(0); +} + } diff --git a/snes/interface/interface.hpp b/snes/interface/interface.hpp index f1a48c0f..df975e83 100755 --- a/snes/interface/interface.hpp +++ b/snes/interface/interface.hpp @@ -5,6 +5,7 @@ struct Interface { virtual string path(Cartridge::Slot slot, const string &hint) = 0; virtual void message(const string &text); + virtual time_t currentTime(); }; extern Interface *interface; -- 2.15.0.rc1