mirror of https://github.com/Treeki/WindEmu.git
fix 4bpp screen rendering
This commit is contained in:
parent
e96c438003
commit
d1bc50448f
|
@ -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
|
||||
---------
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue