@@ -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
270271unsigned 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
301281void MemWrite8 (unsigned char data ,unsigned short address )
0 commit comments