10 #define wait_vblank() \
12 while(REG_DISPSTAT & DISPSTAT_VBLANK); \
13 while(!(REG_DISPSTAT & DISPSTAT_VBLANK)); \
18 REG_DISPCNT = (REG_DISPCNT & ~DISPCNT_FB1) | ((x) << 4); \
21 #define ARM_IWRAM __attribute__((noinline, target("arm"), section(".iwram")))
23 #else /* non-GBA build */
26 void present(int buf); /* defined in src/pc/main.c */
31 #define set_bg_color(idx, r, g, b) \
32 gba_bgpal[idx] = (uint16_t)(r) | ((uint16_t)(g) << 5) | ((uint16_t)(b) << 10)
34 extern int16_t sinlut[];
37 #define SINLUT_SIZE (1 << SINLUT_BITS)
40 ((int32_t)sinlut[((angle) >> (16 - SINLUT_BITS)) & (SINLUT_SIZE - 1)] << 1)
43 ((int32_t)sinlut[(((angle) >> (16 - SINLUT_BITS)) + (SINLUT_SIZE / 4)) & (SINLUT_SIZE - 1)] << 1)
45 int iwram_brk(void *addr);
46 void *iwram_sbrk(intptr_t delta);
48 void fillblock_16byte(void *dest, uint32_t val, int count);
53 int ispow2(unsigned int x);
55 /* Non-failing versions of malloc/calloc/realloc. They never return 0, they call
56 * demo_abort on failure. Use the macros, don't call the *_impl functions.
58 #define malloc_nf(sz) malloc_nf_impl(sz, __FILE__, __LINE__)
59 void *malloc_nf_impl(size_t sz, const char *file, int line);
60 #define calloc_nf(n, sz) calloc_nf_impl(n, sz, __FILE__, __LINE__)
61 void *calloc_nf_impl(size_t num, size_t sz, const char *file, int line);
62 #define realloc_nf(p, sz) realloc_nf_impl(p, sz, __FILE__, __LINE__)
63 void *realloc_nf_impl(void *p, size_t sz, const char *file, int line);
64 #define strdup_nf(s) strdup_nf_impl(s, __FILE__, __LINE__)
65 char *strdup_nf_impl(const char *s, const char *file, int line);