/*************************************************************************** * Copyright (C) 2005-2006 Nicolas Hadacek * * * * 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 "pic_prog_specific.h" #include "common/global/global.h" //----------------------------------------------------------------------------- const char * const Pic::VOLTAGE_TYPE_LABELS[Nb_VoltageTypes] = { I18N_NOOP("Programmer Vpp"), I18N_NOOP("Target Vdd"), I18N_NOOP("Target Vpp") }; const char * const Pic::TARGET_MODE_LABELS[Nb_TargetModes] = { I18N_NOOP("Stopped"), I18N_NOOP("Running"), I18N_NOOP("In Programming") }; const char * const Pic::RESET_MODE_LABELS[Nb_ResetModes] = { I18N_NOOP("Reset Held"), I18N_NOOP("Reset Released") }; //----------------------------------------------------------------------------- uint Programmer::PicDeviceSpecific::findNonMaskStart(Pic::MemoryRangeType type, const Device::Array &data) const { uint start = 0; for (; start(this)->log(Log::DebugLevel::Normal, TQString("start before align: %1").arg(start)); uint align = device().nbWordsWriteAlignment(type); start -= start % align; const_cast(this)->log(Log::DebugLevel::Normal, TQString("start after align: %1 (align=%2)").arg(start).arg(align)); return start; } uint Programmer::PicDeviceSpecific::findNonMaskEnd(Pic::MemoryRangeType type, const Device::Array &data) const { uint end = data.count()-1; for (; end>0; end--) if ( data[end]!=device().mask(type) ) break; const_cast(this)->log(Log::DebugLevel::Normal, TQString("end before align: %1").arg(end)); uint align = device().nbWordsWriteAlignment(type); if ( (end+1) % align ) end += align - (end+1) % align; const_cast(this)->log(Log::DebugLevel::Normal, TQString("end after align: %1 (align=%2)").arg(end).arg(align)); Q_ASSERT(end(vdata.memory).normalizedWord(type, i); BitValue d = static_cast(vdata.memory).normalizeWord(type, i, word); if ( type==Pic::MemoryRangeType::Config ) { BitValue pmask = device().config()._words[i].pmask; v = v.clearMaskBits(pmask); d = d.clearMaskBits(pmask); } return compareWords(type, i, v, d, vdata.actions); }