summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rwxr-xr-xinclude/assert.h43
-rw-r--r--include/config.h10
-rw-r--r--include/global.h1
3 files changed, 54 insertions, 0 deletions
diff --git a/include/assert.h b/include/assert.h
new file mode 100755
index 000000000..0c1e5bf77
--- /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 162af3143..ce8e4ae74 100644
--- a/include/config.h
+++ b/include/config.h
@@ -1,6 +1,16 @@
#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.
+#define NOAGBPRN
+// NOTE: Don't try to enable assert right now as many pointers
+// still exist in defines and WILL likely result in a broken ROM.
+
#define ENGLISH
#ifdef ENGLISH
diff --git a/include/global.h b/include/global.h
index 7943fc569..1d0962cf6 100644
--- a/include/global.h
+++ b/include/global.h
@@ -3,6 +3,7 @@
#include "gba/gba.h"
#include "config.h"
+#include "assert.h"
// Prevent cross-jump optimization.
#define BLOCK_CROSS_JUMP asm("");