Skip to content

Commit 1bb5db5

Browse files
authored
Merge pull request #239 from ejaquay/safememread
Allow debugger to read cartridge addresses
2 parents 115f443 + 683712b commit 1bb5db5

File tree

1 file changed

+7
-27
lines changed

1 file changed

+7
-27
lines changed

tcc1014mmu.c

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -267,35 +267,15 @@ unsigned char MemRead8( unsigned short address)
267267
return( PackMem8Read( MemPageOffsets[MmuRegisters[MmuState][address>>13]] + (address & 0x1FFF) ));
268268
}
269269

270+
// Debugger does not want to do port reads that change state
270271
unsigned char SafeMemRead8(unsigned short address)
271272
{
272-
// Only read memory that doesn't change the state of the machine.
273-
// Ram is ok.
274-
// Sam registers are ok.
275-
// Gime registers are ok.
276-
// Carts are not ok - no idea what the external address will do.
277-
if (mem_initializing) return 0; // To prevent access exceptions
278-
if (address < 0xFE00)
279-
{
280-
if (MemPageOffsets[MmuRegisters[MmuState][address >> 13]] == 1)
281-
return(MemPages[MmuRegisters[MmuState][address >> 13]][address & 0x1FFF]);
282-
return memory[address];
283-
}
284-
if (address > 0xFEFF)
285-
{
286-
// Ok to read SAM.
287-
if (address >= 0xFFC0 && address <= 0xFFFF)
288-
return (port_read(address));
289-
// Ok to read GIME.
290-
if (address >= 0xFF90 && address <= 0xFFBF)
291-
return (port_read(address));
292-
return memory[address];
293-
}
294-
if (RamVectors) //Address must be $FE00 - $FEFF
295-
return(memory[(0x2000 * VectorMask[CurrentRamConfig]) | (address & 0x1FFF)]);
296-
if (MemPageOffsets[MmuRegisters[MmuState][address >> 13]] == 1)
297-
return(MemPages[MmuRegisters[MmuState][address >> 13]][address & 0x1FFF]);
298-
return memory[address];
273+
// Do nothing if memory is in initializing state
274+
if (mem_initializing) return 0;
275+
// Filter port reads that are not GIME or SAM
276+
if ((address > 0xFEFF) && (address < 0xFF90)) return memory[address];
277+
// Otherwise use normal MMU MemRead8
278+
return MemRead8(address);
299279
}
300280

301281
void MemWrite8(unsigned char data,unsigned short address)

0 commit comments

Comments
 (0)