Login
TEDzakker 1.2
Title:TEDzakker 1.2
Original version:TEDzakker
Category:Utility/Music
Release Date:
Language:English
Size:64K
Machine:PAL Only
Code Type:Machine code
Distribution:Freeware
Code by:Hermit
Notes:Crossplatform release of the Plus/4 music editor, featuring additional distributions for Windows and Linux OSes too. Version 1.2r3 fixes a transpose bug in the player.
User Rating: 9.1/10 (10 votes)
User comments: Read comments
TEDzakker 1.2 Title Screenshot

TEDzakker 1.2 Screenshot


HVTC
TEDzakker Normal Player Example
TEDzakker Bare Player Example
TEDzakker Demo Player Example
TEDzakker Extra Player Example
TEDzakker Light Player Example
TEDzakker Medium Player Example
Chromatic Admiration
Fixed Points
Adventurous Trail
Choosing The Wrong Way
Cob's Odyssey
Easy-going
Next Time, I'd Like To Swim With The Toxic Jellyfishes, Please!
Sailing Into A Mysterious Ocean Near The End Of The World
Super Star TED
the idea?
Shorteddy
A Titan Emerges
A Small Adventure
Bobted
Going Back
Its So Much Fun
More Than Business
Mysterious Mansion
No Extensions
Spooky
Switched Circles
TED Damnson vs. Surf Ninjas
TEDhno
TEDle Away In The Wind
Ggg
Wayfarer
Weird Hot Things
Evening
Shorty01
Homeogene
Slipshod


Author's Comments
Many thanks for all the musicians whose TZW workfiles can be found in the example folders. Especially for Chabee and 5tarbuck for the testing and their exclusive new tunes, 'Homeogene', 'Shorty01' and 'Evening'...
I made a lot of real TED measurements and recordings during the development, but got a lot of information from the excellent Plus4emu (very precise sound-emulation) and FPGATED projects to code the emulation, and bring the sound emulation a bit further (other parts of the emulation are not cycle-exact to save some CPU-power, so synced noises are affected). Apparently you can hear a little bit of distortion in the mixing of the otherwise (when standalone) clean channels in the original uploaded file. That is intentional because the measurements showed that the TED output driver is stronger when both channels are on (drive the output load parallelly) and cause a slight increase in the main volume. That way channels affect/modulate each other a little bit, creating extra harmonics that may be one of the reasons of the Plus4's rich spectrum even though it has only 2 channels. Sorry if this effect is too much compared to the real Plus4, maybe I should have decreased it, just an afterthought. I'm working on a cross-platform TED-music player now and I'll refine this technique (or eliminate it if it's unlikeable) to get closer to this sympthom of the real hardware's imperfections. The uploaded r2 revisions don't contain this 'feature' and sound cleaner at the moment.
The output circuitry is modeled with the transistor's slight distortion (which is present in Plus4emu too, this creates harmonics again due to intermodulation distortion between the channels and maybe even the 221kHz TED PWM carrier frequency, enriching the sound-spectrum). And in TEDzakker I added the basic machine noise too, it's more authentic that way, and anyway, it's a drone channel for free if your real channels are silent enough. :) The pulse-sound decay phenomenon (turning back to high level after a time depending on warmup-time if $3FE frequency stops oscillator) is also closer to the real hardware because it produces a short machine-noise like sound while the bits (capacitors) of dynamic logic lose their charges...


Preliminary Metadata Editing
The author noticed that almost nobody filled in the author-info field in their saved/exported TEDzakker tunes. He guesses it's too far in the manual for most users, but just pressing CTRL (TAB if working by emulators) in the file-saver page allows the user to get into the author-field. In there, anything can be written, but the preferred form is 'authorname: tunetitle', so the TED(TMF) exporter will generate the metadata-fields correctly, and when the exported .TZR.PRG or .TED.PRG is executed the title is displayed instead of an empty field in the middle of the screen. You can use the CTRL key again to get back to the file-selector or file-name typer fields.


Description
TEDzakker 1.2 Help
==================


I. Introduction:
================

