diff options
Diffstat (limited to 'src/devices/base/generic_memory.cpp')
-rw-r--r-- | src/devices/base/generic_memory.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/devices/base/generic_memory.cpp b/src/devices/base/generic_memory.cpp new file mode 100644 index 0000000..78c4dd6 --- /dev/null +++ b/src/devices/base/generic_memory.cpp @@ -0,0 +1,48 @@ +/*************************************************************************** + * Copyright (C) 2006 Nicolas Hadacek <[email protected]> * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + ***************************************************************************/ +#include "generic_memory.h" + +bool Device::Memory::load(QTextStream &stream, QStringList &errors, + WarningTypes &warningTypes, QStringList &warnings) +{ + HexBuffer hb; + if ( !hb.load(stream, errors) ) return false; + warningTypes = fromHexBuffer(hb, warnings); + return true; +} + +Device::Memory::WarningTypes Device::Memory::fromHexBuffer(const HexBuffer &hb, QStringList &warnings) +{ + clear(); + WarningTypes result = NoWarning; + warnings.clear(); + QMap<uint, bool> inRange; + fromHexBuffer(hb, result, warnings, inRange); + + // check that all values in FragBuffer are within memory ranges + HexBuffer::const_iterator it = hb.begin(); + for (; it!=hb.end(); ++it) { + if ( !it.data().isInitialized() || inRange[it.key()] ) continue; + if ( !(result & ValueOutsideRange) ) { + result |= ValueOutsideRange; + warnings += i18n("At least one value (at address %1) is defined outside memory ranges.").arg(toHexLabel(it.key(), 8)); + } + break; + } + + return result; +} + +bool Device::Memory::save(QTextStream &stream, HexBuffer::Format format) const +{ + savePartial(stream, format); + HexBuffer hb; + hb.saveEnd(stream); + return true; +} |