initial commit
[gbajam22] / libs / maxmod / mp_macros.inc
1 /****************************************************************************
2  *                                                          __              *
3  *                ____ ___  ____ __  ______ ___  ____  ____/ /              *
4  *               / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __  /               *
5  *              / / / / / / /_/ />  </ / / / / / /_/ / /_/ /                *
6  *             /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/                 *
7  *                                                                          *
8  *                       MACROS TO MAKE LIFE EASY                           *
9  *                                                                          *
10  *         Copyright (c) 2008, Mukunda Johnson (mukunda@maxmod.org)         *
11  *                                                                          *
12  * Permission to use, copy, modify, and/or distribute this software for any *
13  * purpose with or without fee is hereby granted, provided that the above   *
14  * copyright notice and this permission notice appear in all copies.        *
15  *                                                                          *
16  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
17  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF         *
18  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR  *
19  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   *
20  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    *
21  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF  *
22  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.           *
23  ****************************************************************************/
24
25 #ifdef SYS_NDS9
26
27 .macro ret0             @ arm9 pop {pc} has mode change
28         pop     {pc}
29 .endm
30 .macro ret1             @ arm9 pop {pc} has mode change
31         pop     {pc}
32 .endm
33 .macro ret2             @ arm9 pop {pc} has mode change
34         pop     {pc}
35 .endm
36 .macro ret3             @ arm9 pop {pc} has mode change
37         pop     {pc}
38 .endm
39
40 .macro jump7
41         blx     r7
42 .endm
43
44
45 .macro jump2
46         blx     r2
47 .endm
48
49 .macro jump1
50         blx     r1
51 .endm
52
53 .macro fjump2 function
54         ldr     r2,=function
55         blx     r2
56 .endm
57
58 #else
59
60 .macro ret0             @ arm7 requires pop/bx combo
61         pop     {r0}
62         bx      r0
63 .endm
64 .macro ret1
65         pop     {r1}
66         bx      r1
67 .endm
68 .macro ret2
69         pop     {r2}
70         bx      r2
71 .endm
72 .macro ret3
73         pop     {r3}
74         bx      r3
75 .endm
76
77
78 .macro jump7
79 #ifdef USE_IWRAM
80         bl      mpp_call_r7i
81 #else
82         bl      mpp_call_r7
83 #endif
84 .endm
85
86 .macro jump2
87 #ifdef USE_IWRAM
88         bl      mpp_call_r2i
89 #else
90         bl      mpp_call_r2
91 #endif
92 .endm
93
94 .macro fjump2 function
95         ldr     r2,=\function
96         jump2
97 .endm
98
99 .macro jump1
100 #ifdef USE_IWRAM
101         bl      mpp_call_r1i
102 #else
103         bl      mpp_call_r1
104 #endif
105 .endm
106
107 #endif
108
109 .macro break9
110 9: b 9b
111 .endm
112
113 .macro breakp
114 mov     r11,r11
115 .endm
116
117 .macro GET_MIXCH reg
118 #ifdef SYS_NDS
119         ldr     \reg,=mm_mix_channels
120 #endif
121 #ifdef SYS_GBA
122         ldr     \reg,=mm_mixchannels
123         ldr     \reg, [\reg]
124 #endif
125 .endm
126
127 //#define ENABLE_PROFILE
128
129 .macro PROF_START mode
130
131 #ifdef ENABLE_PROFILE
132
133         push    {r0-r3}
134         push    {lr}
135         ldr     r1,=profile_start
136         mov     r2, pc
137         add     r2, #5
138         mov     lr, r2
139         bx      r1
140         pop     {r0}
141         mov     lr, r0
142         pop     {r0-r3}
143 #endif  
144
145 .endm
146
147 .macro PROF_END mode
148
149 #ifdef ENABLE_PROFILE
150         push    {r0-r3}
151         push    {lr}
152         mov     r0, #\mode
153         ldr     r1,=profile_take
154         mov     r2, pc
155         add     r2, #5
156         mov     lr, r2
157         bx      r1
158         pop     {r0}
159         mov     lr, r0
160         pop     {r0-r3}
161         
162 #endif
163
164 .endm
165
166 .macro __SECTION_IWRAM
167 #ifdef SYS_GBA
168         .section ".iwram", "ax", %progbits
169 #else
170         .text
171 #endif
172 .endm
173
174 //------------------------------
175 .macro nocash_msg msg
176 //------------------------------
177         mov     r12,r12
178         b       9f
179         .hword  0x6464
180         .hword  0
181         .string "\msg"
182         .align 2
183 9:
184 .endm
185 //------------------------------
186 .macro nocash_reset_clks
187 //------------------------------
188         nocash_msg %zeroclks%
189 .endm
190 //------------------------------
191 .macro nocash_print_clks
192 //------------------------------
193         nocash_msg %lastclks%
194 .endm
195 //------------------------------