Supported modes selected via toggling AN3 and clocking in 80COL: - 140 color mode (Apple calls this mode 2, Video7 calls this mode 0). - mixed mode (Apple calls this mode 3, Video7 calls this mode 2). - 560 mono mode (Apple calls this mode 1, Video7 calls this mode 3). Save-state is also persists the extra state. And there's a few corrections to APPLE2E.SYM for the 80STORE and 80COL I/O addresses.
This commit is contained in:
parent
8f7ae7dc28
commit
dd53812132
8 changed files with 265 additions and 58 deletions
|
@ -1,7 +1,10 @@
|
|||
; Apple 2 Rom Symbol Table
|
||||
; Version 5 Renamed "KBD/CLR80COL" -> "KBD/CLR80STORE", "SET80COL" -> "SET80STORE"
|
||||
; Renamed "CLR80VID" -> "CLR80COL", "SET80VID" -> "SET80COL"
|
||||
; Renamed "RD80COL" -> "RD80STORE", "RD80VID" -> "RD80COL"
|
||||
; Version 4 GH#484
|
||||
; Version 3 Cross-referenced/Sync'd with APPLE2E.SYM & A2_BASIC.SYM
|
||||
Added Text Holes
|
||||
; Added Text Holes
|
||||
; Version 2 by Michael Pohoreski - AppleWin Debugger Dev
|
||||
; Version 1 Original
|
||||
|
||||
|
@ -91,8 +94,8 @@
|
|||
07FB A2C.TEMP2
|
||||
|
||||
; Softswitches
|
||||
C000 KBD/CLR80COL
|
||||
C001 SET80COL
|
||||
C000 KBD/CLR80STORE
|
||||
C001 SET80STORE
|
||||
C002 RDMAINRAM
|
||||
C003 RDCARDRAM
|
||||
C004 WRMAINRAM
|
||||
|
@ -103,8 +106,8 @@ C008 SETSTDZP
|
|||
C009 SETALTZP
|
||||
C00A SETINTC3ROM
|
||||
C00B SETSLOTC3ROM
|
||||
C00C CLR80VID
|
||||
C00D SET80VID
|
||||
C00C CLR80COL
|
||||
C00D SET80COL
|
||||
C00E CLRALTCHAR
|
||||
C00F SETALTCHAR
|
||||
C010 KBDSTRB
|
||||
|
@ -115,12 +118,12 @@ C014 RDRAMWRT
|
|||
C015 RDCXROM
|
||||
C016 RDALTZP
|
||||
C017 RDC3ROM
|
||||
C018 RD80COL
|
||||
C018 RD80STORE
|
||||
C019 RDVBLBAR
|
||||
C01A RDTEXT
|
||||
C01C RDPAGE2
|
||||
C01E ALTCHARSET
|
||||
C01F RD80VID
|
||||
C01F RD80COL
|
||||
C020 TAPEOUT
|
||||
C030 SPKR
|
||||
C050 TXTCLR
|
||||
|
|
|
@ -1301,7 +1301,7 @@ static BYTE __stdcall Disk_IOWrite(WORD pc, WORD addr, BYTE bWrite, BYTE d, ULON
|
|||
|
||||
//===========================================================================
|
||||
|
||||
// Unit version history:
|
||||
// Unit version history:
|
||||
// 2: Added: Format Track state & DiskLastCycle
|
||||
// 3: Added: DiskLastReadLatchCycle
|
||||
static const UINT kUNIT_VERSION = 3;
|
||||
|
|
|
@ -51,6 +51,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
#include "Speaker.h"
|
||||
#include "Tape.h"
|
||||
#include "Video.h"
|
||||
#include "RGBMonitor.h"
|
||||
|
||||
#include "z80emu.h"
|
||||
#include "Z80VICE/z80.h"
|
||||
|
@ -2045,7 +2046,13 @@ LPVOID MemGetSlotParameters(UINT uSlot)
|
|||
|
||||
//
|
||||
|
||||
static const UINT kUNIT_AUXSLOT_VER = 1;
|
||||
// Unit version history:
|
||||
// 2: Added version field to card's state
|
||||
static const UINT kUNIT_AUXSLOT_VER = 2;
|
||||
|
||||
// Unit version history:
|
||||
// 2: Added: RGB card state
|
||||
static const UINT kUNIT_VER = 2;
|
||||
|
||||
#define SS_YAML_VALUE_CARD_80COL "80 Column"
|
||||
#define SS_YAML_VALUE_CARD_EXTENDED80COL "Extended 80 Column"
|
||||
|
@ -2198,32 +2205,42 @@ void MemSaveSnapshotAux(YamlSaveHelper& yamlSaveHelper)
|
|||
}
|
||||
|
||||
yamlSaveHelper.UnitHdr(MemGetSnapshotUnitAuxSlotName(), kUNIT_AUXSLOT_VER);
|
||||
YamlSaveHelper::Label state(yamlSaveHelper, "%s:\n", SS_YAML_KEY_STATE);
|
||||
|
||||
std::string card = g_uMaxExPages == 0 ? SS_YAML_VALUE_CARD_80COL : // todo: support empty slot
|
||||
g_uMaxExPages == 1 ? SS_YAML_VALUE_CARD_EXTENDED80COL :
|
||||
SS_YAML_VALUE_CARD_RAMWORKSIII;
|
||||
yamlSaveHelper.SaveString(SS_YAML_KEY_CARD, card.c_str());
|
||||
yamlSaveHelper.Save("%s: 0x%02X # [0,1..7F] 0=no aux mem, 1=128K system, etc\n", SS_YAML_KEY_NUMAUXBANKS, g_uMaxExPages);
|
||||
yamlSaveHelper.Save("%s: 0x%02X # [ 0..7E] 0=memaux\n", SS_YAML_KEY_ACTIVEAUXBANK, g_uActiveBank);
|
||||
|
||||
for(UINT uBank = 1; uBank <= g_uMaxExPages; uBank++)
|
||||
// Unit state
|
||||
{
|
||||
MemSaveSnapshotMemory(yamlSaveHelper, false, uBank);
|
||||
YamlSaveHelper::Label unitState(yamlSaveHelper, "%s:\n", SS_YAML_KEY_STATE);
|
||||
|
||||
std::string card = g_uMaxExPages == 0 ? SS_YAML_VALUE_CARD_80COL : // todo: support empty slot
|
||||
g_uMaxExPages == 1 ? SS_YAML_VALUE_CARD_EXTENDED80COL :
|
||||
SS_YAML_VALUE_CARD_RAMWORKSIII;
|
||||
|
||||
yamlSaveHelper.SaveString(SS_YAML_KEY_CARD, card.c_str());
|
||||
yamlSaveHelper.Save("%s: %d\n", SS_YAML_KEY_VERSION, kUNIT_VER);
|
||||
|
||||
// Card state
|
||||
{
|
||||
YamlSaveHelper::Label cardState(yamlSaveHelper, "%s:\n", SS_YAML_KEY_STATE);
|
||||
|
||||
yamlSaveHelper.Save("%s: 0x%02X # [0,1..7F] 0=no aux mem, 1=128K system, etc\n", SS_YAML_KEY_NUMAUXBANKS, g_uMaxExPages);
|
||||
yamlSaveHelper.Save("%s: 0x%02X # [ 0..7E] 0=memaux\n", SS_YAML_KEY_ACTIVEAUXBANK, g_uActiveBank);
|
||||
|
||||
for(UINT uBank = 1; uBank <= g_uMaxExPages; uBank++)
|
||||
{
|
||||
MemSaveSnapshotMemory(yamlSaveHelper, false, uBank);
|
||||
}
|
||||
|
||||
RGB_SaveSnapshot(yamlSaveHelper);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool MemLoadSnapshotAux(YamlLoadHelper& yamlLoadHelper, UINT version)
|
||||
static void MemLoadSnapshotAuxCommon(YamlLoadHelper& yamlLoadHelper, const std::string& card)
|
||||
{
|
||||
if (version != kUNIT_AUXSLOT_VER)
|
||||
throw std::string(SS_YAML_KEY_UNIT ": AuxSlot: Version mismatch");
|
||||
|
||||
// "State"
|
||||
UINT numAuxBanks = yamlLoadHelper.LoadUint(SS_YAML_KEY_NUMAUXBANKS);
|
||||
UINT activeAuxBank = yamlLoadHelper.LoadUint(SS_YAML_KEY_ACTIVEAUXBANK);
|
||||
|
||||
SS_CARDTYPE type = CT_Empty;
|
||||
std::string card = yamlLoadHelper.LoadString(SS_YAML_KEY_CARD);
|
||||
if (card == SS_YAML_VALUE_CARD_80COL)
|
||||
{
|
||||
type = CT_80Col;
|
||||
|
@ -2282,6 +2299,36 @@ bool MemLoadSnapshotAux(YamlLoadHelper& yamlLoadHelper, UINT version)
|
|||
|
||||
memaux = RWpages[g_uActiveBank];
|
||||
// NB. MemUpdatePaging(TRUE) called at end of Snapshot_LoadState_v2()
|
||||
}
|
||||
|
||||
static void MemLoadSnapshotAuxVer1(YamlLoadHelper& yamlLoadHelper)
|
||||
{
|
||||
std::string card = yamlLoadHelper.LoadString(SS_YAML_KEY_CARD);
|
||||
MemLoadSnapshotAuxCommon(yamlLoadHelper, card);
|
||||
}
|
||||
|
||||
static void MemLoadSnapshotAuxVer2(YamlLoadHelper& yamlLoadHelper, UINT unitVersion)
|
||||
{
|
||||
std::string card = yamlLoadHelper.LoadString(SS_YAML_KEY_CARD);
|
||||
UINT cardVersion = yamlLoadHelper.LoadUint(SS_YAML_KEY_VERSION);
|
||||
|
||||
if (!yamlLoadHelper.GetSubMap(std::string(SS_YAML_KEY_STATE)))
|
||||
throw std::string(SS_YAML_KEY_UNIT ": Expected sub-map name: " SS_YAML_KEY_STATE);
|
||||
|
||||
MemLoadSnapshotAuxCommon(yamlLoadHelper, card);
|
||||
|
||||
RGB_LoadSnapshot(yamlLoadHelper);
|
||||
}
|
||||
|
||||
bool MemLoadSnapshotAux(YamlLoadHelper& yamlLoadHelper, UINT version)
|
||||
{
|
||||
if (version < 1 || version > kUNIT_AUXSLOT_VER)
|
||||
throw std::string(SS_YAML_KEY_UNIT ": AuxSlot: Version mismatch");
|
||||
|
||||
if (version == 1)
|
||||
MemLoadSnapshotAuxVer1(yamlLoadHelper);
|
||||
else
|
||||
MemLoadSnapshotAuxVer2(yamlLoadHelper, version);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -688,6 +688,19 @@ inline bool GetColorBurst( void )
|
|||
|
||||
//===========================================================================
|
||||
|
||||
void update7MonoPixels( uint16_t bits )
|
||||
{
|
||||
g_pFuncUpdateBnWPixel(bits & 1); bits >>= 1;
|
||||
g_pFuncUpdateBnWPixel(bits & 1); bits >>= 1;
|
||||
g_pFuncUpdateBnWPixel(bits & 1); bits >>= 1;
|
||||
g_pFuncUpdateBnWPixel(bits & 1); bits >>= 1;
|
||||
g_pFuncUpdateBnWPixel(bits & 1); bits >>= 1;
|
||||
g_pFuncUpdateBnWPixel(bits & 1); bits >>= 1;
|
||||
g_pFuncUpdateBnWPixel(bits & 1);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
// NB. g_nLastColumnPixelNTSC = bits.b13 will be superseded by these parent funcs which use bits.b14:
|
||||
// . updateScreenDoubleHires80(), updateScreenDoubleLores80(), updateScreenText80()
|
||||
inline void updatePixels( uint16_t bits )
|
||||
|
@ -1362,8 +1375,34 @@ void updateScreenDoubleHires80Simplified (long cycles6502 ) // wsUpdateVideoDblH
|
|||
else if (g_nVideoClockHorz >= VIDEO_SCANNER_HORZ_START)
|
||||
{
|
||||
uint16_t addr = getVideoScannerAddressHGR();
|
||||
UpdateDHiResCell(g_nVideoClockHorz-VIDEO_SCANNER_HORZ_START, g_nVideoClockVert, addr, g_pVideoAddress);
|
||||
g_pVideoAddress += 14;
|
||||
uint8_t a = *MemGetAuxPtr(addr);
|
||||
uint8_t m = *MemGetMainPtr(addr);
|
||||
|
||||
if (RGB_Is560Mode() || (RGB_IsMixMode() && !((a | m) & 0x80)))
|
||||
{
|
||||
update7MonoPixels(a);
|
||||
update7MonoPixels(m);
|
||||
}
|
||||
else if (!RGB_IsMixMode() || (RGB_IsMixMode() && (a & m & 0x80)))
|
||||
{
|
||||
UpdateDHiResCell(g_nVideoClockHorz-VIDEO_SCANNER_HORZ_START, g_nVideoClockVert, addr, g_pVideoAddress, true, true);
|
||||
g_pVideoAddress += 14;
|
||||
}
|
||||
else // RGB_IsMixMode() && ((a ^ m) & 0x80)
|
||||
{
|
||||
if (a & 0x80) // RGB color, then monochrome
|
||||
{
|
||||
UpdateDHiResCell(g_nVideoClockHorz-VIDEO_SCANNER_HORZ_START, g_nVideoClockVert, addr, g_pVideoAddress, true ,false);
|
||||
g_pVideoAddress += 7;
|
||||
update7MonoPixels(m);
|
||||
}
|
||||
else // monochrome, then RGB color
|
||||
{
|
||||
update7MonoPixels(a);
|
||||
UpdateDHiResCell(g_nVideoClockHorz-VIDEO_SCANNER_HORZ_START, g_nVideoClockVert, addr, g_pVideoAddress, false, true);
|
||||
g_pVideoAddress += 7;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
updateVideoScannerHorzEOLSimple();
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "Memory.h" // MemGetMainPtr() MemGetAuxPtr()
|
||||
#include "Video.h"
|
||||
#include "RGBMonitor.h"
|
||||
#include "YamlHelper.h"
|
||||
|
||||
const int SRCOFFS_LORES = 0; // 0
|
||||
const int SRCOFFS_HIRES = (SRCOFFS_LORES + 16); // 16
|
||||
|
@ -542,30 +543,38 @@ void UpdateHiResCell (int x, int y, uint16_t addr, bgra_t *pVideoAddress)
|
|||
|
||||
//===========================================================================
|
||||
|
||||
void UpdateDHiResCell (int x, int y, uint16_t addr, bgra_t *pVideoAddress)
|
||||
#define COLOR ((xpixel + PIXEL) & 3)
|
||||
#define VALUE (dwordval >> (4 + PIXEL - COLOR))
|
||||
|
||||
void UpdateDHiResCell (int x, int y, uint16_t addr, bgra_t *pVideoAddress, bool updateAux, bool updateMain)
|
||||
{
|
||||
const int xpixel = x*14;
|
||||
|
||||
uint8_t *pAux = MemGetAuxPtr(addr);
|
||||
uint8_t *pAux = MemGetAuxPtr(addr);
|
||||
uint8_t *pMain = MemGetMainPtr(addr);
|
||||
|
||||
BYTE byteval1 = (x > 0) ? *(pMain-1) : 0;
|
||||
BYTE byteval2 = *pAux;
|
||||
BYTE byteval3 = *pMain;
|
||||
BYTE byteval4 = (x < 39) ? *(pAux+1) : 0;
|
||||
BYTE byteval1 = (x > 0) ? *(pMain-1) : 0;
|
||||
BYTE byteval2 = *pAux;
|
||||
BYTE byteval3 = *pMain;
|
||||
BYTE byteval4 = (x < 39) ? *(pAux+1) : 0;
|
||||
|
||||
DWORD dwordval = (byteval1 & 0x70) | ((byteval2 & 0x7F) << 7) |
|
||||
((byteval3 & 0x7F) << 14) | ((byteval4 & 0x07) << 21);
|
||||
|
||||
#define PIXEL 0
|
||||
#define COLOR ((xpixel + PIXEL) & 3)
|
||||
#define VALUE (dwordval >> (4 + PIXEL - COLOR))
|
||||
if (updateAux)
|
||||
{
|
||||
CopySource(7,2, SRCOFFS_DHIRES+10*HIBYTE(VALUE)+COLOR, LOBYTE(VALUE)<<1, pVideoAddress);
|
||||
pVideoAddress += 7;
|
||||
}
|
||||
#undef PIXEL
|
||||
|
||||
#define PIXEL 7
|
||||
CopySource(7,2, SRCOFFS_DHIRES+10*HIBYTE(VALUE)+COLOR, LOBYTE(VALUE)<<1, pVideoAddress+7);
|
||||
if (updateMain)
|
||||
{
|
||||
CopySource(7,2, SRCOFFS_DHIRES+10*HIBYTE(VALUE)+COLOR, LOBYTE(VALUE)<<1, pVideoAddress);
|
||||
}
|
||||
#undef PIXEL
|
||||
#undef COLOR
|
||||
#undef VALUE
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
@ -592,7 +601,7 @@ void UpdateLoResCell (int x, int y, uint16_t addr, bgra_t *pVideoAddress)
|
|||
// Tested with FT's Ansi Story
|
||||
void UpdateDLoResCell (int x, int y, uint16_t addr, bgra_t *pVideoAddress)
|
||||
{
|
||||
BYTE auxval = *MemGetAuxPtr(addr);
|
||||
BYTE auxval = *MemGetAuxPtr(addr);
|
||||
const BYTE mainval = *MemGetMainPtr(addr);
|
||||
|
||||
const BYTE auxval_h = auxval >> 4;
|
||||
|
@ -649,3 +658,98 @@ void VideoInitializeOriginal(baseColors_t pBaseNtscColors)
|
|||
PalIndex2RGB[HGR_VIOLET] = PalIndex2RGB[MAGENTA];
|
||||
#endif
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
#define DBG_SUPPORT_A2OSX
|
||||
|
||||
static UINT g_rgbFlags = 0;
|
||||
static UINT g_rgbMode = 0;
|
||||
static WORD g_rgbPrevAN3Addr = 0;
|
||||
|
||||
// Video7 RGB card:
|
||||
// . Clock in the !80COL state to define the 2 flags: F2, F1
|
||||
// . Clocking done by toggling AN3
|
||||
// . NB. There's a final 5th AN3 transition to set DHGR mode
|
||||
void RGB_SetVideoMode(WORD address)
|
||||
{
|
||||
if ((address&~1) != 0x5E) // 0x5E or 0x5F?
|
||||
return;
|
||||
|
||||
// Precondition before togglng AN3:
|
||||
// . Video7 manual: set 80STORE, but "King's Quest 1"(*) will re-enable RGB card's MIX mode with only VF_TEXT & VF_HIRES set!
|
||||
// . "Extended 80-Column Text/AppleColor Card" manual: TEXT off($C050), MIXED off($C052), HIRES on($C057)
|
||||
// . (*) "King's Quest 1" - see routine at 0x5FD7 (trigger by pressing TAB twice)
|
||||
if ((g_uVideoMode & (VF_MIXED|VF_HIRES)) != (VF_HIRES))
|
||||
{
|
||||
g_rgbMode = 0;
|
||||
g_rgbPrevAN3Addr = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (address == 0x5F && g_rgbPrevAN3Addr == 0x5E) // Check for AN3 clock transition
|
||||
{
|
||||
g_rgbFlags = (g_rgbFlags<<1) & 3;
|
||||
g_rgbFlags |= ((g_uVideoMode & VF_80COL) ? 0 : 1); // clock in !80COL
|
||||
g_rgbMode = g_rgbFlags; // latch F2,F1
|
||||
}
|
||||
|
||||
g_rgbPrevAN3Addr = address;
|
||||
}
|
||||
|
||||
bool RGB_Is140Mode(void) // Extended 80-Column Text/AppleColor Card's Mode 2
|
||||
{
|
||||
return g_rgbMode == 0;
|
||||
}
|
||||
|
||||
//bool RGB_Is160Mode(void) // Extended 80-Column Text/AppleColor Card: N/A
|
||||
//{
|
||||
// return g_rgbMode == 1;
|
||||
//}
|
||||
|
||||
bool RGB_IsMixMode(void) // Extended 80-Column Text/AppleColor Card's Mode 3
|
||||
{
|
||||
return g_rgbMode == 2;
|
||||
}
|
||||
|
||||
bool RGB_Is560Mode(void) // Extended 80-Column Text/AppleColor Card's Mode 1
|
||||
{
|
||||
return g_rgbMode == 3;
|
||||
}
|
||||
|
||||
void RGB_ResetState(void)
|
||||
{
|
||||
g_rgbFlags = 0;
|
||||
g_rgbMode = 0;
|
||||
g_rgbPrevAN3Addr = 0;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
#define SS_YAML_KEY_RGB_CARD "AppleColor RGB Adaptor"
|
||||
// NB. No version - this is determined by the parent card
|
||||
|
||||
#define SS_YAML_KEY_RGB_FLAGS "RGB mode flags"
|
||||
#define SS_YAML_KEY_RGB_MODE "RGB mode"
|
||||
#define SS_YAML_KEY_RGB_PREVIOUS_AN3 "Previous AN3"
|
||||
|
||||
void RGB_SaveSnapshot(YamlSaveHelper& yamlSaveHelper)
|
||||
{
|
||||
YamlSaveHelper::Label label(yamlSaveHelper, "%s:\n", SS_YAML_KEY_RGB_CARD);
|
||||
|
||||
yamlSaveHelper.SaveHexUint8(SS_YAML_KEY_RGB_FLAGS, g_rgbFlags);
|
||||
yamlSaveHelper.SaveHexUint8(SS_YAML_KEY_RGB_MODE, g_rgbMode);
|
||||
yamlSaveHelper.SaveHexUint8(SS_YAML_KEY_RGB_PREVIOUS_AN3, g_rgbPrevAN3Addr);
|
||||
}
|
||||
|
||||
void RGB_LoadSnapshot(YamlLoadHelper& yamlLoadHelper)
|
||||
{
|
||||
if (!yamlLoadHelper.GetSubMap(SS_YAML_KEY_RGB_CARD))
|
||||
throw std::string("Card: Expected key: ") + std::string(SS_YAML_KEY_RGB_CARD);
|
||||
|
||||
g_rgbFlags = yamlLoadHelper.LoadUint(SS_YAML_KEY_RGB_FLAGS);
|
||||
g_rgbMode = yamlLoadHelper.LoadUint(SS_YAML_KEY_RGB_MODE);
|
||||
g_rgbPrevAN3Addr = yamlLoadHelper.LoadUint(SS_YAML_KEY_RGB_PREVIOUS_AN3);
|
||||
|
||||
yamlLoadHelper.PopMap();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,17 @@
|
|||
void UpdateHiResCell(int x, int y, uint16_t addr, bgra_t *pVideoAddress);
|
||||
void UpdateDHiResCell(int x, int y, uint16_t addr, bgra_t *pVideoAddress);
|
||||
void UpdateDHiResCell (int x, int y, uint16_t addr, bgra_t *pVideoAddress, bool updateAux, bool updateMain);
|
||||
void UpdateLoResCell(int x, int y, uint16_t addr, bgra_t *pVideoAddress);
|
||||
void UpdateDLoResCell(int x, int y, uint16_t addr, bgra_t *pVideoAddress);
|
||||
|
||||
const UINT kNumBaseColors = 16;
|
||||
typedef bgra_t (*baseColors_t)[kNumBaseColors];
|
||||
void VideoInitializeOriginal(baseColors_t pBaseNtscColors);
|
||||
|
||||
void RGB_SetVideoMode(WORD address);
|
||||
bool RGB_Is140Mode(void);
|
||||
bool RGB_IsMixMode(void);
|
||||
bool RGB_Is560Mode(void);
|
||||
void RGB_ResetState(void);
|
||||
|
||||
void RGB_SaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
|
||||
void RGB_LoadSnapshot(class YamlLoadHelper& yamlLoadHelper);
|
||||
|
|
|
@ -220,14 +220,14 @@ static void ParseUnitApple2(YamlLoadHelper& yamlLoadHelper, UINT version)
|
|||
|
||||
// g_Apple2Type may've changed: so redraw frame (title, buttons, leds, etc)
|
||||
VideoReinitialize(); // g_CharsetType changed
|
||||
FrameUpdateApple2Type();
|
||||
FrameUpdateApple2Type(); // Calls VideoRedrawScreen() before the aux mem has been loaded (so if DHGR is enabled, then aux mem will be zeros at this stage)
|
||||
}
|
||||
|
||||
//---
|
||||
|
||||
static void ParseSlots(YamlLoadHelper& yamlLoadHelper, UINT version)
|
||||
static void ParseSlots(YamlLoadHelper& yamlLoadHelper, UINT unitVersion)
|
||||
{
|
||||
if (version != UNIT_SLOTS_VER)
|
||||
if (unitVersion != UNIT_SLOTS_VER)
|
||||
throw std::string(SS_YAML_KEY_UNIT ": Slots: Version mismatch");
|
||||
|
||||
while (1)
|
||||
|
@ -244,7 +244,7 @@ static void ParseSlots(YamlLoadHelper& yamlLoadHelper, UINT version)
|
|||
yamlLoadHelper.GetSubMap(scalar);
|
||||
|
||||
std::string card = yamlLoadHelper.LoadString(SS_YAML_KEY_CARD);
|
||||
UINT version = yamlLoadHelper.LoadUint(SS_YAML_KEY_VERSION);
|
||||
UINT cardVersion = yamlLoadHelper.LoadUint(SS_YAML_KEY_VERSION);
|
||||
|
||||
if (!yamlLoadHelper.GetSubMap(std::string(SS_YAML_KEY_STATE)))
|
||||
throw std::string(SS_YAML_KEY_UNIT ": Expected sub-map name: " SS_YAML_KEY_STATE);
|
||||
|
@ -254,42 +254,42 @@ static void ParseSlots(YamlLoadHelper& yamlLoadHelper, UINT version)
|
|||
|
||||
if (card == Printer_GetSnapshotCardName())
|
||||
{
|
||||
bRes = Printer_LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = Printer_LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
type = CT_GenericPrinter;
|
||||
}
|
||||
else if (card == sg_SSC.GetSnapshotCardName())
|
||||
{
|
||||
bRes = sg_SSC.LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = sg_SSC.LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
type = CT_SSC;
|
||||
}
|
||||
else if (card == sg_Mouse.GetSnapshotCardName())
|
||||
{
|
||||
bRes = sg_Mouse.LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = sg_Mouse.LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
type = CT_MouseInterface;
|
||||
}
|
||||
else if (card == Z80_GetSnapshotCardName())
|
||||
{
|
||||
bRes = Z80_LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = Z80_LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
type = CT_Z80;
|
||||
}
|
||||
else if (card == MB_GetSnapshotCardName())
|
||||
{
|
||||
bRes = MB_LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = MB_LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
type = CT_MockingboardC;
|
||||
}
|
||||
else if (card == Phasor_GetSnapshotCardName())
|
||||
{
|
||||
bRes = Phasor_LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = Phasor_LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
type = CT_Phasor;
|
||||
}
|
||||
else if (card == DiskGetSnapshotCardName())
|
||||
{
|
||||
bRes = DiskLoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = DiskLoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
type = CT_Disk2;
|
||||
}
|
||||
else if (card == HD_GetSnapshotCardName())
|
||||
{
|
||||
bRes = HD_LoadSnapshot(yamlLoadHelper, slot, version, g_strSaveStatePath);
|
||||
bRes = HD_LoadSnapshot(yamlLoadHelper, slot, cardVersion, g_strSaveStatePath);
|
||||
m_ConfigNew.m_bEnableHDD = true;
|
||||
type = CT_GenericHDD;
|
||||
}
|
||||
|
@ -298,14 +298,14 @@ static void ParseSlots(YamlLoadHelper& yamlLoadHelper, UINT version)
|
|||
type = CT_LanguageCard;
|
||||
SetExpansionMemType(type);
|
||||
CreateLanguageCard();
|
||||
bRes = GetLanguageCard()->LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = GetLanguageCard()->LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
}
|
||||
else if (card == Saturn128K::GetSnapshotCardName())
|
||||
{
|
||||
type = CT_Saturn128K;
|
||||
SetExpansionMemType(type);
|
||||
CreateLanguageCard();
|
||||
bRes = GetLanguageCard()->LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
bRes = GetLanguageCard()->LoadSnapshot(yamlLoadHelper, slot, cardVersion);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -331,22 +331,22 @@ static void ParseUnit(void)
|
|||
YamlLoadHelper yamlLoadHelper(yamlHelper);
|
||||
|
||||
std::string unit = yamlLoadHelper.LoadString(SS_YAML_KEY_TYPE);
|
||||
UINT version = yamlLoadHelper.LoadUint(SS_YAML_KEY_VERSION);
|
||||
UINT unitVersion = yamlLoadHelper.LoadUint(SS_YAML_KEY_VERSION);
|
||||
|
||||
if (!yamlLoadHelper.GetSubMap(std::string(SS_YAML_KEY_STATE)))
|
||||
throw std::string(SS_YAML_KEY_UNIT ": Expected sub-map name: " SS_YAML_KEY_STATE);
|
||||
|
||||
if (unit == GetSnapshotUnitApple2Name())
|
||||
{
|
||||
ParseUnitApple2(yamlLoadHelper, version);
|
||||
ParseUnitApple2(yamlLoadHelper, unitVersion);
|
||||
}
|
||||
else if (unit == MemGetSnapshotUnitAuxSlotName())
|
||||
{
|
||||
MemLoadSnapshotAux(yamlLoadHelper, version);
|
||||
MemLoadSnapshotAux(yamlLoadHelper, unitVersion);
|
||||
}
|
||||
else if (unit == GetSnapshotUnitSlotsName())
|
||||
{
|
||||
ParseSlots(yamlLoadHelper, version);
|
||||
ParseSlots(yamlLoadHelper, unitVersion);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -37,6 +37,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
#include "Registry.h"
|
||||
#include "Video.h"
|
||||
#include "NTSC.h"
|
||||
#include "RGBMonitor.h"
|
||||
|
||||
#include "../resource/resource.h"
|
||||
#include "Configuration/PropertySheet.h"
|
||||
|
@ -641,8 +642,9 @@ void VideoResetState ()
|
|||
|
||||
NTSC_SetVideoTextMode( 40 );
|
||||
NTSC_SetVideoMode( g_uVideoMode );
|
||||
}
|
||||
|
||||
RGB_ResetState();
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
|
@ -670,6 +672,9 @@ BYTE VideoSetMode(WORD, WORD address, BYTE write, BYTE, ULONG uExecutedCycles)
|
|||
case 0x5F: if (!IS_APPLE2) g_uVideoMode &= ~VF_DHIRES; break;
|
||||
}
|
||||
|
||||
if (!IS_APPLE2)
|
||||
RGB_SetVideoMode(address);
|
||||
|
||||
NTSC_SetVideoMode( g_uVideoMode );
|
||||
|
||||
return MemReadFloatingBus(uExecutedCycles);
|
||||
|
|
Loading…
Add table
Reference in a new issue