Update the comment about what isn't fully emulated & improve reset re-init.
This commit is contained in:
parent
d69fbd5c28
commit
37c031c193
|
@ -25,9 +25,28 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
*
|
||||
* Author: various
|
||||
*
|
||||
* Note: Here's what isn't fully emulated:
|
||||
* From UTAII 5-42 (Application Note: Multiple RAM Card Configurations)
|
||||
* . For II/II, INHIBIT' (disable motherboard ROM for $D000-$FFFF) and Apple's 16K RAM card isn't correct:
|
||||
* . "If the expansion RAM is not enabled on a RAM card, the ROM on the card will respond to $F800-$FFFF addressing - period."
|
||||
* . In UTAIIe 5-24, Sather describes this as "a particularly nettlesome associated fact"!
|
||||
* . NB. "When INHIBIT' is low on the Apple IIe, all motherboard ROM is disabled, including high RAM."
|
||||
* . Note: I assume a Saturn card "will release the $F800-$FFFF range when RAM on the card is disabled", since there's no F8 ROM on the Saturn.
|
||||
* . Summary: for a II/II+ with an *Apple* 16K RAM card in slot 0, when (High) RAM is disabled, then:
|
||||
* . ROM on the slot 0 card will respond, along with any Saturn card(s) in other slots which pull INHIBIT' low.
|
||||
* . *** AppleWin emulates a slot 0 LC as if the Sather h/w mod had been applied.
|
||||
* . [UTAII 5-42] "Enable two RAM cards for writing simultaneously..."
|
||||
* "both RAM cards will accept the data from a single store instruction to the $D000-$FFFF range"
|
||||
* *** AppleWin only stores to the last accessed RAM card.
|
||||
* . Presumably enabling two RAM cards for reading RAM will both respond and the result is the OR-sum?
|
||||
* *** AppleWin only loads from the last accessed RAM card.
|
||||
* . The 16K RAM card has a socket for an F8 ROM, whereas the Saturn card doesn't.
|
||||
* Also see UTAII 6-6, where Firmware card and 16K RAM card are described.
|
||||
* . Sather refers to the Apple 16K RAM card, which is just the Apple Language Card.
|
||||
*
|
||||
* Consider adding a LangauageCardManager class:
|
||||
* Note: Consider adding a LangauageCardManager class:
|
||||
* . would manage g_lastSlotToSetMainMemLC (so move out of Memory.cpp)
|
||||
* . would manage reset for all cards (eg. II/II+'s LC is unaffected, whereas //e's LC is)
|
||||
* . assist with debugger's display of "sNN" for active 16K bank
|
||||
* Currently conclude that there's not much point.
|
||||
*/
|
||||
|
|
|
@ -1139,9 +1139,12 @@ static void UpdatePaging(BOOL initialize);
|
|||
// . CtrlReset() Soft-reset (Ctrl+Reset) for //e
|
||||
void MemResetPaging()
|
||||
{
|
||||
ResetPaging(0); // Initialize=0
|
||||
ResetPaging(FALSE); // Initialize=0
|
||||
}
|
||||
|
||||
// Call by:
|
||||
// . MemResetPaging() -> ResetPaging(FALSE)
|
||||
// . MemReset() -> ResetPaging(TRUE)
|
||||
static void ResetPaging(BOOL initialize)
|
||||
{
|
||||
SetLastRamWrite(0);
|
||||
|
@ -1151,6 +1154,19 @@ static void ResetPaging(BOOL initialize)
|
|||
else
|
||||
SetMemMode(LanguageCardUnit::kMemModeInitialState);
|
||||
|
||||
// For power on: card's ctor will have set card's local memmode to LanguageCardUnit::kMemModeInitialState.
|
||||
// For reset: II/II+ unaffected, so only for //e or above.
|
||||
if (IsAppleIIeOrAbove(GetApple2Type()))
|
||||
{
|
||||
if (GetCardMgr().QuerySlot(SLOT0) != CT_Empty) // LC or Saturn
|
||||
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(SLOT0)).SetLCMemMode(GetMemMode() & MF_LANGCARD_MASK);
|
||||
for (UINT i = SLOT1; i < NUM_SLOTS; i++)
|
||||
{
|
||||
if (GetCardMgr().QuerySlot(i) == CT_Saturn128K)
|
||||
dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(i)).SetLCMemMode(GetMemMode() & MF_LANGCARD_MASK);
|
||||
}
|
||||
}
|
||||
|
||||
UpdatePaging(initialize);
|
||||
}
|
||||
|
||||
|
|
|
@ -549,6 +549,7 @@ void CtrlReset()
|
|||
if (!IS_APPLE2)
|
||||
{
|
||||
// For A][ & A][+, reset doesn't reset the LC switches (UTAII:5-29)
|
||||
// TODO: What about Saturn cards? Presumably the same as the A][ & A][+ slot0 LC?
|
||||
MemResetPaging();
|
||||
|
||||
// For A][ & A][+, reset doesn't reset the video mode (UTAII:4-4)
|
||||
|
|
Loading…
Reference in New Issue