mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-01-19 13:32:36 +00:00
tested with: . AppleWin-Test repo -> Tests-Various.dsk (tests E, F) . FT's ANSI STORY & TRIBU demos
This commit is contained in:
parent
e69a54832c
commit
21b0fbf97a
@ -808,6 +808,9 @@ inline void updateVideoScannerHorzEOL()
|
|||||||
//===========================================================================
|
//===========================================================================
|
||||||
inline void updateVideoScannerAddress()
|
inline void updateVideoScannerAddress()
|
||||||
{
|
{
|
||||||
|
if (g_nVideoMixed && g_nVideoClockVert >= VIDEO_SCANNER_Y_MIXED && GetVideoRefreshRate() == VR_50HZ)
|
||||||
|
g_nColorBurstPixels = 0; // instantaneously kill color-burst!
|
||||||
|
|
||||||
g_pVideoAddress = g_nVideoClockVert < VIDEO_SCANNER_Y_DISPLAY ? g_pScanLines[2*g_nVideoClockVert] : g_pScanLines[0];
|
g_pVideoAddress = g_nVideoClockVert < VIDEO_SCANNER_Y_DISPLAY ? g_pScanLines[2*g_nVideoClockVert] : g_pScanLines[0];
|
||||||
|
|
||||||
// Adjust, as these video styles have 2x 14M pixels of pre-render
|
// Adjust, as these video styles have 2x 14M pixels of pre-render
|
||||||
@ -1143,24 +1146,28 @@ void updateMonochromeTables( uint16_t r, uint16_t g, uint16_t b )
|
|||||||
static void updatePixelBnWMonitorSingleScanline (uint16_t compositeSignal)
|
static void updatePixelBnWMonitorSingleScanline (uint16_t compositeSignal)
|
||||||
{
|
{
|
||||||
updateFramebufferMonitorSingleScanline(compositeSignal, g_aBnWMonitorCustom);
|
updateFramebufferMonitorSingleScanline(compositeSignal, g_aBnWMonitorCustom);
|
||||||
|
updateColorPhase(); // Maintain color-phase, as could be switching graphics/text video modes mid-scanline
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
static void updatePixelBnWMonitorDoubleScanline (uint16_t compositeSignal)
|
static void updatePixelBnWMonitorDoubleScanline (uint16_t compositeSignal)
|
||||||
{
|
{
|
||||||
updateFramebufferMonitorDoubleScanline(compositeSignal, g_aBnWMonitorCustom);
|
updateFramebufferMonitorDoubleScanline(compositeSignal, g_aBnWMonitorCustom);
|
||||||
|
updateColorPhase(); // Maintain color-phase, as could be switching graphics/text video modes mid-scanline
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
static void updatePixelBnWColorTVSingleScanline (uint16_t compositeSignal)
|
static void updatePixelBnWColorTVSingleScanline (uint16_t compositeSignal)
|
||||||
{
|
{
|
||||||
updateFramebufferTVSingleScanline(compositeSignal, g_aBnWColorTVCustom);
|
updateFramebufferTVSingleScanline(compositeSignal, g_aBnWColorTVCustom);
|
||||||
|
updateColorPhase(); // Maintain color-phase, as could be switching graphics/text video modes mid-scanline
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
static void updatePixelBnWColorTVDoubleScanline (uint16_t compositeSignal)
|
static void updatePixelBnWColorTVDoubleScanline (uint16_t compositeSignal)
|
||||||
{
|
{
|
||||||
updateFramebufferTVDoubleScanline(compositeSignal, g_aBnWColorTVCustom);
|
updateFramebufferTVDoubleScanline(compositeSignal, g_aBnWColorTVCustom);
|
||||||
|
updateColorPhase(); // Maintain color-phase, as could be switching graphics/text video modes mid-scanline
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
@ -1601,7 +1608,6 @@ void updateScreenText40 (long cycles6502)
|
|||||||
bits ^= g_nTextFlashMask;
|
bits ^= g_nTextFlashMask;
|
||||||
|
|
||||||
updatePixels( bits );
|
updatePixels( bits );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
updateVideoScannerHorzEOL();
|
updateVideoScannerHorzEOL();
|
||||||
@ -1642,6 +1648,7 @@ void updateScreenText80 (long cycles6502)
|
|||||||
uint16_t bits = (main << 7) | (aux & 0x7f);
|
uint16_t bits = (main << 7) | (aux & 0x7f);
|
||||||
if (g_eVideoType != VT_COLOR_MONITOR_RGB) // No extra 14M bit needed for VT_COLOR_MONITOR_RGB
|
if (g_eVideoType != VT_COLOR_MONITOR_RGB) // No extra 14M bit needed for VT_COLOR_MONITOR_RGB
|
||||||
bits = (bits << 1) | g_nLastColumnPixelNTSC; // GH#555: Align TEXT80 chars with DHGR
|
bits = (bits << 1) | g_nLastColumnPixelNTSC; // GH#555: Align TEXT80 chars with DHGR
|
||||||
|
|
||||||
updatePixels( bits );
|
updatePixels( bits );
|
||||||
g_nLastColumnPixelNTSC = (bits >> 14) & 1;
|
g_nLastColumnPixelNTSC = (bits >> 14) & 1;
|
||||||
}
|
}
|
||||||
@ -1762,6 +1769,32 @@ void NTSC_SetVideoMode( uint32_t uVideoModeFlags, bool bDelay/*=false*/ )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GetVideoRefreshRate() == VR_50HZ)
|
||||||
|
{
|
||||||
|
if (uVideoModeFlags & VF_TEXT)
|
||||||
|
{
|
||||||
|
g_nColorBurstPixels = 0; // (For mid-line video mode change) Instantaneously kill color-burst! (not correct as TV's can take many lines)
|
||||||
|
|
||||||
|
// Switching mid-line from graphics to TEXT
|
||||||
|
if (g_eVideoType == VT_COLOR_MONITOR_NTSC &&
|
||||||
|
g_pFuncUpdateGraphicsScreen != updateScreenText40 && g_pFuncUpdateGraphicsScreen != updateScreenText80)
|
||||||
|
{
|
||||||
|
g_pVideoAddress += 2; // eg. FT's TRIBU demo & ANSI STORY (at "turn the disk over!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_nColorBurstPixels = 1024; // (For mid-line video mode change)
|
||||||
|
|
||||||
|
// Switching mid-line from TEXT to graphics
|
||||||
|
if (g_eVideoType == VT_COLOR_MONITOR_NTSC &&
|
||||||
|
(g_pFuncUpdateGraphicsScreen == updateScreenText40 || g_pFuncUpdateGraphicsScreen == updateScreenText80))
|
||||||
|
{
|
||||||
|
g_pVideoAddress -= 2; // eg. FT's TRIBU demo & ANSI STORY (at "turn the disk over!")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (uVideoModeFlags & VF_TEXT)
|
if (uVideoModeFlags & VF_TEXT)
|
||||||
{
|
{
|
||||||
if (uVideoModeFlags & VF_80COL)
|
if (uVideoModeFlags & VF_80COL)
|
||||||
@ -1821,9 +1854,10 @@ void NTSC_SetVideoMode( uint32_t uVideoModeFlags, bool bDelay/*=false*/ )
|
|||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
void NTSC_SetVideoStyle() // (int v, int s)
|
void NTSC_SetVideoStyle(void)
|
||||||
{
|
{
|
||||||
int half = IsVideoStyle(VS_HALF_SCANLINES);
|
const bool half = IsVideoStyle(VS_HALF_SCANLINES);
|
||||||
|
const VideoRefreshRate_e refresh = GetVideoRefreshRate();
|
||||||
uint8_t r, g, b;
|
uint8_t r, g, b;
|
||||||
|
|
||||||
switch ( g_eVideoType )
|
switch ( g_eVideoType )
|
||||||
@ -1838,7 +1872,8 @@ void NTSC_SetVideoStyle() // (int v, int s)
|
|||||||
g_pFuncUpdateBnWPixel = updatePixelBnWColorTVSingleScanline;
|
g_pFuncUpdateBnWPixel = updatePixelBnWColorTVSingleScanline;
|
||||||
g_pFuncUpdateHuePixel = updatePixelHueColorTVSingleScanline;
|
g_pFuncUpdateHuePixel = updatePixelHueColorTVSingleScanline;
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
g_pFuncUpdateBnWPixel = updatePixelBnWColorTVDoubleScanline;
|
g_pFuncUpdateBnWPixel = updatePixelBnWColorTVDoubleScanline;
|
||||||
g_pFuncUpdateHuePixel = updatePixelHueColorTVDoubleScanline;
|
g_pFuncUpdateHuePixel = updatePixelHueColorTVDoubleScanline;
|
||||||
}
|
}
|
||||||
@ -1855,7 +1890,8 @@ void NTSC_SetVideoStyle() // (int v, int s)
|
|||||||
g_pFuncUpdateBnWPixel = updatePixelBnWMonitorSingleScanline;
|
g_pFuncUpdateBnWPixel = updatePixelBnWMonitorSingleScanline;
|
||||||
g_pFuncUpdateHuePixel = updatePixelHueMonitorSingleScanline;
|
g_pFuncUpdateHuePixel = updatePixelHueMonitorSingleScanline;
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
|
{
|
||||||
g_pFuncUpdateBnWPixel = updatePixelBnWMonitorDoubleScanline;
|
g_pFuncUpdateBnWPixel = updatePixelBnWMonitorDoubleScanline;
|
||||||
g_pFuncUpdateHuePixel = updatePixelHueMonitorDoubleScanline;
|
g_pFuncUpdateHuePixel = updatePixelHueMonitorDoubleScanline;
|
||||||
}
|
}
|
||||||
@ -1867,12 +1903,9 @@ void NTSC_SetVideoStyle() // (int v, int s)
|
|||||||
b = 0xFF;
|
b = 0xFF;
|
||||||
updateMonochromeTables( r, g, b ); // Custom Monochrome color
|
updateMonochromeTables( r, g, b ); // Custom Monochrome color
|
||||||
if (half)
|
if (half)
|
||||||
{
|
|
||||||
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWColorTVSingleScanline;
|
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWColorTVSingleScanline;
|
||||||
}
|
else
|
||||||
else {
|
|
||||||
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWColorTVDoubleScanline;
|
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWColorTVDoubleScanline;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VT_MONO_AMBER:
|
case VT_MONO_AMBER:
|
||||||
@ -1906,13 +1939,9 @@ void NTSC_SetVideoStyle() // (int v, int s)
|
|||||||
_mono:
|
_mono:
|
||||||
updateMonochromeTables( r, g, b ); // Custom Monochrome color
|
updateMonochromeTables( r, g, b ); // Custom Monochrome color
|
||||||
if (half)
|
if (half)
|
||||||
{
|
|
||||||
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWMonitorSingleScanline;
|
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWMonitorSingleScanline;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWMonitorDoubleScanline;
|
g_pFuncUpdateBnWPixel = g_pFuncUpdateHuePixel = updatePixelBnWMonitorDoubleScanline;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user