The note delay (EDx) turned out to be more difficult than expected, mostly because of the resource constraints of the platform.
After much toil and many false starts, eventually I gave up on continuing to process the previous note during the delay, and decided to just not update the channel until the delay concludes. This means that the channel state is left as is -- with whatever tone and volume it had at the moment the new note is read -- while the delay counts down to zero, at which point we trigger the new note.
It's not ideal, but serviceable, and saves me a lot of headache in having to make the tracker keep the new note event details in memory, while retaining the old one's as well and process it as if it were still active. (I have up to 6 channels to support, and a full duplicate of the buffer for each of them is quite a big chunk of the previous memory available on the Intellivision.)
Anyway, it seems to work well in practice, to some extent.
The full roster of available effects on the Intellivision Music Tracker so far are:
Code: [Select]
-------------------------------- ------
Standard Effects Status
-------------------------------- ------
$00: 0 Arpeggio Done
$01: 1 Portamento Up Done
$02: 2 Portamento Down Done
$03: 3 Portamento To Note Done
$04: 4 Vibrato Done
$05: 5 Portamento To Note + Volume Slide Done
$06: 6 Vibrato + Volume Slide Done
$07: 7 Tremolo Done
$08: 8 ---
$09: 9 ---
$0A: A Volume Slide Done
$0B: B Jump To Order
$0C: C Set Note Volume
$0D: D Pattern Break
$0E: E E Sub-Commands (Dispatcher) Done
$0F: F Set Song Speed Done
$10: G Set Global Volume Done (Controls volume attenuation only.)
$11: H Global Volume Slide Done (Controls volume attenuation only.)
$12: I ---
$13: J ---
$14: K ---
$15: L Set Envelope Position
$16: M ---
$17: N ---
$18: O ---
$19: P ---
$1A: Q ---
$1B: R Re-trigger Note + Volume Slide
$1C: S ---
$1D: T Tremor
$1E: U ---
$1F: V ---
$20: W ---
$21: X X Sub-Commands
$22: Y ---
$23: Z ---
-------------------------------- ------
Standard Effects Status
-------------------------------- ------
$00: E0 ---
$01: E1 Fine Portamento Up Done
$02: E2 Fine Portamento Down Done
$03: E3 ---
$04: E4 Set Vibrato Waveform
$05: E5 ---
$06: E6 Pattern Loop
$07: E7 Set Tremolo Waveform
$08: E8 ---
$09: E9 Re-trigger Note
$0A: EA Fine Volume Slide Up Done
$0B: EB Fine Volume Slide Down Done
$0C: EC Note Cut
$0D: ED Note Delay Done
$0E: EE Pattern Delay Done
$0F: EF ---
-------------------------------- ------
"X" Extended Sub-Command Effects
-------------------------------- ------
$00: X0 ---
$01: X1 Extra Fine Portamento Up Done
$02: X2 Extra Fine Portamento Down Done
I think I'll take a break from the tracker player and actually do some tracking. It's time to test this baby and make sure it works as expected.
-dZ.