yaze
0.2.2
Link to the Past ROM Editor
Loading...
Searching...
No Matches
tracker.h
Go to the documentation of this file.
1
#ifndef YAZE_APP_ZELDA3_TRACKER_H
2
#define YAZE_APP_ZELDA3_TRACKER_H
3
4
#include <vector>
5
6
#include "
app/rom.h
"
7
#include "
util/macro.h
"
8
9
namespace
yaze
{
10
namespace
zelda3
{
11
18
namespace
music
{
19
20
// bank 19, 1A, 1B
21
// iirc 1A is OW, 1B is dungeon
22
// 19 is general spc stuff like samples, ects
23
constexpr
char
op_len
[32] = {1, 1, 2, 3, 0, 1, 2, 1, 2, 1, 1, 3, 0, 1, 2, 3,
24
1, 3, 3, 0, 1, 3, 0, 3, 3, 3, 1, 2, 0, 0, 0, 0};
25
26
static
int
sbank_ofs[] = {0xc8000, 0, 0xd8000, 0};
27
28
constexpr
char
fil1
[4] = {0, 15, 61, 115};
29
constexpr
char
fil2
[4] = {0, 4, 5, 6};
30
constexpr
char
fil3
[4] = {0, 0, 15, 13};
31
32
constexpr
int
kOverworldMusicBank
= 0x0D0000;
33
constexpr
int
kDungeonMusicBank
= 0x0D8000;
34
35
using
text_buf_ty
=
char
[512];
36
37
struct
SongSpcBlock
{
38
unsigned
short
start
;
39
unsigned
short
len
;
40
unsigned
short
relnum
;
41
unsigned
short
relsz
;
42
unsigned
short
*
relocs
;
43
unsigned
short
bank
;
44
unsigned
short
addr
;
45
unsigned
char
*
buf
;
46
int
flag
;
47
};
48
49
struct
SongRange
{
50
unsigned
short
start
;
51
unsigned
short
end
;
52
53
short
first
;
54
short
inst
;
55
short
bank
;
56
57
unsigned
char
endtime
;
58
unsigned
char
filler
;
59
60
int
editor
;
61
};
62
63
struct
SongPart
{
64
uint8_t
flag
;
65
uint8_t
inst
;
66
short
tbl
[8];
67
unsigned
short
addr
;
68
};
69
70
struct
Song
{
71
unsigned
char
flag
;
72
unsigned
char
inst
;
73
SongPart
**
tbl
;
74
short
numparts
;
75
short
lopst
;
76
unsigned
short
addr
;
77
bool
in_use
;
// true
78
};
79
80
struct
ZeldaWave
{
81
int
lopst
;
82
int
end
;
83
short
lflag
;
84
short
copy
;
85
short
*
buf
;
86
};
87
88
struct
SampleEdit
{
89
unsigned
short
flag
;
90
unsigned
short
init
;
91
unsigned
short
editsamp
;
92
int
width
;
93
int
height
;
94
int
pageh
;
95
int
pagev
;
96
int
zoom
;
97
int
scroll
;
98
int
page
;
99
101
int
sell
;
102
104
int
selr
;
105
106
int
editinst
;
107
108
ZeldaWave
*
zw
;
109
};
110
111
struct
ZeldaInstrument
{
112
unsigned
char
samp
;
113
unsigned
char
ad
;
114
unsigned
char
sr
;
115
unsigned
char
gain
;
116
unsigned
char
multhi
;
117
unsigned
char
multlo
;
118
};
119
120
struct
ZeldaSfxInstrument
{
121
unsigned
char
voll
;
122
unsigned
char
volr
;
123
short
freq
;
124
unsigned
char
samp
;
125
unsigned
char
ad
;
126
unsigned
char
sr
;
127
unsigned
char
gain
;
128
unsigned
char
multhi
;
129
};
130
131
struct
SpcCommand
{
132
unsigned
short
addr
;
133
short
next
;
134
short
prev
;
135
unsigned
char
flag
;
136
unsigned
char
cmd
;
137
unsigned
char
p1
;
138
unsigned
char
p2
;
139
unsigned
char
p3
;
140
unsigned
char
b1
;
141
unsigned
char
b2
;
142
unsigned
char
tim2
;
143
unsigned
short
tim
;
144
};
145
146
class
Tracker
{
147
public
:
148
SongSpcBlock
*
AllocSpcBlock
(
int
len,
int
bank);
149
150
unsigned
char
*
GetSpcAddr
(
Rom
&rom,
unsigned
short
addr,
short
bank);
151
152
short
AllocSpcCommand
();
153
154
short
GetBlockTime
(
Rom
&rom,
short
num,
short
prevtime);
155
156
short
SaveSpcCommand
(
Rom
&rom,
short
num,
short
songtime,
short
endtr);
157
short
LoadSpcCommand
(
Rom
&rom,
unsigned
short
addr,
short
bank,
int
t);
158
159
void
SaveSongs
(
Rom
&rom);
160
161
void
LoadSongs
(
Rom
&rom);
162
163
int
WriteSpcData
(
Rom
&rom,
void
*buf,
int
len,
int
addr,
int
spc,
int
limit);
164
165
void
EditTrack
(
Rom
&rom,
short
i);
166
167
void
NewSR
(
Rom
&rom,
int
bank);
168
169
private
:
170
// A "modified" flag
171
int
modf
;
172
173
int
mark_sr
;
174
175
int
mark_start
;
176
int
mark_end
;
177
int
mark_first
;
178
int
mark_last
;
179
180
int
numwave
;
181
int
numinst
;
182
int
numsndinst
;
183
184
int
sndinit
= 0;
185
186
int
sndlen1
;
187
int
sndlen2
;
188
int
m_ofs
;
189
int
w_modf
;
190
191
int
ss_num
;
192
int
ss_size
;
193
194
char
op_len
[32];
195
196
char
*
snddat1
;
197
char
*
snddat2
;
// more music stuff.
198
199
unsigned
short
ss_next
= 0;
200
unsigned
short
spclen
;
201
unsigned
short
numseg
;
202
203
short
spcbank
;
204
short
lastsr
;
205
short
ss_lasttime
;
206
short
srnum
;
207
short
srsize
;
208
short
numsong
[3];
// ditto
209
short
m_size
;
210
short
m_free
;
211
short
m_modf
;
// ???
212
short
m_loaded
;
213
214
short
t_loaded
;
215
short
t_modf
;
216
short
withhead
;
217
218
size_t
t_number
;
219
220
std::vector<Song>
songs
;
221
SongPart
*
sp_mark
;
222
SongRange
*
song_range_
;
223
SpcCommand
*
current_spc_command_
;
224
225
SongSpcBlock
**
ssblt
;
226
227
ZeldaWave
*
waves
;
228
ZeldaInstrument
*
insts
;
229
ZeldaSfxInstrument
*
sndinsts
;
230
};
231
232
}
// namespace music
233
}
// namespace zelda3
234
}
// namespace yaze
235
236
#endif
yaze::Rom
The Rom class is used to load, save, and modify Rom data.
Definition
rom.h:59
yaze::zelda3::music::Tracker
Definition
tracker.h:146
yaze::zelda3::music::Tracker::EditTrack
void EditTrack(Rom &rom, short i)
Definition
tracker.cc:1248
yaze::zelda3::music::Tracker::sndlen1
int sndlen1
Definition
tracker.h:186
yaze::zelda3::music::Tracker::GetSpcAddr
unsigned char * GetSpcAddr(Rom &rom, unsigned short addr, short bank)
Definition
tracker.cc:57
yaze::zelda3::music::Tracker::m_loaded
short m_loaded
Definition
tracker.h:212
yaze::zelda3::music::Tracker::t_number
size_t t_number
Definition
tracker.h:218
yaze::zelda3::music::Tracker::mark_first
int mark_first
Definition
tracker.h:177
yaze::zelda3::music::Tracker::AllocSpcCommand
short AllocSpcCommand()
Definition
tracker.cc:91
yaze::zelda3::music::Tracker::withhead
short withhead
Definition
tracker.h:216
yaze::zelda3::music::Tracker::AllocSpcBlock
SongSpcBlock * AllocSpcBlock(int len, int bank)
Definition
tracker.cc:34
yaze::zelda3::music::Tracker::ss_lasttime
short ss_lasttime
Definition
tracker.h:205
yaze::zelda3::music::Tracker::numinst
int numinst
Definition
tracker.h:181
yaze::zelda3::music::Tracker::SaveSongs
void SaveSongs(Rom &rom)
Definition
tracker.cc:800
yaze::zelda3::music::Tracker::t_loaded
short t_loaded
Definition
tracker.h:214
yaze::zelda3::music::Tracker::LoadSpcCommand
short LoadSpcCommand(Rom &rom, unsigned short addr, short bank, int t)
Definition
tracker.cc:207
yaze::zelda3::music::Tracker::op_len
char op_len[32]
Definition
tracker.h:194
yaze::zelda3::music::Tracker::GetBlockTime
short GetBlockTime(Rom &rom, short num, short prevtime)
Definition
tracker.cc:115
yaze::zelda3::music::Tracker::mark_end
int mark_end
Definition
tracker.h:176
yaze::zelda3::music::Tracker::mark_last
int mark_last
Definition
tracker.h:178
yaze::zelda3::music::Tracker::snddat1
char * snddat1
Definition
tracker.h:196
yaze::zelda3::music::Tracker::sp_mark
SongPart * sp_mark
Definition
tracker.h:221
yaze::zelda3::music::Tracker::t_modf
short t_modf
Definition
tracker.h:215
yaze::zelda3::music::Tracker::numsndinst
int numsndinst
Definition
tracker.h:182
yaze::zelda3::music::Tracker::lastsr
short lastsr
Definition
tracker.h:204
yaze::zelda3::music::Tracker::WriteSpcData
int WriteSpcData(Rom &rom, void *buf, int len, int addr, int spc, int limit)
Definition
tracker.cc:772
yaze::zelda3::music::Tracker::ss_next
unsigned short ss_next
Definition
tracker.h:199
yaze::zelda3::music::Tracker::waves
ZeldaWave * waves
Definition
tracker.h:227
yaze::zelda3::music::Tracker::numwave
int numwave
Definition
tracker.h:180
yaze::zelda3::music::Tracker::SaveSpcCommand
short SaveSpcCommand(Rom &rom, short num, short songtime, short endtr)
Definition
tracker.cc:651
yaze::zelda3::music::Tracker::ss_size
int ss_size
Definition
tracker.h:192
yaze::zelda3::music::Tracker::m_free
short m_free
Definition
tracker.h:210
yaze::zelda3::music::Tracker::m_modf
short m_modf
Definition
tracker.h:211
yaze::zelda3::music::Tracker::sndinsts
ZeldaSfxInstrument * sndinsts
Definition
tracker.h:229
yaze::zelda3::music::Tracker::snddat2
char * snddat2
Definition
tracker.h:197
yaze::zelda3::music::Tracker::m_size
short m_size
Definition
tracker.h:209
yaze::zelda3::music::Tracker::songs
std::vector< Song > songs
Definition
tracker.h:220
yaze::zelda3::music::Tracker::NewSR
void NewSR(Rom &rom, int bank)
Definition
tracker.cc:1298
yaze::zelda3::music::Tracker::current_spc_command_
SpcCommand * current_spc_command_
Definition
tracker.h:223
yaze::zelda3::music::Tracker::LoadSongs
void LoadSongs(Rom &rom)
Definition
tracker.cc:381
yaze::zelda3::music::Tracker::spcbank
short spcbank
Definition
tracker.h:203
yaze::zelda3::music::Tracker::sndinit
int sndinit
Definition
tracker.h:184
yaze::zelda3::music::Tracker::ss_num
int ss_num
Definition
tracker.h:191
yaze::zelda3::music::Tracker::spclen
unsigned short spclen
Definition
tracker.h:200
yaze::zelda3::music::Tracker::insts
ZeldaInstrument * insts
Definition
tracker.h:228
yaze::zelda3::music::Tracker::sndlen2
int sndlen2
Definition
tracker.h:187
yaze::zelda3::music::Tracker::song_range_
SongRange * song_range_
Definition
tracker.h:222
yaze::zelda3::music::Tracker::w_modf
int w_modf
Definition
tracker.h:189
yaze::zelda3::music::Tracker::srnum
short srnum
Definition
tracker.h:206
yaze::zelda3::music::Tracker::m_ofs
int m_ofs
Definition
tracker.h:188
yaze::zelda3::music::Tracker::modf
int modf
Definition
tracker.h:171
yaze::zelda3::music::Tracker::mark_sr
int mark_sr
Definition
tracker.h:173
yaze::zelda3::music::Tracker::numseg
unsigned short numseg
Definition
tracker.h:201
yaze::zelda3::music::Tracker::ssblt
SongSpcBlock ** ssblt
Definition
tracker.h:225
yaze::zelda3::music::Tracker::numsong
short numsong[3]
Definition
tracker.h:208
yaze::zelda3::music::Tracker::mark_start
int mark_start
Definition
tracker.h:175
yaze::zelda3::music::Tracker::srsize
short srsize
Definition
tracker.h:207
macro.h
yaze::zelda3::music
Contains classes and functions for handling music data in Zelda 3.
Definition
tracker.cc:33
yaze::zelda3::music::fil3
constexpr char fil3[4]
Definition
tracker.h:30
yaze::zelda3::music::fil1
constexpr char fil1[4]
Definition
tracker.h:28
yaze::zelda3::music::kOverworldMusicBank
constexpr int kOverworldMusicBank
Definition
tracker.h:32
yaze::zelda3::music::fil2
constexpr char fil2[4]
Definition
tracker.h:29
yaze::zelda3::music::op_len
constexpr char op_len[32]
Definition
tracker.h:23
yaze::zelda3::music::text_buf_ty
char[512] text_buf_ty
Definition
tracker.h:35
yaze::zelda3::music::kDungeonMusicBank
constexpr int kDungeonMusicBank
Definition
tracker.h:33
yaze::zelda3
Zelda 3 specific classes and functions.
yaze
Main namespace for the application.
Definition
controller.cc:18
rom.h
yaze::zelda3::music::SampleEdit
Definition
tracker.h:88
yaze::zelda3::music::SampleEdit::editinst
int editinst
Definition
tracker.h:106
yaze::zelda3::music::SampleEdit::selr
int selr
Right hand sample selection point.
Definition
tracker.h:104
yaze::zelda3::music::SampleEdit::pagev
int pagev
Definition
tracker.h:95
yaze::zelda3::music::SampleEdit::width
int width
Definition
tracker.h:92
yaze::zelda3::music::SampleEdit::height
int height
Definition
tracker.h:93
yaze::zelda3::music::SampleEdit::editsamp
unsigned short editsamp
Definition
tracker.h:91
yaze::zelda3::music::SampleEdit::flag
unsigned short flag
Definition
tracker.h:89
yaze::zelda3::music::SampleEdit::zoom
int zoom
Definition
tracker.h:96
yaze::zelda3::music::SampleEdit::pageh
int pageh
Definition
tracker.h:94
yaze::zelda3::music::SampleEdit::zw
ZeldaWave * zw
Definition
tracker.h:108
yaze::zelda3::music::SampleEdit::sell
int sell
Left hand sample selection point.
Definition
tracker.h:101
yaze::zelda3::music::SampleEdit::init
unsigned short init
Definition
tracker.h:90
yaze::zelda3::music::SampleEdit::page
int page
Definition
tracker.h:98
yaze::zelda3::music::SampleEdit::scroll
int scroll
Definition
tracker.h:97
yaze::zelda3::music::SongPart
Definition
tracker.h:63
yaze::zelda3::music::SongPart::addr
unsigned short addr
Definition
tracker.h:67
yaze::zelda3::music::SongPart::flag
uint8_t flag
Definition
tracker.h:64
yaze::zelda3::music::SongPart::tbl
short tbl[8]
Definition
tracker.h:66
yaze::zelda3::music::SongPart::inst
uint8_t inst
Definition
tracker.h:65
yaze::zelda3::music::SongRange
Definition
tracker.h:49
yaze::zelda3::music::SongRange::end
unsigned short end
Definition
tracker.h:51
yaze::zelda3::music::SongRange::start
unsigned short start
Definition
tracker.h:50
yaze::zelda3::music::SongRange::inst
short inst
Definition
tracker.h:54
yaze::zelda3::music::SongRange::editor
int editor
Definition
tracker.h:60
yaze::zelda3::music::SongRange::bank
short bank
Definition
tracker.h:55
yaze::zelda3::music::SongRange::filler
unsigned char filler
Definition
tracker.h:58
yaze::zelda3::music::SongRange::endtime
unsigned char endtime
Definition
tracker.h:57
yaze::zelda3::music::SongRange::first
short first
Definition
tracker.h:53
yaze::zelda3::music::SongSpcBlock
Definition
tracker.h:37
yaze::zelda3::music::SongSpcBlock::len
unsigned short len
Definition
tracker.h:39
yaze::zelda3::music::SongSpcBlock::flag
int flag
Definition
tracker.h:46
yaze::zelda3::music::SongSpcBlock::start
unsigned short start
Definition
tracker.h:38
yaze::zelda3::music::SongSpcBlock::relocs
unsigned short * relocs
Definition
tracker.h:42
yaze::zelda3::music::SongSpcBlock::addr
unsigned short addr
Definition
tracker.h:44
yaze::zelda3::music::SongSpcBlock::bank
unsigned short bank
Definition
tracker.h:43
yaze::zelda3::music::SongSpcBlock::buf
unsigned char * buf
Definition
tracker.h:45
yaze::zelda3::music::SongSpcBlock::relsz
unsigned short relsz
Definition
tracker.h:41
yaze::zelda3::music::SongSpcBlock::relnum
unsigned short relnum
Definition
tracker.h:40
yaze::zelda3::music::Song
Definition
tracker.h:70
yaze::zelda3::music::Song::lopst
short lopst
Definition
tracker.h:75
yaze::zelda3::music::Song::tbl
SongPart ** tbl
Definition
tracker.h:73
yaze::zelda3::music::Song::in_use
bool in_use
Definition
tracker.h:77
yaze::zelda3::music::Song::flag
unsigned char flag
Definition
tracker.h:71
yaze::zelda3::music::Song::numparts
short numparts
Definition
tracker.h:74
yaze::zelda3::music::Song::inst
unsigned char inst
Definition
tracker.h:72
yaze::zelda3::music::Song::addr
unsigned short addr
Definition
tracker.h:76
yaze::zelda3::music::SpcCommand
Definition
tracker.h:131
yaze::zelda3::music::SpcCommand::next
short next
Definition
tracker.h:133
yaze::zelda3::music::SpcCommand::tim2
unsigned char tim2
Definition
tracker.h:142
yaze::zelda3::music::SpcCommand::flag
unsigned char flag
Definition
tracker.h:135
yaze::zelda3::music::SpcCommand::b1
unsigned char b1
Definition
tracker.h:140
yaze::zelda3::music::SpcCommand::p1
unsigned char p1
Definition
tracker.h:137
yaze::zelda3::music::SpcCommand::b2
unsigned char b2
Definition
tracker.h:141
yaze::zelda3::music::SpcCommand::tim
unsigned short tim
Definition
tracker.h:143
yaze::zelda3::music::SpcCommand::cmd
unsigned char cmd
Definition
tracker.h:136
yaze::zelda3::music::SpcCommand::p3
unsigned char p3
Definition
tracker.h:139
yaze::zelda3::music::SpcCommand::addr
unsigned short addr
Definition
tracker.h:132
yaze::zelda3::music::SpcCommand::prev
short prev
Definition
tracker.h:134
yaze::zelda3::music::SpcCommand::p2
unsigned char p2
Definition
tracker.h:138
yaze::zelda3::music::ZeldaInstrument
Definition
tracker.h:111
yaze::zelda3::music::ZeldaInstrument::samp
unsigned char samp
Definition
tracker.h:112
yaze::zelda3::music::ZeldaInstrument::ad
unsigned char ad
Definition
tracker.h:113
yaze::zelda3::music::ZeldaInstrument::multhi
unsigned char multhi
Definition
tracker.h:116
yaze::zelda3::music::ZeldaInstrument::sr
unsigned char sr
Definition
tracker.h:114
yaze::zelda3::music::ZeldaInstrument::multlo
unsigned char multlo
Definition
tracker.h:117
yaze::zelda3::music::ZeldaInstrument::gain
unsigned char gain
Definition
tracker.h:115
yaze::zelda3::music::ZeldaSfxInstrument
Definition
tracker.h:120
yaze::zelda3::music::ZeldaSfxInstrument::sr
unsigned char sr
Definition
tracker.h:126
yaze::zelda3::music::ZeldaSfxInstrument::multhi
unsigned char multhi
Definition
tracker.h:128
yaze::zelda3::music::ZeldaSfxInstrument::voll
unsigned char voll
Definition
tracker.h:121
yaze::zelda3::music::ZeldaSfxInstrument::samp
unsigned char samp
Definition
tracker.h:124
yaze::zelda3::music::ZeldaSfxInstrument::freq
short freq
Definition
tracker.h:123
yaze::zelda3::music::ZeldaSfxInstrument::volr
unsigned char volr
Definition
tracker.h:122
yaze::zelda3::music::ZeldaSfxInstrument::gain
unsigned char gain
Definition
tracker.h:127
yaze::zelda3::music::ZeldaSfxInstrument::ad
unsigned char ad
Definition
tracker.h:125
yaze::zelda3::music::ZeldaWave
Definition
tracker.h:80
yaze::zelda3::music::ZeldaWave::lflag
short lflag
Definition
tracker.h:83
yaze::zelda3::music::ZeldaWave::lopst
int lopst
Definition
tracker.h:81
yaze::zelda3::music::ZeldaWave::buf
short * buf
Definition
tracker.h:85
yaze::zelda3::music::ZeldaWave::copy
short copy
Definition
tracker.h:84
yaze::zelda3::music::ZeldaWave::end
int end
Definition
tracker.h:82
src
app
zelda3
music
tracker.h
Generated by
1.13.2