realdmx: Reyn Ouwehand's Armada (MUSICFILE, 'Special version for Reyn Ouwehand', 1989) and Dutch Breeze (the 1990 MoN player)

author Reyn Ouwehand (music); Charles Deenen (the Armada player: 'Player by Charles Deenen', MUSICFILE V01-07-1988 banner); the Dutch Breeze player is uncredited ('1990 MON'); ACME conversion by dmx87
date 2023-06-24
article Ouwehand_Reyn_Armada.asm (2370 lines; 'Armada / By Reyn Ouwehand / Player by Charles Deenen / 1989 Scoop Designs'; PSID 6 songs, seven song tables) and Ouwehand_Reyn_Dutch_Breeze.asm (1936 lines; 'This is the original sourcecode of Dutch Breeze'; PSID '1990 MON', 1 song). The date is the repository's last push
created 2026-08-30 · updated 2026-08-30

Two original Turbo Assembler sources of reyn-ouwehand's in the realdmx collection (s-realdmx-sid-players). Armada (1989) is charles-deenen's musicfile — the Cybernoid II code with a longer banner: "Scoop Designs L.T.D. in 1989 / Special version for :Reyn Ouwehand" — carrying 25 Dutch-named instruments and seven tunes. Dutch Breeze (1990) is not that code: a rewritten maniacs-of-noise player with the same hand's labels (frutsmaarraak, gwb, nohiset, starttabel) but a new data model — intro/loop sequences, legato, explicit rests, multi-segment filter and pulse programs, looping drum tables, a detune flag. The file credits only the composer; who rewrote the player is not stated.

Key claims#

Armada (MUSICFILE V01-07-1988, Scoop Designs 1989)

  • Header "Armada / By Reyn Ouwehand / Player by Charles Deenen / 1989 Scoop Designs"; the MUSICFILE box with the two Scoop lines; a text string inside the code, "music by reyn ouwehan" "d from scoop designs "; a banner ;]aha! a samplerouty] with no sample code after it. A commented-out test harness (ldx #$06 / jsr song … jmp $9000) starts song 6 — the title tune — although dmx87's PSID header declares only 6 songs, so the title tune (seqtab6, "-=> title tune <=-") is unreachable from this file's .sid. The seven tunes by their comments: get ready, level completed, hall of fame, game over, in-game tune 1, "Start-Sequences", title tune; speeds snelheid 2,1,2,3,2,2,1.
  • Constants: volume = $0f, songetje = 1, numvoice = 7 (a voice-enable mask, playit !by 1,2,4), dubvoice = $10, noisehitone = $fa, pulsearpwait = $01, gitarwait = $0f, spacelength = $00, spacewait = $60, wavearpwait = 3; zero page moved to $61–$70 (;]Benodigde ZER0PAGE adressen], "required zero-page addresses").
  • What differs from the Cybernoid II file (read side by side): the voice mask; a per-song nootafbreek ("note break-off") table instead of a hard-coded note-cut compare; a three-state testbyte (;if 1-> music stop); vibtotzover and pulserunspeed dropped (pulserun hard-codes adc #4); the glide division in self-modified operands instead of zero page; Init tax / jmp song (song in X); 45 step pointers (33), 25 instruments (19), 6 pulse programs (4), 3 filter programs (4), 10 arpeggio pointers (8), 9 drum slots (3 used); otherwise the same routines under the same labels — pulsegedoe, filterklooi, frutsmaarraak, jeroenshit (double voices), noti (noisetik). Data is reused across tunes: pulse program 1 is byte-for-byte Cybernoid II's program 4 ($07,$0d,$03,$70, $06,$60,$09,$50), arp0–arp5 are identical.
  • Instruments (pulsehi, waveform, attdec, susrel, filcount, fx1, fx2, fx3), Ouwehand's names (instrument-tables, instrument-design): niks (nothing) $00 ×8; bassdrum $08,$11,$07,$07,$f0,$02,$00,$10; snaredrum $08,$11,$09,$08,$f0,$01,$00,$10; 51-kort $06,$51,$00,$a9,$f0,$53,$74,$00; bass $05,$41,$00,$ab,$00,$53,$69,$00; arp $15,$41,$00,$69,$10,$00,$41,$84; bass-release $04,$41,$00,$aa,$f1,$53,$51,$01; loopbass $02,$41,$00,$89,$00,$53,$65,$01; 17-tik $00,$17,$00,$89,$f0,$00,$00,$00; lead $03,$41,$00,$77,$00,$53,$12,$80; leadlong $05,$41,$0a,$05,$00,$53,$88,$00; lead-heavy $04,$41,$00,$7a,$00,$53,$12,$00; bass met fil (bass with filter) $02,$41,$00,$a9,$02,$42,$82,$01; 21-ding $00,$21,$08,$8c,$00,$53,$00,$80; mel-arp $05,$41,$00,$57,$00,$00,$31,$84; 11-tok $00,$11,$05,$05,$00,$00,$00,$80; big-git (guitar) $07,$41,$00,$a6,$00,$42,$56,$80. Column meanings read from the routines: fx3 $80 noisetik start waveform, $10 drum (drum number in fx1's low nibble), $04 tone arpeggio, $01 filter; fx1 $53/$42/$41 vibrato depth and speed; fx2 low bits the pulse program; filcount high nibble the gate-off point, $f0 = release almost at once (drums); pulsehi bit 4 ($15) = note cut.
  • Tables: starttabel / startlen extended to 28 entries — the lead gets sawtooth $43 for $16 frames, the guitars $43 for $0a, most others noise $81 for $02; drums dwa2/dto2 (bass drum) $0b; $81,$41,$40 ×9 over $50,$0a,$08,$06,$05,$04,$03,$02,$02,$01,$00,$00, dwa1/dto1 (snare) $81,$41,$11,$80 ×9 over $60,$0c,$0d,$70,$70,$80,$80,$70 …; arpeggios arp0–arp8 all $02 + three notes ($00,$03,$07$00,$06,$09, $00,$02,$05); filters fb0: $90,$f4,$f4,$f4,$30, fp0,$02,$04,$06,$08 with fp0 = $10 + volume; wavearp $20,$20,$20,$20 (the wave arpeggio switched off by data); every bass step opens with $f1,%11110001 (filter voice 1, resonance $f) (wavetable-programming, chord-arpeggio, filter-programming, pulse-width-modulation).
  • Sequence and step bytes are Cybernoid II's; the song data never uses the glide ($e0) or the tie ($f0). Examples: seq4a !by $81,$43,$15,$8d,$43,$15,$81,$47,$17,$ff — transpose 1, repeat step $15 four times, transpose 13 …; st03 !by $f1,%11110001, $c8,$8c,c2,e2,f2,g2,$a0,c2,$ff (orderlist).

