midi: play c major scale

TIMA occurs at half the speed predicted in the SCSP manual in
mednafen, but at the correct speed in Kronos. I don't know which is
correct.
This commit is contained in:
Zack Buhman 2023-06-27 10:15:14 +00:00
parent c26bdd2630
commit 778138971f
14 changed files with 809 additions and 39 deletions

1
.gitignore vendored
View File

@ -8,6 +8,7 @@
*.png *.png
*.out *.out
*.pcm *.pcm
*.su
res/mai.data res/mai.data
tools/ttf-convert tools/ttf-convert
tools/ttf-bitmap tools/ttf-bitmap

View File

@ -108,20 +108,20 @@ scsp/%-44100-s16be-1ch-100sample.pcm:
synth 100s $* 440 vol -10dB synth 100s $* 440 vol -10dB
mv $@.raw $@ mv $@.raw $@
scsp/slot.elf: scsp/slot.o scsp/sine-44100-s16be-1ch-1sec.pcm.o
m68k: m68k:
m68k/%.bin: m68k m68k/%.bin: m68k
$(MAKE) -C m68k $(notdir $@) $(MAKE) -C m68k $(notdir $@)
scsp/slot.elf: scsp/slot.o scsp/sine-44100-s16be-1ch-1sec.pcm.o
scsp/sound_cpu__slot.elf: scsp/sound_cpu__slot.o m68k/slot.bin.o scsp/sound_cpu__slot.elf: scsp/sound_cpu__slot.o m68k/slot.bin.o
scsp/sound_cpu__interrupt.elf: scsp/sound_cpu__interrupt.o m68k/interrupt.bin.o sh/lib1funcs.o res/sperrypc.font.bin.o common/draw_font.o common/palette.o scsp/sound_cpu__interrupt.elf: scsp/sound_cpu__interrupt.o m68k/interrupt.bin.o sh/lib1funcs.o res/sperrypc.font.bin.o common/draw_font.o common/palette.o
scsp/fm.elf: scsp/fm.o res/nec.bitmap.bin.o sh/lib1funcs.o saturn/start.o scsp/sine-44100-s16be-1ch-100sample.pcm.o scsp/fm.elf: scsp/fm.o res/nec.bitmap.bin.o sh/lib1funcs.o saturn/start.o scsp/sine-44100-s16be-1ch-100sample.pcm.o
scsp/midi.elf: scsp/midi.o res/nec.bitmap.bin.o sh/lib1funcs.o saturn/start.o scsp/sine-44100-s16be-1ch-100sample.pcm.o scsp/sound_cpu__midi.elf: scsp/sound_cpu__midi.o m68k/midi.bin.o res/nec.bitmap.bin.o sh/lib1funcs.o saturn/start.o
res/sperrypc.bitmap.bin: tools/ttf-bitmap res/sperrypc.bitmap.bin: tools/ttf-bitmap
./tools/ttf-bitmap 20 7f res/Bm437_SperryPC_CGA.otb $@ ./tools/ttf-bitmap 20 7f res/Bm437_SperryPC_CGA.otb $@

View File

@ -1,14 +1,28 @@
CFLAGS = -I../saturn CFLAGS = -I../saturn -fstack-usage
OPT = -Og OPT = -O0
LIBGCC = $(shell $(CC) -print-file-name=libgcc.a)
LIB = ../saturn LIB = ../saturn
all: all:
include $(LIB)/m68k/common.mk include $(LIB)/m68k/common.mk
# 200 bytes
%-44100-s16be-1ch-100sample.pcm: Makefile
sox \
-r 44100 -e signed-integer -b 16 -c 1 -n -B \
$@.raw \
synth 100s $* 440 vol -10dB
mv $@.raw $@
%.pcm.o: %.pcm %.pcm.o: %.pcm
$(BUILD_BINARY_O) $(BUILD_BINARY_O)
%.mid.o: %.mid
$(BUILD_BINARY_O)
slot.elf: slot.o sine-44100-s16be-1ch-1sec.pcm.o slot.elf: slot.o sine-44100-s16be-1ch-1sec.pcm.o
interrupt.elf: interrupt.o jojo-11025-s16be-1ch.pcm.o interrupt.elf: interrupt.o jojo-11025-s16be-1ch.pcm.o
midi.elf: midi.o sine-44100-s16be-1ch-100sample.pcm.o midi_test-c-major-scale.mid.o ../midi/parse.o $(LIBGCC)

262
m68k/midi.cpp Normal file
View File

