Skip to content

Commit 683712b

Browse files
author
ejaquay
committed
Allow debugger to read cartridge addresses
SafeMemRead8 used by debugger code modified to allow program pak reads. It still filters 0xFF00 - 0xFF90 to prevent port reads that may change emulation state.
1 parent 115f443 commit 683712b

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)