summaryrefslogtreecommitdiff
path: root/include/gba/syscall.h
blob: aa09fd9e8bc9a1f28ba169ff10b136a7679ca91e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#ifndef SYSCALL_H
#define SYSCALL_H

#include "types.h"

#define RESET_EWRAM 0x01
#define RESET_IWRAM 0x02
#define RESET_PALETTE 0x04
#define RESET_VRAM 0x08
#define RESET_OAM 0x10
#define RESET_SIO_REGS 0x20
#define RESET_SOUND_REGS 0x40
#define RESET_REGS 0x80
#define RESET_ALL 0xFF

#define SystemCall(x) \
    { asm("svc " #x); }

extern void SoundBiasReset();
extern void SoundBiasSet();

#define Stop()            \
    {                     \
        SoundBiasReset(); \
        SystemCall(3);    \
        SoundBiasSet();   \
    }

void SoftReset(u32 resetFlags);

void RegisterRamReset(u32 resetFlags);

void VBlankIntrWait(void);

u16 Sqrt(u32 num);

u16 ArcTan2(s16 x, s16 y);

#define CPU_SET_SRC_FIXED 0x01000000
#define CPU_SET_16BIT 0x00000000
#define CPU_SET_32BIT 0x04000000

void CpuSet(const void* src, void* dest, u32 control);

#define CPU_FAST_SET_SRC_FIXED 0x01000000

void CpuFastSet(const void* src, void* dest, u32 control);

void BgAffineSet(struct BgAffineSrcData* src, struct BgAffineDstData* dest, s32 count);

void ObjAffineSet(struct ObjAffineSrcData* src, void* dest, s32 count, s32 offset);

void LZ77UnCompWram(const void* src, void* dest);

void LZ77UnCompVram(const void* src, void* dest);

void RLUnCompWram(const void* src, void* dest);

void RLUnCompVram(const void* src, void* dest);

int MultiBoot(struct MultiBootParam* mp);

s32 Div(s32 num, s32 denom);

#define DivAndMod(num, denom) ((union SplitDWord)(*(MultiReturnTypeTwoS32Arg)(&Div))(num, denom))

#endif // SYSCALL_H