realdmx: Reyn Ouwehand's Armada (MUSICFILE, 'Special version for Reyn Ouwehand', 1989) and Dutch Breeze (the 1990 MoN player)
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; speedssnelheid2,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-statetestbyte(;if 1-> music stop);vibtotzoverandpulserunspeeddropped (pulserun hard-codesadc #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–arp5are 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$80noisetik start waveform,$10drum (drum number infx1's low nibble),$04tone arpeggio,$01filter;fx1 $53/$42/$41vibrato depth and speed;fx2low bits the pulse program;filcounthigh nibble the gate-off point,$f0= release almost at once (drums);pulsehibit 4 ($15) = note cut. - Tables:
starttabel/startlenextended to 28 entries — the lead gets sawtooth$43for$16frames, the guitars$43for$0a, most others noise$81for$02; drumsdwa2/dto2(bass drum)$0b; $81,$41,$40 ×9over$50,$0a,$08,$06,$05,$04,$03,$02,$02,$01,$00,$00,dwa1/dto1(snare)$81,$41,$11,$80 ×9over$60,$0c,$0d,$70,$70,$80,$80,$70 …; arpeggiosarp0–arp8all$02+ three notes ($00,$03,$07…$00,$06,$09,$00,$02,$05); filtersfb0: $90,$f4,$f4,$f4,$30, fp0,$02,$04,$06,$08withfp0 = $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$15four 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–$13holds 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 fromex_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 (seq0a→seq0at), plus aspeed2frame-skip tempo device (unused here) and a volume fade-out command. Sequence bytes:$feend of song,$ffend of sequence,$5f–$6einstrument offset,$6f–$7frepeat,$80–$fdtranspose, else step (seq0ct: $82, $77,$05,$73,$05, $87,$77,$05, $82,$73,$05, $00 …). Step bytes:< $60note,$60–$7farpeggio table,$80–$bflength (extendable),$c0–$dfinstrument,$e0–$faexplicit rest,$fbconnect (legato: keeps gate, ADSR and pulse running),$fcfade,$fdglide,$fe→$d417,$ffend — only$fe,$f1and rests are used in this tune (orderlist, hard-restart). - Instruments
pulsehi, waveform, attdec, susrel, fx0, fx1, fx2, fx3(fx0replacesfilcount):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:pulsehiis a 12-bit width as$hL($8c→$c80);fx0bits 0–2 filter program, bit 3 drum, high nibble gate-off ticks;fx1vibrato half-period and depth (semitone ≫ n), bit 7 growing;fx2low nibble pulse program, high nibble vibrato delay;fx3bit 0 detune (+$50on$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 / $ff…fi4 !by $10,$58 / $01,$50 / $03,$d0 / $08,$ff / $20,$02 / $ff— mode nibble ($10LP,$20BP,$30LP+BP), start cutoff, then (frames, delta) pairs; pulsesp1 !by $8b,$01 / $06,$30 / $01,$50 / $ff— bounce limits$08xx–$0bxx, initial direction, (frames, step) pairs,$fe= jump topuls_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,$fewithdw7 !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$11with$f0gate-off and adwa/dtolist; 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:
snelheidspeed,nootafbreeknote cut,uitzetswitch off,afkappencut off,vibraatjelittle vibrato,neertellencount 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