aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/include
diff options
context:
space:
mode:
authorspicyjpeg <thatspicyjpeg@gmail.com>2022-10-19 14:15:28 +0200
committerspicyjpeg <thatspicyjpeg@gmail.com>2022-10-19 14:15:28 +0200
commit783014e53254fe17102a34c30120eeabf5227a47 (patch)
tree6c3e498295ddd293769b85e7b7cbecd80ce32be7 /libpsn00b/include
parente08a3d9366f8ca14a76b3dd569dac1fb9f569748 (diff)
downloadpsn00bsdk-783014e53254fe17102a34c30120eeabf5227a47.tar.gz
Clean up SDK debug logging, fix getTPage()
Diffstat (limited to 'libpsn00b/include')
-rw-r--r--libpsn00b/include/assert.h25
-rw-r--r--libpsn00b/include/psxetc.h15
-rw-r--r--libpsn00b/include/psxgpu.h105
3 files changed, 83 insertions, 62 deletions
diff --git a/libpsn00b/include/assert.h b/libpsn00b/include/assert.h
index 32301e2..eabe369 100644
--- a/libpsn00b/include/assert.h
+++ b/libpsn00b/include/assert.h
@@ -1,20 +1,33 @@
/*
- * PSn00bSDK assert macro
+ * PSn00bSDK assert macro and internal logging
* (C) 2022 spicyjpeg - MPL licensed
+ *
+ * Note that the _sdk_log() macro is used internally by PSn00bSDK to output
+ * debug messages and warnings.
*/
#ifndef __ASSERT_H
#define __ASSERT_H
-void _assert_abort(const char *file, int line, const char *expr);
-
#ifdef NDEBUG
-#define assert(x)
+
+#define assert(expr)
+#define _sdk_log(fmt, ...)
+
#else
+
+void _assert_abort(const char *file, int line, const char *expr);
+void _sdk_log_inner(const char *fmt, ...);
+
#define assert(expr) { \
- if (!(expr)) \
- _assert_abort(__FILE__, __LINE__, #expr); \
+ if (!(expr)) _assert_abort(__FILE__, __LINE__, #expr); \
}
+#ifdef SDK_LIBRARY_NAME
+#define _sdk_log(fmt, ...) _sdk_log_inner(SDK_LIBRARY_NAME ": " fmt, ##__VA_ARGS__)
+#else
+#define _sdk_log(fmt, ...) _sdk_log_inner(fmt, ##__VA_ARGS__)
+#endif
+
#endif
#endif
diff --git a/libpsn00b/include/psxetc.h b/libpsn00b/include/psxetc.h
index fcfec06..24485d9 100644
--- a/libpsn00b/include/psxetc.h
+++ b/libpsn00b/include/psxetc.h
@@ -6,27 +6,12 @@
#ifndef __PSXETC_H
#define __PSXETC_H
-/* Macros */
-
-// This macro is used internally by PSn00bSDK to log debug messages to a buffer
-// which is then printed to stdout when calling VSync().
-#ifdef NDEBUG
-#define _sdk_log(...)
-#define _sdk_dump_log()
-#else
-#define _sdk_log(...) _sdk_log_inner(__VA_ARGS__)
-#define _sdk_dump_log() _sdk_dump_log_inner()
-#endif
-
/* Public API */
#ifdef __cplusplus
extern "C" {
#endif
-void _sdk_log_inner(const char *fmt, ...);
-void _sdk_dump_log_inner(void);
-
void *InterruptCallback(int irq, void (*func)(void));
void *GetInterruptCallback(int irq);
void *DMACallback(int dma, void (*func)(void));
diff --git a/libpsn00b/include/psxgpu.h b/libpsn00b/include/psxgpu.h
index f2568b0..68e3bff 100644
--- a/libpsn00b/include/psxgpu.h
+++ b/libpsn00b/include/psxgpu.h
@@ -31,65 +31,65 @@ typedef enum _GPU_VideoMode {
/* Structure macros */
#define setVector(v, _x, _y, _z) \
- (v)->vx = _x, (v)->vy = _y, (v)->vz = _z
+ (v)->vx = (_x), (v)->vy = (_y), (v)->vz = (_z)
#define setRECT(v, _x, _y, _w, _h) \
- (v)->x = _x, (v)->y = _y, (v)->w = _w, (v)->h = _h
+ (v)->x = (_x), (v)->y = (_y), (v)->w = (_w), (v)->h = (_h)
#define setTPage(p, tp, abr, x, y) ((p)->tpage = getTPage(tp, abr, x, y))
#define setClut(p, x, y) ((p)->clut = getClut(x, y))
-#define setRGB0(p, r, g, b) ((p)->r0 = r, (p)->g0 = g, (p)->b0 = b)
-#define setRGB1(p, r, g, b) ((p)->r1 = r, (p)->g1 = g, (p)->b1 = b)
-#define setRGB2(p, r, g, b) ((p)->r2 = r, (p)->g2 = g, (p)->b2 = b)
-#define setRGB3(p, r, g, b) ((p)->r3 = r, (p)->g3 = g, (p)->b3 = b)
+#define setRGB0(p, r, g, b) ((p)->r0 = (r), (p)->g0 = (g), (p)->b0 = (b))
+#define setRGB1(p, r, g, b) ((p)->r1 = (r), (p)->g1 = (g), (p)->b1 = (b))
+#define setRGB2(p, r, g, b) ((p)->r2 = (r), (p)->g2 = (g), (p)->b2 = (b))
+#define setRGB3(p, r, g, b) ((p)->r3 = (r), (p)->g3 = (g), (p)->b3 = (b))
#define setXY0(p, _x0, _y0) \
- (p)->x0 = _x0, (p)->y0 = _y0
+ (p)->x0 = (_x0), (p)->y0 = (_y0)
#define setXY2(p, _x0, _y0, _x1, _y1) \
- (p)->x0 = _x0, (p)->y0 = _y0, \
- (p)->x1 = _x1, (p)->y1 = _y1
+ (p)->x0 = (_x0), (p)->y0 = (_y0), \
+ (p)->x1 = (_x1), (p)->y1 = (_y1)
#define setXY3(p, _x0, _y0, _x1, _y1, _x2, _y2) \
- (p)->x0 = _x0, (p)->y0 = _y0, \
- (p)->x1 = _x1, (p)->y1 = _y1, \
- (p)->x2 = _x2, (p)->y2 = _y2
+ (p)->x0 = (_x0), (p)->y0 = (_y0), \
+ (p)->x1 = (_x1), (p)->y1 = (_y1), \
+ (p)->x2 = (_x2), (p)->y2 = (_y2)
#define setXY4(p, _x0, _y0, _x1, _y1, _x2, _y2, _x3, _y3) \
- (p)->x0 = _x0, (p)->y0 = _y0, \
- (p)->x1 = _x1, (p)->y1 = _y1, \
- (p)->x2 = _x2, (p)->y2 = _y2, \
- (p)->x3 = _x3, (p)->y3 = _y3
+ (p)->x0 = (_x0), (p)->y0 = (_y0), \
+ (p)->x1 = (_x1), (p)->y1 = (_y1), \
+ (p)->x2 = (_x2), (p)->y2 = (_y2), \
+ (p)->x3 = (_x3), (p)->y3 = (_y3)
#define setWH(p, _w, _h) \
- (p)->w = _w, (p)->h = _h
+ (p)->w = (_w), (p)->h = (_h)
#define setXYWH(p, _x0, _y0, _w, _h) \
- (p)->x0 = _x0, (p)->y0 = _y0, \
- (p)->x1 = (_x0 + (_w)), (p)->y1 = _y0, \
- (p)->x2 = _x0, (p)->y2 = (_y0 + (_h)), \
- (p)->x3 = (_x0 + (_w)), (p)->y3 = (_y0 + (_h))
+ (p)->x0 = (_x0), (p)->y0 = (_y0), \
+ (p)->x1 = ((_x0) + (_w)), (p)->y1 = (_y0), \
+ (p)->x2 = (_x0), (p)->y2 = ((_y0) + (_h)), \
+ (p)->x3 = ((_x0) + (_w)), (p)->y3 = ((_y0) + (_h))
#define setUV0(p, _u0, _v0) \
- (p)->u0 = _u0, (p)->v0 = _v0
+ (p)->u0 = (_u0), (p)->v0 = (_v0)
#define setUV3(p, _u0, _v0, _u1, _v1, _u2, _v2) \
- (p)->u0 = _u0, (p)->v0 = _v0, \
- (p)->u1 = _u1, (p)->v1 = _v1, \
- (p)->u2 = _u2, (p)->v2 = _v2
+ (p)->u0 = (_u0), (p)->v0 = (_v0), \
+ (p)->u1 = (_u1), (p)->v1 = (_v1), \
+ (p)->u2 = (_u2), (p)->v2 = (_v2)
#define setUV4(p, _u0, _v0, _u1, _v1, _u2, _v2, _u3, _v3) \
- (p)->u0 = _u0, (p)->v0 = _v0, \
- (p)->u1 = _u1, (p)->v1 = _v1, \
- (p)->u2 = _u2, (p)->v2 = _v2, \
- (p)->u3 = _u3, (p)->v3 = _v3
+ (p)->u0 = (_u0), (p)->v0 = (_v0), \
+ (p)->u1 = (_u1), (p)->v1 = (_v1), \
+ (p)->u2 = (_u2), (p)->v2 = (_v2), \
+ (p)->u3 = (_u3), (p)->v3 = (_v3)
#define setUVWH(p, _u0, _v0, _w, _h) \
- (p)->u0 = _u0, (p)->v0 = _v0, \
- (p)->u1 = (_u0 + (_w)), (p)->v1 = _v0, \
- (p)->u2 = _u0, (p)->v2 = (_v0 + (_h)), \
- (p)->u3 = (_u0 + (_w)), (p)->v3 = (_v0 + (_h))
+ (p)->u0 = (_u0), (p)->v0 = (_v0), \
+ (p)->u1 = ((_u0) + (_w)), (p)->v1 = (_v0), \
+ (p)->u2 = (_u0), (p)->v2 = ((_v0) + (_h)), \
+ (p)->u3 = ((_u0) + (_w)), (p)->v3 = ((_v0) + (_h))
/* Primitive handling macros */
@@ -113,8 +113,13 @@ typedef enum _GPU_VideoMode {
#define setShadeTex(p, tge) \
((tge) ? (getcode(p) |= 1) : (getcode(p) &= ~1))
-#define getTPage(tp, abr, x, y) \
- ((((x) & 0x3ff) >> 6) | (((y) >> 8) << 4) | (((abr) & 3) << 5) | (((tp) & 3) << 7))
+#define getTPage(tp, abr, x, y) ( \
+ (((x) / 64) & 15) | \
+ ((((y) / 256) & 1) << 4) | \
+ (((abr) & 3) << 5) | \
+ (((tp) & 3) << 7) | \
+ ((((y) / 512) & 1) << 11) \
+)
#define getClut(x, y) (((y) << 6) | (((x) >> 4) & 0x3f))
@@ -151,24 +156,42 @@ typedef enum _GPU_VideoMode {
#define setDrawTPage(p, dfe, dtd, tpage) \
setlen(p, 1), \
- (p)->code[0] = 0xe1000000 | tpage | (dfe << 10) | (dtd << 9)
+ (p)->code[0] = (0xe1000000 | \
+ (tpage) | \
+ ((dtd) << 9) | \
+ ((dfe) << 10) \
+ )
#define setDrawOffset(p, _x, _y) \
setlen(p, 1), \
- (p)->code[0] = 0xe5000000 | (_x & 0x3ff) | ((_y & 0x3ff) << 11)
+ (p)->code[0] = (0xe5000000 | \
+ ((_x) % 1024) | \
+ (((_y) % 1024) << 11) \
+ )
#define setDrawMask(p, sb, mt) \
setlen(p, 1), \
- (p)->code[0] = 0xe6000000 | sb | (mt << 1)
+ (p)->code[0] = (0xe6000000 | (sb) | ((mt) << 1))
#define setDrawArea(p, r) \
setlen(p, 2), \
- (p)->code[0] = 0xe3000000 | ((r)->x & 0x3ff) | (((r)->y & 0x1ff) << 10), \
- (p)->code[1] = 0xe4000000 | (((r)->x + (r)->w - 1) & 0x3ff) | ((((r)->y + (r)->h - 1) & 0x1ff) << 10)
+ (p)->code[0] = (0xe3000000 | \
+ ((r)->x % 1024) | \
+ (((r)->y % 1024) << 10) \
+ ), \
+ (p)->code[1] = (0xe4000000 | \
+ (((r)->x + (r)->w - 1) % 1024) | \
+ ((((r)->y + (r)->h - 1) % 1024) << 10) \
+ )
#define setTexWindow(p, r) \
setlen(p, 1), \
- (p)->code[0] = 0xe2000000 | ((r)->w & 0x1f) | (((r)->h & 0x1f) << 5) | (((r)->x & 0x1f) << 10) | (((r)->y & 0x1f) << 15)
+ (p)->code[0] = (0xe2000000 | \
+ ((r)->w % 32) | \
+ (((r)->h % 32) << 5) | \
+ (((r)->x % 32) << 10) | \
+ (((r)->y % 32) << 15) \
+ )
/* Primitive structure definitions */