@ -0,0 +1,262 @@
#include <cstdint>
#include <tuple>
#include "scsp.h"
#include "../math/fp.hpp"
#include "../midi/parse.hpp"
#include "../common/copy.hpp"
extern void * _sine_start __asm("_binary_sine_44100_s16be_1ch_100sample_pcm_start");
extern void * _midi_start __asm("_binary_midi_test_c_major_scale_mid_start");
uint16_t
midi_note_to_oct_fns(const int8_t midi_note)
{
static const uint16_t _cent_to_fns[] = {
0x0,
0x3d,
0x7d,
0xc2,
0x10a,
0x157,
0x1a8,
0x1fe,
0x25a,
0x2ba,
0x321,
0x38d,
};
const int8_t a440_note = midi_note - 69;
const int8_t a440_note_d = (a440_note < 0) ? a440_note - 11 : a440_note;
const int8_t div12 = a440_note_d / static_cast<int8_t>(12);
const int8_t mod12 = a440_note % static_cast<int8_t>(12);
const uint16_t oct = div12;
const uint16_t cent = (a440_note < 0) ? 12 + mod12 : mod12;
const uint16_t fns = _cent_to_fns[cent];
return PITCH__OCT(oct) | PITCH__FNS(fns);
}
// maximum delay of 3258 days
using fp48_16 = fp<uint64_t, uint64_t, 16>;
constexpr uint8_t tactl = 7; // F/128
constexpr uint8_t tima = 0xfe;
constexpr fp48_16 increment_ms{2902, 32394}; // 2902.494293212890625
struct midi_state {
uint8_t const * buf;
midi::header_t header;
struct track {
uint8_t const * start;
int32_t length;
} current_track;
struct midi {
uint32_t tempo;
} midi;
fp48_16 delta_time_ms;
};
static midi_state state = {0};
[[noreturn]]
void error()
{
const uint32_t sine_start = reinterpret_cast<uint32_t>(&_sine_start);
{
scsp_slot& slot = scsp.reg.slot[0];
// start address (bytes)
slot.SA = SA__KYONB | SA__LPCTL__NORMAL | SA__SA(sine_start); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0]
slot.LSA = 0; // loop start address (samples)
slot.LEA = 99; // loop end address (samples)
slot.EG = EG__EGHOLD; // d2r d1r ho ar krs dl rr
slot.FM = 0; // stwinh sdir tl mdl mdxsl mdysl
//slot.PITCH = PITCH__OCT(0) | PITCH__FNS(0); // oct fns
slot.PITCH = 0x78c2;
slot.LFO = 0; // lfof plfows
slot.MIXER = MIXER__DISDL(0b110); // disdl dipan efsdl efpan
}
{
scsp_slot& slot = scsp.reg.slot[1];
// start address (bytes)
slot.SA = SA__KYONB | SA__LPCTL__NORMAL | SA__SA(sine_start); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0]
slot.LSA = 0; // loop start address (samples)
slot.LEA = 99; // loop end address (samples)
slot.EG = EG__EGHOLD; // d2r d1r ho ar krs dl rr
slot.FM = 0; // stwinh sdir tl mdl mdxsl mdysl
slot.PITCH = PITCH__OCT(1) | PITCH__FNS(0); // oct fns
slot.LFO = 0; // lfof plfows
slot.MIXER = MIXER__DISDL(0b110); // disdl dipan efsdl efpan
}
scsp.reg.slot[0].LOOP |= LOOP__KYONEX;
while (1);
}
fp48_16 delay_ms(uint32_t delta_time)
{
return {(delta_time * state.midi.tempo) /
state.header.division.metrical.ticks_per_quarter_note};
}
static int _event = 0;
static volatile int timer_fired = 0;
extern "C"
void auto_vector_1(void) __attribute__ ((interrupt_handler));
void auto_vector_1(void)
{
// reset TIMER_A interrupt
scsp.reg.ctrl.SCIRE = INT__TIMER_A;
scsp.reg.ctrl.TIMA = TIMA__TACTL(tactl) | TIMA__TIMA(tima);
timer_fired = 1;
}
void midi_step()
{
const uint32_t sine_start = reinterpret_cast<uint32_t>(&_sine_start);
// 11.2896 MHz
// 2902.4943 µs per interrupt this gives us 32768 cycles per
// interrupt, which *might* be roomy enough.
int kyonex = 0;
while (true) {
scsp.ram.u32[0] = _event;
scsp.ram.u32[1] = state.delta_time_ms.value >> 16;
if (!(state.buf - state.current_track.start < state.current_track.length))
return;
auto mtrk_event_o = midi::parse::mtrk_event(state.buf);
if (!mtrk_event_o) error();
midi::mtrk_event_t mtrk_event;
uint8_t const * buf;
std::tie(buf, mtrk_event) = *mtrk_event_o;
scsp.ram.u32[2] = delay_ms(mtrk_event.delta_time).value >> 16;
fp48_16 delta_time_ms{0};
if (mtrk_event.delta_time != 0 &&
state.delta_time_ms.value < (delta_time_ms = delay_ms(mtrk_event.delta_time)).value)
break;
else
state.buf = buf;
_event++;
switch (mtrk_event.event.type) {
case midi::event_t::type_t::midi:
{
midi::midi_event_t& midi_event = mtrk_event.event.event.midi;
switch (midi_event.type) {
case midi::midi_event_t::type_t::note_on:
{
scsp_slot& slot = scsp.reg.slot[0];
scsp.ram.u32[3] = midi_event.data.note_on.note;
//slot.SA = SA__KYONB | SA__LPCTL__NORMAL | SA__SA(sine_start);
slot.LOOP = LOOP__KYONB | LOOP__LPCTL__NORMAL | SAH__SA(sine_start);
slot.SAL = SAL__SA(sine_start);
slot.LSA = 0;
slot.LEA = 99;
slot.EG = EG__EGHOLD; //EG__AR(0x0f) | EG__D1R(0x4) | EG__D2R(0x4) | EG__RR(0x1f);
slot.FM = 0;
slot.PITCH = midi_note_to_oct_fns(midi_event.data.note_on.note);
slot.LFO = 0;
slot.MIXER = MIXER__DISDL(0b110);
kyonex = 1;
}
break;
case midi::midi_event_t::type_t::note_off:
{
scsp_slot& slot = scsp.reg.slot[0];
slot.LOOP = 0;
scsp.reg.slot[0].SA |= SA__KYONEX;
kyonex = 1;
}
break;
default:
break;
}
}
break;
default:
break;
}
state.delta_time_ms -= delta_time_ms;
}
if (kyonex) {
scsp.reg.slot[0].SA |= SA__KYONEX;
}
state.delta_time_ms += increment_ms;
}
void init_midi()
{
state.buf = reinterpret_cast<uint8_t const *>(&_midi_start);
auto header_o = midi::parse::header(state.buf);
if (!header_o) error();
std::tie(state.buf, state.header) = *header_o;
auto track_o = midi::parse::track(state.buf);
if (!track_o) error();
std::tie(state.buf, state.current_track.length) = *track_o;
state.current_track.start = state.buf;
state.delta_time_ms = fp48_16{0};
state.midi.tempo = 500000; // default tempo
}
void main()
{
_event = 0;
scsp.ram.u32[0] = _event;
for (long i = 0; i < 3200; i++) { asm volatile ("nop"); } // wait for (way) more than 30µs
init_midi();
// timer A is vector 1 (0b001)
scsp.reg.ctrl.SCILV2 = 0;
scsp.reg.ctrl.SCILV1 = 0;
scsp.reg.ctrl.SCILV0 = SCILV__TIMER_A;
// enable TIMER_A
scsp.reg.ctrl.SCIRE = INT__TIMER_A;
scsp.reg.ctrl.SCIEB = INT__TIMER_A;
scsp.reg.ctrl.TIMA = TIMA__TACTL(tactl) | TIMA__TIMA(tima);
asm volatile ("move.w #8192,%sr");
while (1) {
while (timer_fired == 0) {
asm volatile ("nop");
}
timer_fired = 0;
midi_step();
}
}

1
m68k/res Symbolic link
View File

@ -0,0 +1 @@
../res

View File

@ -1 +0,0 @@
../scsp/sine-44100-s16be-1ch.pcm

View File

