Apply applicable deferred actions before lookahead.

This commit is contained in:
Thomas Harte 2024-02-16 08:56:01 -05:00
parent fadd3bc6fc
commit 35545451fe
5 changed files with 14 additions and 3 deletions

View File

@ -73,6 +73,11 @@ template <typename TimeUnit> class DeferredQueue {
}
}
/// @returns @c true if no actions are enqueued; @c false otherwise.
bool empty() const {
return pending_actions_.empty();
}
private:
// The list of deferred actions.
struct DeferredAction {

View File

@ -742,6 +742,9 @@ template <Analyser::Static::AppleII::Target::Model model, bool has_mockingboard>
// actor, but this will actually be the result most of the time so it's not
// too terrible.
if(isReadOperation(operation) && address != 0xc000) {
if(video_.has_deferred_actions()) {
update_video();
}
*value = video_.get_last_read_value(cycles_since_video_update_);
}
@ -851,7 +854,7 @@ template <Analyser::Static::AppleII::Target::Model model, bool has_mockingboard>
case 0xc050:
case 0xc051:
update_video();
video_.set_text(!!(address&1));
video_.set_text(address&1);
break;
case 0xc052: update_video(); video_.set_mixed(false); break;
case 0xc053: update_video(); video_.set_mixed(true); break;

View File

@ -10,7 +10,6 @@
#include "../../../Outputs/CRT/CRT.hpp"
#include "../../../ClockReceiver/ClockReceiver.hpp"
#include "../../../ClockReceiver/DeferredQueue.hpp"
#include "VideoSwitches.hpp"

View File

@ -247,6 +247,10 @@ template <typename TimeUnit> class VideoSwitches {
}
}
bool has_deferred_actions() const {
return !deferrer_.empty();
}
protected:
GraphicsMode graphics_mode(int row) const {
if(

View File

@ -62,7 +62,7 @@
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
enableASanStackUseAfterReturn = "YES"