diff --git a/higan/emulator/emulator.hpp b/higan/emulator/emulator.hpp index f5cb8e19..c5de30bf 100644 --- a/higan/emulator/emulator.hpp +++ b/higan/emulator/emulator.hpp @@ -12,7 +12,7 @@ using namespace nall; namespace Emulator { static const string Name = "higan"; - static const string Version = "104.15"; + static const string Version = "104.16"; static const string Author = "byuu"; static const string License = "GPLv3"; static const string Website = "https://byuu.org/"; diff --git a/higan/processor/upd96050/instructions.cpp b/higan/processor/upd96050/instructions.cpp index 400322a0..5ac63a84 100644 --- a/higan/processor/upd96050/instructions.cpp +++ b/higan/processor/upd96050/instructions.cpp @@ -79,6 +79,7 @@ auto uPD96050::execOP(uint24 opcode) -> void { flag.z = r == 0; flag.s0 = r & 0x8000; + if(!flag.ov1) flag.s1 = flag.s0; switch(alu) { @@ -110,7 +111,6 @@ auto uPD96050::execOP(uint24 opcode) -> void { flag.ov0 = (q ^ r) & (q ^ p) & 0x8000; flag.c = r > q; } - if(!flag.ov1) flag.s1 = flag.s0; flag.ov1 = flag.ov0 & flag.ov1 ? flag.s0 == flag.s1 : flag.ov0 | flag.ov1; break; } diff --git a/higan/sfc/coprocessor/superfx/memory.cpp b/higan/sfc/coprocessor/superfx/memory.cpp index 3f1efc24..73c8b3eb 100644 --- a/higan/sfc/coprocessor/superfx/memory.cpp +++ b/higan/sfc/coprocessor/superfx/memory.cpp @@ -3,6 +3,7 @@ auto SuperFX::read(uint24 addr, uint8 data) -> uint8 { while(!regs.scmr.ron) { step(6); synchronize(cpu); + if(scheduler.synchronizing()) break; } return rom.read((((addr & 0x3f0000) >> 1) | (addr & 0x7fff)) & romMask); } @@ -11,6 +12,7 @@ auto SuperFX::read(uint24 addr, uint8 data) -> uint8 { while(!regs.scmr.ron) { step(6); synchronize(cpu); + if(scheduler.synchronizing()) break; } return rom.read(addr & romMask); } @@ -19,6 +21,7 @@ auto SuperFX::read(uint24 addr, uint8 data) -> uint8 { while(!regs.scmr.ran) { step(6); synchronize(cpu); + if(scheduler.synchronizing()) break; } return ram.read(addr & ramMask); } @@ -31,6 +34,7 @@ auto SuperFX::write(uint24 addr, uint8 data) -> void { while(!regs.scmr.ran) { step(6); synchronize(cpu); + if(scheduler.synchronizing()) break; } return ram.write(addr & ramMask, data); } diff --git a/icarus/icarus.cpp b/icarus/icarus.cpp index 41c5439b..c4208971 100644 --- a/icarus/icarus.cpp +++ b/icarus/icarus.cpp @@ -127,6 +127,7 @@ auto nall::main(string_vector args) -> void { #endif scanDialog->show(); Application::run(); + settings.save(); } #endif diff --git a/icarus/settings.cpp b/icarus/settings.cpp index 9aaebb73..462d9cb2 100644 --- a/icarus/settings.cpp +++ b/icarus/settings.cpp @@ -1,6 +1,6 @@ struct Settings : Markup::Node { Settings(); - ~Settings(); + auto save() -> void; }; Settings::Settings() { @@ -19,6 +19,6 @@ Settings::Settings() { set("icarus/UseHeuristics", true); } -Settings::~Settings() { +auto Settings::save() -> void { file::write(locate("settings.bml"), BML::serialize(*this)); }