@ -10,10 +10,18 @@ struct fp
{ {
T value; T value;
constexpr inline fp() noexcept
: value(0)
{}
constexpr inline fp(T n) noexcept constexpr inline fp(T n) noexcept
: value(n * (1 << B)) : value(n * (1 << B))
{} {}
constexpr inline fp(T n, T d) noexcept
: value(n * (1 << B) + d)
{}
constexpr inline explicit fp(T n, struct fp_raw_tag) noexcept constexpr inline explicit fp(T n, struct fp_raw_tag) noexcept
: value(n) : value(n)
{} {}

View File

@ -2,10 +2,57 @@
#include <fstream> #include <fstream>
#include <tuple> #include <tuple>
#include <cassert> #include <cassert>
#include <tuple>
#include "parse.hpp" #include "parse.hpp"
#include "strings.hpp" #include "strings.hpp"
static uint16_t _cent_to_fns[] = {
0x0,
0x3d,
0x7d,
0xc2,
0x10a,
0x157,
0x1a8,
0x1fe,
0x25a,
0x2ba,
0x321,
0x38d,
};
constexpr std::tuple<uint16_t, uint16_t>
midi_note_to_oct_fns(const int32_t midi_note)
{
int32_t a440_note = midi_note - 69;
uint16_t oct = (a440_note / 12) & 0xf;
uint32_t cent = static_cast<uint32_t>(a440_note) % 12;
uint16_t fns = _cent_to_fns[cent];
return {oct, fns};
}
void
dump_midi(midi::midi_event_t& midi_event)
{
switch (midi_event.type) {
case midi::midi_event_t::type_t::note_on:
{
std::cout << " note_on " << (int)midi_event.data.note_on.note << '\n';
auto&& [oct, fns] = midi_note_to_oct_fns(midi_event.data.note_on.note);
std::cout << " oct " << oct << " fns " << fns << '\n';
}
break;
case midi::midi_event_t::type_t::note_off:
{
std::cout << " note_off " << (int)midi_event.data.note_on.note << '\n';
}
break;
default:
break;
}
}
int parse(uint8_t const * start) int parse(uint8_t const * start)
{ {
uint8_t const * buf = &start[0]; uint8_t const * buf = &start[0];
@ -56,6 +103,10 @@ int parse(uint8_t const * start)
switch (mtrk_event.event.type) { switch (mtrk_event.event.type) {
case midi::event_t::type_t::midi: case midi::event_t::type_t::midi:
std::cout << " midi: " << '\n'; std::cout << " midi: " << '\n';
dump_midi(mtrk_event.event.event.midi);
break; break;
case midi::event_t::type_t::sysex: case midi::event_t::type_t::sysex:
std::cout << " sysex: " << '\n'; std::cout << " sysex: " << '\n';
@ -69,8 +120,9 @@ int parse(uint8_t const * start)
} }
assert(buf - track_start == track_length); assert(buf - track_start == track_length);
std::cout << "trailing/unparsed data: " << buf - track_start << '\n';
} }
std::cout << "trailing/unparsed data: " << size - (buf - start) << '\n'; return 0;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])

17
midi/interpreter.py Normal file
View File

@ -0,0 +1,17 @@
from dataclasses import dataclass
def note_freq(n):
return 440 * 2 ** ((n-69)/12)
@dataclass
class State:
tempo: int = 500000 # µS/qn
division: int = 96 # ticks/qn
state = State()
def delay(dt # microseconds
) -> int: # in microseconds
return int((dt * state.tempo) / state.division)
print(delay(96))

View File

