From 53cf1eaf2aba1fcbaa7542e46b0a1aeeb96d95c6 Mon Sep 17 00:00:00 2001 From: harry Date: Mon, 13 Feb 2023 18:53:53 -0500 Subject: [PATCH] Added a macro for NES header size to avoid having magic number 16 all over code. Fixed ld65 bank calculation to account for header. --- src/debug.cpp | 6 +++--- src/debugsymboltable.cpp | 7 ++++--- src/fceu.h | 1 + src/ld65dbg.h | 2 ++ 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/debug.cpp b/src/debug.cpp index 28636313..62e1f798 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -266,7 +266,7 @@ int getBank(int offs) //Anything over FFFFF will kill it. //GetNesFileAddress doesn't work well with Unif files - int addr = GetNesFileAddress(offs)-16; + int addr = GetNesFileAddress(offs)-NES_HEADER_SIZE; if (GameInfo && GameInfo->type==GIT_NSF) return addr != -1 ? addr / 0x1000 : -1; @@ -278,12 +278,12 @@ int GetNesFileAddress(int A){ if((A < 0x6000) || (A > 0xFFFF))return -1; result = &Page[A>>11][A]-PRGptr[0]; if((result > (int)(PRGsize[0])) || (result < 0))return -1; - else return result+16; //16 bytes for the header remember + else return result+NES_HEADER_SIZE; //16 bytes for the header remember } int GetRomAddress(int A){ int i; - uint8 *p = GetNesPRGPointer(A-=16); + uint8 *p = GetNesPRGPointer(A-=NES_HEADER_SIZE); for(i = 16;i < 32;i++){ if((&Page[i][i<<11] <= p) && (&Page[i][(i+1)<<11] > p))break; } diff --git a/src/debugsymboltable.cpp b/src/debugsymboltable.cpp index 7d52d1be..dcf70823 100644 --- a/src/debugsymboltable.cpp +++ b/src/debugsymboltable.cpp @@ -749,7 +749,7 @@ int debugSymbolTable_t::loadGameSymbols(void) if ( GameInfo != nullptr ) { - romSize = 16 + CHRsize[0] + PRGsize[0]; + romSize = NES_HEADER_SIZE + CHRsize[0] + PRGsize[0]; } loadFileNL( -1 ); @@ -934,7 +934,7 @@ void debugSymbolTable_t::ld65_SymbolLoad( ld65::sym *s ) //printf("Symbol Label Load: name:\"%s\" val:%i 0x%x\n", s->name(), s->value(), s->value() ); if (seg) { - int romAddr = seg->ofs(); + int romAddr = seg->ofs() - NES_HEADER_SIZE; bank = romAddr >= 0 ? romAddr / (1<addSymbol( sym ) ) { - //printf("Failed to load sym: '%s'\n", s->name() ); + //printf("Failed to load sym: id:%i name:'%s' bank:%i \n", s->id(), s->name(), bank ); delete sym; } } @@ -982,6 +982,7 @@ int debugSymbolTable_t::ld65LoadDebugFile( const char *dbgFilePath ) { return -1; } + FCEU::autoScopedLock alock(cs); db.iterateSymbols( this, ld65_iterate_cb ); diff --git a/src/fceu.h b/src/fceu.h index 9d75921b..439c7dc9 100644 --- a/src/fceu.h +++ b/src/fceu.h @@ -185,4 +185,5 @@ extern uint8 vsdip; #define EMULATIONPAUSED_FA 2 #define FRAMEADVANCE_DELAY_DEFAULT 10 +#define NES_HEADER_SIZE 16 diff --git a/src/ld65dbg.h b/src/ld65dbg.h index 968adbed..fe6078c1 100644 --- a/src/ld65dbg.h +++ b/src/ld65dbg.h @@ -70,6 +70,8 @@ namespace ld65 sym( int id, const char *name = nullptr, int size = 0, int value = 0, int type = IMPORT); + int id(void){ return _id; }; + const char *name(void){ return _name.c_str(); }; int size(void){ return _size; };