diff --git a/apple/appledisplay.cpp b/apple/appledisplay.cpp index 1494684..ea2c4d5 100644 --- a/apple/appledisplay.cpp +++ b/apple/appledisplay.cpp @@ -216,10 +216,13 @@ inline void AppleDisplay::Draw14DoubleHiresPixelsAt(uint16_t addr) drawApplePixel(bitTrain & 0x0F, col+xoff+1,row); } else { // Perfect color, B&W, monochrome. Draw an exact version of the pixels, and let - // the physical display figure out if they need to be reduced to B&W or not. + // the physical display figure out if they need to be reduced to B&W or not + // (for the most part - the m_blackAndWhite piece here allows full-res displays + // to give the crispest resolution.) uint8_t color = bitTrain & 0x0F; - + if (g_displayType == m_blackAndWhite) { color = c_white; } + g_display->cachePixel((col*2)+(xoff*2), row, ((bitTrain & 0x01) ? color : c_black)); diff --git a/teensy/teensy-display.cpp b/teensy/teensy-display.cpp index 3d38079..e3b916a 100644 --- a/teensy/teensy-display.cpp +++ b/teensy/teensy-display.cpp @@ -345,10 +345,14 @@ void TeensyDisplay::cachePixel(uint16_t x, uint16_t y, uint8_t color) // with a color between the two. #if 1 - // This is straight blending, R/G/B average + // This is straight blending, R/G/B average, except in B&W mode uint16_t origColor = dmaBuffer[y+VOFFSET][(x>>1)+HOFFSET]; uint16_t newColor = loresPixelColors[color]; - cacheDoubleWidePixel(x>>1, y, blendColors(origColor, newColor)); + if (g_displayType == m_blackAndWhite) { + cacheDoubleWidePixel(x>>1, y, (origColor && newColor) ? 0xFFFF : 0x0000); + } else { + cacheDoubleWidePixel(x>>1, y, blendColors(origColor, newColor)); + } #endif #if 0