mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-07-25 16:24:31 +00:00
Apple II: Language Card and Saturn support for slot-0 (PR #589)
Support for #408: * added slot-0 LC and Saturn 128K for Apple II and II+ * added save-state support - for slot-0 LC/Saturn, save the LC state in the slot-0 card, not the //e MMU; and switch to a new Apple2 unit ver2 * added g_Slot0, g_SlotAux * added new LanguageCard.cpp/h to project and moved Saturn code into these new files. * updated VS2013,2015,2017 projects
This commit is contained in:
@@ -37,6 +37,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#include "Frame.h"
|
||||
#include "Joystick.h"
|
||||
#include "Keyboard.h"
|
||||
#include "LanguageCard.h"
|
||||
#include "Memory.h"
|
||||
#include "Mockingboard.h"
|
||||
#include "MouseInterface.h"
|
||||
@@ -64,7 +65,7 @@ static YamlHelper yamlHelper;
|
||||
|
||||
#define SS_FILE_VER 2
|
||||
|
||||
#define UNIT_APPLE2_VER 1
|
||||
#define UNIT_APPLE2_VER 2
|
||||
#define UNIT_SLOTS_VER 1
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@@ -323,7 +324,7 @@ static UINT ParseFileHdr(void)
|
||||
|
||||
static void ParseUnitApple2(YamlLoadHelper& yamlLoadHelper, UINT version)
|
||||
{
|
||||
if (version != UNIT_APPLE2_VER)
|
||||
if (version == 0 || version > UNIT_APPLE2_VER)
|
||||
throw std::string(SS_YAML_KEY_UNIT ": Apple2: Version mismatch");
|
||||
|
||||
std::string model = yamlLoadHelper.LoadString(SS_YAML_KEY_MODEL);
|
||||
@@ -337,7 +338,7 @@ static void ParseUnitApple2(YamlLoadHelper& yamlLoadHelper, UINT version)
|
||||
KeybLoadSnapshot(yamlLoadHelper);
|
||||
SpkrLoadSnapshot(yamlLoadHelper);
|
||||
VideoLoadSnapshot(yamlLoadHelper);
|
||||
MemLoadSnapshot(yamlLoadHelper);
|
||||
MemLoadSnapshot(yamlLoadHelper, version);
|
||||
|
||||
// g_Apple2Type may've changed: so redraw frame (title, buttons, leds, etc)
|
||||
VideoReinitialize(); // g_CharsetType changed
|
||||
@@ -358,7 +359,8 @@ static void ParseSlots(YamlLoadHelper& yamlLoadHelper, UINT version)
|
||||
break; // done all slots
|
||||
|
||||
const int slot = strtoul(scalar.c_str(), NULL, 10); // NB. aux slot supported as a different "unit"
|
||||
if (slot < 1 || slot > 7)
|
||||
// NB. slot-0 only supported for Apple II or II+ (or similar clones)
|
||||
if (slot < 0 || slot > 7)
|
||||
throw std::string("Slots: Invalid slot #: ") + scalar;
|
||||
|
||||
yamlLoadHelper.GetSubMap(scalar);
|
||||
@@ -414,6 +416,18 @@ static void ParseSlots(YamlLoadHelper& yamlLoadHelper, UINT version)
|
||||
m_ConfigNew.m_bEnableHDD = true;
|
||||
type = CT_GenericHDD;
|
||||
}
|
||||
else if (card == LanguageCardSlot0::GetSnapshotCardName())
|
||||
{
|
||||
type = CT_LanguageCard;
|
||||
SetExpansionMemType(type);
|
||||
bRes = GetLanguageCard()->LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
}
|
||||
else if (card == Saturn128K::GetSnapshotCardName())
|
||||
{
|
||||
type = CT_Saturn128K;
|
||||
SetExpansionMemType(type);
|
||||
bRes = GetLanguageCard()->LoadSnapshot(yamlLoadHelper, slot, version);
|
||||
}
|
||||
else
|
||||
{
|
||||
bIsCardSupported = false;
|
||||
@@ -477,6 +491,7 @@ static void Snapshot_LoadState_v2(void)
|
||||
//
|
||||
|
||||
CConfigNeedingRestart ConfigOld;
|
||||
//ConfigOld.m_Slot[0] = CT_LanguageCard; // fixme: II/II+=LC, //e=empty
|
||||
ConfigOld.m_Slot[1] = CT_GenericPrinter; // fixme
|
||||
ConfigOld.m_Slot[2] = CT_SSC; // fixme
|
||||
//ConfigOld.m_Slot[3] = CT_Uthernet; // todo
|
||||
@@ -489,7 +504,6 @@ static void Snapshot_LoadState_v2(void)
|
||||
m_ConfigNew.m_SlotAux = CT_Empty;
|
||||
m_ConfigNew.m_bEnableHDD = false;
|
||||
//m_ConfigNew.m_bEnableTheFreezesF8Rom = ?; // todo: when support saving config
|
||||
//m_ConfigNew.m_bEnhanceDisk = ?; // todo: when support saving config
|
||||
|
||||
MemReset();
|
||||
PravetsReset();
|
||||
@@ -591,6 +605,9 @@ void Snapshot_SaveState(void)
|
||||
yamlSaveHelper.UnitHdr(GetSnapshotUnitSlotsName(), UNIT_SLOTS_VER);
|
||||
YamlSaveHelper::Label state(yamlSaveHelper, "%s:\n", SS_YAML_KEY_STATE);
|
||||
|
||||
if (IsApple2PlusOrClone(GetApple2Type()))
|
||||
GetLanguageCard()->SaveSnapshot(yamlSaveHelper); // Language Card or Saturn 128K
|
||||
|
||||
Printer_SaveSnapshot(yamlSaveHelper);
|
||||
|
||||
sg_SSC.SaveSnapshot(yamlSaveHelper);
|
||||
|
Reference in New Issue
Block a user