--- /dev/null
+#include <stdint.h>
+#include "std/unused.h"
+#include "std/draw.h"
+#include "input.h"
+
+extern void waitcycles(uint32_t cycles);
+
+uint32_t
+wait_key(_UNUSED int sleep)
+{
+ // If your dpad has issues, please add this to the makefile.
+ if (sleep) {
+ #define ARM9_APPROX_DELAY_MAX 134058675 / 95
+ waitcycles(ARM9_APPROX_DELAY_MAX); // Approximately what a human can input - fine tuning needed (sorry, TASers!)
+ }
+
+ uint32_t ret = 0, get = 0;
+ while (ret == 0) {
+ get = HID_PAD;
+
+ if ((get & (BUTTON_L | BUTTON_R | BUTTON_STA)) == (BUTTON_L | BUTTON_R | BUTTON_STA)) {
+ screenshot();
+ waitcycles(ARM9_APPROX_DELAY_MAX); // Approximately what a human can input - fine tuning needed (sorry, TASers!)
+ } else if (get & BUTTON_UP)
+ ret = BUTTON_UP;
+ else if (get & BUTTON_DOWN)
+ ret = BUTTON_DOWN;
+ else if (get & BUTTON_RIGHT)
+ ret = BUTTON_RIGHT;
+ else if (get & BUTTON_LEFT)
+ ret = BUTTON_LEFT;
+ else if (get & BUTTON_A)
+ ret = BUTTON_A;
+ else if (get & BUTTON_B)
+ ret = BUTTON_B;
+ else if (get & BUTTON_X)
+ ret = BUTTON_X;
+ else if (get & BUTTON_SEL)
+ ret = BUTTON_SEL;
+
+ }
+ while (HID_PAD & ret);
+
+ return ret;
+}
+
#define HID_PAD ((*(volatile uint32_t *)0x10146000) ^ BUTTON_ANY)
+uint32_t wait_key(_UNUSED int sleep);
+
#endif
#define OP_NEXT 0xFF
#ifdef LOADER
-#define log(a) logstr(a)
-#define abort(a) \
- { \
- logstr(a); \
- svcBreak(USERBREAK_ASSERT); \
- }
+ #define log(a) logstr(a)
+ #define abort(a) \
+ { \
+ logstr(a); \
+ svcBreak(USERBREAK_ASSERT); \
+ }
#else
-#define log(a) fprintf(stderr, a)
-int wait();
+ #define log(a) fprintf(stderr, a)
+ int wait();
#endif
struct mode
if (debug)
log("abort\n");
- abort("abort triggered, halting VM!\n")
+ abort("abort triggered, halting VM!\n");
break;
case OP_ABORTEQ:
code++;
if (debug)
log("aborteq\n");
if (eq)
- abort("eq flag not set, halting VM!\n")
+ abort("eq flag not set, halting VM!\n");
break;
case OP_ABORTNE:
code++;
if (debug)
log("abortlt\n");
if (!eq)
- abort("eq flag not set, halting VM!\n")
+ abort("eq flag not set, halting VM!\n");
break;
case OP_ABORTLT:
code++;
if (debug)
log("abortlt\n");
if (lt)
- abort("lt flag set, halting VM!\n")
+ abort("lt flag set, halting VM!\n");
break;
case OP_ABORTGT:
code++;
if (debug)
log("abortgt\n");
if (gt)
- abort("gt flag set, halting VM!\n")
+ abort("gt flag set, halting VM!\n");
break;
case OP_ABORTF:
code++;
if (debug)
log("abortf\n");
if (found)
- abort("f flag set, halting VM!\n")
+ abort("f flag set, halting VM!\n");
break;
case OP_ABORTNF:
code++;
if (debug)
log("abortnf\n");
if (!found)
- abort("f flag is not set, halting VM!\n")
+ abort("f flag is not set, halting VM!\n");
break;
case OP_NEXT:
if (debug) {
{ -1, "", "", 0, -1, -1 }, // cursor_min and cursor_max are stored in the last two.
};
-extern void waitcycles(uint32_t cycles);
-
-uint32_t
-wait_key(_UNUSED int sleep)
-{
- // If your dpad has issues, please add this to the makefile.
- if (sleep) {
- #define ARM9_APPROX_DELAY_MAX 134058675 / 95
- waitcycles(ARM9_APPROX_DELAY_MAX); // Approximately what a human can input - fine tuning needed (sorry, TASers!)
- }
-
- uint32_t ret = 0, get = 0;
- while (ret == 0) {
- get = HID_PAD;
-
- if ((get & (BUTTON_L | BUTTON_R | BUTTON_STA)) == (BUTTON_L | BUTTON_R | BUTTON_STA)) {
- screenshot();
- waitcycles(ARM9_APPROX_DELAY_MAX); // Approximately what a human can input - fine tuning needed (sorry, TASers!)
- } else if (get & BUTTON_UP)
- ret = BUTTON_UP;
- else if (get & BUTTON_DOWN)
- ret = BUTTON_DOWN;
- else if (get & BUTTON_RIGHT)
- ret = BUTTON_RIGHT;
- else if (get & BUTTON_LEFT)
- ret = BUTTON_LEFT;
- else if (get & BUTTON_A)
- ret = BUTTON_A;
- else if (get & BUTTON_B)
- ret = BUTTON_B;
- else if (get & BUTTON_X)
- ret = BUTTON_X;
- else if (get & BUTTON_SEL)
- ret = BUTTON_SEL;
-
- }
- while (HID_PAD & ret);
-
- return ret;
-}
-
extern unsigned int font_w;
void
--- /dev/null
+#ifndef __ABORT_H
+#define __ABORT_H
+
+#include <stdarg.h>
+#include "draw.h"
+
+void poweroff();
+uint32_t wait_key(int sleep);
+
+void abort(const char* x, ...) {
+ va_list ap;
+ va_start(ap, x);
+
+ vfprintf(stderr, x, ap);
+
+ va_end(ap);
+
+ wait_key(1);
+ clear_disp(stderr);
+ set_cursor(stderr, 0, 0);
+ poweroff();
+}
+
+#endif
#ifndef __ABORT_H
#define __ABORT_H
-#include "draw.h"
-
-void poweroff();
-uint32_t wait_key(int sleep);
-
-#define abort(x...) \
- { \
- fprintf(stderr, x); \
- wait_key(1); \
- clear_disp(stderr); \
- set_cursor(stderr, 0, 0); \
- poweroff(); \
- }
+void abort(const char* x, ...);
#endif
It isn't perfect, but it does work. */
#include <stdint.h>
+#include <stdarg.h>
#define TOP_WIDTH 400
#define TOP_HEIGHT 240
// eventually)
void fprintf(void *channel, const char *format, ...);
+void vfprintf(void *channel, const char *format, va_list ap);
+
#define BLACK 0
#define BLUE 1
#define GREEN 2