Add patches for libsnes for making it suitable for rerecording and add code to support some of the new features (remove time interception).
84 lines
3.2 KiB
Diff
84 lines
3.2 KiB
Diff
From 3697b3a6d1f0a576d53e86ab965b990c80ac9754 Mon Sep 17 00:00:00 2001
|
|
From: Ilari Liusvaara <ilari.liusvaara@elisanet.fi>
|
|
Date: Wed, 9 Nov 2011 00:37:44 +0200
|
|
Subject: [PATCH 3/4] 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 7bfd13f..b2565ea 100755
|
|
--- a/snes/chip/bsx/satellaview/satellaview.cpp
|
|
+++ b/snes/chip/bsx/satellaview/satellaview.cpp
|
|
@@ -39,7 +39,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 835ddbb..f5463e5 100755
|
|
--- a/snes/chip/spc7110/spc7110.cpp
|
|
+++ b/snes/chip/spc7110/spc7110.cpp
|
|
@@ -102,7 +102,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 1dd8f86..b11b756 100755
|
|
--- a/snes/chip/srtc/srtc.cpp
|
|
+++ b/snes/chip/srtc/srtc.cpp
|
|
@@ -32,7 +32,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 a0e3a81..b3017c9 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 f1a48c0..df975e8 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;
|
|
--
|
|
1.7.8.rc0.38.g761c4
|
|
|