From 2ec235170ee0adc764f797a10dd717b00e751742 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Thu, 21 Mar 2024 20:43:55 -0400 Subject: [PATCH] Finish the thought on magic constants. --- Machines/Acorn/Archimedes/Video.hpp | 4 ++-- Outputs/CRT/CRT.cpp | 14 ++++++++++---- Outputs/CRT/CRT.hpp | 17 ++++++++++++++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/Machines/Acorn/Archimedes/Video.hpp b/Machines/Acorn/Archimedes/Video.hpp index e227f3f3e..4cd1b0767 100644 --- a/Machines/Acorn/Archimedes/Video.hpp +++ b/Machines/Acorn/Archimedes/Video.hpp @@ -222,11 +222,11 @@ private: crt_.set_new_timing( 24'000'000 / (divider * 312 * 50), /* Cycle per line. */ 312, /* Height of display. */ - Outputs::Display::ColourSpace::YIQ, /* Composite colour space. */ + Outputs::CRT::PAL::ColourSpace, Outputs::CRT::PAL::ColourCycleNumerator, Outputs::CRT::PAL::ColourCycleDenominator, Outputs::CRT::PAL::VerticalSyncLength, - true); + Outputs::CRT::PAL::AlternatesPhase); } }; diff --git a/Outputs/CRT/CRT.cpp b/Outputs/CRT/CRT.cpp index b6b0fb0ba..beb60f391 100644 --- a/Outputs/CRT/CRT.cpp +++ b/Outputs/CRT/CRT.cpp @@ -120,17 +120,23 @@ void CRT::set_new_display_type(int cycles_per_line, Outputs::Display::Type displ set_new_timing( cycles_per_line, (displayType == Outputs::Display::Type::PAL50) ? 312 : 262, - Outputs::Display::ColourSpace::YUV, + PAL::ColourSpace, PAL::ColourCycleNumerator, PAL::ColourCycleDenominator, PAL::VerticalSyncLength, - true); - // i.e. 283.7516 colour cycles per line; 2.5 lines = vertical sync. + PAL::AlternatesPhase); break; case Outputs::Display::Type::NTSC60: scan_target_modals_.intended_gamma = 2.2f; - set_new_timing(cycles_per_line, 262, Outputs::Display::ColourSpace::YIQ, 455, 2, 6, false); // i.e. 227.5 colour cycles per line, 3 lines = vertical sync. + set_new_timing( + cycles_per_line, + 262, + NTSC::ColourSpace, + NTSC::ColourCycleNumerator, + NTSC::ColourCycleDenominator, + NTSC::VerticalSyncLength, + NTSC::AlternatesPhase); break; } } diff --git a/Outputs/CRT/CRT.hpp b/Outputs/CRT/CRT.hpp index bd1bc1b6c..eb69fa3ff 100644 --- a/Outputs/CRT/CRT.hpp +++ b/Outputs/CRT/CRT.hpp @@ -20,11 +20,26 @@ namespace Outputs::CRT { namespace PAL { -// PAL: 283.7516 colour cycles per line; 2.5 lines = vertical sync. +// 283.7516 colour cycles per line; 2.5 lines of vertical sync. static constexpr int ColourCycleNumerator = 709379; static constexpr int ColourCycleDenominator = 2500; static constexpr int VerticalSyncLength = 5; +static constexpr auto ColourSpace = Outputs::Display::ColourSpace::YUV; +static constexpr bool AlternatesPhase = true; + +} + +namespace NTSC { + +// 227.5 colour cycles per line; 3 lines of vertical sync. +static constexpr int ColourCycleNumerator = 455; +static constexpr int ColourCycleDenominator = 2; +static constexpr int VerticalSyncLength = 6; + +static constexpr auto ColourSpace = Outputs::Display::ColourSpace::YIQ; +static constexpr bool AlternatesPhase = false; + } class CRT;