summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rwxr-xr-xinclude/assert.h43
-rw-r--r--include/config.h16
-rw-r--r--include/global.h1
3 files changed, 60 insertions, 0 deletions
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 a4e71852c..359344500 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__