public byte getMemory(int address, boolean shouldNotify) {
        if (shouldNotify && _readObserver != null) {
            _readObserver.updateReadMemory(address);
        }
        if (isCPUMapped(address)) {
            return getCPUMappedMemory(address);
        } else if (_ppu.isReadMapped(address)) {
            return _ppu.getMappedMemory(address);
        } else if (_controllers.isReadMapped(address)) {
            return _controllers.getMappedMemory(address);
        } else if (_apu.isReadMapped(address)) {
            return _apu.getMappedMemory(address);
        } else if (_mapper.isReadMapped(address)) {
            return _mapper.getMappedMemory(address);
        } else {
            return _memoryData[address];
        }
    }