@ -24,11 +24,11 @@ int_variable_length(buf_t buf)
return std::nullopt; return std::nullopt;
} }
static constexpr inline std::tuple<buf_t, uint16_t> static inline std::tuple<buf_t, uint16_t>
int_fixed_length16(buf_t buf) int_fixed_length16(buf_t buf)
{ {
uint16_t n; uint16_t n;
if constexpr (std::endian::native == std::endian::big) { if (0) {// constexpr (std::endian::native == std::endian::big) {
n = *reinterpret_cast<const uint16_t*>(buf); n = *reinterpret_cast<const uint16_t*>(buf);
} else { } else {
n = (buf[0] << 8 | buf[1] << 0); n = (buf[0] << 8 | buf[1] << 0);
@ -36,11 +36,11 @@ int_fixed_length16(buf_t buf)
return {buf + (sizeof (uint16_t)), n}; return {buf + (sizeof (uint16_t)), n};
} }
static constexpr inline std::tuple<buf_t, uint32_t> static inline std::tuple<buf_t, uint32_t>
int_fixed_length32(buf_t buf) int_fixed_length32(buf_t buf)
{ {
uint32_t n; uint32_t n;
if constexpr (std::endian::native == std::endian::big) { if (0) {//constexpr (std::endian::native == std::endian::big) {
n = *reinterpret_cast<const uint32_t*>(buf); n = *reinterpret_cast<const uint32_t*>(buf);
} else { } else {
n = (buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3] << 0); n = (buf[0] << 24 | buf[1] << 16 | buf[2] << 8 | buf[3] << 0);
@ -60,7 +60,7 @@ header_chunk_type(buf_t buf)
return std::nullopt; return std::nullopt;
} }
static constexpr inline std::tuple<buf_t, division_t> static inline std::tuple<buf_t, division_t>
division(buf_t buf) division(buf_t buf)
{ {
uint16_t n; uint16_t n;

372
midi/parse.su Normal file
View File

@ -0,0 +1,372 @@
/usr/local/m68k-none-elf/include/c++/13.1.0/m68k-none-elf/bits/c++config.h:540:3:constexpr bool std::__is_constant_evaluated() 0 static
../midi/parse.cpp:12:1:constexpr std::optional<std::tuple<const unsigned char*, long unsigned int> > midi::parse::int_variable_length(buf_t) 48 dynamic,bounded
../midi/parse.cpp:28:1:std::tuple<const unsigned char*, short unsigned int> midi::parse::int_fixed_length16(buf_t) 24 dynamic,bounded
../midi/parse.cpp:40:1:std::tuple<const unsigned char*, long unsigned int> midi::parse::int_fixed_length32(buf_t) 24 dynamic,bounded
../midi/parse.cpp:52:1:constexpr std::optional<const unsigned char*> midi::parse::header_chunk_type(buf_t) 16 dynamic,bounded
../midi/parse.cpp:64:1:std::tuple<const unsigned char*, midi::division_t> midi::parse::division(buf_t) 44 dynamic,bounded
../midi/parse.cpp:82:1:std::optional<std::tuple<const unsigned char*, midi::header_t> > midi::parse::header(buf_t) 128 dynamic,bounded
../midi/parse.cpp:107:1:constexpr std::optional<std::tuple<const unsigned char*, midi::midi_event_t::type_t> > midi::parse::midi_event_type(buf_t) 120 dynamic,bounded
../midi/parse.cpp:128:1:constexpr int32_t midi::parse::midi_event_message_length(midi::midi_event_t::type_t) 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:984:26:constexpr std::optional<_Tp>::operator bool() const [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:470:22:constexpr bool std::_Optional_base_impl<_Tp, _Dp>::_M_is_engaged() const [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::midi_event_t::type_t>, true, false>] 0 static
../midi/parse.cpp:137:1:constexpr std::optional<std::tuple<const unsigned char*, midi::midi_event_t> > midi::parse::midi_event(buf_t) 60 dynamic,bounded
../midi/parse.cpp:159:1:constexpr std::optional<std::tuple<const unsigned char*, midi::sysex_event_t> > midi::parse::sysex_event(buf_t) 68 dynamic,bounded
../midi/parse.cpp:171:1:constexpr std::optional<std::tuple<const unsigned char*, midi::meta_event_t> > midi::parse::meta_event(buf_t) 72 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:984:26:constexpr std::optional<_Tp>::operator bool() const [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:470:22:constexpr bool std::_Optional_base_impl<_Tp, _Dp>::_M_is_engaged() const [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::midi_event_t>, true, false>] 0 static
../midi/parse.cpp:184:1:constexpr std::optional<std::tuple<const unsigned char*, midi::event_t> > midi::parse::event(buf_t) 212 dynamic,bounded
../midi/parse.cpp:204:1:std::optional<std::tuple<const unsigned char*, midi::mtrk_event_t> > midi::parse::mtrk_event(buf_t) 128 dynamic,bounded
../midi/parse.cpp:219:1:constexpr std::optional<const unsigned char*> midi::parse::track_chunk_type(buf_t) 16 dynamic,bounded
../midi/parse.cpp:231:1:std::optional<std::tuple<const unsigned char*, long unsigned int> > midi::parse::track(buf_t) 56 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1338:2:constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = const unsigned char*; _U2 = long unsigned int&; typename std::enable_if<std::_TupleConstraints<(! __is_alloc_arg<_U1>()), _T1, _T2>::__is_implicitly_constructible<_U1, _U2>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = long unsigned int] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, long unsigned int>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, long unsigned int>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, long unsigned int>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, long unsigned int>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, long unsigned int>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, long unsigned int>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1338:2:constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = const unsigned char*; _U2 = short unsigned int&; typename std::enable_if<std::_TupleConstraints<(! __is_alloc_arg<_U1>()), _T1, _T2>::__is_implicitly_constructible<_U1, _U2>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = short unsigned int] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = const unsigned char*; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = const unsigned char*] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:341:7:constexpr std::_Optional_payload<_Tp, true, true, true>::_Optional_payload() [with _Tp = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:643:17:constexpr std::_Optional_base<_Tp, true, true>::_Optional_base() [with _Tp = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, short unsigned int}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1638:2:constexpr std::__enable_if_t<__assignable<_U1, _U2>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(std::tuple<_U1, _U2>&&) [with _U1 = const unsigned char*; _U2 = short unsigned int; _T1 = const unsigned char*&; _T2 = short unsigned int&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::division_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:984:26:constexpr std::optional<_Tp>::operator bool() const [with _Tp = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, midi::header_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, midi::header_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, midi::header_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, midi::header_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:973:7:constexpr _Tp& std::optional<_Tp>::operator*() & [with _Tp = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, long unsigned int}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1638:2:constexpr std::__enable_if_t<__assignable<_U1, _U2>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(std::tuple<_U1, _U2>&&) [with _U1 = const unsigned char*; _U2 = long unsigned int; _T1 = const unsigned char*&; _T2 = long unsigned int&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, midi::division_t}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1638:2:constexpr std::__enable_if_t<__assignable<_U1, _U2>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(std::tuple<_U1, _U2>&&) [with _U1 = const unsigned char*; _U2 = midi::division_t; _T1 = const unsigned char*&; _T2 = midi::division_t&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::header_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, midi::header_t>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::header_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1338:2:constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = const unsigned char*&; _U2 = midi::midi_event_t::type_t; typename std::enable_if<std::_TupleConstraints<(! __is_alloc_arg<_U1>()), _T1, _T2>::__is_implicitly_constructible<_U1, _U2>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::midi_event_t::type_t] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, midi::midi_event_t::type_t>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, midi::midi_event_t::type_t}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:973:7:constexpr _Tp& std::optional<_Tp>::operator*() & [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1628:2:constexpr std::__enable_if_t<__assignable<const _U1&, const _U2&>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(const std::tuple<_U1, _U2>&) [with _U1 = const unsigned char*; _U2 = midi::midi_event_t::type_t; _T1 = const unsigned char*&; _T2 = midi::midi_event_t::type_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1338:2:constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = const unsigned char*&; _U2 = midi::midi_event_t&; typename std::enable_if<std::_TupleConstraints<(! __is_alloc_arg<_U1>()), _T1, _T2>::__is_implicitly_constructible<_U1, _U2>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::midi_event_t] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, midi::midi_event_t>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:984:26:constexpr std::optional<_Tp>::operator bool() const [with _Tp = std::tuple<const unsigned char*, long unsigned int>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:973:7:constexpr _Tp& std::optional<_Tp>::operator*() & [with _Tp = std::tuple<const unsigned char*, long unsigned int>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1628:2:constexpr std::__enable_if_t<__assignable<const _U1&, const _U2&>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(const std::tuple<_U1, _U2>&) [with _U1 = const unsigned char*; _U2 = long unsigned int; _T1 = const unsigned char*&; _T2 = long unsigned int&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::sysex_event_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, midi::sysex_event_t>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::meta_event_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, midi::meta_event_t>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, midi::midi_event_t}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:973:7:constexpr _Tp& std::optional<_Tp>::operator*() & [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1628:2:constexpr std::__enable_if_t<__assignable<const _U1&, const _U2&>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(const std::tuple<_U1, _U2>&) [with _U1 = const unsigned char*; _U2 = midi::midi_event_t; _T1 = const unsigned char*&; _T2 = midi::midi_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::event_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, midi::event_t>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:984:26:constexpr std::optional<_Tp>::operator bool() const [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, midi::meta_event_t}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:973:7:constexpr _Tp& std::optional<_Tp>::operator*() & [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1628:2:constexpr std::__enable_if_t<__assignable<const _U1&, const _U2&>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(const std::tuple<_U1, _U2>&) [with _U1 = const unsigned char*; _U2 = midi::meta_event_t; _T1 = const unsigned char*&; _T2 = midi::meta_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:984:26:constexpr std::optional<_Tp>::operator bool() const [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, midi::sysex_event_t}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:973:7:constexpr _Tp& std::optional<_Tp>::operator*() & [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1628:2:constexpr std::__enable_if_t<__assignable<const _U1&, const _U2&>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(const std::tuple<_U1, _U2>&) [with _U1 = const unsigned char*; _U2 = midi::sysex_event_t; _T1 = const unsigned char*&; _T2 = midi::sysex_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, midi::event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, midi::event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, midi::event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, midi::event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:120:7:constexpr std::_Optional_payload_base<_Tp>::_Optional_payload_base() [with _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:399:7:constexpr std::_Optional_payload<_Tp, true, false, false>::_Optional_payload() [with _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:600:17:constexpr std::_Optional_base<_Tp, true, false>::_Optional_base() [with _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:739:17:constexpr std::optional<_Tp>::optional(std::nullopt_t) [with _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:984:26:constexpr std::optional<_Tp>::operator bool() const [with _Tp = std::tuple<const unsigned char*, midi::event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:2155:5:) [with _Elements = {const unsigned char*, midi::event_t}] 16 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:973:7:constexpr _Tp& std::optional<_Tp>::operator*() & [with _Tp = std::tuple<const unsigned char*, midi::event_t>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1628:2:constexpr std::__enable_if_t<__assignable<const _U1&, const _U2&>(), std::tuple<_T1, _T2>&> std::tuple<_T1, _T2>::operator=(const std::tuple<_U1, _U2>&) [with _U1 = const unsigned char*; _U2 = midi::event_t; _T1 = const unsigned char*&; _T2 = midi::event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = midi::mtrk_event_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:747:2:constexpr std::optional<_Tp>::optional(_Up&&) [with _Up = std::tuple<const unsigned char*, midi::mtrk_event_t>; typename std::enable_if<__and_v<std::__not_<std::is_same<std::optional<_Tp>, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::__not_<std::is_same<std::in_place_t, typename std::remove_cv<typename std::remove_reference<_Iter>::type>::type> >, std::is_constructible<_Tp, _Up>, std::is_convertible<_Iter, _Iterator> >, bool>::type <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1338:2:constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = const unsigned char*&; _U2 = long unsigned int&; typename std::enable_if<std::_TupleConstraints<(! __is_alloc_arg<_U1>()), _T1, _T2>::__is_implicitly_constructible<_U1, _U2>(), bool>::type <anonymous> = true; _T1 = const unsigned char*; _T2 = long unsigned int] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = const unsigned char*] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = long unsigned int&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:291:2:) [with _UHead = const unsigned char*; _UTail = {long unsigned int&}; <template-parameter-2-3> = void; long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {long unsigned int}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, long unsigned int>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, long unsigned int>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, long unsigned int> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, long unsigned int>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, long unsigned int>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, long unsigned int>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = short unsigned int&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:291:2:) [with _UHead = const unsigned char*; _UTail = {short unsigned int&}; <template-parameter-2-3> = void; long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {short unsigned int}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:339:42:) [with _Args = {const unsigned char*}][inherited from std::_Optional_payload_base<const unsigned char*>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:649:2:>, bool>::type <anonymous> = false; _Tp = const unsigned char*] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = const unsigned char*; bool <anonymous> = true; _Tp = const unsigned char*] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = short unsigned int&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:104:5:constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) [with _Tp = tuple<const unsigned char*, short unsigned int>&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:437:2:>&&) [with _UHead = const unsigned char*; _UTails = {short unsigned int}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {short unsigned int&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::division_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:470:22:constexpr bool std::_Optional_base_impl<_Tp, _Dp>::_M_is_engaged() const [with _Tp = const unsigned char*; _Dp = std::_Optional_base<const unsigned char*, true, true>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, midi::header_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::header_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:475:7:constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = const unsigned char*; _Dp = std::_Optional_base<const unsigned char*, true, true>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = long unsigned int&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:104:5:constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) [with _Tp = tuple<const unsigned char*, long unsigned int>&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:437:2:>&&) [with _UHead = const unsigned char*; _UTails = {long unsigned int}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {long unsigned int&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = midi::division_t&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:104:5:constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) [with _Tp = tuple<const unsigned char*, midi::division_t>&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:437:2:>&&) [with _UHead = const unsigned char*; _UTails = {midi::division_t}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::division_t&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::header_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, midi::header_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, midi::header_t>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, midi::header_t> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, midi::header_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = const unsigned char*&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = midi::midi_event_t::type_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:291:2:) [with _UHead = const unsigned char*&; _UTail = {midi::midi_event_t::type_t}; <template-parameter-2-3> = void; long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t::type_t}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, midi::midi_event_t::type_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, midi::midi_event_t::type_t>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, midi::midi_event_t::type_t> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, midi::midi_event_t::type_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, midi::midi_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = midi::midi_event_t::type_t&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:475:7:constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::midi_event_t::type_t>, true, false>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:427:2:>&) [with _UElements = {const unsigned char*, midi::midi_event_t::type_t}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t::type_t&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = midi::midi_event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:291:2:) [with _UHead = const unsigned char*&; _UTail = {midi::midi_event_t&}; <template-parameter-2-3> = void; long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, midi::midi_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, midi::midi_event_t>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, midi::midi_event_t> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, midi::sysex_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:470:22:constexpr bool std::_Optional_base_impl<_Tp, _Dp>::_M_is_engaged() const [with _Tp = std::tuple<const unsigned char*, long unsigned int>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, long unsigned int>, true, false>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:475:7:constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = std::tuple<const unsigned char*, long unsigned int>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, long unsigned int>, true, false>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:427:2:>&) [with _UElements = {const unsigned char*, long unsigned int}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {long unsigned int&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::sysex_event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, midi::sysex_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, midi::sysex_event_t>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, midi::sysex_event_t> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, midi::meta_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::meta_event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, midi::meta_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, midi::meta_event_t>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, midi::meta_event_t> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = midi::midi_event_t&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:475:7:constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::midi_event_t>, true, false>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:427:2:>&) [with _UElements = {const unsigned char*, midi::midi_event_t}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, midi::event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, midi::event_t>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, midi::event_t> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, midi::event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:470:22:constexpr bool std::_Optional_base_impl<_Tp, _Dp>::_M_is_engaged() const [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::meta_event_t>, true, false>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = midi::meta_event_t&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:475:7:constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::meta_event_t>, true, false>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:427:2:>&) [with _UElements = {const unsigned char*, midi::meta_event_t}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::meta_event_t&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:470:22:constexpr bool std::_Optional_base_impl<_Tp, _Dp>::_M_is_engaged() const [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::sysex_event_t>, true, false>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = midi::sysex_event_t&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:475:7:constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::sysex_event_t>, true, false>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:427:2:>&) [with _UElements = {const unsigned char*, midi::sysex_event_t}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::sysex_event_t&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, midi::event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:209:14:constexpr std::_Optional_payload_base<_Tp>::_Storage<_Up, <anonymous> >::_Storage() [with _Up = std::tuple<const unsigned char*, midi::mtrk_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:470:22:constexpr bool std::_Optional_base_impl<_Tp, _Dp>::_M_is_engaged() const [with _Tp = std::tuple<const unsigned char*, midi::event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::event_t>, true, false>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1324:2:constexpr std::tuple<_T1, _T2>::tuple(const _T1&, const _T2&) [with bool _Dummy = true; typename std::enable_if<std::_TupleConstraints<_Dummy, _T1, _T2>::__is_implicitly_constructible<const _T1&, const _T2&>(), bool>::type <anonymous> = true; _T1 = const unsigned char*&; _T2 = midi::event_t&] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:475:7:constexpr _Tp& std::_Optional_base_impl<_Tp, _Dp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::event_t>; _Dp = std::_Optional_base<std::tuple<const unsigned char*, midi::event_t>, true, false>] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:427:2:>&) [with _UElements = {const unsigned char*, midi::event_t}; long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::event_t&}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::mtrk_event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = tuple<const unsigned char*, midi::mtrk_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:397:42:) [with _Args = {std::tuple<const unsigned char*, midi::mtrk_event_t>}][inherited from std::_Optional_payload_base<std::tuple<const unsigned char*, midi::mtrk_event_t> >] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:606:2:>, bool>::type <anonymous> = false; _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:291:2:) [with _UHead = const unsigned char*&; _UTail = {long unsigned int&}; <template-parameter-2-3> = void; long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {long unsigned int}] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:513:2:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(_UHead&&) [with _UHead = long unsigned int&; long unsigned int _Idx = 1; _Head = long unsigned int] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:200:19:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = const unsigned char*; long unsigned int _Idx = 0; _Head = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, long unsigned int>}; _Tp = std::tuple<const unsigned char*, long unsigned int>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:513:2:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(_UHead&&) [with _UHead = short unsigned int&; long unsigned int _Idx = 1; _Head = short unsigned int] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {const unsigned char*}; _Tp = const unsigned char*] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {short unsigned int&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {short unsigned int&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {short unsigned int}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {short unsigned int&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {short unsigned int}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:104:5:constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) [with _Tp = _Tuple_impl<1, short unsigned int>&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:640:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(std::_Tuple_impl<_Idx, _UHead>&&) [with _UHead = short unsigned int; long unsigned int _Idx = 1; _Head = short unsigned int&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::division_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 0; _Head = const unsigned char*] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:306:7:constexpr _Tp& std::_Optional_payload_base<_Tp>::_M_get() [with _Tp = const unsigned char*] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {long unsigned int&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {long unsigned int&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {long unsigned int}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {long unsigned int&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {long unsigned int}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:104:5:constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) [with _Tp = _Tuple_impl<1, long unsigned int>&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:640:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(std::_Tuple_impl<_Idx, _UHead>&&) [with _UHead = long unsigned int; long unsigned int _Idx = 1; _Head = long unsigned int&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::division_t&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::division_t&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::division_t}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::division_t&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::division_t}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:104:5:constexpr typename std::remove_reference<_Tp>::type&& std::move(_Tp&&) [with _Tp = _Tuple_impl<1, midi::division_t>&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:640:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(std::_Tuple_impl<_Idx, _UHead>&&) [with _UHead = midi::division_t; long unsigned int _Idx = 1; _Head = midi::division_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::header_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, midi::header_t>}; _Tp = std::tuple<const unsigned char*, midi::header_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:513:2:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(_UHead&&) [with _UHead = midi::midi_event_t::type_t; long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:200:19:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = const unsigned char*&; long unsigned int _Idx = 0; _Head = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, midi::midi_event_t::type_t>}; _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t::type_t&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:306:7:constexpr _Tp& std::_Optional_payload_base<_Tp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t::type_t&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:272:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t::type_t}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t::type_t&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:278:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t::type_t}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:632:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(const std::_Tuple_impl<_Idx, _UHead>&) [with _UHead = midi::midi_event_t::type_t; long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:513:2:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(_UHead&&) [with _UHead = midi::midi_event_t&; long unsigned int _Idx = 1; _Head = midi::midi_event_t] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, midi::midi_event_t>}; _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:306:7:constexpr _Tp& std::_Optional_payload_base<_Tp>::_M_get() [with _Tp = std::tuple<const unsigned char*, long unsigned int>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:272:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {long unsigned int}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:278:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {long unsigned int}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:632:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(const std::_Tuple_impl<_Idx, _UHead>&) [with _UHead = long unsigned int; long unsigned int _Idx = 1; _Head = long unsigned int&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, midi::sysex_event_t>}; _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, midi::meta_event_t>}; _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:306:7:constexpr _Tp& std::_Optional_payload_base<_Tp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:272:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::midi_event_t&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:278:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:632:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(const std::_Tuple_impl<_Idx, _UHead>&) [with _UHead = midi::midi_event_t; long unsigned int _Idx = 1; _Head = midi::midi_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, midi::event_t>}; _Tp = std::tuple<const unsigned char*, midi::event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::meta_event_t&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:306:7:constexpr _Tp& std::_Optional_payload_base<_Tp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::meta_event_t&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:272:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::meta_event_t}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::meta_event_t&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:278:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::meta_event_t}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:632:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(const std::_Tuple_impl<_Idx, _UHead>&) [with _UHead = midi::meta_event_t; long unsigned int _Idx = 1; _Head = midi::meta_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::sysex_event_t&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:306:7:constexpr _Tp& std::_Optional_payload_base<_Tp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::sysex_event_t&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:272:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::sysex_event_t}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::sysex_event_t&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:278:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::sysex_event_t}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:632:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(const std::_Tuple_impl<_Idx, _UHead>&) [with _UHead = midi::sysex_event_t; long unsigned int _Idx = 1; _Head = midi::sysex_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:284:7:) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::event_t&}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:306:7:constexpr _Tp& std::_Optional_payload_base<_Tp>::_M_get() [with _Tp = std::tuple<const unsigned char*, midi::event_t>] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:269:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::event_t&}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:272:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::event_t}] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:275:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&; _Tail = {midi::event_t&}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:278:7:>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::event_t}] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:632:2:constexpr void std::_Tuple_impl<_Idx, _Head>::_M_assign(const std::_Tuple_impl<_Idx, _UHead>&) [with _UHead = midi::event_t; long unsigned int _Idx = 1; _Head = midi::event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::mtrk_event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:125:2:) [with _Args = {std::tuple<const unsigned char*, midi::mtrk_event_t>}; _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 20 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:200:19:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = long unsigned int&; long unsigned int _Idx = 1; _Head = long unsigned int] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {long unsigned int}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = long unsigned int] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, long unsigned int>}; _Up = std::tuple<const unsigned char*, long unsigned int>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, long unsigned int>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:200:19:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = short unsigned int&; long unsigned int _Idx = 1; _Head = short unsigned int] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {const unsigned char*}; _Up = const unsigned char*; bool <anonymous> = true; _Tp = const unsigned char*] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = short unsigned int&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = short unsigned int&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = short unsigned int] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = short unsigned int] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::division_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = long unsigned int&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = long unsigned int&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = long unsigned int] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = long unsigned int] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::division_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::division_t&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::division_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/bits/move.h:77:5:constexpr _Tp&& std::forward(typename remove_reference<_Functor>::type&) [with _Tp = midi::division_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::header_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::header_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = midi::header_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, midi::header_t>}; _Up = std::tuple<const unsigned char*, midi::header_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::header_t>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:200:19:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = midi::midi_event_t::type_t; long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t::type_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = midi::midi_event_t::type_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, midi::midi_event_t::type_t>}; _Up = std::tuple<const unsigned char*, midi::midi_event_t::type_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::midi_event_t::type_t>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:237:7:static constexpr const _Head& std::_Head_base<_Idx, _Head, false>::_M_head(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 0; _Head = const unsigned char*] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:500:7:static constexpr const _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(const std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:200:19:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(_UHead&&) [with _UHead = midi::midi_event_t&; long unsigned int _Idx = 1; _Head = midi::midi_event_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::midi_event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = midi::midi_event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, midi::midi_event_t>}; _Up = std::tuple<const unsigned char*, midi::midi_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::midi_event_t>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:500:7:static constexpr const _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(const std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = long unsigned int] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::sysex_event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = midi::sysex_event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, midi::sysex_event_t>}; _Up = std::tuple<const unsigned char*, midi::sysex_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::sysex_event_t>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::meta_event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = midi::meta_event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, midi::meta_event_t>}; _Up = std::tuple<const unsigned char*, midi::meta_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::meta_event_t>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:500:7:static constexpr const _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(const std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = midi::event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, midi::event_t>}; _Up = std::tuple<const unsigned char*, midi::event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::event_t>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:500:7:static constexpr const _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(const std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:500:7:static constexpr const _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(const std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:507:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::event_t&] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:497:7:static constexpr _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::event_t&] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:500:7:static constexpr const _Head& std::_Tuple_impl<_Idx, _Head>::_M_head(const std::_Tuple_impl<_Idx, _Head>&) [with long unsigned int _Idx = 1; _Head = midi::event_t] 4 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::mtrk_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:302:7:>&&) [with long unsigned int _Idx = 0; _Head = const unsigned char*; _Tail = {midi::mtrk_event_t}] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:1351:17:constexpr std::tuple<_T1, _T2>::tuple(std::tuple<_T1, _T2>&&) [with _T1 = const unsigned char*; _T2 = midi::mtrk_event_t] 8 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/optional:213:6:) [with _Args = {std::tuple<const unsigned char*, midi::mtrk_event_t>}; _Up = std::tuple<const unsigned char*, midi::mtrk_event_t>; bool <anonymous> = true; _Tp = std::tuple<const unsigned char*, midi::mtrk_event_t>] 12 dynamic,bounded
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = long unsigned int] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = short unsigned int&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = short unsigned int&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = short unsigned int] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = long unsigned int&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = long unsigned int&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = long unsigned int] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::division_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::division_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::division_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = midi::header_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:237:7:static constexpr const _Head& std::_Head_base<_Idx, _Head, false>::_M_head(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t::type_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:237:7:static constexpr const _Head& std::_Head_base<_Idx, _Head, false>::_M_head(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = long unsigned int] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:237:7:static constexpr const _Head& std::_Head_base<_Idx, _Head, false>::_M_head(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::midi_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = midi::event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:237:7:static constexpr const _Head& std::_Head_base<_Idx, _Head, false>::_M_head(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::meta_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:237:7:static constexpr const _Head& std::_Head_base<_Idx, _Head, false>::_M_head(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::sysex_event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:193:17:constexpr std::_Head_base<_Idx, _Head, false>::_Head_base(const _Head&) [with long unsigned int _Idx = 1; _Head = midi::event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:234:7:static constexpr _Head& std::_Head_base<_Idx, _Head, false>::_M_head(std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::event_t&] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:237:7:static constexpr const _Head& std::_Head_base<_Idx, _Head, false>::_M_head(const std::_Head_base<_Idx, _Head, false>&) [with long unsigned int _Idx = 1; _Head = midi::event_t] 0 static
/usr/local/m68k-none-elf/include/c++/13.1.0/tuple:527:7:constexpr std::_Tuple_impl<_Idx, _Head>::_Tuple_impl(std::_Tuple_impl<_Idx, _Head>&&) [with long unsigned int _Idx = 1; _Head = midi::mtrk_event_t] 0 static

View File

@ -658,6 +658,15 @@ void v_blank_in_int()
void init_slots() void init_slots()
{ {
while ((smpc.reg.SF & 1) != 0);
smpc.reg.SF = 1;
smpc.reg.COMREG = COMREG__SNDOFF;
while (smpc.reg.OREG[31].val != OREG31__SNDOFF);
scsp.reg.ctrl.MIXER = MIXER__MEM4MB | MIXER__MVOL(0);
for (long i = 0; i < 3200; i++) { asm volatile ("nop"); } // wait for (way) more than 30µs
/* /*
The Saturn BIOS does not (un)initialize the DSP. Without zeroizing the DSP The Saturn BIOS does not (un)initialize the DSP. Without zeroizing the DSP
program, the SCSP DSP appears to have a program that continuously writes to program, the SCSP DSP appears to have a program that continuously writes to
@ -670,11 +679,9 @@ void init_slots()
while ((smpc.reg.SF & 1) != 0); while ((smpc.reg.SF & 1) != 0);
smpc.reg.SF = 1; smpc.reg.SF = 1;
smpc.reg.COMREG = COMREG__SNDON; smpc.reg.COMREG = COMREG__SNDON;
while (smpc.reg.OREG[31].val != 0b00000110); while (smpc.reg.OREG[31].val != OREG31__SNDON);
for (long i = 0; i < 807; i++) { asm volatile ("nop"); } // wait for (way) more than 30µs for (long i = 0; i < 3200; i++) { asm volatile ("nop"); } // wait for (way) more than 30µs
scsp.reg.ctrl.MIXER = MIXER__MEM4MB | MIXER__MVOL(0);
const uint32_t * buf = reinterpret_cast<uint32_t*>(&_sine_start); const uint32_t * buf = reinterpret_cast<uint32_t*>(&_sine_start);
const uint32_t size = reinterpret_cast<uint32_t>(&_sine_size); const uint32_t size = reinterpret_cast<uint32_t>(&_sine_size);
@ -683,12 +690,13 @@ void init_slots()
for (int i = 0; i < 32; i++) { for (int i = 0; i < 32; i++) {
scsp_slot& slot = scsp.reg.slot[i]; scsp_slot& slot = scsp.reg.slot[i];
// start address (bytes) // start address (bytes)
slot.SA = SA__KYONB | SA__LPCTL__NORMAL | SA__SA(0); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0] slot.SA = SA__LPCTL__NORMAL | SA__SA(0); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0]
slot.LSA = 0; // loop start address (samples) slot.LSA = 0; // loop start address (samples)
slot.LEA = 100; // loop end address (samples) slot.LEA = 100; // loop end address (samples)
slot.EG = EG__EGHOLD; // d2r d1r ho ar krs dl rr slot.EG = EG__AR(0x1f) | EG__RR(0x1f); // d2r d1r ho ar krs dl rr
slot.FM = 0; // stwinh sdir tl mdl mdxsl mdysl slot.FM = 0; // stwinh sdir tl mdl mdxsl mdysl
slot.PITCH = PITCH__OCT(0) | PITCH__FNS(0); // oct fns //slot.PITCH = PITCH__OCT(-1) | PITCH__FNS(0xc2); // oct fns
slot.PITCH = 0x78c2;
slot.LFO = 0; // lfof plfows slot.LFO = 0; // lfof plfows
slot.MIXER = MIXER__DISDL(0b101); // disdl dipan efsdl efpan slot.MIXER = MIXER__DISDL(0b101); // disdl dipan efsdl efpan
} }

View File

@ -12,8 +12,8 @@
#include "../common/vdp2_func.hpp" #include "../common/vdp2_func.hpp"
#include "../common/string.hpp" #include "../common/string.hpp"
extern void * _sine_start __asm("_binary_scsp_sine_44100_s16be_1ch_100sample_pcm_start"); extern void * _m68k_start __asm("_binary_m68k_midi_bin_start");
extern void * _sine_size __asm("_binary_scsp_sine_44100_s16be_1ch_100sample_pcm_size"); extern void * _m68k_size __asm("_binary_m68k_midi_bin_size");
extern void * _nec_bitmap_start __asm("_binary_res_nec_bitmap_bin_start"); extern void * _nec_bitmap_start __asm("_binary_res_nec_bitmap_bin_start");
@ -194,13 +194,38 @@ set_char(int32_t x, int32_t y, uint8_t palette, uint8_t c)
| PATTERN_NAME_TABLE_1WORD__CHARACTER((c - 0x20)); | PATTERN_NAME_TABLE_1WORD__CHARACTER((c - 0x20));
} }
static int render_state = 0;
void render() void render()
{ {
if (++render_state < 1)
return;
render_state = 0;
// 012345678901234 // 012345678901234
uint8_t label[] = "midi"; static uint8_t label[] = "midi";
for (uint32_t i = 0; label[i] != 0; i++) { for (uint32_t i = 0; label[i] != 0; i++) {
set_char(0 + i, 1, 0, label[i]); set_char(0 + i, 1, 0, label[i]);
} }
uint32_t i;
uint8_t buf[8];
static uint8_t l1[] = "evnt";
string::hex(buf, 8, scsp.ram.u32[0]);
for (i = 0; i < 4; i++) set_char(0 + i, 3, 0, l1[i]);
for (i = 0; i < 8; i++) set_char(5 + i, 3, 0, buf[i]);
static uint8_t l2[] = "s_dt";
string::hex(buf, 8, scsp.ram.u32[1]);
for (i = 0; i < 4; i++) set_char(0 + i, 4, 0, l2[i]);
for (i = 0; i < 8; i++) set_char(5 + i, 4, 0, buf[i]);
static uint8_t l3[] = "e_dt";
string::hex(buf, 8, scsp.ram.u32[2]);
for (i = 0; i < 4; i++) set_char(0 + i, 5, 0, l3[i]);
for (i = 0; i < 8; i++) set_char(5 + i, 5, 0, buf[i]);
static uint8_t l4[] = "note";
string::hex(buf, 8, scsp.ram.u32[3]);
for (i = 0; i < 4; i++) set_char(0 + i, 6, 0, l4[i]);
for (i = 0; i < 8; i++) set_char(5 + i, 6, 0, buf[i]);
} }
void update() void update()
@ -216,7 +241,7 @@ void v_blank_in_int()
// flip planes; // flip planes;
vdp2.reg.MPABN0 = MPABN0__N0MPB(0) | MPABN0__N0MPA(plane_a + plane_ix); vdp2.reg.MPABN0 = MPABN0__N0MPB(0) | MPABN0__N0MPA(plane_a + plane_ix);
plane_ix = !plane_ix; //plane_ix = !plane_ix;
// wait at least 300us, as specified in the SMPC manual. // wait at least 300us, as specified in the SMPC manual.
// It appears reading FRC.H is mandatory and *must* occur before FRC.L on real // It appears reading FRC.H is mandatory and *must* occur before FRC.L on real
@ -244,7 +269,7 @@ void v_blank_in_int()
render(); render();
} }
void init_slots() void init_snd_cpu()
{ {
/* /*
The Saturn BIOS does not (un)initialize the DSP. Without zeroizing the DSP The Saturn BIOS does not (un)initialize the DSP. Without zeroizing the DSP
@ -255,38 +280,49 @@ void init_slots()
reg32 * dsp_steps = reinterpret_cast<reg32*>(&(scsp.reg.dsp.STEP[0].MPRO[0])); reg32 * dsp_steps = reinterpret_cast<reg32*>(&(scsp.reg.dsp.STEP[0].MPRO[0]));
fill<reg32>(dsp_steps, 0, (sizeof (scsp.reg.dsp.STEP))); fill<reg32>(dsp_steps, 0, (sizeof (scsp.reg.dsp.STEP)));
/* SEGA SATURN TECHNICAL BULLETIN # 51
The document suggests that Sound RAM is (somewhat) preserved
during SNDOFF.
*/
scsp.reg.ctrl.MIXER = MIXER__MEM4MB;
while ((smpc.reg.SF & 1) != 0);
smpc.reg.SF = 1;
smpc.reg.COMREG = COMREG__SNDOFF;
while (smpc.reg.OREG[31].val != OREG31__SNDOFF);
uint32_t * m68k_main_start = reinterpret_cast<uint32_t*>(&_m68k_start);
uint32_t m68k_main_size = reinterpret_cast<uint32_t>(&_m68k_size);
copy<uint32_t>(&scsp.ram.u32[0], m68k_main_start, m68k_main_size);
while ((smpc.reg.SF & 1) != 0); while ((smpc.reg.SF & 1) != 0);
smpc.reg.SF = 1; smpc.reg.SF = 1;
smpc.reg.COMREG = COMREG__SNDON; smpc.reg.COMREG = COMREG__SNDON;
while (smpc.reg.OREG[31].val != 0b00000110); while (smpc.reg.OREG[31].val != OREG31__SNDON);
for (long i = 0; i < 807; i++) { asm volatile ("nop"); } // wait for (way) more than 30µs
scsp.reg.ctrl.MIXER = MIXER__MEM4MB | MIXER__MVOL(0);
const uint32_t * buf = reinterpret_cast<uint32_t*>(&_sine_start);
const uint32_t size = reinterpret_cast<uint32_t>(&_sine_size);
copy<uint32_t>(&scsp.ram.u32[0], buf, size);
for (int i = 0; i < 32; i++) { for (int i = 0; i < 32; i++) {
break;
scsp_slot& slot = scsp.reg.slot[i]; scsp_slot& slot = scsp.reg.slot[i];
// start address (bytes) // start address (bytes)
slot.SA = SA__KYONB | SA__LPCTL__NORMAL | SA__SA(0); // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0] slot.SA = 0; // kx kb sbctl[1:0] ssctl[1:0] lpctl[1:0] 8b sa[19:0]
slot.LSA = 0; // loop start address (samples) slot.LSA = 0; // loop start address (samples)
slot.LEA = 100; // loop end address (samples) slot.LEA = 0; // loop end address (samples)
slot.EG = EG__EGHOLD; // d2r d1r ho ar krs dl rr slot.EG = EG__RR(0x1f); // d2r d1r ho ar krs dl rr
slot.FM = 0; // stwinh sdir tl mdl mdxsl mdysl slot.FM = 0; // stwinh sdir tl mdl mdxsl mdysl
slot.PITCH = PITCH__OCT(0) | PITCH__FNS(0); // oct fns slot.PITCH = 0; // oct fns
slot.LFO = 0; // lfof plfows slot.LFO = 0; // lfof plfows
slot.MIXER = MIXER__DISDL(0b101); // disdl dipan efsdl efpan slot.MIXER = 0; // disdl dipan efsdl efpan
} }
//scsp.reg.slot[0].LOOP |= LOOP__KYONEX;
scsp.reg.ctrl.MIXER = MIXER__MEM4MB | MIXER__MVOL(0xf); scsp.reg.ctrl.MIXER = MIXER__MEM4MB | MIXER__MVOL(0xf);
} }
void main() void main()
{ {
init_slots(); init_snd_cpu();
v_blank_in(); v_blank_in();