Dutch Breeze (1990 MON) — "This is the original sourcecode of Dutch Breeze"; text "MUSIC BY REYN OUWEHAND '90 " in the data.

  • Constants after the code: vibuntil = $2c, detune = $50, noisehitone = $fc, spacecheck = $00, spacewait = $30, totalarps = 25, puls_2nd = $0d; zero page $04–$13 holds the vector and four 3-byte per-voice counters (arpcount, arpcounor, drmcounor, drmcount); all seven voice registers are shadowed; song data is relocatable (every pointer an offset from ex_begin).
  • Song model: two 9-byte records per song — three sequence offsets plus speedorig $02, speed2 $00, tottrans $fe (a global transpose of −2 semitones) — the first record an intro, the second the loop (seq0aseq0at), plus a speed2 frame-skip tempo device (unused here) and a volume fade-out command. Sequence bytes: $fe end of song, $ff end of sequence, $5f–$6e instrument offset, $6f–$7f repeat, $80–$fd transpose, else step (seq0ct: $82, $77,$05,$73,$05, $87,$77,$05, $82,$73,$05, $00 …). Step bytes: < $60 note, $60–$7f arpeggio table, $80–$bf length (extendable), $c0–$df instrument, $e0–$fa explicit rest, $fb connect (legato: keeps gate, ADSR and pulse running), $fc fade, $fd glide, $fe$d417, $ff end — only $fe,$f1 and rests are used in this tune (orderlist, hard-restart).
  • Instruments pulsehi, waveform, attdec, susrel, fx0, fx1, fx2, fx3 (fx0 replaces filcount): kick $00,$89,$0e,$f8,$08,$00,$00,$c0; snare $08,$89,$02,$89,$08,$00,$00,$20; bass $0d,$41,$00,$54,$00,$00,$01,$30; big kick $08,$89,$03,$89,$09,$00,$00,$50; tom $08,$89,$0d,$e6,$08,$00,$00,$70; 41-melo $8c,$41,$01,$54,$00,$23,$54,$b0; bass (filter) $09,$41,$05,$d6,$04,$23,$25,$40; 15-bongo $00,$15,$00,$15,$f0,$00,$00,$40; 51-arp $00,$51,$00,$83,$06,$00,$00,$04. Read from the code: pulsehi is a 12-bit width as $hL ($8c$c80); fx0 bits 0–2 filter program, bit 3 drum, high nibble gate-off ticks; fx1 vibrato half-period and depth (semitone ≫ n), bit 7 growing; fx2 low nibble pulse program, high nibble vibrato delay; fx3 bit 0 detune (+$50 on $d400), bit 1 space, bit 2 arpeggio, bit 3 hard cut (afkappen), high nibble the start-waveform / drum-table index. Drums use waveform $89 (noise + test + gate).
  • Programs: filters fi1 !by $10,$40 / $1a,$ff / $fffi4 !by $10,$58 / $01,$50 / $03,$d0 / $08,$ff / $20,$02 / $ff — mode nibble ($10 LP, $20 BP, $30 LP+BP), start cutoff, then (frames, delta) pairs; pulses p1 !by $8b,$01 / $06,$30 / $01,$50 / $ff — bounce limits $08xx–$0bxx, initial direction, (frames, step) pairs, $fe = jump to puls_2nd; arpeggios with a header byte ($10 = every 2nd frame) ar0 !by $10,$00,$04,$09,$ff, ar3 !by $10,$00,$03,$07,$ff, up to 25 tables, values with bit 7 = absolute notes; drums as a looping pitch table plus a looping wave table — dt7 !by $80 / $e0,10,8,6,5,4,3,2,1,$fe with dw7 !by $80 / $81,$11,$11,$11,$11,$11,$11,$10,$fe (the kick), $fe = hold; frequency-table entries 1 and 2 are hijacked as noise pitches ($fcff, $c400) for the drums (filter-programming, pulse-width-modulation, chord-arpeggio, wavetable-programming).
  • Dropped versus MUSICFILE: wave arpeggio, pulse arpeggio, tone sweep, strange filter, pulserun, double voices (replaced by the detune flag). Sizes (estimated): Armada ≈ 2.4 KB player + 2.4 KB data; Dutch Breeze ≈ 2.1 KB + 1.75 KB.

