diff --git a/options.txt b/options.txt index 8ecff4d..0b1edd5 100644 --- a/options.txt +++ b/options.txt @@ -60,6 +60,8 @@ GraphIEC = 1 // If you are using a LCD screen then specify it here //LCDName = ssd1306_128x64 +//LCDName = ssd1306_128x32 +//LCDName = sh1106_128x64 // If you are using a LCD screen and you would like PageUp and PageDown keys to work with it then specify this option //KeyboardBrowseLCDScreen = 1 diff --git a/src/DiskCaddy.cpp b/src/DiskCaddy.cpp index 871cfac..04f01e8 100644 --- a/src/DiskCaddy.cpp +++ b/src/DiskCaddy.cpp @@ -32,6 +32,8 @@ static char buffer[256] = { 0 }; static u32 white = RGBA(0xff, 0xff, 0xff, 0xff); static u32 red = RGBA(0xff, 0, 0, 0xff); +#define LCDFONTHEIGHT 16 + bool DiskCaddy::Empty() { int x; @@ -62,7 +64,7 @@ bool DiskCaddy::Empty() snprintf(buffer, 256, "Saving"); screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), BkColour); - y += 16; + y += LCDFONTHEIGHT; snprintf(buffer, 256, "%s ", disks[index].GetName()); screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), red); screenLCD->SwapBuffers(); @@ -91,7 +93,7 @@ bool DiskCaddy::Empty() snprintf(buffer, 256, "Saving"); screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), BkColour); - y += 16; + y += LCDFONTHEIGHT; snprintf(buffer, 256, "Complete "); screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), red); screenLCD->SwapBuffers(); @@ -130,7 +132,7 @@ bool DiskCaddy::Insert(const FILINFO* fileInfo, bool readOnly) snprintf(buffer, 256, "Loading"); screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), BkColour); - y += 16; + y += LCDFONTHEIGHT; snprintf(buffer, 256, "%s ", fileInfo->fname); screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), red); screenLCD->SwapBuffers(); @@ -282,47 +284,44 @@ void DiskCaddy::ShowSelectedImage(u32 index) if (screenLCD) { unsigned numberOfImages = GetNumberOfImages(); + unsigned numberOfDisplayedImages = screenLCD->Height()/LCDFONTHEIGHT-1; unsigned caddyIndex; - if (screenLCD) + RGBA BkColour = RGBA(0, 0, 0, 0xFF); + //screenLCD->Clear(BkColour); + x = 0; + y = 0; + + snprintf(buffer, 256, " D %d/%d ", index + 1, numberOfImages); + screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), RGBA(0xff, 0xff, 0xff, 0xff)); + y += LCDFONTHEIGHT; + + if (numberOfImages > numberOfDisplayedImages && index > numberOfDisplayedImages-1) { - RGBA BkColour = RGBA(0, 0, 0, 0xFF); - //screenLCD->Clear(BkColour); - x = 0; - y = 0; - - //snprintf(buffer, 256, "Emulating %d/%d ", index + 1, numberOfImages); - snprintf(buffer, 256, " D %d/%d ", index + 1, numberOfImages); - screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), RGBA(0xff, 0xff, 0xff, 0xff)); - y += 16; - - if (numberOfImages > 3 && index > 2) - { - if (numberOfImages - index < 3) - caddyIndex = numberOfImages - 3; - else - caddyIndex = index; - } + if (numberOfImages - index < numberOfDisplayedImages) + caddyIndex = numberOfImages - numberOfDisplayedImages; else - { - caddyIndex = 0; - } - - for (; caddyIndex < numberOfImages; ++caddyIndex) - { - DiskImage* image = GetImage(caddyIndex); - const char* name = image->GetName(); - if (name) - { - snprintf(buffer, 256, "%d %s ", caddyIndex + 1, name); - screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), caddyIndex == index ? RGBA(0xff, 0xff, 0xff, 0xff) : BkColour); - y += 16; - } - if (y >= screenLCD->Height()) - break; - } - screenLCD->SwapBuffers(); + caddyIndex = index; } + else + { + caddyIndex = 0; + } + + for (; caddyIndex < numberOfImages; ++caddyIndex) + { + DiskImage* image = GetImage(caddyIndex); + const char* name = image->GetName(); + if (name) + { + snprintf(buffer, 256, "%d %s ", caddyIndex + 1, name); + screenLCD->PrintText(false, x, y, buffer, RGBA(0xff, 0xff, 0xff, 0xff), caddyIndex == index ? RGBA(0xff, 0xff, 0xff, 0xff) : BkColour); + y += LCDFONTHEIGHT; + } + if (y >= screenLCD->Height()) + break; + } + screenLCD->SwapBuffers(); } }