From 2d0121d42315127fa7d7ac67eb3c8c4e5e2d8a84 Mon Sep 17 00:00:00 2001 From: Jean-Paul Mari Date: Sun, 8 Oct 2017 21:08:06 -0400 Subject: [PATCH] Fixed a crash, in Release mode, when the HW labels setting is turned on. --- VS2015/virtualjaguar.vcxproj.user | 4 +- docs/vj_ReleaseNotes.txt | 6 +- src/debugger/DBGManager.cpp | 965 +++++++++++++++--------------- src/debugger/DBGManager.h | 154 ++--- src/debugger/HWLABELManager.cpp | 412 +++++++------ src/debugger/debuggertab.cpp | 56 +- src/gui/mainwin.cpp | 3 +- 7 files changed, 814 insertions(+), 786 deletions(-) diff --git a/VS2015/virtualjaguar.vcxproj.user b/VS2015/virtualjaguar.vcxproj.user index 315a626..daed425 100644 --- a/VS2015/virtualjaguar.vcxproj.user +++ b/VS2015/virtualjaguar.vcxproj.user @@ -7,7 +7,7 @@ PATH=$(QTDIR)\bin%3b$(PATH) C:\Qt\Qt5.5.1\msvc2015_64 - C:\Projects\GLib-M68K\Lib-Test-M68K\Debug\LibTestM68K_Debug.elf --debugger --no-log + --debugger --no-log WindowsLocalDebugger $(OutDir) @@ -38,7 +38,7 @@ C:\Qt\Qt5.5.1\msvc2015_64 $(OutDir) WindowsLocalDebugger - C:\Projects\GLib-M68K\Lib-Test-M68K\Debug\LibTestM68K_Debug.elf --debugger + --debugger PATH=$(QTDIR)\bin%3bC:\Qt\qt5-5.5.1-vs2015\qt5-x86-shared-debug\bin%3b$(PATH) diff --git a/docs/vj_ReleaseNotes.txt b/docs/vj_ReleaseNotes.txt index 174524d..b28596b 100644 --- a/docs/vj_ReleaseNotes.txt +++ b/docs/vj_ReleaseNotes.txt @@ -1,6 +1,6 @@ Release 3 (TBC) --------------- -0) Fixed the windows respawning in the next emulator launch without --alpine or --debugger options +0) Fixed the windows respawning in the next emulator launch within --alpine or --debugger options 1) Added an Exception Vector Table browser window 2) Modified the About window to update the credits list in a more appropriate way -- Updated the emulator application credits line @@ -11,6 +11,9 @@ Release 3 (TBC) 7) Added the --es-all, --es-ui, --es-alpine & --es-debugger options to erase specific settings 8) Added a keybindings tab and adapted the configuration dialog tabs -- User can modify the keybindings where appropriate +9) Fixed a crash, in Release mode, when the HW labels setting is turn on +10) Solved an interference between the HW labels setting and the one used by the debugger +-- The setting is now only the reference used Release 2 (3rd September 2017) ------------------------------ @@ -96,6 +99,7 @@ Legacy issues/hints =================== 1) Emulator seems to have easter egg(s) -- The option --yarrr displays a single message and end the application +-- Pressing F8, while in the main window, will create an extra message in the log file 2) The --alpine option force the log file but it can be override if --no-log option is set after the --alpine option Project information diff --git a/src/debugger/DBGManager.cpp b/src/debugger/DBGManager.cpp index b74b011..d4df274 100644 --- a/src/debugger/DBGManager.cpp +++ b/src/debugger/DBGManager.cpp @@ -1,477 +1,488 @@ -// -// DBGManager.cpp: Debugger information manager -// -// by Jean-Paul Mari -// -// JPM = Jean-Paul Mari -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JPM 12/21/2016 Created this file -// JPM Various efforts to set the ELF format support -// JPM Various efforts to set the DWARF format support - -#include -#include -#include -#include "libelf/libelf.h" -#include "libelf/gelf.h" -#include "log.h" -#include "ELFManager.h" -#include "DwarfManager.h" -#include "DBGManager.h" -#include "HWLABELManager.h" -#include "settings.h" -#include "memory.h" - - -// -char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, uint32_t TypeByteSize); - - -// -struct Value -{ - union - { - char C[10]; - double D; - float F; - int32_t SI; - int64_t SL; - uint32_t UI; - uint64_t UL; - }; -}S_Value; - - -// Common debugger variables -int DBGType; -char value[1000]; - - -// Common debugger initialisation -void DBGManager_Init(void) -{ - DBGType = DBG_NO_TYPE; - ELFManager_Init(); - DWARFManager_Init(); -} - - -// Common debugger reset -void DBGManager_Reset(void) -{ - if ((DBGType & DBG_DWARF)) - { - DWARFManager_Reset(); - } - - if ((DBGType & DBG_ELF)) - { - ELFManager_Reset(); - } - - DBGType = vjs.displayHWlabels ? DBG_HWLABEL : DBG_NO_TYPE; -} - - -// Common debugger set -void DBGManager_SetType(int DBGTypeSet) -{ - DBGType |= DBGTypeSet; -} - - -// Common debugger close -void DBGManager_Close(void) -{ - if ((DBGType & DBG_DWARF)) - { - DWARFManager_Close(); - } - - if ((DBGType & DBG_ELF)) - { - ELFManager_Close(); - } -} - - -// Get source filename based on the memeory address -// return NULL if no source filename -char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetFullSourceFilenameFromAdr(Adr, Error); - } - else - { - return NULL; - } -} - - -// Get number of external variables -// Return 0 if none has been found -size_t DBGManager_GetNbExternalVariables(void) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetNbExternalVariables(); - } - else - { - return 0; - } -} - - -// -size_t DBGManager_GetAdrFromSymbolName(char *SymbolName) -{ - if ((DBGType & DBG_ELF)) - { - return ELFManager_GetAdrFromSymbolName(SymbolName); - } - else - { - return 0; - } -} - - -// Get external variable's Address based on his Name -// Return found Address -// Return NULL if no Address has been found -size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetExternalVariableAdrFromName(VariableName); - } - else - { - return 0; - } -} - - -// -size_t DBGManager_GetExternalVariableTypeTag(size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetExternalVariableTypeTag(Index); - } - else - { - return 0; - } -} - - -// Get external variable's type name based on his Index -// Return type name's text pointer found -// Return NULL if no type name has been found -char *DBGManager_GetExternalVariableTypeName(size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetExternalVariableTypeName(Index); - } - else - { - return NULL; - } -} - - -// Get external variable's Address based on his Index -// Return the Address found -// Return 0 if no Address has been found -size_t DBGManager_GetExternalVariableAdr(size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetExternalVariableAdr(Index); - } - else - { - return 0; - } -} - - -// Get external variable's type byte size based on his Index -// Return the type's byte size found -// Return 0 if no type's byte size has been found -size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetExternalVariableTypeByteSize(Index); - } - else - { - return 0; - } -} - - -// Get external variable's type encoding based on his Index -// Return the type encoding found -// Return 0 if no type encoding has been found -size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetExternalVariableTypeEncoding(Index); - } - else - { - return 0; - } -} - - -// Get external variable value based on his Index -// Return value as a text pointer -// Note: Pointer may point on a 0 lenght text -char *DBGManager_GetExternalVariableValue(size_t Index) -{ - uint32_t Adr = 0; - uint32_t TypeEncoding = DBG_NO_TYPEENCODING; - uint32_t TypeByteSize = 0; - - if ((DBGType & DBG_ELFDWARF)) - { - Adr = DWARFManager_GetExternalVariableAdr(Index); - TypeEncoding = DWARFManager_GetExternalVariableTypeEncoding(Index); - TypeByteSize = DWARFManager_GetExternalVariableTypeByteSize(Index); - } - - return DBGManager_GetVariableValueFromAdr(Adr, TypeEncoding, TypeByteSize); -} - - -// Get variable value based on his Adresse, Encoding Type and Size -// Return value as a text pointer -// Note: Pointer may point on a 0 lenght text if Adress is NULL -char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, uint32_t TypeByteSize) -{ - Value V; - char *Ptrvalue = value; - - value[0] = 0; - - if (Adr) - { - memset(&V, 0, sizeof(Value)); -#if 0 - for (uint32_t i = 0; i < TypeByteSize; i++) - jaguarMainRAM[Adr + i] = 0; - //jaguarMainRAM[Adr + i] = rand(); - jaguarMainRAM[Adr + TypeByteSize - 1] = 0x10; -#endif -#if 1 - for (uint32_t i = 0, j = TypeByteSize; i < TypeByteSize; i++, j--) - { - V.C[i] = jaguarMainRAM[Adr + j - 1]; - } -#endif - - switch (TypeEncoding) - { - case DBG_ATE_address: - break; - - case DBG_ATE_boolean: - break; - - case DBG_ATE_complex_float: - break; - - case DBG_ATE_float: - switch (TypeByteSize) - { - case 4: - sprintf(value, "%F", V.F); - break; - - case 8: - //V.D = (double)jaguarMainRAM[Adr]; - //sprintf(value, "%10.10F", V.D); - sprintf(value, "%F", V.D); - break; - - default: - break; - } - break; - - case DBG_ATE_signed: - switch (TypeByteSize) - { - case 4: - sprintf(value, "%i", V.SI); - break; - - case 8: - sprintf(value, "%i", V.SL); - break; - - default: - break; - } - break; - - case DBG_ATE_signed_char: - break; - - case DBG_ATE_unsigned: - switch (TypeByteSize) - { - case 4: - sprintf(value, "%u", V.UI); - break; - - case 8: - sprintf(value, "%u", V.UL); - break; - - default: - break; - } - break; - - case DBG_ATE_unsigned_char: - break; - - case DBG_ATE_ptr: - switch (TypeByteSize) - { - case 4: - sprintf(value, "0x%06x", V.UI); - break; - - default: - break; - } - - default: - break; - } - } - - return Ptrvalue; -} - - -// Get external variable name based on his Index -// Return variable name's text pointer found -// Return NULL if no variable name has been found -char *DBGManager_GetExternalVariableName(size_t Index) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetExternalVariableName(Index); - } - else - { - return NULL; - } -} - - -// Get line number from address and his tag -// Return line number on the symbol name found -// Return 0 if no symbol name has been found -size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag) -{ - if ((DBGType & DBG_ELFDWARF)) - { - return DWARFManager_GetNumLineFromAdr(Adr, Tag); - } - else - { - return 0; - } -} - - -// Get symbol name from address -// Return text pointer on the symbol name found -// Return NULL if no symbol name has been found -char *DBGManager_GetSymbolnameFromAdr(size_t Adr) -{ - char *Symbolname = NULL; - - if ((DBGType & DBG_HWLABEL) || vjs.displayHWlabels) - { - Symbolname = HWLABELManager_GetSymbolnameFromAdr(Adr); - } - - if (Symbolname == NULL) - { - if ((DBGType & DBG_ELFDWARF)) - { - Symbolname = DWARFManager_GetSymbolnameFromAdr(Adr); - } - - if ((DBGType & DBG_ELF) && (Symbolname == NULL)) - { - Symbolname = ELFManager_GetSymbolnameFromAdr(Adr); - } - } - - return Symbolname; -} - - -// Get source line based on the Address and his Tag -// Return text pointer on the source line found -// Return NULL if no source line has been found -char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag) -{ - char *Symbolname = NULL; - - if ((DBGType & DBG_ELFDWARF)) - { - Symbolname = DWARFManager_GetLineSrcFromAdr(Adr, Tag); - } - - return Symbolname; -} - - -// Get text line from source based on address and num line (starting by 1) -// Return NULL if no text line has been found -char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine) -{ - char *Symbolname = NULL; - - if ((DBGType & DBG_ELFDWARF)) - { - Symbolname = DWARFManager_GetLineSrcFromAdrNumLine(Adr, NumLine); - } - - return Symbolname; -} - - -// Get text line from source based on address and num line (starting by 1) -// Return NULL if no text line has been found -char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine) -{ - char *Symbolname = NULL; - - if ((DBGType & DBG_ELFDWARF)) - { - Symbolname = DWARFManager_GetLineSrcFromNumLineBaseAdr(Adr, NumLine); - } - - return Symbolname; -} - +// +// DBGManager.cpp: Debugger information manager +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JPM 12/21/2016 Created this file +// JPM Various efforts to set the ELF format support +// JPM Various efforts to set the DWARF format support + +#include +#include +#include +#include "libelf/libelf.h" +#include "libelf/gelf.h" +#include "log.h" +#include "ELFManager.h" +#include "DwarfManager.h" +#include "DBGManager.h" +#include "HWLABELManager.h" +#include "settings.h" +#include "memory.h" + + +// +char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, uint32_t TypeByteSize); + + +// +struct Value +{ + union + { + char C[10]; + double D; + float F; + int32_t SI; + int64_t SL; + uint32_t UI; + uint64_t UL; + }; +}S_Value; + + +// Common debugger variables +size_t DBGType; +char value[1000]; + + +// Common debugger initialisation +void DBGManager_Init(void) +{ + DBGType = DBG_NO_TYPE; + ELFManager_Init(); + DWARFManager_Init(); +} + + +// Common debugger reset +void DBGManager_Reset(void) +{ + if ((DBGType & DBG_DWARF)) + { + DWARFManager_Reset(); + } + + if ((DBGType & DBG_ELF)) + { + ELFManager_Reset(); + } + + //DBGType = vjs.displayHWlabels ? DBG_HWLABEL : DBG_NO_TYPE; + DBGType = DBG_NO_TYPE; +} + + +// Common debugger set +void DBGManager_SetType(size_t DBGTypeSet) +{ + DBGType |= DBGTypeSet; +} + + +// Common debugger close +void DBGManager_Close(void) +{ + if ((DBGType & DBG_DWARF)) + { + DWARFManager_Close(); + } + + if ((DBGType & DBG_ELF)) + { + ELFManager_Close(); + } +} + + +// Get source filename based on the memeory address +// return NULL if no source filename +char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetFullSourceFilenameFromAdr(Adr, Error); + } + else + { + return NULL; + } +} + + +// Get number of external variables +// Return 0 if none has been found +size_t DBGManager_GetNbExternalVariables(void) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetNbExternalVariables(); + } + else + { + return 0; + } +} + + +// +size_t DBGManager_GetAdrFromSymbolName(char *SymbolName) +{ + if ((DBGType & DBG_ELF)) + { + return ELFManager_GetAdrFromSymbolName(SymbolName); + } + else + { + return 0; + } +} + + +// Get external variable's Address based on his Name +// Return found Address +// Return NULL if no Address has been found +size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetExternalVariableAdrFromName(VariableName); + } + else + { + return 0; + } +} + + +// +size_t DBGManager_GetExternalVariableTypeTag(size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetExternalVariableTypeTag(Index); + } + else + { + return 0; + } +} + + +// Get external variable's type name based on his Index +// Return type name's text pointer found +// Return NULL if no type name has been found +char *DBGManager_GetExternalVariableTypeName(size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetExternalVariableTypeName(Index); + } + else + { + return NULL; + } +} + + +// Get external variable's Address based on his Index +// Return the Address found +// Return 0 if no Address has been found +size_t DBGManager_GetExternalVariableAdr(size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetExternalVariableAdr(Index); + } + else + { + return 0; + } +} + + +// Get external variable's type byte size based on his Index +// Return the type's byte size found +// Return 0 if no type's byte size has been found +size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetExternalVariableTypeByteSize(Index); + } + else + { + return 0; + } +} + + +// Get external variable's type encoding based on his Index +// Return the type encoding found +// Return 0 if no type encoding has been found +size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetExternalVariableTypeEncoding(Index); + } + else + { + return 0; + } +} + + +// Get external variable value based on his Index +// Return value as a text pointer +// Note: Pointer may point on a 0 lenght text +char *DBGManager_GetExternalVariableValue(size_t Index) +{ + uint32_t Adr = 0; + uint32_t TypeEncoding = DBG_NO_TYPEENCODING; + uint32_t TypeByteSize = 0; + + if ((DBGType & DBG_ELFDWARF)) + { + Adr = DWARFManager_GetExternalVariableAdr(Index); + TypeEncoding = DWARFManager_GetExternalVariableTypeEncoding(Index); + TypeByteSize = DWARFManager_GetExternalVariableTypeByteSize(Index); + } + + return DBGManager_GetVariableValueFromAdr(Adr, TypeEncoding, TypeByteSize); +} + + +// Get variable value based on his Adresse, Encoding Type and Size +// Return value as a text pointer +// Note: Pointer may point on a 0 lenght text if Adress is NULL +char *DBGManager_GetVariableValueFromAdr(uint32_t Adr, uint32_t TypeEncoding, uint32_t TypeByteSize) +{ + Value V; + char *Ptrvalue = value; + + value[0] = 0; + + if (Adr) + { + memset(&V, 0, sizeof(Value)); +#if 0 + for (uint32_t i = 0; i < TypeByteSize; i++) + jaguarMainRAM[Adr + i] = 0; + //jaguarMainRAM[Adr + i] = rand(); + jaguarMainRAM[Adr + TypeByteSize - 1] = 0x10; +#endif +#if 1 + for (uint32_t i = 0, j = TypeByteSize; i < TypeByteSize; i++, j--) + { + V.C[i] = jaguarMainRAM[Adr + j - 1]; + } +#endif + + switch (TypeEncoding) + { + case DBG_ATE_address: + break; + + case DBG_ATE_boolean: + break; + + case DBG_ATE_complex_float: + break; + + case DBG_ATE_float: + switch (TypeByteSize) + { + case 4: + sprintf(value, "%F", V.F); + break; + + case 8: + //V.D = (double)jaguarMainRAM[Adr]; + //sprintf(value, "%10.10F", V.D); + sprintf(value, "%F", V.D); + break; + + default: + break; + } + break; + + case DBG_ATE_signed: + switch (TypeByteSize) + { + case 4: + sprintf(value, "%i", V.SI); + break; + + case 8: + sprintf(value, "%i", V.SL); + break; + + default: + break; + } + break; + + case DBG_ATE_signed_char: + break; + + case DBG_ATE_unsigned: + switch (TypeByteSize) + { + case 4: + sprintf(value, "%u", V.UI); + break; + + case 8: + sprintf(value, "%u", V.UL); + break; + + default: + break; + } + break; + + case DBG_ATE_unsigned_char: + break; + + case DBG_ATE_ptr: + switch (TypeByteSize) + { + case 4: + sprintf(value, "0x%06x", V.UI); + break; + + default: + break; + } + + default: + break; + } + } + + return Ptrvalue; +} + + +// Get external variable name based on his Index +// Return variable name's text pointer found +// Return NULL if no variable name has been found +char *DBGManager_GetExternalVariableName(size_t Index) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetExternalVariableName(Index); + } + else + { + return NULL; + } +} + + +// Get line number from address and his tag +// Return line number on the symbol name found +// Return 0 if no symbol name has been found +size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag) +{ + if ((DBGType & DBG_ELFDWARF)) + { + return DWARFManager_GetNumLineFromAdr(Adr, Tag); + } + else + { + return 0; + } +} + + +// Get symbol name from address +// Return text pointer on the symbol name found +// Return NULL if no symbol name has been found +char *DBGManager_GetSymbolnameFromAdr(size_t Adr) +{ + char *Symbolname; + + //if ((DBGType & DBG_HWLABEL) || vjs.displayHWlabels) + if (vjs.displayHWlabels) + { + Symbolname = HWLABELManager_GetSymbolnameFromAdr(Adr); + } + else + { + Symbolname = NULL; + } +#ifdef _MSC_VER +#pragma message("Warning: !!! Need to set the DBG_HWLABEL in DBGType instead to use the setting value !!!") +#else + #warning "!!! Need to set the DBG_HWLABEL in DBGType instead to use the setting value !!!" +#endif // _MSC_VER + + if (Symbolname == NULL) + { + if ((DBGType & DBG_ELFDWARF)) + { + Symbolname = DWARFManager_GetSymbolnameFromAdr(Adr); + } + + if ((DBGType & DBG_ELF) && (Symbolname == NULL)) + { + Symbolname = ELFManager_GetSymbolnameFromAdr(Adr); + } + } + + return Symbolname; +} + + +// Get source line based on the Address and his Tag +// Return text pointer on the source line found +// Return NULL if no source line has been found +char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag) +{ + char *Symbolname = NULL; + + if ((DBGType & DBG_ELFDWARF)) + { + Symbolname = DWARFManager_GetLineSrcFromAdr(Adr, Tag); + } + + return Symbolname; +} + + +// Get text line from source based on address and num line (starting by 1) +// Return NULL if no text line has been found +char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine) +{ + char *Symbolname = NULL; + + if ((DBGType & DBG_ELFDWARF)) + { + Symbolname = DWARFManager_GetLineSrcFromAdrNumLine(Adr, NumLine); + } + + return Symbolname; +} + + +// Get text line from source based on address and num line (starting by 1) +// Return NULL if no text line has been found +char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine) +{ + char *Symbolname = NULL; + + if ((DBGType & DBG_ELFDWARF)) + { + Symbolname = DWARFManager_GetLineSrcFromNumLineBaseAdr(Adr, NumLine); + } + + return Symbolname; +} + diff --git a/src/debugger/DBGManager.h b/src/debugger/DBGManager.h index 865c96f..87e0900 100644 --- a/src/debugger/DBGManager.h +++ b/src/debugger/DBGManager.h @@ -1,77 +1,77 @@ - - -#ifndef __DBGMANAGER_H__ -#define __DBGMANAGER_H__ - - -typedef enum { - DBG_NO_TYPE = 0x0, - DBG_ELF = 0x1, - DBG_DWARF = 0x2, - DBG_ELFDWARF = 0x4, - DBG_HWLABEL = 0x8, - DBG_END_TYPE -}DBGTYPE; - -// Tag based in the DW_TAG_... list from the dwarf.h -typedef enum { - DBG_NO_TAG = 0x0, - DBG_TAG_pointer_type = 0x0f, - DBG_TAG_compile_unit = 0x11, - DBG_TAG_base_type = 0x24, - DBG_TAG_subprogram = 0x2e, - DBG_END_TAG -}DBGTAG; - -// Encoding based in the DW_ATE_... list from the dwarf.h -// Except for the DBG_ATE_ptr -typedef enum { - DBG_NO_TYPEENCODING, - DBG_ATE_address = 0x1, // linear machine address - DBG_ATE_boolean = 0x2, // true or false - DBG_ATE_complex_float = 0x3, // complex floating-point number - DBG_ATE_float = 0x4, // floating-point number - DBG_ATE_signed = 0x5, // signed binary integer - DBG_ATE_signed_char = 0x6, // signed character - DBG_ATE_unsigned = 0x7, // unsigned binary integer - DBG_ATE_unsigned_char = 0x8, // unsigned character - DBG_ATE_imaginary_float = 0x9, /* DWARF3 */ - DBG_ATE_packed_decimal = 0xa, /* DWARF3f */ - DBG_ATE_numeric_string = 0xb, /* DWARF3f */ - DBG_ATE_edited = 0xc, /* DWARF3f */ - DBG_ATE_signed_fixed = 0xd, /* DWARF3f */ - DBG_ATE_unsigned_fixed = 0xe, /* DWARF3f */ - DBG_ATE_decimal_float = 0xf, /* DWARF3f */ - DBG_ATE_ptr = 0x10, // Specific to DBG Manager to represent pointer type - DBG_END_TYPEENCODING -}DBGTYPEENCODING; - - -// -extern void DBGManager_Init(void); -extern void DBGManager_SetType(int DBGTypeSet); -extern void DBGManager_Reset(void); -extern void DBGManager_Close(void); - -// -extern char *DBGManager_GetSymbolnameFromAdr(size_t Adr); -extern char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error); -extern size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag); -extern char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag); -extern char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine); -extern char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine); - -// External variables manager -extern size_t DBGManager_GetNbExternalVariables(void); -extern char *DBGManager_GetExternalVariableName(size_t Index); -extern size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index); -extern char *DBGManager_GetExternalVariableTypeName(size_t Index); -extern size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index); -extern size_t DBGManager_GetExternalVariableAdr(size_t Index); -extern size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName); -extern size_t DBGManager_GetAdrFromSymbolName(char *SymbolName); -extern char *DBGManager_GetExternalVariableValue(size_t Index); -extern size_t DBGManager_GetExternalVariableTypeTag(size_t Index); - - -#endif // __DBGMANAGER_H__ + + +#ifndef __DBGMANAGER_H__ +#define __DBGMANAGER_H__ + + +typedef enum { + DBG_NO_TYPE = 0x0, + DBG_ELF = 0x1, + DBG_DWARF = 0x2, + DBG_ELFDWARF = 0x4, + DBG_HWLABEL = 0x8, + DBG_END_TYPE +}DBGTYPE; + +// Tag based in the DW_TAG_... list from the dwarf.h +typedef enum { + DBG_NO_TAG = 0x0, + DBG_TAG_pointer_type = 0x0f, + DBG_TAG_compile_unit = 0x11, + DBG_TAG_base_type = 0x24, + DBG_TAG_subprogram = 0x2e, + DBG_END_TAG +}DBGTAG; + +// Encoding based in the DW_ATE_... list from the dwarf.h +// Except for the DBG_ATE_ptr +typedef enum { + DBG_NO_TYPEENCODING, + DBG_ATE_address = 0x1, // linear machine address + DBG_ATE_boolean = 0x2, // true or false + DBG_ATE_complex_float = 0x3, // complex floating-point number + DBG_ATE_float = 0x4, // floating-point number + DBG_ATE_signed = 0x5, // signed binary integer + DBG_ATE_signed_char = 0x6, // signed character + DBG_ATE_unsigned = 0x7, // unsigned binary integer + DBG_ATE_unsigned_char = 0x8, // unsigned character + DBG_ATE_imaginary_float = 0x9, /* DWARF3 */ + DBG_ATE_packed_decimal = 0xa, /* DWARF3f */ + DBG_ATE_numeric_string = 0xb, /* DWARF3f */ + DBG_ATE_edited = 0xc, /* DWARF3f */ + DBG_ATE_signed_fixed = 0xd, /* DWARF3f */ + DBG_ATE_unsigned_fixed = 0xe, /* DWARF3f */ + DBG_ATE_decimal_float = 0xf, /* DWARF3f */ + DBG_ATE_ptr = 0x10, // Specific to DBG Manager to represent pointer type + DBG_END_TYPEENCODING +}DBGTYPEENCODING; + + +// +extern void DBGManager_Init(void); +extern void DBGManager_SetType(size_t DBGTypeSet); +extern void DBGManager_Reset(void); +extern void DBGManager_Close(void); + +// +extern char *DBGManager_GetSymbolnameFromAdr(size_t Adr); +extern char *DBGManager_GetFullSourceFilenameFromAdr(size_t Adr, bool *Error); +extern size_t DBGManager_GetNumLineFromAdr(size_t Adr, size_t Tag); +extern char *DBGManager_GetLineSrcFromAdr(size_t Adr, size_t Tag); +extern char *DBGManager_GetLineSrcFromAdrNumLine(size_t Adr, size_t NumLine); +extern char *DBGManager_GetLineSrcFromNumLineBaseAdr(size_t Adr, size_t NumLine); + +// External variables manager +extern size_t DBGManager_GetNbExternalVariables(void); +extern char *DBGManager_GetExternalVariableName(size_t Index); +extern size_t DBGManager_GetExternalVariableTypeEncoding(size_t Index); +extern char *DBGManager_GetExternalVariableTypeName(size_t Index); +extern size_t DBGManager_GetExternalVariableTypeByteSize(size_t Index); +extern size_t DBGManager_GetExternalVariableAdr(size_t Index); +extern size_t DBGManager_GetExternalVariableAdrFromName(char *VariableName); +extern size_t DBGManager_GetAdrFromSymbolName(char *SymbolName); +extern char *DBGManager_GetExternalVariableValue(size_t Index); +extern size_t DBGManager_GetExternalVariableTypeTag(size_t Index); + + +#endif // __DBGMANAGER_H__ diff --git a/src/debugger/HWLABELManager.cpp b/src/debugger/HWLABELManager.cpp index 85262a5..ac69f90 100644 --- a/src/debugger/HWLABELManager.cpp +++ b/src/debugger/HWLABELManager.cpp @@ -1,199 +1,213 @@ -// -// ELFManager.cpp: HW Label manager -// -// by Jean-Paul Mari -// -// JPM = Jean-Paul Mari -// -// WHO WHEN WHAT -// --- ---------- ------------------------------------------------------------ -// JPM 02/08/2017 Created this file -// JPM 02/08/2017 HW Label support -// - -#include -#include -#include "libelf/libelf.h" -#include "libelf/gelf.h" -#include "log.h" -#include "ELFManager.h" - - -typedef enum { - HWLABEL_NO_SIZE = 0, - HWLABEL_8BITS = 1, - HWLABEL_16BITS = 2, - HWLABEL_32BITS = 4, - HWLABEL_64BITS = 8 -}HWLABELSIZE; - - -typedef enum { - HWLABEL_NO_ACCESS = 0, - HWLABEL_R = 0x1, - HWLABEL_W = 0x2, - HWLABEL_O = 0x4 -}HWLABELACCESS; - - -typedef struct { - size_t HWLABELAdr; - const char *HWLABELSymbolName; - const char *HWLABELFulllName; - size_t HWLABELSize; - size_t HWLABELAccess; -}HWLABELTab; - - -// Memory map list based on the scans from the Version 2.4 - June 7, 1995 -HWLABELTab HWLABELTabSectionType[] = { -// Internal Memory Map - { 0xF00000, "MEMCON1", "Memory Configuration Register One", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF00002, "MEMCON2", "Memory Configuration Register Two", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF00004, "HC", "Horizontal Count", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF00006, "VC", "Vertical Count", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF00008, "LPH", "Horizontal Light-pen", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF0000A, "LPV", "Vertical Light-pen", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF00010, "OB[0]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF00012, "OB[1]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF00014, "OB[2]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF00016, "OB[3]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF00020, "OLP", "Object List Pointer", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00026, "OBF", "Object Processor flag", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00028, "VMODE", "Video Mode", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0002A, "BORD1", "Border Colour (Red & Green)", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0002C, "BORD2", "Border Colour (Blue)", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0002E, "HP", "Horizontal Period", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00030, "HBB", "Horizontal Blanking Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00032, "HBE", "Horizontal Blanking End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00034, "HS", "Horizontal Sync", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00036, "HVS", "Horizontal Vertical Sync", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00038, "HDB1", "Horizontal Display Begin 1", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0003A, "HDB2", "Horizontal Display Begin 2", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0003C, "HDE", "Horizontal Display End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0003E, "VP", "Vertical Period", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00040, "VBB", "Vertical Blanking Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00042, "VBE", "Vertical Blanking End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00044, "VS", "Vertical Sync", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00046, "VDB", "Vertical Display Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00048, "VDE", "Vertical Display End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0004A, "VEB", "Vertical Equalization Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0004C, "VEE", "Vertical Equalization End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0004E, "VI", "Vertical Interrupt", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00050, "PIT[0]", "Programmable Interrupt Timer", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00052, "PIT[1]", "Programmable Interrupt Timer", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00054, "HEQ", "Horizontal equalization end", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00058, "BG", "Background Colour", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF000E0, "INT1", "CPU Interrupt Control Register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF000E2, "INT2", "CPU Interrupt resume register", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF00400, "CLUT", "Colour Look-Up Table", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF00800, "LBUF", "Line Buffer A", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF01000, "LBUF", "Line Buffer B", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF01800, "LBUF", "Line Buffer selected for writing", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, -// Internal registers of the Graphics processor - { 0xF02100, "G_FLAGS", "GPU Flags Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF02104, "G_MTXC", "Matrix Control Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02108, "G_MTXA", "Matrix Address Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0210C, "G_END", "Data Organisation Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02110, "G_PC", "GPU Program Counter", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF02114, "G_CTRL", "GPU Control/Status Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF02118, "G_HIDATA", "High Data Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF0211C, "G_REMAIN", "Divide unit remainder", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF0211C, "G_DIVCTRL", "Divide unit Control", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, -// List of all the externally accessible locations within the Blitter. - { 0xF02200, "A1_BASE", "A1 Base Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02204, "A1_FLAGS", "A1 Flags Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02208, "A1_CLIP", "A1 Clipping Size", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0220C, "A1_PIXEL", "A1 Pixel Pointer", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF02210, "A1_STEP", "A1 Step Value", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02214, "A1_FSTEP", "A1 Step Fraction Value", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02218, "A1_FPIXEL", "A1 Pixel Pointer Fraction", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF0221C, "A1_INC", "A1 Increment", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02220, "A1_FINC", "A1 Increment Fraction", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02224, "A2_BASE", "A2 Base Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02228, "A2_FLAGS", "A2 Flags Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0222C, "A2_MASK", "A2 Window Mask", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02230, "A2_PIXEL", "A2 Pixel Pointer", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF02234, "A2_STEP", "A2 Step Value", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02238, "B_CMD", "Command Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02238, "B_CMD", "Status Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF0223C, "B_COUNT", "Counters Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02240, "B_SRCD", "Source Data Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02248, "B_DSTD", "Destination Data Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02250, "B_DSTZ", "Destination Z Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02258, "B_SRCZ1", "Source Z Register 1", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02260, "B_SRCZ2", "Source Z Register 2", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02268, "B_PATD", "Pattern Data Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02270, "B_IINC", "Intensity Increment", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02274, "B_ZINC", "Z Increment", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02278, "B_STOP", "Collision control", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0227C, "B_I3", "Intensity 3", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02280, "B_I2", "Intensity 2", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02284, "B_I1", "Intensity 1", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02288, "B_I0", "Intensity 0", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF0228C, "B_Z3", "Z 3", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02290, "B_Z2", "Z 2", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02294, "B_Z1", "Z 1", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF02298, "B_Z0", "Z 0", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, -// GPU Ram base - //{ 0xF03000, "GPU_RAMBASE", "Local RAM base", HWLABEL_8BITS, (HWLABEL_R | HWLABEL_W) }, -// Frequency dividers - { 0xF10010, "CLK1", "Processor clock divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF10012, "CLK2", "Video clock divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF10014, "CLK3", "Chroma clock divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, -// Programmable Timers - { 0xF10000, "JPIT1", "Timer 1 Pre-scaler", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF10004, "JPIT3", "Timer 2 Pre-scaler", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF10002, "JPIT2", "Timer 1 Divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF10006, "JPIT4", "Timer 2 Divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - //{ 0xF10036, "JPIT1", "Timer 1 Pre-scaler", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - //{ 0xF10038, "JPIT2", "Timer 1 Divider", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - //{ 0xF1003A, "JPIT3", "Timer 2 Pre-scaler", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - //{ 0xF1003C, "JPIT4", "Timer 2 Divider", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, -// Interrupts - { 0xF10020, "JINTCTRL", "Interrupt Control Register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, -// JERRY Pulse Width Modulation DACs - //{ 0xF1A140, "DAC1", "Left DAC", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - //{ 0xF1A144, "DAC2", "Right DAC", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, -// Synchronous Serial Interface - { 0xF1A150, "SCLK", "Serial Clock Frequency", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A154, "SMODE", "Serial Mode", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A148, "R_DAC", "Right transmit data (to DACs)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A14C, "L_DAC", "Left transmit data (to DACs)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A148, "LTXD", "Left transmit data (to I2S)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A14C, "RTXD", "Right transmit data (to I2S)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A148, "LRXD", "Left receive data (to I2S)", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF1A14C, "RRXD", "Right receive data (to I2S)", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF1A150, "SSTAT", "Serial Status", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, -// Asynchronous Serial Interface (ComLynx and Midi) - { 0xF10034, "ASICLK", "Asynchronous Serial Interface Clock", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF10032, "ASICTRL", "Asynchronous Serial Control", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF10032, "ASISTAT", "Asynchronous Serial Status", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, - { 0xF10030, "ASIDATA", "Asynchronous Serial Data", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, -// Joystick Interface - { 0xF14000, "JOYSTICK", "Joystick register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF14002, "JOYBUTS", "Button register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, -// Internal Registers - { 0xF1A100, "D_FLAGS", "DSP Flags Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF1A104, "D_MTXC", "DSP Matrix Control Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A108, "D_MTXA", "DSP Matrix Address Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A10C, "D_END", "DSP Data Organisation Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A110, "D_PC", "DSP Program Counter", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF1A114, "D_CTRL", "DSP Control/Status Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF1A118, "D_MOD", "Modulo instruction mask", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A11C, "D_REMAIN", "Divide unit remainder", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, - { 0xF1A11C, "D_DIVCTRL", "Divide unit Control", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, - { 0xF1A120, "D_MACHI", "Multiply & Acccumulate High Bits", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, -// End of the Memory map list - { (size_t)-1, NULL, NULL, HWLABEL_NO_SIZE, HWLABEL_NO_ACCESS } -}; - - -// Get Symbol name from his address -char *HWLABELManager_GetSymbolnameFromAdr(size_t Adr) -{ - int i = 0; - while ((HWLABELTabSectionType[i].HWLABELAdr != Adr) && (HWLABELTabSectionType[i++].HWLABELAdr != (size_t)-1)); - return (char *)HWLABELTabSectionType[i].HWLABELSymbolName; -} - +// +// ELFManager.cpp: HW Label manager +// +// by Jean-Paul Mari +// +// JPM = Jean-Paul Mari +// +// WHO WHEN WHAT +// --- ---------- ------------------------------------------------------------ +// JPM 02/08/2017 Created this file +// JPM 02/08/2017 HW Label support +// + +#include +#include +#include "libelf/libelf.h" +#include "libelf/gelf.h" +#include "log.h" +#include "ELFManager.h" + + +typedef enum { + HWLABEL_NO_SIZE = 0, + HWLABEL_8BITS = 1, + HWLABEL_16BITS = 2, + HWLABEL_32BITS = 4, + HWLABEL_64BITS = 8 +}HWLABELSIZE; + +typedef enum { + HWLABEL_NO_ACCESS = 0, + HWLABEL_R = 0x1, + HWLABEL_W = 0x2, + HWLABEL_O = 0x4 +}HWLABELACCESS; + +typedef struct { + size_t HWLABELAdr; + const char *HWLABELSymbolName; + const char *HWLABELFulllName; + size_t HWLABELSize; + size_t HWLABELAccess; +}HWLABELTab; + +#define NBHWLABELS (sizeof(HWLABELTabSectionType) / sizeof(HWLABELTab)) + + +// Memory map list based on the scans from the Version 2.4 - June 7, 1995 +HWLABELTab HWLABELTabSectionType[] = { +// Internal Memory Map + { 0xF00000, "MEMCON1", "Memory Configuration Register One", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF00002, "MEMCON2", "Memory Configuration Register Two", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF00004, "HC", "Horizontal Count", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF00006, "VC", "Vertical Count", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF00008, "LPH", "Horizontal Light-pen", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF0000A, "LPV", "Vertical Light-pen", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF00010, "OB[0]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF00012, "OB[1]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF00014, "OB[2]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF00016, "OB[3]", "Object Code", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF00020, "OLP", "Object List Pointer", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00026, "OBF", "Object Processor flag", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00028, "VMODE", "Video Mode", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0002A, "BORD1", "Border Colour (Red & Green)", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0002C, "BORD2", "Border Colour (Blue)", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0002E, "HP", "Horizontal Period", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00030, "HBB", "Horizontal Blanking Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00032, "HBE", "Horizontal Blanking End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00034, "HS", "Horizontal Sync", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00036, "HVS", "Horizontal Vertical Sync", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00038, "HDB1", "Horizontal Display Begin 1", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0003A, "HDB2", "Horizontal Display Begin 2", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0003C, "HDE", "Horizontal Display End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0003E, "VP", "Vertical Period", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00040, "VBB", "Vertical Blanking Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00042, "VBE", "Vertical Blanking End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00044, "VS", "Vertical Sync", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00046, "VDB", "Vertical Display Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00048, "VDE", "Vertical Display End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0004A, "VEB", "Vertical Equalization Begin", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0004C, "VEE", "Vertical Equalization End", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0004E, "VI", "Vertical Interrupt", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00050, "PIT[0]", "Programmable Interrupt Timer", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00052, "PIT[1]", "Programmable Interrupt Timer", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00054, "HEQ", "Horizontal equalization end", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00058, "BG", "Background Colour", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF000E0, "INT1", "CPU Interrupt Control Register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF000E2, "INT2", "CPU Interrupt resume register", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF00400, "CLUT", "Colour Look-Up Table", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF00800, "LBUF", "Line Buffer A", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF01000, "LBUF", "Line Buffer B", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF01800, "LBUF", "Line Buffer selected for writing", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, +// Internal registers of the Graphics processor + { 0xF02100, "G_FLAGS", "GPU Flags Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF02104, "G_MTXC", "Matrix Control Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02108, "G_MTXA", "Matrix Address Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0210C, "G_END", "Data Organisation Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02110, "G_PC", "GPU Program Counter", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF02114, "G_CTRL", "GPU Control/Status Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF02118, "G_HIDATA", "High Data Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF0211C, "G_REMAIN", "Divide unit remainder", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF0211C, "G_DIVCTRL", "Divide unit Control", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, +// List of all the externally accessible locations within the Blitter. + { 0xF02200, "A1_BASE", "A1 Base Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02204, "A1_FLAGS", "A1 Flags Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02208, "A1_CLIP", "A1 Clipping Size", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0220C, "A1_PIXEL", "A1 Pixel Pointer", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF02210, "A1_STEP", "A1 Step Value", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02214, "A1_FSTEP", "A1 Step Fraction Value", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02218, "A1_FPIXEL", "A1 Pixel Pointer Fraction", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF0221C, "A1_INC", "A1 Increment", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02220, "A1_FINC", "A1 Increment Fraction", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02224, "A2_BASE", "A2 Base Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02228, "A2_FLAGS", "A2 Flags Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0222C, "A2_MASK", "A2 Window Mask", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02230, "A2_PIXEL", "A2 Pixel Pointer", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF02234, "A2_STEP", "A2 Step Value", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02238, "B_CMD", "Command Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02238, "B_CMD", "Status Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF0223C, "B_COUNT", "Counters Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02240, "B_SRCD", "Source Data Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02248, "B_DSTD", "Destination Data Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02250, "B_DSTZ", "Destination Z Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02258, "B_SRCZ1", "Source Z Register 1", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02260, "B_SRCZ2", "Source Z Register 2", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02268, "B_PATD", "Pattern Data Register", HWLABEL_64BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02270, "B_IINC", "Intensity Increment", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02274, "B_ZINC", "Z Increment", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02278, "B_STOP", "Collision control", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0227C, "B_I3", "Intensity 3", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02280, "B_I2", "Intensity 2", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02284, "B_I1", "Intensity 1", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02288, "B_I0", "Intensity 0", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF0228C, "B_Z3", "Z 3", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02290, "B_Z2", "Z 2", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02294, "B_Z1", "Z 1", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF02298, "B_Z0", "Z 0", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, +// GPU Ram base + //{ 0xF03000, "GPU_RAMBASE", "Local RAM base", HWLABEL_8BITS, (HWLABEL_R | HWLABEL_W) }, +// Frequency dividers + { 0xF10010, "CLK1", "Processor clock divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF10012, "CLK2", "Video clock divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF10014, "CLK3", "Chroma clock divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, +// Programmable Timers + { 0xF10000, "JPIT1", "Timer 1 Pre-scaler", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF10004, "JPIT3", "Timer 2 Pre-scaler", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF10002, "JPIT2", "Timer 1 Divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF10006, "JPIT4", "Timer 2 Divider", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + //{ 0xF10036, "JPIT1", "Timer 1 Pre-scaler", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + //{ 0xF10038, "JPIT2", "Timer 1 Divider", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + //{ 0xF1003A, "JPIT3", "Timer 2 Pre-scaler", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + //{ 0xF1003C, "JPIT4", "Timer 2 Divider", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, +// Interrupts + { 0xF10020, "JINTCTRL", "Interrupt Control Register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, +// JERRY Pulse Width Modulation DACs + //{ 0xF1A140, "DAC1", "Left DAC", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + //{ 0xF1A144, "DAC2", "Right DAC", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, +// Synchronous Serial Interface + { 0xF1A150, "SCLK", "Serial Clock Frequency", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A154, "SMODE", "Serial Mode", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A148, "R_DAC", "Right transmit data (to DACs)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A14C, "L_DAC", "Left transmit data (to DACs)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A148, "LTXD", "Left transmit data (to I2S)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A14C, "RTXD", "Right transmit data (to I2S)", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A148, "LRXD", "Left receive data (to I2S)", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF1A14C, "RRXD", "Right receive data (to I2S)", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF1A150, "SSTAT", "Serial Status", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, +// Asynchronous Serial Interface (ComLynx and Midi) + { 0xF10034, "ASICLK", "Asynchronous Serial Interface Clock", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF10032, "ASICTRL", "Asynchronous Serial Control", HWLABEL_16BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF10032, "ASISTAT", "Asynchronous Serial Status", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_O) }, + { 0xF10030, "ASIDATA", "Asynchronous Serial Data", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, +// Joystick Interface + { 0xF14000, "JOYSTICK", "Joystick register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF14002, "JOYBUTS", "Button register", HWLABEL_16BITS, (HWLABEL_R | HWLABEL_W) }, +// Internal Registers + { 0xF1A100, "D_FLAGS", "DSP Flags Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF1A104, "D_MTXC", "DSP Matrix Control Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A108, "D_MTXA", "DSP Matrix Address Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A10C, "D_END", "DSP Data Organisation Register", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A110, "D_PC", "DSP Program Counter", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF1A114, "D_CTRL", "DSP Control/Status Register", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF1A118, "D_MOD", "Modulo instruction mask", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A11C, "D_REMAIN", "Divide unit remainder", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_W) }, + { 0xF1A11C, "D_DIVCTRL", "Divide unit Control", HWLABEL_32BITS, (HWLABEL_W | HWLABEL_O) }, + { 0xF1A120, "D_MACHI", "Multiply & Acccumulate High Bits", HWLABEL_32BITS, (HWLABEL_R | HWLABEL_O) }, +// End of the Memory map list +// { (size_t)-1, NULL, NULL, HWLABEL_NO_SIZE, HWLABEL_NO_ACCESS } +}; + + +// Get Symbol name from his address +char *HWLABELManager_GetSymbolnameFromAdr(size_t Adr) +{ + size_t i; + + if ((Adr >= 0xF00000) && (Adr < 0xF1A124)) + { + for (i = 0; i < NBHWLABELS; i++) + { + if ((HWLABELTabSectionType[i].HWLABELAdr == Adr)) + { + return (char *)HWLABELTabSectionType[i].HWLABELSymbolName; + } + } + } + + return NULL; + + //while ((HWLABELTabSectionType[i].HWLABELAdr != Adr) && (HWLABELTabSectionType[i++].HWLABELAdr != (size_t)-1)); + //return (char *)HWLABELTabSectionType[i].HWLABELSymbolName; +} + diff --git a/src/debugger/debuggertab.cpp b/src/debugger/debuggertab.cpp index 2a29a40..032db33 100644 --- a/src/debugger/debuggertab.cpp +++ b/src/debugger/debuggertab.cpp @@ -53,31 +53,31 @@ DebuggerTab::~DebuggerTab() } -// Save / Update the settings from the tabs dialog -void DebuggerTab::SetSettings(void) -{ - bool ok; - - //strcpy(vjs.debuggerROMPath, debuggerTab->edit1->text().toUtf8().data()); - //strcpy(vjs.absROMPath, debuggerTab->edit2->text().toUtf8().data()); - vjs.nbrdisasmlines = edit3->text().toUInt(&ok, 10); - //vjs.allowWritesToROM = debuggerTab->writeROM->isChecked(); - vjs.displayHWlabels = displayHWlabels->isChecked(); - vjs.disasmopcodes = disasmopcodes->isChecked(); - vjs.displayFullSourceFilename = displayFullSourceFilename->isChecked(); -} - - -// Load / Update the tabs dialog from the settings -void DebuggerTab::GetSettings(void) -{ - QVariant v(vjs.nbrdisasmlines); - //debuggerTab->edit1->setText(vjs.debuggerROMPath); - //debuggerTab->edit2->setText(vjs.absROMPath); - edit3->setText(v.toString()); - //debuggerTab->writeROM->setChecked(vjs.allowWritesToROM - displayHWlabels->setChecked(vjs.displayHWlabels); - disasmopcodes->setChecked(vjs.disasmopcodes); - displayFullSourceFilename->setChecked(vjs.displayFullSourceFilename); -} - +// Save / Update the settings from the tabs dialog +void DebuggerTab::SetSettings(void) +{ + bool ok; + + //strcpy(vjs.debuggerROMPath, debuggerTab->edit1->text().toUtf8().data()); + //strcpy(vjs.absROMPath, debuggerTab->edit2->text().toUtf8().data()); + vjs.nbrdisasmlines = edit3->text().toUInt(&ok, 10); + //vjs.allowWritesToROM = debuggerTab->writeROM->isChecked(); + vjs.displayHWlabels = displayHWlabels->isChecked(); + vjs.disasmopcodes = disasmopcodes->isChecked(); + vjs.displayFullSourceFilename = displayFullSourceFilename->isChecked(); +} + + +// Load / Update the tabs dialog from the settings +void DebuggerTab::GetSettings(void) +{ + QVariant v(vjs.nbrdisasmlines); + //debuggerTab->edit1->setText(vjs.debuggerROMPath); + //debuggerTab->edit2->setText(vjs.absROMPath); + edit3->setText(v.toString()); + //debuggerTab->writeROM->setChecked(vjs.allowWritesToROM + displayHWlabels->setChecked(vjs.displayHWlabels); + disasmopcodes->setChecked(vjs.disasmopcodes); + displayFullSourceFilename->setChecked(vjs.displayFullSourceFilename); +} + diff --git a/src/gui/mainwin.cpp b/src/gui/mainwin.cpp index 17ed90d..5d228db 100644 --- a/src/gui/mainwin.cpp +++ b/src/gui/mainwin.cpp @@ -603,8 +603,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false), // Create status bar statusBar()->showMessage(tr("Ready")); ReadUISettings(); - // Do this in case original size isn't correct (mostly for the first-run - // case) + // Do this in case original size isn't correct (mostly for the first-run case) ResizeMainWindow(); // Create our test pattern bitmaps -- 2.20.1