From d1bc50448fdf4b17c9d3a6bf1c7dadbd1016a636 Mon Sep 17 00:00:00 2001 From: Ash Wolf Date: Fri, 20 Dec 2019 01:00:00 +0000 Subject: [PATCH] fix 4bpp screen rendering --- README.md | 1 - WindQt/mainwindow.cpp | 9 ++------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ae19f90..c8428f4 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,6 @@ Known issues: - State is not saved (just like a real Psion :p) - LCD controller is almost entirely unimplemented aside from the very basics to display the framebuffer - EPOC misbehaves massively with memory banks larger than 0x800000 (may be an OS design flaw? need to confirm) -- 4bpp display mode does not decode correctly Copyright --------- diff --git a/WindQt/mainwindow.cpp b/WindQt/mainwindow.cpp index 4491613..e0227d4 100644 --- a/WindQt/mainwindow.cpp +++ b/WindQt/mainwindow.cpp @@ -93,16 +93,11 @@ void MainWindow::updateScreen() for (int x = 0; x < img.width(); x++) { uint8_t byte = lcdBuf[lineOffs + (x / ppb)]; int shift = (x & (ppb - 1)) * bpp; - int mask = (bpp << 1) - 1; + int mask = (1 << bpp) - 1; int palIdx = (byte >> shift) & mask; int palValue = palette[palIdx]; - if (bpp <= 1) - palValue |= (palValue << 1); - if (bpp <= 2) - palValue |= (palValue << 2); - if (bpp <= 4) - palValue |= (palValue << 4); + palValue |= (palValue << 4); scanline[x] = palValue ^ 0xFF; } }