mirror of
https://github.com/JorjBauer/aiie.git
synced 2024-12-28 21:29:34 +00:00
fix colors in double-hi-res; bit order is swizzled like in double-lo-res
This commit is contained in:
parent
b6bbbe5a2b
commit
ecb32dd873
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
|
|
||||||
/* Fourpossible Hi-Res color-drawing modes..
|
/* Four possible Hi-Res color-drawing modes..
|
||||||
MONOCHROME: show all the pixels, but only in green;
|
MONOCHROME: show all the pixels, but only in green;
|
||||||
BLACKANDWHITE: monochrome, but use B&W instead of B&G;
|
BLACKANDWHITE: monochrome, but use B&W instead of B&G;
|
||||||
NTSCLIKE: reduce the resolution to 140 pixels wide, similar to how an NTSC monitor would blend it
|
NTSCLIKE: reduce the resolution to 140 pixels wide, similar to how an NTSC monitor would blend it
|
||||||
@ -190,6 +190,7 @@ inline void AppleDisplay::Draw14DoubleHiresPixelsAt(uint16_t addr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Make sure it's a valid graphics area, not a dead hole
|
// Make sure it's a valid graphics area, not a dead hole
|
||||||
|
#define UNSWIZ(x) ((((x)&0x77)<<1) | (((x)&0x88)>>3))
|
||||||
if (col <= 280 && row <= 192) {
|
if (col <= 280 && row <= 192) {
|
||||||
// Grab the 4 bytes we care about
|
// Grab the 4 bytes we care about
|
||||||
uint8_t b1A = mmu->readDirect(addr, 0);
|
uint8_t b1A = mmu->readDirect(addr, 0);
|
||||||
@ -205,22 +206,22 @@ inline void AppleDisplay::Draw14DoubleHiresPixelsAt(uint16_t addr)
|
|||||||
bitTrain |= (b1A & 0x7F);
|
bitTrain |= (b1A & 0x7F);
|
||||||
bitTrain <<= 7;
|
bitTrain <<= 7;
|
||||||
bitTrain |= (b1B & 0x7F);
|
bitTrain |= (b1B & 0x7F);
|
||||||
|
|
||||||
// Now we pop groups of 4 bits off the bottom and draw.
|
// Now we pop groups of 4 bits off the bottom and draw.
|
||||||
|
|
||||||
for (int8_t xoff = 0; xoff < 14; xoff += 2) {
|
for (int8_t xoff = 0; xoff < 14; xoff += 2) {
|
||||||
|
uint8_t color = bitTrain & 0x0F;
|
||||||
|
color = UNSWIZ(color); //((color & 7) << 1) | ((color & 8) >> 3); // un-swizzle the bits
|
||||||
if (g_displayType == m_ntsclike) {
|
if (g_displayType == m_ntsclike) {
|
||||||
// NTSC-like color - use drawApplePixel to show the messy NTSC color bleeds.
|
// NTSC-like color - use drawApplePixel to show the messy NTSC color bleeds.
|
||||||
// This draws two doubled pixels with greater color, but lower pixel, resolution.
|
// This draws two doubled pixels with greater color, but lower pixel, resolution.
|
||||||
drawApplePixel(bitTrain & 0x0F, col+xoff, row);
|
drawApplePixel(color, col+xoff, row);
|
||||||
drawApplePixel(bitTrain & 0x0F, col+xoff+1,row);
|
drawApplePixel(color, col+xoff+1,row);
|
||||||
} else {
|
} else {
|
||||||
// Perfect color, B&W, monochrome. Draw an exact version of the pixels, and let
|
// 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
|
// (for the most part - the m_blackAndWhite piece here allows full-res displays
|
||||||
// to give the crispest resolution.)
|
// to give the crispest resolution.)
|
||||||
|
|
||||||
uint8_t color = bitTrain & 0x0F;
|
|
||||||
if (g_displayType == m_blackAndWhite) { color = c_white; }
|
if (g_displayType == m_blackAndWhite) { color = c_white; }
|
||||||
|
|
||||||
g_display->cachePixel((col*2)+(xoff*2), row,
|
g_display->cachePixel((col*2)+(xoff*2), row,
|
||||||
|
Loading…
Reference in New Issue
Block a user