====== Macro Player ====== by Geir Tjelta. The binary include file (and the source) is included in this archive: {{:base:macroplayersource.rar}}. ;---------------------------- Macro Player, $180 hex bytes of code approx. +/- (made just for fun) ---------------- ; ;The reason: How small and efficient can a player be, and still sound like A-class ? Plus I want to compose tunes in text/assembler. ;It has been paid attention of code length and rastertime, not data length, but still taken notice of. ; ;Macro Player handles ADSR, calc-frequency changes, pulse, and waveforms using one table that includes branch jumps (to macros). ;These branch jumps triggers other tables aswell, like Filter and pulse sweeps. This method free's up the player for init code. ;Branch calls also free's up code when usually CMP's is used for what tasks to do. Tempo is also used in a similar way. ; ;The conductor has patterns that looks just like an Amiga/PC tracker, but has commands for crunching rests/holds (used when tune is done) ;You can compose music directly in text format, all channels synchronized. Make notice that pattern data left to right is voice 3-1, when using ring-mod. ;The sequencer handles note data, gate on/off, and triggers "fxt" table, that includes all branches for the main player. ;Tie-notes, arpeggio, filter, slides and vibrato (etc..) can be made in the sound-table (fxt). When understood, everything is readable.. ;How you edit determines the length of the tunes. ; ;Player by Geir Tjelta (C) 2008. ;Music composed by Jeroen Tel (C) 1987. ;Cloned by Geir, March 2009. ; ;Make notice that this tune doesn't use all features originally, then not improven either. Like Hard Restart, gate on/offs... ;But when that is said, it doesn't have to be improved. Hard Restart didn't sound any good at all on this tune... ;With all respect of Jeroen Tel, I still had to add a few slides to show that the player could handle such, since this tune didn't have any originally. ;Also the Bass guitar has vibrato, which is not in the original. ; ;------------------------------------------------------------------------------------------------------------------ *= $0810 ;-------> Location for IRQ notebit = $4a ;Only used on framecall zero = $4b ;Can not be used outside player, this is the pattern zeropage zero2 = $4d ;Only used on framecall sid = $3400 ;SID register key = $9090 ;$8080=0,$8282=2 / Transpose all note >definitions< ;------------------------- Patttern commands ooo = $8080 ; >c3-ooo = "ooo" is a command so that pattern only uses one byte for each voice on note calls efx = $80 ; efx,xxx = xxx=macro definition fix = $81 ; fix,xxx = xxx=macro definition end = $ff ; .byte end = Pattern end xxxxxxx = $00 ;gate off command ooooooo = $f8 ;1 rest ooxxxxx = $f9 ;2 rests, used when tune is finished to crunch data (see patterns in this tune for examples) oooxxxx = $fa ;3 rests, -"- ooooxxx = $fb ;4 rests, -"- oooooxx = $fc ;5 rests, -"- oooooox = $fd ;6 rests, -"- ;------------------------- Note definitions / macro examples for pattern ;Example1: >c3-ooo = C-3 ;Example2: ooooooo = one note rest ;Example3: xxxxxxx = gate off ;Example4: c3,bd1 = c-3 + start macro definition "bd1" (bassdrum sound) ;Example6: efx,vib = start macro definition "vib". efx means just an xx call for "fxt" macro definitions. ;Example7: efx,pi1 = start macro definition "pi1", a pitch-bend macro call from the "fxt" macro definitions. c0 = $0101+key d0 = $0203+key e0 = $0404+key f0 = $0506+key g0 = $0708+key a0 = $090a+key b0 = $0b0b+key c1 = $0c0d+key d1 = $0e0f+key e1 = $1010+key f1 = $1112+key g1 = $1314+key a1 = $1516+key b1 = $1717+key c2 = $1819+key d2 = $1a1b+key e2 = $1c1c+key f2 = $1d1e+key g2 = $1f20+key a2 = $2122+key b2 = $2323+key c3 = $2425+key d3 = $2627+key e3 = $2828+key f3 = $292a+key g3 = $2b2c+key a3 = $2d2e+key b3 = $2f2f+key c4 = $3031+key d4 = $3233+key e4 = $3434+key f4 = $3536+key g4 = $3738+key a4 = $393a+key b4 = $3b3b+key c5 = $3c3d+key d5 = $3e3f+key e5 = $4040+key f5 = $4142+key g5 = $4344+key a5 = $4546+key b5 = $4747+key c6 = $4849+key d6 = $4a4b+key e6 = $4c4c+key f6 = $4d4e+key g6 = $4f50+key a6 = $5152+key b6 = $5353+key c7 = $5455+key d7 = $5657+key e7 = $5858+key f7 = $595a+key g7 = $5b5c+key a7 = $5d5e+key b7 = $5f5f+key ;------------------------------ IRQ routine jsr $e544 lda #tekst jsr $ab1e lda #$16 sta $d018 sei lda #$01 sta $d01a sta $dc0d lda #$37 sta $01 jsr $1800 lda #start-patternl jsr playinit lda #int sta $0315 cli jmp * int lsr $d019 lda #$1b sta $d011 lda #$8a sta $d012 lda #$0c sta $d020 lda $d012 sta raster+1 tuneras jsr player lda $d012 ldy #$00 sty $d020 sty $d021 sec raster sbc #$8b pha lsr lsr lsr lsr cmp #$0a ora #$30 bcc *+4 sbc #$39 sta $05b9 pla and #$0f cmp #$0a ora #$30 bcc *+4 sbc #$39 sta $05ba lda #$24 sta $05b8 tunebac jsr $1806 lda #player sta tuneras+2 lda #6 sta tunebac+1 lda #$18 sta tunebac+2 ldx #$18 lda #>sid ldy $dc01 cpy #$ef bne nospace lda #6 sta tuneras+1 lda #$18 sta tuneras+2 lda #player sta tunebac+2 lda #$24 nospace sta sc_jt+2 sc_jt lda sid,x sta $d400,x dex bpl sc_jt jmp $ea7e tekst .byte $99,$93,$05 .text "macro player BY geir tjelta (c) 2009",$0d,$99 .text "music composed BY jeroen tel/mon (c)1987",$0d .text "nEW SIZE/RASTERTIME: $7E8/$0D",$0d .text "oLD SIZE/RASTERTIME: $983/$25",$0d,$0d .text "hOLD SPACE FOR ORIGINAL SOUND AND PLAYER" .text "mACRO PLAYER CODE SIZE: $164",0 ;------------------------------------ Player Code *= $1000 conduct ldx # jsr player) player sec ldx #$0e loop_ bpl *+2 tempoc ldx #0 lda frametask,x sta loop_+1 dex ;------------------------------- Filter routine table bmi conduct filter ldy #$00 lda d416,y beq nofilt sta sid+22 filtdir iny sty filter+1 nofilt stx tempoc+1 rts ;------------------------------- chk_seq lda note2,x ; bne seq_2 ;Pattern gate control, not used in this tune ;gateoff lda #$f6 ; sta gate,x seq_2 cmp #$f6 bcs table_ and #$7f beq settable sta note,x sta freqadd,x ; inc gate,x settable ldy tabley2,x bcc jp_chk clr_sr; lda gate,x ;Hard Restart, not used in this tune ; adc #1 ; bne table_ ; lda #2 ; sta sid+6,x ; bne table_ ;-----------------------------> Pattern code, with a duration/rest packer command ($f8 and above).. See pattern data and source header for info. patternc ldy #$00 lda (zero),y sta note2,x beq nonote hold cmp #$f8 bcc nohold bne holdinc lda #$f8 sta hold+1 bne nonote holdinc inc hold+1 bne table_ nohold asl a beq efxonly ; lda #$fe ;Gate off in pattern, not used in this tune ; sta gate,x bcc nonote efxonly iny lda (zero),y sta tabley2,x nonote iny sty patternc+1 ;-----------------------------> Start of macro codes... (wavetable if you like..) table_ clc ldy tabley,x jp_chk lda fxt,y bmi jp_pitch sta jp1-1 iny lda fxt,y iny bne jp1 jp1 jp_goto tay bne jp_chk jp_wadsr sta wavef,x lda fxt,y sta sid+5,x iny lda fxt,y iny jp_sr sta sid+6,x bne jp_pitch-3 jp_fi0 sta filter+1 bne jp_chk jp_pprg sta pulsex,x bne jp_chk jp_finad adc freqadd,x sta freqadd,x bne jp_chk jp_gf6 ; sta gate,x ;Gate control, not used in this tune ; bne jp_pitch-3 sec jp_wf sta wavef,x bcc *+4 lda #$80 jp_mode sta wavef2,x lda fxt,y jp_pitch iny sta notebit tya sta tabley,x lda wavef,x ; and gate,x ;Tune do not use gate control sta sid+4,x asl a bpl nopulse ;Only run Pulse Routine if pulse waveform is used... Look in Pulse table for its features. ldy pulsex,x lda put,y cmp #1 beq p_dir cmp #$fd bne p_sum lda #$ff p_dir sta pulsdir,x tya adc put,y tay lda put,y p_sum sta sid+2,x sta sid+3,x tya clc adc pulsdir,x sta pulsex,x nopulse ;----------------------------------------> Pitch-routine... Handles everything that has to do with the frequency register. lda #0 sta zero2+1 lda notebit ldy wavef2,x bpl finetune tay bmi fqfixed clc adc note,x fqfixed and #$7f tay lda #0 beq fqcenter+3 finetune and #$7f beq fqcenter clc adc freqadd,x tay cmp #$60 bcc nohival lda fqhi-$60,y sta zero2+1 nohival lda fqhi,y fqcenter ldy note,x sta zero2 lda fqlo,y bit notebit bmi bm1 clc adc zero2 sta sid+0,x lda fqhi,y adc zero2+1 bcc sethi bm1 sec sbc zero2 setfreq sta sid+0,x lda fqhi,y sbc zero2+1 sethi sta sid+1,x lda #$ff .byte $cb,7 jmp loop_ pulsdir .byte 1 tabley2 .byte 0 freqadd .byte 0 wavef2 .byte 0 note2 .byte 0 pulsex .byte 0 gate .byte 0 .byte 1 brk brk brk brk brk brk .byte 1 brk brk brk brk brk brk notes = SOUND DATA ;Macros for "fxt" table ; ;$80-$ff = ;Since branches is not longer than $00-$7f, $80-$ff is used as a direct jump to pitch routine.. filt = Pulse table <----------------------------------- ; Pulse routine use a method of ping-pong, or loopback.. 1=forward, $fd(253)=backwards ; Make note that first value after command "1" is not heard, this is due to the ping-pong method, not to repeat the same value next frame. ; Only 8-bits used, instead of 14... lo/hi stored in one byte... ; put p08 = <*-put ;Drums pulse .byte 1,$08,$08,253 p1 = <*-put ;Lead1 pulse ;Slow pulse sweep, but this data was needed... I wanted to keep it as original as possible. .byte 1,$01,$81,$02,$12 .byte $22,$32,$42,$52 .byte $62,$72,$82,$92 .byte $a2,$b2,$c2,$d2 .byte $e2,$f2,$03,$13 .byte $23,$33,$43,$53 .byte $63,$73,$83,$93 .byte $a3,$b3,$c3,$d3 .byte $e3,$f3,$04,$14 .byte $24,$34,$44,$54,$64,$74,$84,$94 .byte $a4,$b4,$c4,$d4,$e4,$f4,$05,$15 .byte $25,$35,$45,$55,$65,$75,$85,$95 .byte $a5,$b5,$c5,$d5,$e5,$f5,$06,$16 .byte $26,$36,$46,$56,$66,$76,$86,$96 .byte $a6,$b6,$c6,$d6,$e6,$f6,$07,$17 .byte $27,$37,$47,$57,$67,$77,$87,$97 .byte 253 p2 = <*-put ;Lead 2 pulse ;This lead instrument has a more varied pulse sweep, then possible to backwards the data earlier... .byte 1,$0a,$8a,$ca,$0b,$4b,$8b,$cb .byte $0c,$4c,$8c,$cc,$0d,$4d,$8d,$cd .byte $4e,$ce,$4f,$ce,$4e,$cd,$4d,$cc .byte $4c,$cb,$4b,$ca,$4a,$c9,$49,$c8 .byte $48,$c7,$47,$c6,$46,$c5,$45,$c4 .byte $44,$c3,$43,$c2,$42,$c1,$41,$c0 .byte 253 p3 = <*-put ;Bass pulse ;This program uses two "1" commands, so you can loop the pulse "tale". .byte 1,$00,$42,$e2,$83 .byte 1,$83,$e3,$44,$a4 ;I add an extra $83, because command "1" will skip it, but not on the return... .byte $05,$45,$85,$c5,$06 .byte $07,$47,$87,$c7,$08 .byte 253 ;I'll explain this command.. It will reverse the direction, but jump back to value $c7 in this program, so that value $08 doesn't get repeated again. ;Player was designed with this value ($fd, or 253), because this value will make it reverse correctly. p4 = <*-put ;Arp stab pulse .byte 1,$08,$a8,$49,$e9,$8a .byte 1,$8a,$ea,$4b,$ab .byte $0c,$8c,$0d,$8d .byte $0e,$8e,$0f .byte 253 ;--------------------------------------------------> Filter table <----------------------------------- ;Routine explains itself... ;0 = end table d416 .byte $c0,$b0,$a0,$90,$80,$78,$70,$68,$60,$58,$50,$44,$38,$2c,$20,$12 .byte $04,0 ;--------------------------------------------------> Conductor calls <----------------------------------- patternl ;Intro start .byte noisy .byte >noisy .byte >noisy2 .byte >noisy3 .byte >noisy2 .byte >noisy4 .byte >noisy2 .byte >noisy3 .byte >noisy2 .byte >noisy4 .byte >noisy5 .byte >noisy6 .byte >noisy7 .byte >noisy8 .byte >noisy .byte >noisy .byte >noisy9 .byte >noisy9_2 .byte >noisy10 .byte >noisy10_2 .byte >noisy9 .byte >noisy9_3 .byte >noisy10_3 .byte >noisy10_3_2 .byte >noisy10_4 .byte >noisy9 .byte >noisy9_2 .byte >noisy10 .byte >noisy10_2 .byte >noisy9 .byte >noisy9_3 .byte >noisy10_3 .byte >noisy10_3_2 .byte >noisy10_4 patt_end ;--------------------------------------------------> Patterns <----------------------------------- ;This source has had the patterns packed... 15 mins of slavework by the way.... :-) (ooxxxxx, oooxxxx, meaning: two and three rests etc...) noisy .byte >c1,bas,fix,bd1,d3-ooo .byte ooooooo,>c5,sin,>c3-ooo .byte >c1-ooo,>c4-ooo,d3-ooo .byte ooxxxxx,>c3-ooo .byte f3-ooo .byte >c1-ooo,ooooooo,>g3-ooo .byte ooooooo,>c4,sin,c5-ooo,>c3-ooo .byte >c1-ooo,fix,bd1,>g3-ooo .byte ooooooo,fix,sn1,c1-ooo,fix,bd1,>c3-ooo .byte >d1-ooo,>c4,sin,>g3-ooo .byte c5-ooo,c5,sin,>c3-ooo .byte c4-ooo,c3-ooo .byte c4-ooo .byte c5,sin,>f3-ooo .byte ooxxxxx,>d3-ooo .byte c4-ooo,f3-ooo .byte ooxxxxx,>d3-ooo .byte >b0-ooo,f3-ooo .byte end noisy2 .byte >c1,bas,fix,bd1,>c3,ld1 .byte ooxxxxx,>c3-ooo .byte ooooooo,>c5,sin,>c3-ooo .byte >c1-ooo,>c4-ooo,>c3-ooo .byte ooooooo,fix,sn1,>c3-ooo .byte oooxxxx;ooooooo,ooooooo .byte c3-ooo .byte ooxxxxx,c1-ooo,ooxxxxx;ooooooo .byte ooooooo,>c4,sin,c5-ooo,>d3-ooo .byte >c1-ooo,fix,bd1,ooxxxxx .byte fix,sn1,>c3-ooo .byte >c1-ooo,fix,bd1,ooooooo .byte >d1-ooo,>c4,sin,c5-ooo,ooooooo .byte end noisy3 .byte c3-ooo .byte ooxxxxx,>c3-ooo .byte ooooooo,>c5,sin,>c3-ooo .byte c4-ooo,>c3-ooo .byte ooooooo,fix,sn1,>c3-ooo .byte oooxxxx;ooooooo,ooooooo .byte c3-ooo .byte ooooooo,c5,sin,d3-ooo .byte c4-ooo,ooxxxxx .byte fix,sn1,>c3-ooo .byte oooxxxx;ooooooo,ooooooo .byte >b0-ooo,c3-ooo .byte ooxxxxx,>c3-ooo .byte ooooooo,>c5,sin,>g3-ooo .byte c4-ooo,ooxxxxx .byte fix,sn1,>f3-ooo .byte oooxxxx;ooooooo,ooooooo .byte f3-ooo .byte c5,sin,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c4-ooo,ooxxxxx .byte fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte >b0-ooo,c1,bas,fix,bd1,c5,sin,ooooooo .byte >c1-ooo,>c4-ooo,>d3-ooo .byte ooooooo,fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c1-ooo,ooooooo,>c3-ooo .byte ooooooo,>c4,sin,ooxxxxx .byte >c5-ooo,ooooooo .byte >c1-ooo,fix,bd1,>g2-ooo .byte ooooooo,fix,sn1,ooooooo .byte >c1-ooo,fix,bd1,ooooooo .byte >d1-ooo,>c4,sin,>c3-ooo .byte c5-ooo,ooooooo .byte c5,sin,>d3-ooo .byte c4-ooo,ooxxxxx .byte fix,sn1,f3-ooo .byte ooooooo,g3,pi1 .byte c5,sin,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c4-ooo,ooxxxxx .byte fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte >b0-ooo,c1,bas,fix,bd1,>c4,ld2 .byte ooooxxx;ooooooo,ooooooo .byte >c5,sin,ooooooo .byte >c1-ooo,>c4-ooo,g3-ooo .byte oooxxxx;ooooooo,ooooooo .byte >c1-ooo,ooooooo,c4,sin,ooxxxxx .byte >c5-ooo,ooooooo .byte >c1-ooo,fix,bd1,>c4-ooo .byte ooooooo,fix,sn1,ooooooo .byte >c1-ooo,fix,bd1,ooooooo .byte >d1-ooo,>c4,sin,c5-ooo,ooooooo .byte d4,ld2 .byte ooooxxx;ooooooo,ooooooo .byte >c5,sin,ooooooo .byte c4-ooo,ooxxxxx .byte fix,sn1,>c4-ooo .byte oooxxxx;ooooooo,ooooooo .byte c5,sin,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c4-ooo,ooxxxxx .byte fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte >b0-ooo,c1,bas,fix,bd1,>c4-ooo .byte ooooxxx;ooooooo,ooooooo .byte >c5,sin,ooooooo .byte >c1-ooo,>c4-ooo,>g3-ooo .byte ooooooo,fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c4-ooo .byte oooxxxx;ooooooo,ooooooo .byte >c1-ooo,ooooooo,c4,sin,ooxxxxx .byte >c5-ooo,ooooooo .byte >c1-ooo,fix,bd1,>d4-ooo .byte ooooooo,fix,sn1,ooooooo .byte >c1-ooo,fix,bd1,ooooooo .byte >d1-ooo,>c4,sin,>c4-ooo .byte c5-ooo,ooooooo .byte c5,sin,ooooooo .byte c4-ooo,>c4-ooo .byte ooooooo,fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte f3,pi1 .byte ooooooo,>c5,sin,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c4-ooo,ooxxxxx .byte fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte >b0-ooo,c1,bas,fix,bd1,>g3,ld2 .byte ooooxxx;ooooooo,ooooooo .byte >c5,sin,ooooooo .byte >c1-ooo,>c4-ooo,>c4-ooo .byte ooooooo,fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte g3-ooo .byte oooxxxx;ooooooo,ooooooo .byte >c1-ooo,ooooooo,c4,sin,ooxxxxx .byte >c5-ooo,ooooooo .byte >c1-ooo,fix,bd1,>c4,ld2 .byte ooooooo,fix,sn1,ooooooo .byte >c1-ooo,fix,bd1,ooooooo .byte >d1-ooo,>c4,sin,c5-ooo,ooooooo .byte d3-ooo .byte ooooxxx;ooooooo,ooooooo .byte >c5,sin,ooooooo .byte c4-ooo,ooxxxxx .byte fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c5,sin,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte c4-ooo,ooxxxxx .byte fix,sn1,ooooxxx ;.byte ooooooo,ooooooo,ooooooo .byte >b0-ooo,f1,bas,fix,bd1,>f4,ld1 .byte oooxxxx;ooooooo,ooooooo .byte >f1-ooo,>c5,sin,ooxxxxx .byte >c4-ooo,ooooooo .byte >f2-ooo,fix,sn1,ooooooo .byte >f1-ooo,oooxxxx;ooooooo .byte >c5,sin,ooooooo .byte f1-ooo,c5,sin,ooooooo .byte >f1-ooo,fix,bd1,ooxxxxx .byte >c4,sin,ooooooo .byte >f2-ooo,fix,sn1,ooooooo .byte c5,sin,ooooooo .byte >c2-ooo,fix,bd1,ooooooo .byte c4,sin,ooooooo .byte end noisy9_2 .byte >f1-ooo,fix,bd1,f1-ooo,>c5,sin,ooooooo .byte >f1-ooo,>c4-ooo,ooooooo .byte >f2-ooo,fix,sn1,>f4-ooo .byte >f1-ooo,ooxxxxx;ooooooo .byte ooo-ooo,>c5,sin,ooooooo .byte f1-ooo,c4-ooo .byte >f2-ooo,>c5,sin,ooxxxxx .byte fix,bd1,ooooooo .byte >c2-ooo,>c4,sin,ooooooo .byte >c2-ooo,fix,sn1,c5,sin,ooooooo .byte c2-ooo,f1-ooo,fix,bd1,>g4,ld1 .byte oooxxxx;ooooooo,ooooooo .byte >f1-ooo,>c5,sin,ooooooo .byte >f1-ooo,>c4-ooo,ooooooo .byte >f2-ooo,fix,sn1,f1-ooo,oooxxxx;ooooooo .byte >c5,sin,ooooooo .byte f1-ooo,g4-ooo .byte >f2-ooo,>c5,sin,ooxxxxx .byte fix,bd1,ooooooo .byte >c2-ooo,>c4,sin,ooooooo .byte >c2-ooo,fix,sn1,c5,sin,ooooooo .byte c2-ooo,c1,bas,fix,bd1,>c4-ooo noisy10_3_2 .byte oooxxxx;ooooooo,ooooooo .byte >c1-ooo,>c5,sin,ooxxxxx .byte >c4-ooo,ooooooo .byte >c2-ooo,fix,sn1,ooooooo .byte >c1-ooo,oooxxxx;ooooooo .byte >c5,sin,ooooooo .byte c1-ooo,c5,sin,ooooooo .byte >c1-ooo,fix,bd1,ooxxxxx .byte >c4,sin,ooooooo .byte >c2-ooo,fix,sn1,ooooooo .byte c5,sin,ooooooo .byte >g1-ooo,fix,bd1,ooooooo .byte c4,sin,ooooooo .byte end noisy10_2 .byte >c1-ooo,fix,bd1,>c4,arp .byte oooxxxx;ooooooo,ooooooo .byte >c1-ooo,>c5,sin,>c4-ooo .byte >c1-ooo,>c4-ooo,ooooooo .byte >c2-ooo,fix,sn1,c1-ooo,oooxxxx;ooooooo .byte >c5,sin,>g3-ooo .byte f3-ooo .byte >c1-ooo,c2-ooo,>c5,sin,g1-ooo,>c4,sin,>f3-ooo .byte >g1-ooo,fix,sn1,>g3-ooo .byte c5,sin,>f3-ooo .byte >f1-ooo,fix,sn1,g1-ooo,c3-ooo .byte end noisy10_3 .byte >c1,bas,fix,bd1,>c5-ooo .byte end noisy10_4 .byte >c1-ooo,fix,bd1,>c4,arp .byte oooxxxx;ooooooo,ooooooo .byte >c1-ooo,>c5,sin,>c4-ooo .byte >c1-ooo,>c4-ooo,ooooooo .byte >c2-ooo,fix,sn1,c1-ooo,oooxxxx;ooooooo .byte >c5,sin,>g3-ooo .byte c1-ooo,c2-ooo,>c5,sin,>c4-ooo .byte ooooooo,fix,bd1,ooooooo .byte >g1-ooo,>c4,sin,g2-ooo,>c1,bas,>c3,bas .byte oooxxxx;ooooooo,ooooooo .byte >g2-ooo,>c1-ooo,>c3-ooo .byte >g2-ooo,>c1-ooo,>c3-ooo .byte end ;--------------------------------------------------> The End <----------------------------------- * =$1800 .binary noisyjt.bin