Practical takeaways#

  • Armada is the best instrument bank of the MoN driver in the wiki: a bass with $41, sustain/release $ab, vibrato $53, pulse program 9; drums as triangle $11 with $f0 gate-off and a dwa/dto list; leads with a first frame of sawtooth ($43) instead of noise.
  • Dutch Breeze shows what the second-generation MoN player added for the composer: intro + loop, legato, rests, per-segment filter and pulse sweeps, looping drum tables and a detune bit — the feature list of a 1990 tracker instrument written as tables (instrument-tables).
  • Dutch names to know when reading MoN sources: snelheid speed, nootafbreek note cut, uitzet switch off, afkappen cut off, vibraatje little vibrato, neertellen count down.

Notable quotes#

  • "Scoop Designs L.T.D. in 1989 / Special version for :Reyn Ouwehand" (Armada banner); ;]aha! a samplerouty].
  • "This is the original sourcecode of Dutch Breeze"; "MUSIC BY REYN OUWEHAND '90 ".

Relevance to the wiki#

Extends musicfile with a second dated build and its instrument bank, and documents the 1990 successor; primary source for reyn-ouwehand's working material and for the Scoop Designs period of maniacs-of-noise; new rows for the technique pages and the driver comparison on sid-player-routine.

To verify#

  • (unverified) Who wrote the Dutch Breeze player — Deenen's 1990 MoN driver or Ouwehand's own rewrite; the file names only the composer, the PSID header says "1990 MON".
  • (unverified) Whether HVSC's Armada exposes six or seven subtunes; the source has seven song tables and dmx87's header six.

Pages touched#

musicfile · reyn-ouwehand · charles-deenen · maniacs-of-noise · sid-player-routine · instrument-tables · instrument-design · wavetable-programming · chord-arpeggio · filter-programming · pulse-width-modulation · vibrato · hard-restart · orderlist · detune

source file wiki/summaries/s-realdmx-ouwehand-mon-tunes.md · 2 unverified · graph