The compiler, and the last thing the ladder was waiting for. A tune names
its instruments, writes sequences of notes and durations, and gives each
voice an order list of sequence names - which is where repetition comes
from, since a phrase played four times is written once and named four
times.
#Tick 0d125000
#Patch Oboe oboe.patch
#Voice 0d0 Oboe
#Sequence Verse
0d64 0d4 0d67 0d4 0d72 0d8
#Order 0d0
Verse Verse Ending
"#" is a directive and ";" is a comment, exactly as in SplitBit assembly
and in the shell's scripts, and numbers are written the way the assembler
writes them. One rule across the machine rather than a third dialect -
and the rule earned itself immediately: the first tune I wrote said
"#Voice 0" and was refused, correctly, for a bare number.
WHAT IT REFUSES IS EVERYTHING THE PLAYER CANNOT NOTICE. The machine has
no names, so it cannot say a sequence does not exist. It has no lengths,
so it cannot say the voices will come apart four bars after the mistake.
A duration of nought is counted down to 255 and held, which sounds like a
hang rather than an error. And by the time a tune is loaded, "no starting
instrument" and "instrument nought" are the same byte - so the user's
ruling, that a voice with a part and no instrument is an error, can only
be kept here.
SoundPatch gains --blob, writing the same table as raw bytes. It stays
the only thing that reads soundThing's JSON: a second program parsing
that format is a second opinion about what a patch means, and the seam
between two opinions is where the LFO bug lived for a fortnight. Patches
are found beside the tune and then on a -I path, the way an include is.
THE TEST IS THAT TWO IMPLEMENTATIONS AGREE. maketune.py lays the fixture
out by hand and TuneC compiles a written source, and the suite checks
they match byte for byte - the discipline SplitDisk and sbfs.asm are held
to, for the same reason: either alone is only self-consistent. The
fixture predates the compiler, so this is also TuneC checked against
something written before it existed. Four more checks cover the four
refusals.
Also: the SoundPatch binary was tracked, alone among the six tools, and
.gitignore lists every other one. Untracked, and TuneC added beside it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
45 lines
1.6 KiB
Plaintext
45 lines
1.6 KiB
Plaintext
# Anchored to the repository root, all of them. Without the leading slash a pattern
|
|
# matches at any depth, so "Assembler" also ignored the Source/Assembler DIRECTORY - and a
|
|
# new source file added there would have been silently untracked.
|
|
/Tests/build/
|
|
/Programs/build/
|
|
/Object/
|
|
/Assembler
|
|
/SplitBit
|
|
/SplitDisk
|
|
/SplitLint
|
|
/Voyager
|
|
/SoundPatch
|
|
/TuneC
|
|
/CLAUDE.md
|
|
/claudeResume.sh
|
|
/codexResume.sh
|
|
|
|
# Python leaves these beside the test scripts.
|
|
__pycache__/
|
|
|
|
# Assembled programs. Every one of these is built by 'make' in Programs/ from a source
|
|
# file that is tracked, so committing them only creates a second answer to the question of
|
|
# what a program does - and the second answer goes stale silently. Nine of the ten that
|
|
# used to be here disagreed with their own source, including the operating system.
|
|
#
|
|
# Not anchored, because a .bin may be built anywhere a .asm lives.
|
|
*.bin
|
|
*.sbx
|
|
*.img
|
|
|
|
# Kate leaves these beside a file it has open.
|
|
.*.kate-swp
|
|
Source/Emulator/rom.c
|
|
|
|
# Other people's repositories, kept here to be read rather than to be built. soundThing is
|
|
# where the synthesizer comes from and Hatchet-GPU is where the font and the scroll register
|
|
# idea come from, and neither belongs to this one: they carry their own .git directories,
|
|
# their own build outputs and their own compiled binaries. What this repository takes from
|
|
# them gets vendored deliberately, with a note saying where it came from.
|
|
/External/
|
|
|
|
# The personal disk 'make run-voyager' puts in drive 1. Made on demand, never rebuilt, and
|
|
# not cleaned - it is the one place in here where something made ON the machine can live.
|
|
/Disks/
|