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