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

Method LoadSnapshot

source/SSI263.cpp:1048–1124  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1046}
1047
1048void SSI263::LoadSnapshot(YamlLoadHelper& yamlLoadHelper, PHASOR_MODE mode, UINT version, UINT subunit)
1049{
1050 if (!yamlLoadHelper.GetSubMap(SS_YAML_KEY_SSI263))
1051 throw std::runtime_error("Card: Expected key: " SS_YAML_KEY_SSI263);
1052
1053 std::string type = TYPE_SSI263_P; // Default prior to v14
1054 if (version >= 14)
1055 type = yamlLoadHelper.LoadString(SS_YAML_KEY_SSI263_TYPE);
1056
1057 if (type == TYPE_SSI263_EMPTY)
1058 m_type = SSI263Empty;
1059 else if (type == TYPE_SSI263_P)
1060 m_type = SSI263P;
1061 else // TYPE_SSI263_AP
1062 m_type = SSI263AP;
1063
1064 if (m_type != SSI263Empty)
1065 {
1066 m_durationPhoneme = yamlLoadHelper.LoadUint(SS_YAML_KEY_SSI263_REG_DUR_PHON);
1067 m_inflection = yamlLoadHelper.LoadUint(SS_YAML_KEY_SSI263_REG_INF);
1068 m_rateInflection = yamlLoadHelper.LoadUint(SS_YAML_KEY_SSI263_REG_RATE_INF);
1069 m_ctrlArtAmp = yamlLoadHelper.LoadUint(SS_YAML_KEY_SSI263_REG_CTRL_ART_AMP);
1070 m_filterFreq = yamlLoadHelper.LoadUint(SS_YAML_KEY_SSI263_REG_FILTER_FREQ);
1071 m_currentMode.mode = yamlLoadHelper.LoadUint(SS_YAML_KEY_SSI263_CURRENT_MODE);
1072
1073 if (version >= 7 && version < 13)
1074 yamlLoadHelper.LoadBool(SS_YAML_KEY_SSI263_ACTIVE_PHONEME); // Consume redundant data
1075
1076 if (version < 12)
1077 {
1078 if (m_currentMode.function == 0) // invalid function (but in older versions this was accepted)
1079 {
1080 m_currentMode.function = MODE_PHONEME_TRANSITIONED_INFLECTION >> DURATION_MODE_SHIFT; // Typically this is used
1081 m_currentMode.enableInts = 0;
1082 }
1083 else
1084 {
1085 m_currentMode.enableInts = 1;
1086 }
1087 }
1088
1089 if ((m_ctrlArtAmp & CONTROL_MASK) == 0)
1090 m_currentActivePhoneme = m_durationPhoneme & PHONEME_MASK;
1091 }
1092
1093 yamlLoadHelper.PopMap();
1094
1095 //
1096
1097 _ASSERT(m_device != BYTE(-1));
1098 SetCardMode(mode);
1099
1100 // Only need to directly assert IRQ for Phasor mode (for Mockingboard mode it's done via UpdateIFR() in parent)
1101 if (m_cardMode == PH_Phasor && IsPhonemeActive() && m_currentMode.enableInts && m_currentMode.D7 == 1)
1102 CpuIrqAssert(IS_SPEECH);
1103
1104 if (subunit == 0) // has SC01
1105 SC01_LoadSnapshot(yamlLoadHelper, version);

Callers

nothing calls this directly

Calls 6

CpuIrqAssertFunction · 0.85
LoadStringMethod · 0.80
LoadUintMethod · 0.80
LoadBoolMethod · 0.80
PopMapMethod · 0.80
GetSubMapMethod · 0.45

Tested by

no test coverage detected