MCPcopy Create free account
hub / github.com/AppleWin/AppleWin / MemLoadSnapshot

Function MemLoadSnapshot

source/Memory.cpp:2865–2960  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2863}
2864
2865bool MemLoadSnapshot(YamlLoadHelper& yamlLoadHelper, UINT unitVersion)
2866{
2867 if (!yamlLoadHelper.GetSubMap(MemGetSnapshotStructName()))
2868 return false;
2869
2870 // Create default LC type for AppleII machine (do prior to loading saved LC state)
2871 ResetDefaultMachineMemTypes();
2872 if (unitVersion == 1)
2873 g_MemTypeAppleII = CT_LanguageCard; // version=1: original Apple II always has a LC
2874 else
2875 g_MemTypeAppleIIPlus = CT_Empty; // version=2+: Apple II/II+ initially start with slot-0 empty
2876 SetExpansionMemTypeDefault();
2877 CreateLanguageCard(); // Create default LC now for: (a) //e which has no slot-0 LC (so this is final)
2878 // (b) II/II+ which get re-created later if slot-0 has a card
2879
2880 //
2881
2882 IO_SELECT = (BYTE) yamlLoadHelper.LoadUint(SS_YAML_KEY_IOSELECT);
2883 INTC8ROM = yamlLoadHelper.LoadUint(SS_YAML_KEY_IOSELECT_INT) ? true : false;
2884 g_eExpansionRomType = (eExpansionRomType) yamlLoadHelper.LoadUint(SS_YAML_KEY_EXPANSIONROMTYPE);
2885 g_uPeripheralRomSlot = yamlLoadHelper.LoadUint(SS_YAML_KEY_PERIPHERALROMSLOT);
2886
2887 if (unitVersion == 1)
2888 {
2889 UINT uMemMode = yamlLoadHelper.LoadUint(SS_YAML_KEY_MEMORYMODE) ^ MF_INTCXROM; // Convert from SLOTCXROM to INTCXROM
2890 SetMemMode(uMemMode);
2891
2892 if (GetCardMgr().GetLanguageCardMgr().GetLanguageCard())
2893 GetCardMgr().GetLanguageCardMgr().GetLanguageCard()->SetLCMemMode(uMemMode & MF_LANGCARD_MASK);
2894
2895 SetLastRamWrite(yamlLoadHelper.LoadUint(SS_YAML_KEY_LASTRAMWRITE) ? TRUE : FALSE);
2896 }
2897 else
2898 {
2899 UINT uMemMode = yamlLoadHelper.LoadUint(SS_YAML_KEY_MEMORYMODE);
2900 if (IsApple2PlusOrClone(GetApple2Type()) || unitVersion >= 9)
2901 uMemMode &= ~MF_LANGCARD_MASK; // For II,II+: clear LC bits - set later by slot-0 LC or Saturn (or some other slot-n Saturn)
2902 // For //e,//c: (>=v9) clear LC bits - set later after reading all cards and we know which card contributes these bits
2903 // For //e (<9): don't clear, as only old versions only supported the IIe LC from the MMU
2904 SetMemMode(uMemMode);
2905
2906 if (!IsApple2PlusOrClone(GetApple2Type())) // NB. These are set later for II,II+ by slot-0 LC or Saturn
2907 {
2908 if (unitVersion < 9)
2909 {
2910 GetCardMgr().GetLanguageCardMgr().GetLanguageCard()->SetLCMemMode(uMemMode & MF_LANGCARD_MASK);
2911 }
2912 else
2913 {
2914 UINT LCMemMode = yamlLoadHelper.LoadUint(SS_YAML_KEY_MMULCMODE);
2915 GetCardMgr().GetLanguageCardMgr().GetLanguageCard()->SetLCMemMode(LCMemMode);
2916 }
2917 SetLastRamWrite(yamlLoadHelper.LoadUint(SS_YAML_KEY_LASTRAMWRITE) ? TRUE : FALSE);
2918 }
2919 }
2920
2921 if (unitVersion >= 3)
2922 {

Callers 1

ParseUnitApple2Function · 0.85

Calls 15

CreateLanguageCardFunction · 0.85
SetMemModeFunction · 0.85
SetLastRamWriteFunction · 0.85
IsApple2PlusOrCloneFunction · 0.85
GetApple2TypeFunction · 0.85
LoadUintMethod · 0.80
GetLanguageCardMethod · 0.80
SetLCMemModeMethod · 0.80
LoadBoolMethod · 0.80

Tested by

no test coverage detected