1(****************************************************************************
2 *                                                          __              *
3 *                ____ ___  ____ __  ______ ___  ____  ____/ /              *
4 *               / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __  /               *
5 *              / / / / / / /_/ />  </ / / / / / /_/ / /_/ /                *
6 *             /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/                 *
7 *                                                                          *
8 *         Copyright (c) 2008, Mukunda Johnson (mukunda@maxmod.org)         *
9 *                                                                          *
10 * Permission to use, copy, modify, and/or distribute this software for any *
11 * purpose with or without fee is hereby granted, provided that the above   *
12 * copyright notice and this permission notice appear in all copies.        *
13 *                                                                          *
14 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
15 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF         *
16 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR  *
17 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES   *
18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN    *
19 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF  *
20 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.           *
21 ****************************************************************************)
22
23
24{$ifdef NDS_INTERFACE}
25
26{$define _____badbear_____}
27
28type
29  tmm_mas_prefix = record
30    size     : mm_word;
31    _type    : mm_byte;
32    version  : mm_byte;
33    reserved : array [0..1] of mm_byte;
34  end;
35  mm_mas_prefix  = tmm_mas_prefix;
36  pmm_mas_prefix = ^tmm_mas_prefix;
37
38  tmm_mas_head = record
39    order_count     : mm_byte;
40    instr_count     : mm_byte;
41    sampl_count     : mm_byte;
42    pattn_count     : mm_byte;
43    flags           : mm_byte;
44    global_volume   : mm_byte;
45    initial_speed   : mm_byte;
46    initial_tempo   : mm_byte;
47    repeat_position : mm_byte;
48    reserved        : array [0..2] of mm_byte;
49    channel_volume  : array [0..31] of mm_byte;
50    channel_panning : array [0..31] of mm_byte;
51    sequence        : array [0..199] of mm_byte;
52
53    {$ifdef _____badbear_____}
54      tables        : array [0..0] of mm_addr;
55    {$endif}
56    // ::instrument table
57    // ::sample info table
58    // ::pattern table
59  end;
60  mm_mas_head = tmm_mas_head;
61  pmm_mas_head = ^tmm_mas_head;
62
63  tmm_mas_instrument = record
64    global_volume: mm_byte;
65    fadeout: mm_byte;
66    random_volume: mm_byte;
67    nna: mm_byte;
68    dct: mm_byte;
69    dca: mm_byte;
70    env_flags: mm_byte;
71    panning: mm_byte;
72    note_map: array [0..119] of mm_hword;
73    {$ifdef _____badbear_____}
74       envelopes: array [0..0] of mm_byte;
75    {$endif}
76    // ::envelopes
77  end;
78  mm_mas_instrument = tmm_mas_instrument;
79  pmm_mas_instrument = ^tmm_mas_instrument;
80
81  tmm_mas_envelope = record
82    size: mm_byte;
83    loop_start: mm_byte;
84    loop_end: mm_byte;
85    sus_start: mm_byte;
86    sus_end: mm_byte;
87    node_count: mm_byte;
88    is_filter: mm_byte; // (maybe supported someday :)
89    wasted: mm_byte;
90    {$ifdef _____badbear_____}
91      env_nodes: array [0..0] of mm_byte;
92    {$endif}
93    // ::envelope nodes
94  end;
95  mm_mas_envelope = tmm_mas_envelope;
96  pmm_mas_envelope = ^tmm_mas_envelope;
97
98  tmm_mas_sample_info = record
99    global_volume: mm_byte;
100    default_volume: mm_byte;
101    frequency: mm_hword;
102    av_type: mm_byte; // (auto vibrato)
103    av_depth: mm_byte;
104    av_speed: mm_byte;
105    panning: mm_byte;
106    av_rate: mm_hword;
107    msl_id: mm_hword;
108    {$ifdef _____badbear_____}
109      data: array [0..0] of mm_byte;
110    {$endif}
111    // ::sample may follow
112  end;
113  mm_mas_sample_info = tmm_mas_sample_info;
114  pmm_mas_sample_info = ^tmm_mas_sample_info;
115
116  tmm_mas_pattern = record
117    row_count: mm_byte;
118    {$ifdef _____badbear_____}
119      pattern_data: array [0..0] of mm_byte;
120    {$endif}
121    // ::pattern data
122  end;
123  mm_mas_pattern = tmm_mas_pattern;
124  pmm_mas_pattern = ^tmm_mas_pattern;
125
126  tmm_mas_gba_sample = record
127    length: mm_word;
128    loop_length: mm_word;
129    reserved: mm_hword;
130    default_frequency: mm_hword;
131    {$ifdef _____badbear_____}
132      data: array [0..0] of mm_byte;
133    {$endif}
134    // ::8-bit sample data
135  end;
136  mm_mas_gba_sample = tmm_mas_gba_sample;
137  pmm_mas_gba_sample = ^tmm_mas_gba_sample;
138
139  tmm_mas_ds_sample = record
140    loop_start: mm_word;
141    format: mm_byte;
142    repeat_mode: mm_byte;
143    default_frequency: mm_hword;
144    {$ifdef _____badbear_____}
145      data: array [0..0] of mm_byte;
146    {$endif}
147  	// ::sample data
148    case integer of
149      0: (loop_length: mm_word;);
150      1: (length: mm_word;);
151  end;
152  mm_mas_ds_sample = tmm_mas_ds_sample;
153  pmm_mas_ds_sample = ^tmm_mas_ds_sample;
154
155const
156  MM_SFORMAT_8BIT   = 0;
157  MM_SFORMAT_16BIT  = 1;
158  MM_SFORMAT_ADPCM  = 2;
159
160  MM_SREPEAT_FORWARD  = 1;
161  MM_SREPEAT_OFF      = 2;
162
163
164
165
166{$endif NDS_INTERFACE}
167
168