User Tools

Site Tools


base:macro_player

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

base:macro_player [2015-04-17 04:32] (current)
Line 1: Line 1:
 +====== Macro Player ======
 +
 +by Geir Tjelta.
 +
 +
 +The binary include file (and the source) is included in this archive: {{:base:macroplayersource.rar}}.
 +
 +<code>
 +;---------------------------- 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-ooo = C#3
 +;Example5: >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
 + ldy #>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 $0314
 +         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+1
 + 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+1
 + 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 #<frame_end-frametask
 +pattern  ldy patternc+1
 +         lda (zero),y
 +         adc #1
 +         bne filter
 +         sta patternc+1
 +
 +patternp ldy #$00
 +         cpy #<patt_end-patternh
 +         bcc *+3
 +         tay
 +         lda patternl,y
 +         sta zero
 +         lda patternh,y
 +         sta zero+1
 +         iny
 +         sty patternp+1
 +         bne filter
 +;------------------------------- Start of Player (IRQ call -> 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    = <chk_seq-loop_-2
 +;soft     = <gateoff-loop_-2
 +hard     = <clr_sr-loop_-2
 +seq      = <patternc-loop_-2
 +table    = <table_-loop_-2
 +
 +frametask .byte notes
 +          .byte table
 +          .byte table   ;change this to ".byte hard", and remember to enable hard restart code above for Hard Restart
 +          .byte seq
 +          .byte table
 +frame_end .byte table
 +;----------------------------------------------- This tune used NTSC table..
 +fqhi
 +.byte $01,$01,$01,$01,$01,$01,$01,$01 ;note freqs high
 +.byte $01,$01,$01,$01,$02,$02,$02,$02 
 +.byte $02,$02,$02,$03,$03,$03,$03,$03 ;10
 +.byte $04,$04,$04,$04,$05,$05,$05,$06
 +.byte $06,$07,$07,$07,$08,$08,$09,$09 ;20
 +.byte $0a,$0b,$0b,$0c,$0d,$0e,$0e,$0f
 +.byte $10,$11,$12,$13,$15,$16,$17,$19 ;30
 +.byte $1a,$1c,$1d,$1f,$21,$23,$25,$27
 +.byte $2a,$2c,$2f,$32,$35,$38,$3b,$3f ;40
 +.byte $43,$47,$4b,$4f,$54,$59,$5e,$64
 +.byte $6a,$70,$77,$7e,$86,$8e,$96,$9f ;50
 +.byte $a8,$b3,$bd,$c8,$d4,$e1,$ee,$fd
 +
 +fqlo
 +.byte $0c,$1c,$2d,$3e,$51,$66,$7b,$91 ;note freqs low
 +.byte $a9,$c3,$dd,$fa,$18,$38,$5a,$7d
 +.byte $a3,$cc,$f6,$23,$53,$86,$bb,$f4 ;10
 +.byte $30,$70,$b4,$fb,$47,$98,$ed,$47
 +.byte $a7,$0c,$77,$e9,$61,$e1,$68,$f7 ;20
 +.byte $8f,$30,$da,$8f,$4e,$18,$ef,$d2
 +.byte $c3,$c3,$d1,$ef,$1f,$60,$b5,$1e ;30
 +.byte $9c,$31,$df,$a5,$87,$86,$a2,$df
 +.byte $3e,$c1,$6b,$3c,$39,$63,$be,$4b ;40
 +.byte $0f,$0c,$45,$bf,$7d,$83,$d6,$79
 +.byte $73,$c7,$7c,$97,$1e,$18,$8b,$7e ;50
 +.byte $fa,$06,$ac,$f3,$e6,$8f,$f8,$2e
 +
 +wavef    .byte 0
 +note     .byte 0
 +tabley   .byte 0
 +unused1  .byte 0
 +unused2  .byte 0
 +unused3  .byte 0
 +unused4  .byte 0
 +
 +         brk
 +         brk
 +         brk
 +         brk
 +         brk
 +         brk
 +         brk
 +
 +         brk
 +         brk
 +         brk
 +         brk
 +         brk
 +         brk
 +         brk
 +
 +;---------------------------------------- Player init, A = conductor position.
 +playinit sta patternp+1
 + ldx #0
 +       ; ldx #<frame_end-frametask
 +         lda #$f8
 +         sta hold+1
 + lda #seq
 + sta loop_+1
 +         lda #$b4
 +         sta sid+23
 +         lda #$1f
 +         sta sid+24
 +         ldy #$14
 +         lda #0
 +clr      sta sid+0,y
 +         dey
 +         bpl clr
 +         jmp patternp-3
 +
 +;---------------------------------------------------------------------------> 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     = <jp_fi0-jp1 ;filt,xx  then checks next macro
 +puls     = <jp_pprg-jp1                 ;puls,xx  then checks next macro 
 +fineadd  = <jp_finad-jp1                ;fineadd,xx then checks next macro
 +gt       = <jp_gf6-jp1  ;gt,$f7,xx / gt,$f6,xx (gate on/off)  xx=pitch. Then exits macro routine
 +wadsr    = <jp_wadsr-jp1 ;wadsr,$11,8,$e9,xx  Waveform,AD,SR,pitch. Then exits macro routine
 +sr       = <jp_sr-jp1    ;sr,$88,xx Set SR only xx=pitch. Then exits macro routine
 +n        = <jp_pitch+1-jp1 ;+yy ;n,xx xx=note ($80+ is fixed notes). Then exits macro routine
 +goto     = <jp_goto-jp1 ;+yy ;goto,xx jump, then checks next macro
 +wf       = <jp_wf-jp1 ;wf,$41,xx xx=pitch, wf means waveform with finetune pitch value ($80 is center,$81+ is finetune subtract). Then exits macro routine
 +wn       = <jp_wf-1-jp1 ;wn,$41,xx xx=note, wn means waveform with note value ($80+ is fixed notes). Then exits macro routine
 +mode     = <jp_mode-jp1 ;mode,0,xx / mode,$80,xx  toggle between wf / wn mode   xx=finetune/note
 +;
 +;Make notice that macro code above $80-$ff means either note values or finetune values depending on the "mode" command you're in...
 +;---------------------------------------------------------------------------
 +;
 +; The Macro Table with definitions used in the patterns...
 +;
 +fxt
 +
 +pi1      = <*-fxt ;Pitch ;pitch-bend, then runs directly into vib datas
 +         .byte $a7,$a0,$98,$93,$8a,$84
 +
 +vib      = <*-fxt ;Vibrato ;Trick to find correct xx/yy values by names instead of numbers...
 +         .byte $80,$8e,$97,$8e        ;Vibrate subs    $80=center
 +         .byte $80,n,$0e,n,$17,n,$0e  ;Vibrate Adds
 +         .byte fineadd,3       ;Vibrate/finetune expander
 +         .byte goto,vib ;jump to "vib" start....
 +
 +bas      = <*-fxt ;Bass guitar
 +         .byte wadsr,$41,0,$ee,0
 +         .byte filt,0
 +         .byte puls,p3
 +         .byte wn,$81,$c9
 + .byte wf,$40,0
 +bs2      = <*-fxt
 + .byte $80,$80
 +         .byte goto,vib
 +
 +ld1      = <*-fxt ;Lead1
 +         .byte wadsr,$21,0,$be,0
 +         .byte puls,p1
 +         .byte goto,ld2_
 +
 +ld2      = <*-fxt ;Lead2
 +         .byte wadsr,$21,0,$be,0
 +         .byte puls,p2
 +ld2_     = <*-fxt    
 +         .byte wf,$21,0,wf,$20,0
 +  .byte wf,$40,0
 +         .byte goto,vib
 +
 +arp      = <*-fxt ;Intro arpeggio stab
 +         .byte wadsr,$41,$00,$a7,0
 +         .byte puls,p4
 +         .byte wn,$41,$18,wn,$40,$0c
 +arp_     = <*-fxt
 + .byte n,$00,n,$18,n,$0c
 + .byte goto,arp_
 +
 +sin      = <*-fxt ;Drums fill-in sound
 +         .byte wadsr,$11,0,$e8,0
 + .byte wn,$81,$c9
 + .byte wf,$11,0
 + .byte wf,$10,0
 +sin_     = <*-fxt
 + .byte $80
 + .byte goto,sin_
 +         
 +bd1      = <*-fxt ;Bassdrum
 +         .byte wadsr,$11,0,$c8,0
 +         .byte puls,p08
 +         .byte wn,$81,$c4
 +         .byte wn,$41,$a7
 + .byte wn,$40 
 +         .byte $a3,$9e,$9b,$97,$92,$92,$8b,$8b,$80,$80,$8b,$92,$8b
 +bd1_     = <*-fxt
 +         .byte $80
 +         .byte goto,bd1_
 +
 +sn1      = <*-fxt ;Snaredrum
 +         .byte wadsr,$11,0,$e8,0
 + .byte puls,p08
 +         .byte wn,$81,$bb
 +         .byte wn,$41,$ad,wn,$40,$aa
 +         .byte wn,$80,$c3,$b5,$bb,$af,$c3
 +sn1_     = <*-fxt         
 +         .byte wn,$10,$ac
 +         .byte goto,sn1_+2
 +
 +;--------------------------------------------------> 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
 +  
 + ;Melody1 
 + .byte <noisy2
 + .byte <noisy3
 +  .byte <noisy2
 + .byte <noisy4
 +  
 + .byte <noisy2
 + .byte <noisy3
 +  .byte <noisy2
 + .byte <noisy4
 +  
 + ;Melody2
 + .byte <noisy5
 + .byte <noisy6
 + .byte <noisy7
 + .byte <noisy8
 +
 + ;intro
 + .byte <noisy
 + .byte <noisy
 +  
 + ;Funky end 
 + .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
 +    
 +patternh
 + .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,arp
 + .byte ooxxxxx,>d3-ooo
 + .byte ooooooo,>c5,sin,>c3-ooo
 + .byte >c1-ooo,>c4-ooo,<d3-ooo
 +
 + .byte ooooooo,fix,sn1,>d3-ooo
 + .byte ooxxxxx,>c3-ooo
 + .byte <a0-ooo,fix,bd1,<d3-ooo
 + .byte ooxxxxx,>f3-ooo
 +
 + .byte >c1-ooo,ooooooo,>g3-ooo
 + .byte ooooooo,>c4,sin,<d3-ooo
 + .byte ooooooo,>c5-ooo,>c3-ooo
 + .byte >c1-ooo,fix,bd1,>g3-ooo
 +
 + .byte ooooooo,fix,sn1,<d3-ooo
 + .byte >c1-ooo,fix,bd1,>c3-ooo
 + .byte >d1-ooo,>c4,sin,>g3-ooo
 + .byte <d1-ooo,>c5-ooo,<a3-ooo
 +
 + .byte <g0-ooo,fix,bd1,<g3-ooo
 + .byte ooxxxxx,<d3-ooo
 + .byte ooooooo,>c5,sin,>c3-ooo
 + .byte <g0-ooo,>c4-ooo,<g3-ooo
 +
 + .byte ooooooo,fix,sn1,<d3-ooo
 + .byte ooxxxxx,>c3-ooo
 + .byte <g0-ooo,fix,bd1,<g3-ooo
 + .byte ooooooo,<c0-ooo,>c4-ooo
 +
 + .byte <a0-ooo,ooooooo,<a3-ooo
 + .byte ooooooo,>c5,sin,>f3-ooo
 + .byte ooxxxxx,>d3-ooo
 + .byte <a0-ooo,>c4-ooo,<a3-ooo
 +
 + .byte ooooooo,fix,sn1,>f3-ooo
 + .byte ooxxxxx,>d3-ooo
 + .byte >b0-ooo,<c0-ooo,<a3-ooo
 + .byte ooooooo,<c0-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 <a0-ooo,fix,bd1,>c3-ooo
 + .byte ooxxxxx,<d3-ooo
 +
 + .byte >c1-ooo,ooxxxxx;ooooooo
 + .byte ooooooo,>c4,sin,<d3-ooo
 + .byte ooooooo,>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,<a2-ooo
 + .byte <d1-ooo,>c5-ooo,ooooooo
 +
 + .byte end
 +
 +noisy3  .byte <g0-ooo,fix,bd1,>c3-ooo
 + .byte ooxxxxx,>c3-ooo
 + .byte ooooooo,>c5,sin,>c3-ooo
 + .byte <g0-ooo,>c4-ooo,>c3-ooo
 +
 + .byte ooooooo,fix,sn1,>c3-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 + .byte <g0-ooo,fix,bd1,>c3-ooo
 + .byte ooooooo,<c0-ooo,<d3-ooo
 +
 + .byte <a0-ooo,oooxxxx;ooooooo
 + .byte >c5,sin,<d3-ooo
 + .byte ooxxxxx,>d3-ooo
 + .byte <a0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,>c3-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 + .byte >b0-ooo,<c0-ooo,<a2-ooo
 + .byte ooooooo,<c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy4  .byte <g0-ooo,fix,bd1,>c3-ooo
 + .byte ooxxxxx,>c3-ooo
 + .byte ooooooo,>c5,sin,>g3-ooo
 + .byte <g0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,>f3-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 + .byte <g0-ooo,fix,bd1,<d3-ooo
 + .byte ooooooo,<c0-ooo,>f3-ooo
 +
 + .byte <a0-ooo,oooxxxx;ooooooo
 + .byte >c5,sin,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <a0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte >b0-ooo,<c0-ooo,ooxxxxx
 + .byte <c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy5 .byte >c1,bas,fix,bd1,<d3,ld2
 + .byte ooooxxx;ooooooo,ooooooo
 + .byte >c5,sin,ooooooo
 + .byte >c1-ooo,>c4-ooo,>d3-ooo
 +
 + .byte ooooooo,fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <a0-ooo,fix,bd1,<a2-ooo
 + .byte oooxxxx;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 <d1-ooo,>c5-ooo,ooooooo
 +
 + .byte <g0-ooo,fix,bd1,<d3-ooo
 + .byte ooooxxx;ooooooo,ooooooo
 + .byte >c5,sin,>d3-ooo
 + .byte <g0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,<d3-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 + .byte <g0-ooo,fix,bd1,>f3-ooo
 + .byte ooooooo,<c0-ooo,>g3,pi1
 +
 + .byte <a0-ooo,oooxxxx;ooooooo
 + .byte >c5,sin,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <a0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte >b0-ooo,<c0-ooo,ooxxxxx
 + .byte <c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy6 .byte >c1,bas,fix,bd1,>c4,ld2
 + .byte ooooxxx;ooooooo,ooooooo
 + .byte >c5,sin,ooooooo
 + .byte >c1-ooo,>c4-ooo,<a3-ooo
 +
 + .byte ooooooo,fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <a0-ooo,fix,bd1,>g3-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 +
 + .byte >c1-ooo,ooooooo,<a3-ooo
 + .byte 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,<d4,pi1
 + .byte <d1-ooo,>c5-ooo,ooooooo
 +
 + .byte <g0-ooo,fix,bd1,>d4,ld2
 + .byte ooooxxx;ooooooo,ooooooo
 + .byte >c5,sin,ooooooo
 + .byte <g0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,>c4-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 + .byte <g0-ooo,fix,bd1,ooxxxxx
 + .byte <c0-ooo,ooooooo
 +
 + .byte <a0-ooo,ooooooo,<a3-ooo
 + .byte ooooooo,>c5,sin,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <a0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte >b0-ooo,<c0-ooo,ooxxxxx
 + .byte <c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy7 .byte >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 <a0-ooo,fix,bd1,>c4-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 +
 + .byte >c1-ooo,ooooooo,<d4-ooo
 + .byte 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 <d1-ooo,>c5-ooo,ooooooo
 +
 + .byte <g0-ooo,fix,bd1,<g3-ooo
 + .byte ooooxxx;ooooooo,ooooooo
 + .byte >c5,sin,ooooooo
 + .byte <g0-ooo,>c4-ooo,>c4-ooo
 +
 + .byte ooooooo,fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <g0-ooo,fix,bd1,<g3-ooo
 + .byte ooooooo,<c0-ooo,ooooooo
 +
 + .byte <a0-ooo,ooooooo,>f3,pi1
 + .byte ooooooo,>c5,sin,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <a0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte >b0-ooo,<c0-ooo,ooxxxxx
 + .byte <c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy8 .byte >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 <a0-ooo,fix,bd1,>g3-ooo
 + .byte oooxxxx;ooooooo,ooooooo
 +
 + .byte >c1-ooo,ooooooo,<d3,pi1
 + .byte 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,<d3-ooo
 + .byte <d1-ooo,>c5-ooo,ooooooo
 +
 + .byte <g0-ooo,fix,bd1,>d3-ooo
 + .byte ooooxxx;ooooooo,ooooooo
 + .byte >c5,sin,ooooooo
 + .byte <g0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <g0-ooo,fix,bd1,ooxxxxx
 + .byte <c0-ooo,ooooooo
 +
 + .byte <a0-ooo,ooooooo,<a2-ooo
 + .byte ooooooo,>c5,sin,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte <a0-ooo,>c4-ooo,ooxxxxx
 +
 + .byte fix,sn1,ooooxxx
 +       ;.byte ooooooo,ooooooo,ooooooo
 + .byte >b0-ooo,<c0-ooo,ooxxxxx
 + .byte <c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy9 .byte >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 <d1-ooo,fix,bd1,ooooooo
 +
 + .byte >f1-ooo,<c0-ooo,ooxxxxx
 + .byte >c5,sin,ooooooo
 + .byte >f1-ooo,fix,bd1,ooxxxxx
 + .byte >c4,sin,ooooooo
 +
 + .byte >f2-ooo,fix,sn1,ooooooo
 + .byte <d2-ooo,>c5,sin,ooooooo
 + .byte >c2-ooo,fix,bd1,ooooooo
 + .byte <d2-ooo,>c4,sin,ooooooo
 +
 + .byte end
 +
 +noisy9_2 .byte >f1-ooo,fix,bd1,<d4,ld1
 + .byte oooxxxx;ooooooo,ooooooo
 + .byte >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 <d1-ooo,fix,bd1,ooooooo
 +
 + .byte >f1-ooo,<c0-ooo,>c4-ooo
 + .byte >f2-ooo,>c5,sin,ooxxxxx
 + .byte fix,bd1,ooooooo
 + .byte >c2-ooo,>c4,sin,ooooooo
 +
 + .byte >c2-ooo,fix,sn1,<a3-ooo
 + .byte <d2-ooo,>c5,sin,ooooooo
 + .byte <a1-ooo,fix,sn1,ooooooo
 + .byte >c2-ooo,<c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy9_3 .byte >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,<a4-ooo
 + .byte >f1-ooo,oooxxxx;ooooooo
 + .byte >c5,sin,ooooooo
 + .byte <d1-ooo,fix,bd1,ooooooo
 +
 + .byte >f1-ooo,<c0-ooo,>g4-ooo
 + .byte >f2-ooo,>c5,sin,ooxxxxx
 + .byte fix,bd1,ooooooo
 + .byte >c2-ooo,>c4,sin,ooooooo
 +
 + .byte >c2-ooo,fix,sn1,<a4-ooo
 + .byte <d2-ooo,>c5,sin,ooooooo
 + .byte <a1-ooo,fix,sn1,ooooooo
 + .byte >c2-ooo,<c0-ooo,ooooooo
 +
 + .byte end
 +
 +noisy10 .byte >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 <a0-ooo,fix,bd1,ooooooo
 +
 + .byte >c1-ooo,<c0-ooo,ooxxxxx
 + .byte >c5,sin,ooooooo
 + .byte >c1-ooo,fix,bd1,ooxxxxx
 + .byte >c4,sin,ooooooo
 +
 + .byte >c2-ooo,fix,sn1,ooooooo
 + .byte <a1-ooo,>c5,sin,ooooooo
 + .byte >g1-ooo,fix,bd1,ooooooo
 + .byte <a1-ooo,>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,<a3-ooo
 + .byte >c1-ooo,oooxxxx;ooooooo
 + .byte >c5,sin,>g3-ooo
 + .byte <a0-ooo,fix,bd1,>f3-ooo
 +
 + .byte >c1-ooo,<c0-ooo,ooooooo
 + .byte >c2-ooo,>c5,sin,<d3-ooo
 + .byte ooooooo,fix,bd1,ooooooo
 + .byte >g1-ooo,>c4,sin,>f3-ooo
 +
 + .byte >g1-ooo,fix,sn1,>g3-ooo
 + .byte <a1-ooo,>c5,sin,>f3-ooo
 + .byte >f1-ooo,fix,sn1,<d3-ooo
 + .byte >g1-ooo,<c0-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,<a3-ooo
 + .byte >c1-ooo,oooxxxx;ooooooo
 + .byte >c5,sin,>g3-ooo
 + .byte <a0-ooo,fix,bd1,<a3-ooo
 +
 + .byte >c1-ooo,<c0-ooo,ooooooo
 + .byte >c2-ooo,>c5,sin,>c4-ooo
 + .byte ooooooo,fix,bd1,ooooooo
 + .byte >g1-ooo,>c4,sin,<d4-ooo
 +
 + .byte >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
 +</code>
 +
 +
  
base/macro_player.txt ยท Last modified: 2015-04-17 04:32 (external edit)