TEDzakker is a music editor for the TED chip of the CBM264 series (Plus4,C16)
which is humble compared to C64, but still can produce listenable music.
TEDzakker 1.2 is mainly the same as 1.1 but now it can be run directly on the
PC (Linux/Windows), with all of its advantages (and disadvantages): Workfiles
(TZW) can be associated and opened as arguments, folders can be changed in file
dialogs, -zoom, preferred folder and -drive parameters can be given just like
in SID-Wizard-1.92.
The batch-files beside the executables can be used to start with given
arguments and the 'tedzakker' executable is a selector for different TEDzakker
player-types, or if associated with .tzw files, it's a launcher that
automatically launches the TEDzakker-xxx file having the proper player-type
for the music-workfile.
Filenames (if opened from within TEDzakker) must be shorter than 12 characters
(before the .tzw extension) and not contain uppercase or special/accented
characters (this is a Commodore-disk limitation for file-dialog compatibility).
Mouse is supported if you prefer accessing the different positions of the
editor screen by clicking on them. Scroll-wheel mimics PageUp/PageDown keys.
The 'Zoom' button in the top-left corner can change 2x/3x/4x zoom (window-size)
by clicking on it with left (increase) or right (decrease) mouse-button.
Some new functions in the editor: Selectable framespeed-spread with C=+F to
restrict multispeed to border and avoid music-calls in the dislay-area, and
selectable player-zeropage-address before exporting (on Murphy's requests).
The TZR format is not exported anymore, but a runnable TED format (ted.prg)
which also contains TMF metadata (title,length,etc) for playback from tools.
The playtime is autodetected for subtunes when they're played through and for
the 1st subtune it's saved into the TZW workfile and is adjustable in menu.
(And all detected subtune-durations are saved into the TED/TMF-file too.)

I think you've guessed already where the name 'TEDzakker' is coming from:
The TED is the all-in-one graphic+sound chip for the Commodore Plus4 and
Commodore 16 computers.
This music tracker tries to squeeze out some sound from the TED-chip which has
these humble features:
-Two channels: counter-based oscillators with nonlinear 108Hz...55kHz frequency
range (No bass?! That's a pity, though you can find some solutions later if
you read on.)
-First channel's oscillator can produce 50% duty-cycle pulse, while the
2nd oscillator can produce the same but it can be switched to whitenoise
waveform too.
-Both channels share the same volume ranging from 0..8. (Values 9..F equal to
the volume of value 8.)
(You'll see different solutions for this limitation in TEDzakker.)
-The channels can be synchronized. (It's very important to create some
interesting new sounds.)

Never mind, I gess I nearly pushed the chip to its limits and you can still get
some decent sounds and tunes from it with some careful tweaking...

Let's see some extra features of TEDzakker in a nutshell:
-maximum 10 subtunes (only 1 on Commodore16), 100 patterns (only 8 on C16), 58
instruments (only 6 on C16)
-6 different player-types for different needs and rastertimes/sizes ('normal',
'light',etc.)
-TED sound emulation on SID for C64 version (Plus4 music can be composed on
C64, TED can be driven by C64)
(some rarely used aspects of TED aren't emulated by SID: ultrasounds,
freq.$3FE, phase, 'noiseloop')
-HerMIDI MIDI-interface support (notes can be played, instruments can be
selected)
-multispeed call can eat smaller rastertime than the single-speed (50Hz) call
-multispeed is selectable for waveform/frequency/volume tables of each
individual instrument
-note-column effects (Slide Up/Down, Vibrato, Sync, Legato, Automatic
Tone-Portamento)
-funktempo/tempoprogram programmable by consequent tempo-effects in orderlist
-subtune-jump effect to other subtune in orderlist
-short 1ms whitenoise can be enabled for instruments (crisp soundstarts)
-SYNC and PHASE between the two channels, possible to create ringmod or PWM-like
sounds
-bass sounds deeper than A2=108Hz by utilizing 'noiseloop' (sounds a bit thin
though, needs doubling)
-main-volume simulation with fade-out support, volume/fadeout can be set
externally
-note-volume fade-in/out in instrument-tables to create volume-envelopes (ADSR
and the like)
-note-OFF table-indexes (good e.g. for ADSR 'release' simulation)
-different mixing modes to map the virtual volumes of channels to shared volume
-detune/slide effect can be set by instr.table/pattern/orderlist, it is
permanent (saving patterns)
-normal/incremental vibrato, balanced vibrato/slide-speed strength in lower
octaves
-gentle vibrato-amplitude setting: waits till vibrato returns to zero-crossing,
so avoids pitch-drifting
-Instrument load/save support (each instrument has its own individual table)
-Runnable and playable tunes can be exported directly from TEDzakker editor just
like workfiles
-Built-in cheatsheet and built-in tutorial/example-tune for all player-types

Comparison of player-types: (Full)
------------------------------------------- Extra Normal Medium Light Demo Bare
Multispeed Entry-Point X X . . . .
Multispeed selectable in Inst.Tables X X . . . .
No frameskipping to reduce rastertime X . . . . .
└Note-volume support at frameskipping - X X . . .
Soundstart 1ms short whitenoise-click X X X . X .
└Soundstart-click volume-setting X X . . . .
Tempoprogram / funktempo support X X X . . .
Subtune-support X X X X . .
└Subtune-jump support X . . . . .
Main-volume simulation X X X . X .
└External main-volume setting X X X . X .
└Main-volume fade-out support X . . . X .
Mixing modes (average/louder/prio.) X X . . . .
Synchronization / Phase support X X X . X .
Packed NOP support (compressed patt.) X X X X X .
Note-column effect support X X X X X .
Orderlist-sequence FX support X X X X X .
└Transpose-effect support X X X X X .
Detune-support X X X X X .
Note-OFF table-indexes X X X . . .
Instrument-table delay-cmd support X X X . . .
Note-volume fade support (envelopes) X X X . X .
Low-frequency 'noiseloop' bass sounds X X . . . .
Portamento and Vibrato support X X X X X .
└Vibrato-restore,Incremental,GentleVib. X X . . . .
Balanced slide/vibrato in low octaves X X . . . .
Size of player-code in bytes (Plus4) $955 $91F $7A7 $5A9 $65C $41B
Approximate maximal rastertime (rows) $24 $1E $1C $18 $17 $11


(Those players above keep backwards compatibility to the weaker ones, except
multispeed-operation.)
(You can customize a player by setting individual features in player.asm and
reassembling.)
(The player-type rastertime/size and enabled features can also be seen in the
menu-screen.)
(On Commodore16 subtunes are not supported for any player-type.)
(When no mixing mode support in a player, 'louder' mixingmode is available only:
louder channel wins)
('Demo' player-type is created for the usual needs of demos and sound-extras
keeping size/time down.)



II. Usage of the Editor:
========================


First, let's start with a little but important info: In case you get a freeze
due to some unreliable hardware, whatever, you can reset the machine and
restart TEDzakker with SYS 4109 on Plus4 and C16, or SYS 2061 on C64, hopefully
keeping your music data untouched. In PC-version use Shift+F9 for safe-restart.

TEDzakker starts with a menu where you can perform many tasks: load/save
workfiles and instruments, export runnable and playable code (to include in
programs), turn on HerMIDI to receive MIDI-notes, load example-tune.
Press the keys 1..E or cursor keys to select options. +/- and cursor-left/right
keys can modify values in menupoints (e.g. relocation target-address, zeropage),
RETURN/Enter can launch the menupoints. Press F8/Esc/RunStop to exit menu, and
press F8 (HELP/F7 key on real Plus4) in the editor to bring back menu.
Advice: You'd better save your tune as 'Workfile' before any other
disk-operations, to be on the safe side.
Note: C16 version doesn't have a menu due to memory limitations. Press HELP(F8)
key to load, C=+F8 to save workfile.

The MIDI (HerMIDI) support is not as fully-functional yet as it is in
SID-Wizard. You can play monophonic notes with automatic legato where notes
overlap in time, no polyphonic mode exists yet. There is no concept of channels,
so TEDzakker receives note-events on all channels. Also, you can select
instruments, and type notes by MIDI-keyboard, but that's all for now about MIDI.

When you enter the Editor the screen layout might be familiar to you, it's
similar to SID-Wizard.
The biggest difference is the vertical Orderlist at the left-hand side, which
could be put there thanks to the few amount of TED channels (2). If you still
prefer the horizontal orderlist, check out tedzakker-horiz.prg. (The orientation
can be changed at build/assembly-time, see later.)
At the bottom you can see author-info, plus on its right-side the first letter
of the editor's player-type, which the opened music was composed with.
In the middle at the pattern-editor you can edit 2 patterns simultaneously
which you most probably select by pressing RETURN in orderlist-positions. Each
pattern has 3 columns: Note, Instrument/FX, FX
Prepare in advance that composing for only 2 channels is quite a challenge and
needs a prepared mind and some practice, but well over-thought arrangements can
still give a complete music experience. I abandoned the idea of virtual 3rd
channel which is used in some players (e.g. KnaeckeTraecker's) as I think the
human brain's combinational abilities can't be substituted by machine-code, and
3rd channel would take extra memory anyway, despite being heard only
occasionally at short times when one of the main channels (unlikely) doesn't
play any note.
To the right you can see the instrument-editor. There are no common numeric
settings (except instrument-name at the top), all parameters of the instrument's
sound will be set frame-by-frame in WF/FRQ/VOL tables. (See in 'Music Data'
section.)
The numbers at the very top (first screen row) represent the following
informational values:
SUBT:currently edited subtune, PT:currently selected pattern on channel,
I:currently selected instrument on channel,
FS:framespeed (single-/multispeed), SP:speed/tempo on channels, O: currently
selected octave for piano-keys

I prepared some VICE .vkm files (find them in subfolders of this folder), they
could make the composing in VICE easier by enabling PageUp/Down and Ins/Del,etc.
(To use the .vkm files, copy them to /usr/lib/vice/PLUS4 folder on Linux, or
VICE data folder on the different platforms, but you'd better back-up the
original files before overwriting them.)
However, I advise to use real machines, they sound so much cleaner...
(VICE 2.4 sound emulation has a little flaw at the moment: you can hear
ultrasound and $3FE, which are inaudible on real Plus4/C16. Apart from this it's
okay, but you may try Yape too, which has sound probably closer to the real
machine but key-layout might be less convenient.)

There's a built-in cheatsheet in TEDzakker (C=+H in editor), but here's a more
complete list about the keyboard-commands (nearly identical to SID-Wizard's)...
(Highly advised to watch with monospace character set for proper identations.):

a.playback:
-----------
PlayBegin F1 - play from beginning
PlayMark F2 - play from playmark (that's put into orderlist
by Shift+SPACE / C=+SPACE)
PlayPatt. F3 - play pattern (looped)
Stop/Cont. F4 / RUNSTOP - stop or continue playback (stop-mode: when rasterbar
is red, you can jam on piano keys)
PlayPos. Shift+SPACE in pattern-window plays patterns from current cursor-row
PutMark Shift+SPACE in orderlist puts playmark at cursor-position on both
channels (C=+SPACE: only one)
FollowPlay Use C= (CBM) key together with F1..F4 / RUNSTOP in order to initiate
follow-playback.
AutoFollow C=+ESC toggles Auto-follow mode, so you don't need to press C=
with Function/STOP-keys.
ToggFollow Shift+ESC toggles follow mode anytime
FastForwrd ESC key does fast-forward while held down
MuteUnmute Shift + 1/2 mutes/unmutes channel1 or channel2

b.navigation
------------
GoPattern F5 / Shift+P - go to Pattern (F5 toggles Pattern / Orderlist if
already in there)
GoOrderlst F6 / Shift+O / * - go to Orderlist (F6 toggles Orderlist / Pattern
if already in there)
GoInstrum F7 / Shift+I - go to Instrument (F7 toggles Instrument/Pattern if
already in there)
But of course you can simply navigate between parts of the screen
easily by cursor-keys thanks to the vertical orderlist.
Tabulate CTRL (TAB in VICE) and Shift+CONTROL can be used to move faster
between windows/panels/tracks
GoToMenu F8 (HELP/F7) - go to Menu (and return from menu)
DisplayHelp C= + H - displays Help till the keys are held down (permanent help
can be called from menu)
PageUp/Dn. / and Shift + / (PageUp/Down in VICE) can be used to go faster than
cursor-keys.

c.selection
-----------
SelectInstr. + / - keys select instrument for jamming/editing
SelectPatt. Shift +/- selects pattern to edit in pattern-window
SelectInst2 RETURN in Pattern on instrument-numbers selects and goes to the
instrument
SelectPatt2 RETURN in Orderlist selects patterns, Shift+RETURN selects only one
channel's pattern
SelectOctave C= + 0..9 selects octave for jamming / entering notes
IncDecOctave C= and + / - increments/decrements octave
SelectSubtun C= and . / , selects Subtune

d.editing
---------
ToggleJamEdit SPACE - toggles editing / jamming modes (cursor flashes faster in
editing-mode)
PutNote Q..P,2..9,Z..M,S..L keys are the actual 'piano' keys to put notes
into patterns or jam them
DeleteNote A or 1 keys deletes the note at cursor-position in edit-mode
WriteHexValue 0..F keys can be used in orderlist, pattern instrument/fx column,
and instrument-tables
PutNoteOnOff RETURN / Shift+RETURN in pattern puts Note-OFF or Note-ON
PutSlide Shift + U / D puts slide-up/down into note-column of pattern,
hex-value can be typed, 0 removes
PutVibrato Shift+V puts vibrato into note-column of pattern, hex-value can be
typed, 0 removes vibrato
PutLegatoSync Shift + L / S puts permanent legato or SYNC-mode in note-column,
C= + L / S turns them off
PutPortamento Shift + T puts tone-portamento into note-column, speed can be
typed as hex-value, 0 removes
DeletePattRow C= + DEL deletes a whole row without moving the rest below (unlike
DEL and Shift+DEL)
SetPattLength C= + RETURN sets pattern-length pressed on a pattern-row
TransposePatt Shift + Q / W transposes pattern from cur.pos. a semitone up/down,
C=+Q/W: octave up/down
CopyCutPaste C= + C / X / V copies orderlist-sequence or pattern from
cursor-position, and instrument
(Cut/Copy/Paste functions are not included in C16 version due
to memory limitations.)
CopyAreaEnd Shift + C can be used in orderlist/pattern to set end of copied
area (C=+C set its start before)
NameInstrum. Shift + N - Name instrument (RETURN/ESC/cursor-down to exit from
here)
NoteOffIndex Shift+SPACE in instrument-tables puts/removes a Note-OFF index at
cursor-position
TableMultiSpd Shift+M in instrument tables enables/disables multispeed-mode of
distinct WF/FRQ/VOL tables

e.settings
----------
SetAutoAdvance Shift+A toggles auto-advance of cursor after typing note/value
SetFrameSpeed Shift + F / G increments/decrements framespeed (1...8)
SetMultiSpeed C= + F sets multispeed-mode to be restricted at border-area
SetFullJamMode C= + J - toggles full/partial jam-mode for SPACE (in fulljam mode
no hex.values entered)
SetInsNoteMode C= + N toggles note/numeric entry and display mode in
instrument-table

f.file-dialog
-------------
ReadDirectory F1 - Read/Re-read directory (in 'save'/'export' dialogs it's not
done automatically, press F1 there)
NextDirPage F3 - If the directory doesn't fit into one page, you can list the
next page of it by F3 (Page-Down)
SelectField CTRL (TAB in VICE) - use it to navigate between filename /
author-info / filelist fields
SelectFile RETURN - pressing RETURN in the file-list (after selecting by
cursor-keys) uses that entry as filename
ReturnToMenu F8 / STOP / ESC will return to the menu
(If an error occurs, it's displayed at the bottom of the screen. You'll be
prompted to press any key in that case.)
(As you've probably guessed, you can edit the author-information only in
'save'/'export' file-dialogs before saving.)
(C16 version doesn't have a complete file-dialog. Press RETURN to list directory
or enter load/save names directly.)



III.Music Data
==============


(I don't include examples here, you can see a lot of them in the example tunes.)
(Commodore16 version doesn't allow patterns/orderlists bigger than $20 rows,
instrument-tables bigger than 15 rows, and more than the amount of patterns,
instruments that were mentioned in the features: max. 8 patterns and 6
instruments.
So don't try to load bigger music made in Plus4/C64 trackers or you'll get
corrupt data as a result. One example-tune called 'example-bare.tzw' works for
C16 version, as it fits into the aforementioned strict limitations.)

In general, Normal and Extra players can produce lower notes, than what's
officially possible by TED (note A-2 or 108Hz).
This trick comes from the fact that the Noise-waveform on channel2 loops above
a certain pitch, and resembles more to a thin bass sound than white-noise.
(Similar to clavinet/slapbass/picobass sounds...got the idea?)
I mapped the note-range C-0..G#2 to this 'noiseloop'-waveform (as I call it)
so you can easily create melodies with it.
Though the musical pitch is not always precise and is so thin that an
octave-doubling unisono on the 1st channel comes handy in cases... But at least
it adds some bass range to the TED...

Let's see the meanings of numeric values you can enter into orderlists,
patterns, and instrument-tables: $FF is the 'Jump' command everywhere
(orderlist, instrument-tables), and the value just following it represents the
target of the jump.


a.Instrument-table values:
--------------------------
The commands entered into instrument-tables below each other are executed
frame-by-frame when a note starts with the selected instrument. The current
row of execution is shown on the screen (with "<") when you play a note with
the instrument (piano-keys). The exception on the run-order is when you use
$FF jump-command or you release the note ('---' in pattern): If a Note-OFF
index was specified for a table by Shift+SPACE, the execution goes there.
(That's useful for example to model a 'Release' phase of ADSR envelope in
VOL-table.)

As already mentioned in the keys-section, Shift+M can be used in
instrument-tables to toggle whether they're executed on
multispeed-framespeed-calls too. So e.g. if you make a 2x framespeed tune,
but you don't want the volume-envelope go faster, in normal/extra players
it can be set to 'single'-speed. Actually that's the default value for VOL
table, while WF and FRQ are set to multispeed-mode by default (a 'square'
shows up at table headers)

Of course the features above don't apply to all of the playertypes. On top of
that, Commodore16 version of TEDzakker has only 15 rows in its
instrument-tables, we have to deal with that.

00 is the 'END' command, the execution of instrument table ends there. More
ends can be given for an instrument, which makes sense for Note-OFF indexes
(or table-jumps)...

01..0F is 'delay'/'wait' command in each table (WF/FRQ/VOL), and it delays 1..F
frames (screen-refresh intervals). (The not-listed value-ranges shouldn't be
used as they're are kept for upcoming expansions of the player.)

WF (waveform-table): (Attention: Noise waveform only makes sense on 2nd
channel! Don't be surprised if it's odd on channel1.)
--------------------
($10 SYNC-bit creates some metallic sounds such as sync/ringmodulation ones on
C64)
20..2F : Pulse waveform (50% pulsewidth / duty cycle) with duration 00..0E
frames; or $2F: start with 'short 1ms clicknoise'
30..3F : Pulse waveform + SYNC (synchronizes/initializes the oscillator at
every player-call / frame / multispeed-frame)
40..4F : Noise waveform (only on 2nd channel. 1st channel also sets it but not
the frequency of channel2)
50..5F : Noise waveform + SYNC (synchronizes/initializes the oscillator at
every player-call; has stronger effect in VICE)
60..6F : Silence (switch off waveform to put gaps in the sound for
chopping/staccatto, etc.)
80..FE : Pulse waveform + PHASE (delays the counter/oscillator by $00..$7E * .
(If you use different PHASE between channels identical in pitch, you can
create some non-50% stable pulsewidth sounds)
(To simulate pulsewidth-modulation, slight detune/vibrato effect on one
of the channels is the preferred cleaner way.)
2nd Nybble in details: 1..E: defines duration of the current WF-row in frames
F: in first row of WF-table adds short circa 1ms whitenoise-click
to the sound then sets waveform of 1st Nybble

FRQ (frequency/pitch table): (remember? 00:END, 01..0F: wait/repeat, FF: jump)
----------------------------
10..1F : Pitch-Slide Up (the same number as Slide-Up pattern-FX)
20..2F : Pitch-Slide Down (the same number as Slide-Down pattern-FX)
30..3F : Detune Upwards (permanent until 0 detune is set, good to create some
chorus effect between identical channel-notes)
40..5F : Relative note-shift upwards (for arpeggios/chords)
60 : Incremental vibrato. Next value below holds: rate in 1st Nybble,
increment in 2nd
7F..61 : Relative note-shift downwards (for arpeggios/chords)
80 : Vibrato. Next value below it holds: rate in 1st Nybble, amplitude in
2nd Nybble
81..FE : Absolute pitch: $81..$F8:note-pitches of C-0..H-9,
$F9..$FE:direct TED pitches $3F9..$3FE

VOL (note-volume/ADSR table): (00:END, 01..0F: wait or repeat fade, FF: jump)
-----------------------------
10..1F : Note-Volume Fade-In (Increase), like 'Attack' of ADSR, but a
volume-setting should preceed it
20..2F : Note-Volume Fade-Out (Decrease), like 'Decay'/'Release' of ADSR, but
volume-setting should preceed it
30..3F : Set Note-Volume with 'Priorized' mixing-mode (the common volume is
strictly set by this channel)
40..4F : Set Note-Volume with 'Louder' mixing-mode (the common volume is set
by the louder channel)
50..5F : Set Note-Volume with 'Average' mixing-mode (the common volume is the
average of channel 1 and 2)
(When a note-volume reaches 0, its waveform is disabled and it doesn't take
part in the mixing thereafter.)
($4x 'louder' mixing mode has priority over $5x 'average' mode. If both
channels use $3x, 2nd channel is priorized.)


b.Pattern-values
----------------
00 is the 'NOP' (no-process) value for the patterns, it's an empty note/ins/fx
that does nothing ('...')

The FX-values in Note-column are accessible through piano-keys and
Shift+L/U/D/T/V/S, see above at keys-section.
(Shift+L turns on permanent legato mode until it's turned off by placing
legato-off with C=+L.)

Instrument-column can select 01..3E instruments, $3F value is temporary
legato, just for one row.
Above $40, instrument-column can perform the same effects as the last
FX-column:

Effect (FX) column Pattern-Effects: (Don't use any values above $BF, that's
----------------------------------- kept for pattern-compression.)
00..0F : Duration of current pattern-row (given in frames)
10..1F : Pitch-Slide Up (same number as Slide-Up in instrument-table, they can
clash)
20..2F : Pitch-Slide Down (same number as Slide-Down in instr.-table, they can
clash)
30..3F : Portamento (automatic slide to the note on the current pattern-row)
40..4F : WF-table jump (e.g. selecting different phases or altering
waveform/SYNC from pattern)
50..5F : Note-Volume (overriding note-volume. Only extra/normal/medium players
can perform it on the same row as the note)
60..6F : VOL-table jump (e.g. setting different note-volume in light/bare/demo
players on the same row as the note)
70..7F : FRQ-table jump (e.g. using a different arpeggio-chord inside the same
instrument)
80..8F : Vibrato Amplitude (extra/normal has gentle-vibrato setting avoiding
pitch-drift, can clash with instrument-table)
90..9F : Detune upwards (permanent until detune of value 0 is set)
A1..AF : Main Volume setting 0..F (no total silence, that saves some
rastertime, but silence can be made in other ways)
B0..BF : Track-tempo setting 0..F

(As you can see there's no setting for vibrato-rate. There's a default rate of
2 in 'extra' player, but if there's a vibrato-rate given in FRQ
instrument-table, that will be used. It is necessary to give vibrato rate in
other players.)
(If you don't set any tempo in patterns/orderlists, the default tempo-value
set at tune-initialization is 6.)
(Main volume 1..F is mapped to the 0..8 values of TED, so mostly you get
difference at every 2nd value when you fade.)


c.Orderlist-values: (Sequences for channel 1 and 2)
-------------------
$00 is the 'END' value, playback ends there. (Note decay / fade-out and
instrument-table execution still continues.)
$01..$64 are the pattern-numbers to be played in order as they're given in
orderlist channels (theoretical limit is $7F)

$8F..$80:Transpose Down the channel by -1..-15 semitones (musical key-change)
$90..$9F:Transpose Up the channel by 0..15 semitones (musical key-change)
$A0..$AF:Main Volume setting 0..F (the same number and same effect as the
corresponding Pattern-FX)
$B0..$CF:Tempo / Funktempo / Tempo-Program setting $00..$1F (consequent
tempo-settings program the funktempo/tempo-table)
$D0..$DF:Detune upwards (permanent until detune of value 0 is set, useful to
save memory by using the same patterns)
$E1..$EF:Main Volume Fade-Out with speed 0..F (only in 'extra' player, from
1 second up to cca 18 seconds)
$FF :Jump to orderlist position (given in next row) on the channel (if you
type $80..$8F as jump-target, it jumps subtune)
(Tempo-program can have maximum 8 entries, but that should be quite enough.
Don't use consequent $BX more than 8 times.)



IV. Saving, Exporting, Usage of the exported Tunes:
===================================================

Don't forget anytime to save the tune as 'Workfile' (.tzw.prg) before exporting
it. Edit the author-info field by TABbing to it, everything before a ':' is the
author-name, everything after it is the title in the exported .ted.prg file.
Exported tunes can't be loaded back (yet). (Instruments can also be saved
individually, their extension will be '.tzi.prg'.)

There's a convenience function in the menu to 'Export Runnable' which
automatically creates a starter-program and relocates the tune to $1300, then
saves all together as a '.ted.prg' file you can simply load and run/play later.
(It supports multispeed tunes, but doesn't have subtune-change feature yet, only
the first subtune will be listenable.)

To include a tune in programs/demos/etc., you first have to relocate it to the
desired address with +/- keys in the menu at 'Export Playable' menupoint, and
then press RETURN on the same menupoint to actually export it as 'playable'
(.tzp.prg). Now you can also modify the location of the 2 player zeropage-bytes.
The exported playable can be initialized and played by the conventional scheme,
where 'PlayerAddress' is the relocated tune's base-address (load-startaddress):
PlayerAddress+0 : Initialize the player, Input: Subtune-number in Accumulator
($00..$0F) (light/medium/normal/extra players)
PlayerAddress+3 : Play the tune - this 'Single-call' should be called every PAL
video-frame (screen-refresh / v-blank period)
PlayerAddress+6 : Multispeed-call - normal/extra players provide a distinct call
for multispeed, it runs only instrument-tables, while
tempo/pattern/orderlist advance and note/instrument-starts
are handled in 'single' call
PlayerAddress+9 : MainVolume set/fadeout - if Accumulator = $00..$0F , the
main-volume can be set externally,
if Accumulator = $10..$FF , fade-out of main-volume can be
initiated (1..18 seconds)



V.Building/Assembling TEDzakker
===============================

The source-codes (tedzakker.asm, player.asm, HerMIDI-Plus4.asm) are in '64tass'
format. I used 64tass v1.51.584, and any never version should be able to
assemble TEDzakker binaries with all the preprocessor-directives.
The Makefile handles all the assembling process (likely to be given in Linux),
but if you don't have make, the TEDzakker binary with default settings (Plus4
target, Normal-player, vertical orderlist) can be assembled by the following
command-line:
64tass tedzakker.asm -o tedzakker.prg

There are some definitions that can be given from command-line with '-D'
arguments (see in Makefile, how):
-D MACHINE=0..2 ( Values: 0:Commodore 16, 1:Commodore Plus4,
2:Commodore 64 )
-D PLAYERTYPE=0..5 ( Values: 0:Normal, 1:Medium, 2:Light, 3:Extra,
4:Bare, 5:Demo )
-D HORIZONTAL_ORDERLIST=0/1 ( Values: 0:Vertical Orderlist, 1:Horizontal
Orderlist )

The finer details for MACHINE can be found in 'tedzakker.asm' if you want to
refine features of Plus4/C16/C64 versions. And details for PLAYERTYPE can be
found in 'player.asm' in case you need to customize or create a new
player-type, maximum amount of instruments/patterns/subtunes can be adjusted
in 'player.asm' as well.



VI. Closing words:
==================

I wish you a nice experience with TEDzakker by exploring the yet scarcely
utilized capabilities of TED. In case you need further help don't hesitate to
reach me through PM at CSDB.

February 2023
Hermit Software Hungary (Mihaly Horvath)




================================================================================
ToDo:
-----

to add to player:
-----------------
-volume-gap (auto-staccatto)
-table-restart ON/OFF per note-start
-common table-speed (by X0..XE in WF-table?)
-tempo-program setting(teaching) also in pattern? (makes sense for on-the-fly
setting)
(-light/bare without sync./phase support should have at least non-sync sound
instead of silence there, for pulse-waveform)
(-no-vibrato/no-portamento players may play plain note in place of
vibrato/portamento, for kinda forward-compatibility..)

to add to editor:
-----------------
*subtune-change feature (+/- keys) in EXEstarter
-inst-table/orderlist $FF-jump automatic corrections for insert/del before/after
-C=+U/E to find Empty/Unused pattern-number in orderlist
-step-highlighting in pattern position-numbering
-playable/runnable-tune import in menu
-colorfade when switching pages, colorthemes
-SWM/MID converter?
(-overwrite notification in savers - for VICE emulator without TDE)
(-handle workfiles not fitting in memory on C16-version (using CHRIN instead of
standard LOAD? different decompr.alg.?))
(-PICtune PIC12F509/ATTiny microcontroller-based sound-expansion support)
================================================================================

Copyright © Plus/4 World Team, 2001-2024. Support Plus/4 World on Patreon