Skip to content

Commit a775222

Browse files
authored
Merge pull request #398 from AppleWin/master
Debugger: support slot 0 LC, eg. for 'm1 s0/lc1/d000' etc
2 parents c18a578 + 30ef6bb commit a775222

3 files changed

Lines changed: 28 additions & 8 deletions

File tree

source/Debugger/Debugger_Display.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2167,7 +2167,7 @@ static BYTE ReadByteFromMemoryWithPrefix(const WORD iAddress, AddressPrefix_t& a
21672167
else
21682168
nData = ReadByteFromMemory(iAddress);
21692169
}
2170-
else // Saturn
2170+
else // Saturn (or slot 0 LC)
21712171
{
21722172
if (iAddress < 0xD000)
21732173
{
@@ -2184,7 +2184,7 @@ static BYTE ReadByteFromMemoryWithPrefix(const WORD iAddress, AddressPrefix_t& a
21842184
if (addrPrefix.nLangCard == 1 && iAddress >= 0xD000 && iAddress <= 0xDFFF)
21852185
physicalAddrOffset = iAddress - 0x1000;
21862186

2187-
nData = GetCardMgr().GetLanguageCardMgr().ReadByteFromSaturn(addrPrefix.nSlot, nBank, physicalAddrOffset);
2187+
nData = GetCardMgr().GetLanguageCardMgr().ReadByte(addrPrefix.nSlot, nBank, physicalAddrOffset);
21882188
}
21892189
}
21902190
}

source/LanguageCard.cpp

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,19 @@ bool LanguageCardUnit::IsOpcodeRMWabs(WORD addr)
199199
return false;
200200
}
201201

202+
uint8_t LanguageCardUnit::ReadByte(uint16_t phyAddr)
203+
{
204+
if (phyAddr < 0xC000)
205+
return 0;
206+
207+
// LC1-4K: physical addr [$C000-CFFF] - $C000 -> [$0000-0FFF]
208+
// LC2-4K & 8K: physical addr [$D000-FFFF] - $C000 -> [$1000-3FFF]
209+
if (QueryType() == CT_LanguageCardIIe)
210+
return *MemGetMainPtrWithLC(phyAddr);
211+
else
212+
return m_pMemory[phyAddr - 0xC000];
213+
}
214+
202215
//-------------------------------------
203216

204217
LanguageCardSlot0 * LanguageCardSlot0::create(UINT slot)
@@ -710,19 +723,25 @@ bool LanguageCardManager::SetLanguageCard(SS_CARDTYPE type)
710723
return true;
711724
}
712725

713-
uint8_t LanguageCardManager::ReadByteFromSaturn(uint8_t slot, uint8_t bank, uint16_t phyAddr)
726+
uint8_t LanguageCardManager::ReadByte(uint8_t slot, uint8_t bank, uint16_t phyAddr)
714727
{
715728
if (slot > SLOT7)
716729
{
717730
_ASSERT(0);
718731
return 0;
719732
}
720733

721-
if (GetCardMgr().QuerySlot(slot) != CT_Saturn128K)
734+
if (GetCardMgr().QuerySlot(slot) == CT_LanguageCard || GetCardMgr().QuerySlot(slot) == CT_LanguageCardIIe)
722735
{
723-
_ASSERT(0);
724-
return 0;
736+
_ASSERT(slot == SLOT0);
737+
_ASSERT(bank == 0);
738+
return dynamic_cast<LanguageCardUnit&>(GetCardMgr().GetRef(slot)).ReadByte(phyAddr);
739+
}
740+
else if (GetCardMgr().QuerySlot(slot) == CT_Saturn128K)
741+
{
742+
return dynamic_cast<Saturn128K&>(GetCardMgr().GetRef(slot)).ReadByteFromBank(bank, phyAddr);
725743
}
726744

727-
return dynamic_cast<Saturn128K&>(GetCardMgr().GetRef(slot)).ReadByteFromBank(bank, phyAddr);
745+
_ASSERT(0);
746+
return 0;
728747
}

source/LanguageCard.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class LanguageCardUnit : public Card
3131
void SetLCMemMode(UINT memMode) { m_memMode = memMode; }
3232
SS_CARDTYPE GetMemoryType(void) { return QueryType(); }
3333
bool IsOpcodeRMWabs(WORD addr);
34+
uint8_t ReadByte(uint16_t phyAddr);
3435

3536
static BYTE __stdcall IO(WORD PC, WORD uAddr, BYTE bWrite, BYTE uValue, ULONG nExecutedCycles);
3637

@@ -141,7 +142,7 @@ class LanguageCardManager
141142
void SetMemMode(const uint8_t slot);
142143
void SetMemModeFromSnapshot(void);
143144

144-
uint8_t ReadByteFromSaturn(uint8_t slot, uint8_t bank, uint16_t phyAddr);
145+
uint8_t ReadByte(uint8_t slot, uint8_t bank, uint16_t phyAddr);
145146

146147
private:
147148
LanguageCardUnit* m_pLanguageCard;

0 commit comments

Comments
 (0)