add missing tools/pngdump to the repo
[gbajam22] / libs / maxmod / mm_init_default.S
1 /****************************************************************************
2  *                                                          __              *
3  *                ____ ___  ____ __  ______ ___  ____  ____/ /              *
4  *               / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __  /               *
5  *              / / / / / / /_/ />  </ / / / / / /_/ / /_/ /                *
6  *             /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/                 *
7  *                                                                          *
8  *               Nintendo DS & Gameboy Advance Sound System                 *
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 .global mmInitDefault
26
27 @----------------------------------------------------------------------------
28
29 #include "mp_defs.inc"
30
31 .equ mixlen, 1056       // 16khz
32
33         .bss
34         .align 2
35
36 __mixbuffer:
37         .space mixlen
38
39         .text
40         .thumb
41         .align 2
42
43 #define MM_SIZEOF_MODCH         40
44 #define MM_SIZEOF_ACTCH         28
45 #define MM_SIZEOF_MIXCH         24
46         
47 /****************************************************************************
48  * mmInitDefault( soundbank, #channels )
49  *
50  * Init maxmod with default settings.
51  ****************************************************************************/
52                                                 .thumb_func
53 mmInitDefault:
54         
55         push    {r0,r4,r5,r6,r7,lr}             // preserve regs, push soundbank
56         
57         //0 mode (3)
58         //1 mchcount (#channels)
59         //2 achcount (#channels)
60         //3 modch
61         //4 actch
62         //5 mixch
63         //6 mixmem (__mixbuffer)
64         //7 wavemem
65         
66         mov     r6, r1                          // r6=#channels
67         ldr     r0,=MM_SIZEOF_MODCH+MM_SIZEOF_ACTCH+MM_SIZEOF_MIXCH
68         mul     r0, r6
69         ldr     r4,=mixlen
70         add     r0, r4
71         bl      malloc
72         
73         mov     r7, r0                          // wavemem = beginning of buffer
74         add     r3, r0, r4                      // split up buffer into addresses [r3,r4,r5]
75         mov     r0, #MM_SIZEOF_MODCH            //
76         mul     r0, r6                          //
77         add     r4, r3, r0                      //
78         mov     r0, #MM_SIZEOF_ACTCH            //
79         mul     r0, r6                          //
80         add     r5, r4, r0                      //
81         mov     r0, #3                          //
82         mov     r1, r6                          //
83         mov     r2, r6                          //
84         ldr     r6,=__mixbuffer                 // r6 = mixbuffer (iwram)
85         
86         push    {r0-r7}
87         
88         mov     r0, sp                          // init maxmod, pass init struct
89         bl      mmInit                          //
90         
91         add     sp, #MM_GBA_SYSTEM_SIZE         // restore stack
92         
93         pop     {r4-r7}                         // return
94         pop     {r0}                            //
95         bx      r0                              //
96         
97 .pool