From 272cd213391b5ce87cb2aeac263b3eedb0f19a07 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 20 Dec 2017 15:33:08 -0500 Subject: Add NDEBUG (NOAGBPRN) support to pokeruby. --- include/assert.h | 43 +++++++++++++++++++++++++++++++++++++++++++ include/config.h | 16 ++++++++++++++++ include/global.h | 1 + 3 files changed, 60 insertions(+) create mode 100755 include/assert.h (limited to 'include') diff --git a/include/assert.h b/include/assert.h new file mode 100755 index 000000000..7a5e727e2 --- /dev/null +++ b/include/assert.h @@ -0,0 +1,43 @@ +#ifndef GUARD_GBASDKASSERT_H +#define GUARD_GBASDKASSERT_H + +// this header is based on the +// GBA SDK IsAgbAssert.h. + +#ifdef NOAGBPRN + #define AGBPrintInit() + #define AGBPutc(pBuf) + #define AGBPrint(pBuf) + #define AGBPrintf(...) + #define AGBPrintFlush1Block() + #define AGBPrintFlush() + #define AGBAssert(pFile, nLine, pExpression, nStopProgram) +#else + // without NOAGBPRN defined, this enables asserts for usage + // on a standard GBA debugger unit or in emulators that + // support it. + void AGBPrintInit(void); + void AGBPutc(const char pBuf); + void AGBPrint(const char *pBuf); + void AGBPrintf(const char *pBuf, ...); + void AGBPrintFlush1Block(void); + void AGBPrintFlush(void); + void AGBAssert(const char *pFile, int nLine, const char *pExpression, int nStopProgram); +#endif + +// when using AGB_WARNING, be sure to flush after as AGBAssert does not flush the string to console +// immediately after usage. +#ifdef NOAGBPRN + #define AGB_ASSERT(expression) +#else + #define AGB_ASSERT(expression) (expression) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #expression, 1); +#endif + +#ifdef NOAGBPRN + #define AGB_WARNING(expression) +#else + #define AGB_WARNING(expression) (expression) ? ((void *)0) : AGBAssert(__FILE__, __LINE__, #expression, 0); +#endif + + +#endif diff --git a/include/config.h b/include/config.h index 6a77c4c74..d9ed70a7c 100644 --- a/include/config.h +++ b/include/config.h @@ -1,6 +1,22 @@ #ifndef GUARD_CONFIG_H #define GUARD_CONFIG_H +// In the Generation 3 games, Asserts were used in various debug builds. +// Ruby/Sapphire and Emerald do not have these asserts while Fire Red +// still has them in the ROM. This is because the developers forgot +// to define NOAGBPRN before release, which is actually supposed to be +// NDEBUG, however this has been changed as Ruby's actual debug build +// does not use the AGBPrint features. + +// To note, Ruby/Sapphire likely did not use AGBPrint. This is because +// the german debug ROM of Ruby did not have any uses of AGBPrint and +// the assert commands but instead a "crash" screen. This config exists +// for convenience for the user of pokeruby and NOT because it is +// authoritative. These additions are for user convenience based on +// officially recommended SDK practices for debugging and is therefore +// still in part authoritative. +#define NOAGBPRN + #ifndef REVISION #define REVISION 0 #endif diff --git a/include/global.h b/include/global.h index 6670f3837..7bd82f74e 100644 --- a/include/global.h +++ b/include/global.h @@ -3,6 +3,7 @@ #include "gba/gba.h" #include "config.h" +#include "assert.h" // IDE support #ifdef __APPLE__ -- cgit v1.2.3