yaze
0.2.0
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 <cstdint>
5
#include <memory>
6
#include <string>
7
#include <vector>
8
9
#include "absl/status/status.h"
10
#include "
app/core/constants.h
"
11
#include "
app/gfx/bitmap.h
"
12
#include "
app/gfx/snes_tile.h
"
13
#include "
app/rom.h
"
14
15
namespace
yaze
{
16
namespace
app {
17
namespace
zelda3 {
18
25
namespace
music {
26
27
// bank 19, 1A, 1B
28
// iirc 1A is OW, 1B is dungeon
29
// 19 is general spc stuff like samples, ects
30
constexpr
char
op_len
[32] = {1, 1, 2, 3, 0, 1, 2, 1, 2, 1, 1, 3, 0, 1, 2, 3,
31
1, 3, 3, 0, 1, 3, 0, 3, 3, 3, 1, 2, 0, 0, 0, 0};
32
33
// =============================================================================
34
35
static
int
sbank_ofs[] = {0xc8000, 0, 0xd8000, 0};
36
37
constexpr
char
fil1
[4] = {0, 15, 61, 115};
38
constexpr
char
fil2
[4] = {0, 4, 5, 6};
39
constexpr
char
fil3
[4] = {0, 0, 15, 13};
40
41
constexpr
int
kOverworldMusicBank
= 0x0D0000;
42
constexpr
int
kDungeonMusicBank
= 0x0D8000;
43
44
using
text_buf_ty
=
char
[512];
45
// ============================================================================
46
47
struct
SongSPCBlock
{
48
unsigned
short
start
;
49
unsigned
short
len
;
50
unsigned
short
relnum
;
51
unsigned
short
relsz
;
52
unsigned
short
*
relocs
;
53
unsigned
short
bank
;
54
unsigned
short
addr
;
55
unsigned
char
*
buf
;
56
int
flag
;
57
};
58
59
// =============================================================================
60
61
struct
SongRange
{
62
unsigned
short
start
;
63
unsigned
short
end
;
64
65
short
first
;
66
short
inst
;
67
short
bank
;
68
69
unsigned
char
endtime
;
70
unsigned
char
filler
;
71
72
int
editor
;
73
};
74
75
// =============================================================================
76
77
struct
SongPart
{
78
uchar
flag
;
79
uchar
inst
;
80
short
tbl
[8];
81
unsigned
short
addr
;
82
};
83
84
// =============================================================================
85
86
struct
Song
{
87
unsigned
char
flag
;
88
unsigned
char
inst
;
89
SongPart
**
tbl
;
90
short
numparts
;
91
short
lopst
;
92
unsigned
short
addr
;
93
bool
in_use
;
// true
94
};
95
// =============================================================================
96
97
struct
ZeldaWave
{
98
int
lopst
;
99
int
end
;
100
short
lflag
;
101
short
copy
;
102
short
*
buf
;
103
};
104
105
// ============================================================================
106
107
struct
SampleEdit
{
108
unsigned
short
flag
;
109
unsigned
short
init
;
110
unsigned
short
editsamp
;
111
int
width
;
112
int
height
;
113
int
pageh
;
114
int
pagev
;
115
int
zoom
;
116
int
scroll
;
117
int
page
;
118
120
int
sell
;
121
123
int
selr
;
124
125
int
editinst
;
126
127
ZeldaWave
*
zw
;
128
};
129
130
// =============================================================================
131
132
struct
ZeldaInstrument
{
133
unsigned
char
samp
;
134
unsigned
char
ad
;
135
unsigned
char
sr
;
136
unsigned
char
gain
;
137
unsigned
char
multhi
;
138
unsigned
char
multlo
;
139
};
140
141
// =============================================================================
142
143
struct
ZeldaSfxInstrument
{
144
unsigned
char
voll
;
145
unsigned
char
volr
;
146
short
freq
;
147
unsigned
char
samp
;
148
unsigned
char
ad
;
149
unsigned
char
sr
;
150
unsigned
char
gain
;
151
unsigned
char
multhi
;
152
};
153
154
// =============================================================================
155
156
struct
SPCCommand
{
157
unsigned
short
addr
;
158
short
next
;
159
short
prev
;
160
unsigned
char
flag
;
161
unsigned
char
cmd
;
162
unsigned
char
p1
;
163
unsigned
char
p2
;
164
unsigned
char
p3
;
165
unsigned
char
b1
;
166
unsigned
char
b2
;
167
unsigned
char
tim2
;
168
unsigned
short
tim
;
169
};
170
171
// =============================================================================
172
173
class
Tracker
{
174
public
:
175
SongSPCBlock
*
AllocSPCBlock
(
int
len,
int
bank);
176
177
unsigned
char
*
GetSPCAddr
(
Rom
&rom,
unsigned
short
addr,
short
bank);
178
179
short
AllocSPCCommand
();
180
181
short
GetBlockTime
(
Rom
&rom,
short
num,
short
prevtime);
182
183
short
SaveSPCCommand
(
Rom
&rom,
short
num,
short
songtime,
short
endtr);
184
short
LoadSPCCommand
(
Rom
&rom,
unsigned
short
addr,
short
bank,
int
t);
185
186
void
SaveSongs
(
Rom
&rom);
187
188
void
LoadSongs
(
Rom
&rom);
189
190
int
WriteSPCData
(
Rom
&rom,
void
*buf,
int
len,
int
addr,
int
spc,
int
limit);
191
192
void
EditTrack
(
Rom
&rom,
short
i);
193
194
void
NewSR
(
Rom
&rom,
int
bank);
195
196
private
:
197
// A "modified" flag
198
int
modf
;
199
200
int
mark_sr
;
201
202
int
mark_start
;
203
int
mark_end
;
204
int
mark_first
;
205
int
mark_last
;
206
207
int
numwave
;
208
int
numinst
;
209
int
numsndinst
;
210
211
int
sndinit
= 0;
212
213
int
sndlen1
;
214
int
sndlen2
;
215
int
m_ofs
;
216
int
w_modf
;
217
218
int
ss_num
;
219
int
ss_size
;
220
221
char
op_len
[32];
222
223
char
*
snddat1
;
224
char
*
snddat2
;
// more music stuff.
225
226
unsigned
short
ss_next
= 0;
227
unsigned
short
spclen
;
228
unsigned
short
numseg
;
229
230
short
spcbank
;
231
short
lastsr
;
232
short
ss_lasttime
;
233
short
srnum
;
234
short
srsize
;
235
short
numsong
[3];
// ditto
236
short
m_size
;
237
short
m_free
;
238
short
m_modf
;
// ???
239
short
m_loaded
;
240
241
short
t_loaded
;
242
short
t_modf
;
243
short
withhead
;
244
245
size_t
t_number
;
246
247
std::vector<Song>
songs
;
248
SongPart
*
sp_mark
;
249
SongRange
*
song_range_
;
250
SPCCommand
*
current_spc_command_
;
251
252
SongSPCBlock
**
ssblt
;
253
254
ZeldaWave
*
waves
;
255
ZeldaInstrument
*
insts
;
256
ZeldaSfxInstrument
*
sndinsts
;
257
};
258
259
// =============================================================================
260
261
}
// namespace music
262
}
// namespace zelda3
263
}
// namespace app
264
}
// namespace yaze
265
266
#endif
bitmap.h
yaze::app::Rom
The Rom class is used to load, save, and modify Rom data.
Definition
rom.h:145
yaze::app::zelda3::music::Tracker
Definition
tracker.h:173
yaze::app::zelda3::music::Tracker::mark_first
int mark_first
Definition
tracker.h:204
yaze::app::zelda3::music::Tracker::sndinsts
ZeldaSfxInstrument * sndinsts
Definition
tracker.h:256
yaze::app::zelda3::music::Tracker::spcbank
short spcbank
Definition
tracker.h:230
yaze::app::zelda3::music::Tracker::t_loaded
short t_loaded
Definition
tracker.h:241
yaze::app::zelda3::music::Tracker::m_free
short m_free
Definition
tracker.h:237
yaze::app::zelda3::music::Tracker::t_modf
short t_modf
Definition
tracker.h:242
yaze::app::zelda3::music::Tracker::numsong
short numsong[3]
Definition
tracker.h:235
yaze::app::zelda3::music::Tracker::EditTrack
void EditTrack(Rom &rom, short i)
Definition
tracker.cc:1266
yaze::app::zelda3::music::Tracker::numseg
unsigned short numseg
Definition
tracker.h:228
yaze::app::zelda3::music::Tracker::op_len
char op_len[32]
Definition
tracker.h:221
yaze::app::zelda3::music::Tracker::snddat1
char * snddat1
Definition
tracker.h:223
yaze::app::zelda3::music::Tracker::m_modf
short m_modf
Definition
tracker.h:238
yaze::app::zelda3::music::Tracker::numsndinst
int numsndinst
Definition
tracker.h:209
yaze::app::zelda3::music::Tracker::SaveSongs
void SaveSongs(Rom &rom)
Definition
tracker.cc:816
yaze::app::zelda3::music::Tracker::mark_last
int mark_last
Definition
tracker.h:205
yaze::app::zelda3::music::Tracker::ssblt
SongSPCBlock ** ssblt
Definition
tracker.h:252
yaze::app::zelda3::music::Tracker::songs
std::vector< Song > songs
Definition
tracker.h:247
yaze::app::zelda3::music::Tracker::ss_size
int ss_size
Definition
tracker.h:219
yaze::app::zelda3::music::Tracker::ss_num
int ss_num
Definition
tracker.h:218
yaze::app::zelda3::music::Tracker::AllocSPCBlock
SongSPCBlock * AllocSPCBlock(int len, int bank)
Definition
tracker.cc:41
yaze::app::zelda3::music::Tracker::song_range_
SongRange * song_range_
Definition
tracker.h:249
yaze::app::zelda3::music::Tracker::numinst
int numinst
Definition
tracker.h:208
yaze::app::zelda3::music::Tracker::m_size
short m_size
Definition
tracker.h:236
yaze::app::zelda3::music::Tracker::lastsr
short lastsr
Definition
tracker.h:231
yaze::app::zelda3::music::Tracker::sndlen2
int sndlen2
Definition
tracker.h:214
yaze::app::zelda3::music::Tracker::GetSPCAddr
unsigned char * GetSPCAddr(Rom &rom, unsigned short addr, short bank)
Definition
tracker.cc:66
yaze::app::zelda3::music::Tracker::insts
ZeldaInstrument * insts
Definition
tracker.h:255
yaze::app::zelda3::music::Tracker::t_number
size_t t_number
Definition
tracker.h:245
yaze::app::zelda3::music::Tracker::sndinit
int sndinit
Definition
tracker.h:211
yaze::app::zelda3::music::Tracker::LoadSPCCommand
short LoadSPCCommand(Rom &rom, unsigned short addr, short bank, int t)
Definition
tracker.cc:222
yaze::app::zelda3::music::Tracker::numwave
int numwave
Definition
tracker.h:207
yaze::app::zelda3::music::Tracker::WriteSPCData
int WriteSPCData(Rom &rom, void *buf, int len, int addr, int spc, int limit)
Definition
tracker.cc:786
yaze::app::zelda3::music::Tracker::waves
ZeldaWave * waves
Definition
tracker.h:254
yaze::app::zelda3::music::Tracker::mark_end
int mark_end
Definition
tracker.h:203
yaze::app::zelda3::music::Tracker::snddat2
char * snddat2
Definition
tracker.h:224
yaze::app::zelda3::music::Tracker::NewSR
void NewSR(Rom &rom, int bank)
Definition
tracker.cc:1316
yaze::app::zelda3::music::Tracker::AllocSPCCommand
short AllocSPCCommand()
Definition
tracker.cc:102
yaze::app::zelda3::music::Tracker::ss_next
unsigned short ss_next
Definition
tracker.h:226
yaze::app::zelda3::music::Tracker::withhead
short withhead
Definition
tracker.h:243
yaze::app::zelda3::music::Tracker::current_spc_command_
SPCCommand * current_spc_command_
Definition
tracker.h:250
yaze::app::zelda3::music::Tracker::modf
int modf
Definition
tracker.h:198
yaze::app::zelda3::music::Tracker::mark_start
int mark_start
Definition
tracker.h:202
yaze::app::zelda3::music::Tracker::sndlen1
int sndlen1
Definition
tracker.h:213
yaze::app::zelda3::music::Tracker::w_modf
int w_modf
Definition
tracker.h:216
yaze::app::zelda3::music::Tracker::spclen
unsigned short spclen
Definition
tracker.h:227
yaze::app::zelda3::music::Tracker::LoadSongs
void LoadSongs(Rom &rom)
Definition
tracker.cc:393
yaze::app::zelda3::music::Tracker::ss_lasttime
short ss_lasttime
Definition
tracker.h:232
yaze::app::zelda3::music::Tracker::mark_sr
int mark_sr
Definition
tracker.h:200
yaze::app::zelda3::music::Tracker::GetBlockTime
short GetBlockTime(Rom &rom, short num, short prevtime)
Definition
tracker.cc:128
yaze::app::zelda3::music::Tracker::SaveSPCCommand
short SaveSPCCommand(Rom &rom, short num, short songtime, short endtr)
Definition
tracker.cc:663
yaze::app::zelda3::music::Tracker::srsize
short srsize
Definition
tracker.h:234
yaze::app::zelda3::music::Tracker::sp_mark
SongPart * sp_mark
Definition
tracker.h:248
yaze::app::zelda3::music::Tracker::srnum
short srnum
Definition
tracker.h:233
yaze::app::zelda3::music::Tracker::m_ofs
int m_ofs
Definition
tracker.h:215
yaze::app::zelda3::music::Tracker::m_loaded
short m_loaded
Definition
tracker.h:239
constants.h
uchar
unsigned char uchar
Definition
constants.h:121
yaze::app::zelda3::music::kDungeonMusicBank
constexpr int kDungeonMusicBank
Definition
tracker.h:42
yaze::app::zelda3::music::kOverworldMusicBank
constexpr int kOverworldMusicBank
Definition
tracker.h:41
yaze::app::zelda3::music::fil3
constexpr char fil3[4]
Definition
tracker.h:39
yaze::app::zelda3::music::fil2
constexpr char fil2[4]
Definition
tracker.h:38
yaze::app::zelda3::music::text_buf_ty
char[512] text_buf_ty
Definition
tracker.h:44
yaze::app::zelda3::music::fil1
constexpr char fil1[4]
Definition
tracker.h:37
yaze::app::zelda3::music::op_len
constexpr char op_len[32]
Definition
tracker.h:30
yaze
Definition
common.cc:21
rom.h
snes_tile.h
yaze::app::zelda3::music::SPCCommand
Definition
tracker.h:156
yaze::app::zelda3::music::SPCCommand::prev
short prev
Definition
tracker.h:159
yaze::app::zelda3::music::SPCCommand::addr
unsigned short addr
Definition
tracker.h:157
yaze::app::zelda3::music::SPCCommand::tim2
unsigned char tim2
Definition
tracker.h:167
yaze::app::zelda3::music::SPCCommand::tim
unsigned short tim
Definition
tracker.h:168
yaze::app::zelda3::music::SPCCommand::b2
unsigned char b2
Definition
tracker.h:166
yaze::app::zelda3::music::SPCCommand::flag
unsigned char flag
Definition
tracker.h:160
yaze::app::zelda3::music::SPCCommand::next
short next
Definition
tracker.h:158
yaze::app::zelda3::music::SPCCommand::p3
unsigned char p3
Definition
tracker.h:164
yaze::app::zelda3::music::SPCCommand::cmd
unsigned char cmd
Definition
tracker.h:161
yaze::app::zelda3::music::SPCCommand::p2
unsigned char p2
Definition
tracker.h:163
yaze::app::zelda3::music::SPCCommand::b1
unsigned char b1
Definition
tracker.h:165
yaze::app::zelda3::music::SPCCommand::p1
unsigned char p1
Definition
tracker.h:162
yaze::app::zelda3::music::SampleEdit
Definition
tracker.h:107
yaze::app::zelda3::music::SampleEdit::editinst
int editinst
Definition
tracker.h:125
yaze::app::zelda3::music::SampleEdit::selr
int selr
Right hand sample selection point.
Definition
tracker.h:123
yaze::app::zelda3::music::SampleEdit::pagev
int pagev
Definition
tracker.h:114
yaze::app::zelda3::music::SampleEdit::flag
unsigned short flag
Definition
tracker.h:108
yaze::app::zelda3::music::SampleEdit::editsamp
unsigned short editsamp
Definition
tracker.h:110
yaze::app::zelda3::music::SampleEdit::width
int width
Definition
tracker.h:111
yaze::app::zelda3::music::SampleEdit::zw
ZeldaWave * zw
Definition
tracker.h:127
yaze::app::zelda3::music::SampleEdit::init
unsigned short init
Definition
tracker.h:109
yaze::app::zelda3::music::SampleEdit::sell
int sell
Left hand sample selection point.
Definition
tracker.h:120
yaze::app::zelda3::music::SampleEdit::page
int page
Definition
tracker.h:117
yaze::app::zelda3::music::SampleEdit::pageh
int pageh
Definition
tracker.h:113
yaze::app::zelda3::music::SampleEdit::height
int height
Definition
tracker.h:112
yaze::app::zelda3::music::SampleEdit::scroll
int scroll
Definition
tracker.h:116
yaze::app::zelda3::music::SampleEdit::zoom
int zoom
Definition
tracker.h:115
yaze::app::zelda3::music::SongPart
Definition
tracker.h:77
yaze::app::zelda3::music::SongPart::addr
unsigned short addr
Definition
tracker.h:81
yaze::app::zelda3::music::SongPart::tbl
short tbl[8]
Definition
tracker.h:80
yaze::app::zelda3::music::SongPart::flag
uchar flag
Definition
tracker.h:78
yaze::app::zelda3::music::SongPart::inst
uchar inst
Definition
tracker.h:79
yaze::app::zelda3::music::SongRange
Definition
tracker.h:61
yaze::app::zelda3::music::SongRange::end
unsigned short end
Definition
tracker.h:63
yaze::app::zelda3::music::SongRange::filler
unsigned char filler
Definition
tracker.h:70
yaze::app::zelda3::music::SongRange::start
unsigned short start
Definition
tracker.h:62
yaze::app::zelda3::music::SongRange::bank
short bank
Definition
tracker.h:67
yaze::app::zelda3::music::SongRange::editor
int editor
Definition
tracker.h:72
yaze::app::zelda3::music::SongRange::inst
short inst
Definition
tracker.h:66
yaze::app::zelda3::music::SongRange::first
short first
Definition
tracker.h:65
yaze::app::zelda3::music::SongRange::endtime
unsigned char endtime
Definition
tracker.h:69
yaze::app::zelda3::music::SongSPCBlock
Definition
tracker.h:47
yaze::app::zelda3::music::SongSPCBlock::buf
unsigned char * buf
Definition
tracker.h:55
yaze::app::zelda3::music::SongSPCBlock::flag
int flag
Definition
tracker.h:56
yaze::app::zelda3::music::SongSPCBlock::bank
unsigned short bank
Definition
tracker.h:53
yaze::app::zelda3::music::SongSPCBlock::start
unsigned short start
Definition
tracker.h:48
yaze::app::zelda3::music::SongSPCBlock::relocs
unsigned short * relocs
Definition
tracker.h:52
yaze::app::zelda3::music::SongSPCBlock::relsz
unsigned short relsz
Definition
tracker.h:51
yaze::app::zelda3::music::SongSPCBlock::addr
unsigned short addr
Definition
tracker.h:54
yaze::app::zelda3::music::SongSPCBlock::relnum
unsigned short relnum
Definition
tracker.h:50
yaze::app::zelda3::music::SongSPCBlock::len
unsigned short len
Definition
tracker.h:49
yaze::app::zelda3::music::Song
Definition
tracker.h:86
yaze::app::zelda3::music::Song::inst
unsigned char inst
Definition
tracker.h:88
yaze::app::zelda3::music::Song::lopst
short lopst
Definition
tracker.h:91
yaze::app::zelda3::music::Song::addr
unsigned short addr
Definition
tracker.h:92
yaze::app::zelda3::music::Song::numparts
short numparts
Definition
tracker.h:90
yaze::app::zelda3::music::Song::in_use
bool in_use
Definition
tracker.h:93
yaze::app::zelda3::music::Song::flag
unsigned char flag
Definition
tracker.h:87
yaze::app::zelda3::music::Song::tbl
SongPart ** tbl
Definition
tracker.h:89
yaze::app::zelda3::music::ZeldaInstrument
Definition
tracker.h:132
yaze::app::zelda3::music::ZeldaInstrument::samp
unsigned char samp
Definition
tracker.h:133
yaze::app::zelda3::music::ZeldaInstrument::ad
unsigned char ad
Definition
tracker.h:134
yaze::app::zelda3::music::ZeldaInstrument::gain
unsigned char gain
Definition
tracker.h:136
yaze::app::zelda3::music::ZeldaInstrument::sr
unsigned char sr
Definition
tracker.h:135
yaze::app::zelda3::music::ZeldaInstrument::multhi
unsigned char multhi
Definition
tracker.h:137
yaze::app::zelda3::music::ZeldaInstrument::multlo
unsigned char multlo
Definition
tracker.h:138
yaze::app::zelda3::music::ZeldaSfxInstrument
Definition
tracker.h:143
yaze::app::zelda3::music::ZeldaSfxInstrument::ad
unsigned char ad
Definition
tracker.h:148
yaze::app::zelda3::music::ZeldaSfxInstrument::volr
unsigned char volr
Definition
tracker.h:145
yaze::app::zelda3::music::ZeldaSfxInstrument::multhi
unsigned char multhi
Definition
tracker.h:151
yaze::app::zelda3::music::ZeldaSfxInstrument::gain
unsigned char gain
Definition
tracker.h:150
yaze::app::zelda3::music::ZeldaSfxInstrument::voll
unsigned char voll
Definition
tracker.h:144
yaze::app::zelda3::music::ZeldaSfxInstrument::freq
short freq
Definition
tracker.h:146
yaze::app::zelda3::music::ZeldaSfxInstrument::sr
unsigned char sr
Definition
tracker.h:149
yaze::app::zelda3::music::ZeldaSfxInstrument::samp
unsigned char samp
Definition
tracker.h:147
yaze::app::zelda3::music::ZeldaWave
Definition
tracker.h:97
yaze::app::zelda3::music::ZeldaWave::buf
short * buf
Definition
tracker.h:102
yaze::app::zelda3::music::ZeldaWave::lopst
int lopst
Definition
tracker.h:98
yaze::app::zelda3::music::ZeldaWave::end
int end
Definition
tracker.h:99
yaze::app::zelda3::music::ZeldaWave::copy
short copy
Definition
tracker.h:101
yaze::app::zelda3::music::ZeldaWave::lflag
short lflag
Definition
tracker.h:100
src
app
zelda3
music
tracker.h
Generated by
1.12.0