From 536c2319416a153e4581c1982a4c451a22fbdc10 Mon Sep 17 00:00:00 2001 From: "G.K.MacGregor" Date: Sun, 23 Oct 2022 12:30:50 +0100 Subject: [PATCH] Fix detect-on-load of Level 3.5 objects and DRCS mode --- levelonepage.cpp | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/levelonepage.cpp b/levelonepage.cpp index f9dd32d..f29f489 100644 --- a/levelonepage.cpp +++ b/levelonepage.cpp @@ -25,6 +25,8 @@ #include "levelonepage.h" +#include "x26triplets.h" + LevelOnePage::LevelOnePage() { m_enhancements.reserve(maxEnhancements()); @@ -403,17 +405,21 @@ bool LevelOnePage::isPaletteDefault(int fromColour, int toColour) const int LevelOnePage::levelRequired() const { + // X/28/4 present i.e. CLUTs 0 or 1 redefined - Level 3.5 if (!isPaletteDefault(0, 15)) return 3; // TODO Check for X/28/1 for DCLUT for mode 1-3 DRCS characters - return 3 + // Assume Level 2.5 if any X/28 page enhancements are present, otherwise assume Level 1 int levelSeen = (!isPaletteDefault(16,31) || m_leftSidePanelDisplayed || m_rightSidePanelDisplayed || m_defaultScreenColour !=0 || m_defaultRowColour !=0 || m_blackBackgroundSubst || m_colourTableRemap !=0 || m_defaultCharSet != 0 || m_secondCharSet != 0xf) ? 2 : 0; + // If there's no X/26 triplets, exit here as Level 1 or 2.5 if (m_enhancements.isEmpty()) return levelSeen; for (int i=0; i