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

Function ReadByteFromMemoryWithPrefix

source/Debugger/Debugger_Display.cpp:2130–2193  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2128}
2129
2130static BYTE ReadByteFromMemoryWithPrefix(const WORD iAddress, AddressPrefix_t& addrPrefix)
2131{
2132 BYTE nData = 0;
2133
2134 if (addrPrefix.nSlot == AddressPrefix_t::kSlotInvalid
2135 && addrPrefix.nBank == AddressPrefix_t::kBankInvalid
2136 && addrPrefix.nLangCard == AddressPrefix_t::kLangCardInvalid
2137 && addrPrefix.bIsROM == false)
2138 {
2139 // No prefix, so just read from current MMU's view
2140 nData = ReadByteFromMemory(iAddress);
2141 }
2142 else if (addrPrefix.bIsROM)
2143 {
2144 nData = ReadByteFromROM(iAddress);
2145 }
2146 else
2147 {
2148 if (addrPrefix.nSlot == AddressPrefix_t::kSlotInvalid) // Main, Aux or RamWorks
2149 {
2150 uint16_t physicalAddrOffset = iAddress;
2151 if (addrPrefix.nLangCard == 1 && iAddress >= 0xD000 && iAddress <= 0xDFFF)
2152 physicalAddrOffset = iAddress - 0x1000;
2153
2154 // Default to main mem, if LC is specified, but bank isn't
2155 int nBank = addrPrefix.nBank;
2156 if (addrPrefix.nLangCard != AddressPrefix_t::kLangCardInvalid && addrPrefix.nBank == AddressPrefix_t::kBankInvalid)
2157 nBank = 0x00;
2158
2159 LPBYTE pMem = NULL;
2160 if (nBank == 0x00)
2161 pMem = MemGetMainPtrWithLC(physicalAddrOffset);
2162 else if (nBank != AddressPrefix_t::kBankInvalid)
2163 pMem = MemGetAuxPtrWithLC(physicalAddrOffset);
2164
2165 if (pMem)
2166 nData = *pMem;
2167 else
2168 nData = ReadByteFromMemory(iAddress);
2169 }
2170 else // Saturn (or slot 0 LC)
2171 {
2172 if (iAddress < 0xD000)
2173 {
2174 nData = ReadByteFromMemory(iAddress);
2175 }
2176 else
2177 {
2178 // Default to bank-0, if bank isn't specified
2179 int nBank = addrPrefix.nBank;
2180 if (addrPrefix.nBank == AddressPrefix_t::kBankInvalid)
2181 nBank = 0x0;
2182
2183 uint16_t physicalAddrOffset = iAddress;
2184 if (addrPrefix.nLangCard == 1 && iAddress >= 0xD000 && iAddress <= 0xDFFF)
2185 physicalAddrOffset = iAddress - 0x1000;
2186
2187 nData = GetCardMgr().GetLanguageCardMgr().ReadByte(addrPrefix.nSlot, nBank, physicalAddrOffset);

Callers 2

DrawMemoryFunction · 0.85
DrawSubWindow_DataFunction · 0.85

Calls 5

ReadByteFromMemoryFunction · 0.85
ReadByteFromROMFunction · 0.85
MemGetMainPtrWithLCFunction · 0.85
MemGetAuxPtrWithLCFunction · 0.85
ReadByteMethod · 0.80

Tested by

no test coverage detected