From a5a653d684cac4da335775363452d9821c278ec1 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 9 Apr 2024 21:49:00 -0400 Subject: [PATCH] Factor vsync state into IO reads. --- Machines/Acorn/Archimedes/InputOutputController.hpp | 5 +++-- Machines/Acorn/Archimedes/Video.hpp | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Machines/Acorn/Archimedes/InputOutputController.hpp b/Machines/Acorn/Archimedes/InputOutputController.hpp index dd2b7f68e..2974ffdce 100644 --- a/Machines/Acorn/Archimedes/InputOutputController.hpp +++ b/Machines/Acorn/Archimedes/InputOutputController.hpp @@ -180,8 +180,9 @@ struct InputOutputController { case 0x00: { uint8_t value = control_ | 0xc0; - value &= ~(i2c_.clock() ? 2 : 0); - value &= ~(i2c_.data() ? 1 : 0); + value &= ~(i2c_.clock() ? 0x02 : 0x00); + value &= ~(i2c_.data() ? 0x01 : 0x00); + value &= ~(video_.vsync_active() ? 0x80 : 0x00); set_byte(value); // logger.error().append("IOC control read: C:%d D:%d", !(value & 2), !(value & 1)); } break; diff --git a/Machines/Acorn/Archimedes/Video.hpp b/Machines/Acorn/Archimedes/Video.hpp index 60845ec0e..fe84c5f09 100644 --- a/Machines/Acorn/Archimedes/Video.hpp +++ b/Machines/Acorn/Archimedes/Video.hpp @@ -327,6 +327,10 @@ struct Video { return interrupt; } + bool vsync_active() const { + return vertical_state_.phase() == Phase::Sync; + } + void set_frame_start(uint32_t address) { frame_start_ = address; } void set_buffer_start(uint32_t address) { buffer_start_ = address; } void set_buffer_end(uint32_t address) { buffer_end_ = address; }