tm2.asx
资源名称:tcpmp.rar [点击查看]
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:28k
源码类别:
Windows CE
开发平台:
C/C++
- ;-------------------
- ; TMC 2.00 Player
- ;------------------
- player equ $200
- normal equ 1 ; change to 0 for short version
- org player
- addr equ $fa
- byte equ $fc
- bajt equ $fd
- filter equ $fe
- maxvol equ $ff
- ; some tables on start (to avoid page breaking)
- voltab dta d' '
- dta d' !!!!!!!!'
- dta d' !!!!!!!!""""'
- dta d' !!!!!"""""###'
- dta d' !!!!""""####$$'
- dta d' !!!"""###$$$%%'
- dta d' !!"""##$$$%%&&'
- dta d' !!""##$$%%&&'''''
- dta d' !!""##$$%%&&''''('
- dta d' !!""#$$%%&''''(()'
- dta d' !!"##$%%&''''())*'
- dta d' !!"#$$%&''''()**+'
- dta d' !""#$%&&''()**+,'
- dta d' !"##$%&''()**+,-'
- dta d' !"#$%&''''()*+,-.'
- dta d' !"#$%&''()*+,-./'
- frqtab dta 0,$f1,$e4,$d7
- dta $cb,$c0,$b5,$aa
- dta $a1,$98,$8f,$87
- dta $7f,$78,$72,$6b
- dta $65,$5f,$5a,$55
- dta $50,$4b,$47,$43
- dta $3f,$3c,$38,$35
- dta $32,$2f,$2c,$2a
- dta $27,$25,$23,$21
- dta $1f,$1d,$1c,$1a
- dta $18,$17,$16,$14
- dta $13,$12,$11,$10
- dta 15,14,13,12
- dta 11,10,9,8
- dta 7,6,5,4
- dta 3,2,1,0
- dta 0,$f2,$e9,$da
- dta $ce,$bf,$b6,$aa
- dta $a1,$98,$8f,$89
- dta $80,$7a,$71,$6b
- dta $65,$5f,$5c,$56
- dta $50,$4d,$47,$44
- dta $3e,$3c,$38,$35
- dta $32,$2f,$2d,$2a
- dta $28,$25,$23,$21
- dta $1f,$1d,$1c,$1a
- dta $18,$17,$16,$14
- dta $13,$12,$11,$10
- dta 15,14,13,12
- dta 11,10,9,8
- dta 7,6,5,4
- dta 3,2,1,0
- dta 0,$ff,$f1,$e4
- dta $d8,$ca,$c0,$b5
- dta $ab,$a2,$99,$8e
- dta $87,$7f,$79,$73
- dta $70,$66,$61,$5a
- dta $55,$52,$4b,$48
- dta $43,$3f,$3c,$39
- dta $37,$33,$30,$2d
- dta $2a,$28,$25,$24
- dta $21,$1f,$1e,$1c
- dta $1b,$19,$17,$16
- dta $15,$13,$12,$11
- dta $10,15,14,13
- dta 12,11,10,9
- dta 8,7,6,5
- dta 4,3,2,1
- dta 0,$f3,$e6,$d9
- dta $cc,$c1,$b5,$ad
- dta $a2,$99,$90,$88
- dta $80,$79,$72,$6c
- dta $66,$60,$5b,$55
- dta $51,$4c,$48,$44
- dta $40,$3c,$39,$35
- dta $32,$2f,$2d,$2a
- dta $28,$25,$23,$21
- dta $1f,$1d,$1c,$1a
- dta $18,$17,$16,$14
- dta $13,$12,$11,$10
- dta 15,14,13,12
- dta 11,10,9,8
- dta 7,6,5,4
- dta 3,2,1,0
- basslo dta l($be2,$b38,$a8c,$a00)
- dta l($96a,$8e8,$86a,$7ef)
- dta l($780,$708,$6ae,$646)
- dta l($5e6,$595,$541,$4f6)
- dta l($4b0,$46e,$430,$3f6)
- dta l($3bb,$384,$352,$322)
- dta l($2f4,$2c8,$2a0,$27a)
- dta l($255,$234,$214,$1f5)
- dta l($1d8,$1bd,$1a4,$18d)
- dta l($177,$160,$14e,$138)
- dta l($127,$115,$106,$0f7)
- dta l($0e8,$0db,$0cf,$0c3)
- dta l($0b8,$0ac,$0a2,$09a)
- dta l($090,$088,$07f,$078)
- dta l($070,$06a,$064,$05e)
- dta l($057,$052,$032,$00a)
- dta 0,$f2,$33,$96
- dta $e2,$38,$8c,$00
- dta $6a,$e8,$6a,$ef
- dta $80,$08,$ae,$46
- dta $e6,$95,$41,$f6
- dta $b0,$6e,$30,$f6
- dta $bb,$84,$52,$22
- dta $f4,$c8,$a0,$7a
- dta $55,$34,$14,$f5
- dta $d8,$bd,$a4,$8d
- dta $77,$60,$4e,$38
- dta $27,$15,$06,$f7
- dta $e8,$db,$cf,$c3
- dta $b8,$ac,$a2,$9a
- dta $90,$88,$7f,$78
- dta $70,$6a,$64,$5e
- basshi dta h($be2,$b38,$a8c,$a00)
- dta h($96a,$8e8,$86a,$7ef)
- dta h($780,$708,$6ae,$646)
- dta h($5e6,$595,$541,$4f6)
- dta h($4b0,$46e,$430,$3f6)
- dta h($3bb,$384,$352,$322)
- dta h($2f4,$2c8,$2a0,$27a)
- dta h($255,$234,$214,$1f5)
- dta h($1d8,$1bd,$1a4,$18d)
- dta h($177,$160,$14e,$138)
- dta h($127,$115,$106,$0f7)
- dta h($0e8,$0db,$0cf,$0c3)
- dta h($0b8,$0ac,$0a2,$09a)
- dta h($090,$088,$07f,$078)
- dta h($070,$06a,$064,$05e)
- dta h($057,$052,$032,$00a)
- dta 0,13,13,12
- dta 11,11,10,10
- dta 9,8,8,7
- dta 7,7,6,6
- dta 5,5,5,4
- dta 4,4,4,3
- dta 3,3,3,3
- dta 2,2,2,2
- dta 2,2,2,1
- dta 1,1,1,1
- dta 1,1,1,1
- dta 1,1,1,0
- dta 0,0,0,0
- dta 0,0,0,0
- dta 0,0,0,0
- dta 0,0,0,0
- tables_len equ *-player
- ; org +$300
- jmp init
- jmp play
- jmp sound
- ; some external controls
- quadro dta 1 ; 0=mono, 1-63=stereo, 64-127= RMT stereo, 128-255=quadro
- pokeys dta 16 ; which data should go to which pokey (0,1,2 and 3 respectively)
- dta 20 ; for stereo config: 16=first 4 tracks, 20=last 4 tracks
- dta 0 ; for quadro values should be:
- dta 0 ; 0=main volume from tracks 0-3, 4=main volume from tracks 4-5
- ; 8=additional volume from tracks 0-3, 12=additional volume from tracks 4-5
- ; typical: 0,4,12,8 which should sound well on pokeys 0&2 on left channel
- ; and pokeys 1&3 on right channel
- ; (on stereo atari these settings should also sound well)
- silent dta d' ' ; which channel should be silent
- ; these values are usable from the outside of player
- czygrc dta 0 ; if song should be played
- pozsng dta 0 ; position in song
- specialflag dta 0 ; flag triggered in song data
- adrsng dta a(0) ; address of song line
- tempo dta 0 ; tempo of song
- ltempo dta 0 ; counter of tempo
- pozptr dta 0 ; counter of positions in patterns (64 means end of pattern)
- ift normal ; !!!
- aud1 dta 0 ; total AUDCTL of left channel
- aud2 dta 0 ; and right
- voltabs equ * ; (24 bytes)
- eif ; !!!
- vol1ch dta d' ' ; volume of main channels
- ift normal ; !!!
- vol2ch dta d' ' ; volume of additional channels
- volume dta d' ' ; volume of channels in stereo (taken from vol1ch and vol2ch)
- freqtabs equ * ; (24 bytes)
- eif ; !!!
- frq dta d' ' ; frequency
- ift normal ; !!!
- note dta d' ' ; actual note played on channel (taken from aktwys)
- freqen dta d' ' ; frequency of channels in stereo (taken from frq)
- eif ; !!!
- ; data for accesing pattern data
- adrptl dta d' ' ; address of pattern data
- adrpth dta d' ' ;
- pozwpt dta d' ' ; index for accesing data in pattern
- poddzw dta d' ' ; change of note
- delay dta d' ' ; how many spaces in pattern should be skipped
- ; data for accesing instrument data
- czygrx dta d' ' ; if something is played on channel
- adrsnl dta d' ' ; address of instrument data
- adrsnh dta d' ' ;
- numdzw dta d' ' ; number of instrument
- wysdzw dta d' ' ; note to play
- aktwys dta d' ' ; actual played note
- znksz dta d' ' ; distortion
- audctl dta d' ' ; AUDCTL
- slupy dta d' ' ; counter for data inside instrument
- ; data for specific sound effects
- sndlen dta d' ' ; length of instrument
- sndlop dta d' ' ; where to loop sound data
- actvol dta d' ' ; volume of sounds
- actvl1 dta d' ' ; actual control of main volume
- ift normal ; !!!
- actvl2 dta d' ' ; and additional volume
- eif ; !!!
- opad1 dta d' ' ; how soon the sound should fade (main volume)
- opad2 dta d' ' ; and additional volume
- lopad1 dta d' ' ; counters for fading
- lopad2 dta d' ' ;
- opadst dta d' ' ; start of fading
- typ dta d' ' ; type of effect
- param dta d' ' ; parameter for effect
- typdat dta d' ' ; data for effect
- czekaj dta d' ' ; how soon the effect should start
- dtyp dta d' ' ; how often the effect should chanfe
- ltyp dta d' ' ; counter for effect change
- ilperm dta d' ' ; how many arpeggio sounds
- aperm dta d' ' ; actual arpeggio sound
- dperm dta d' ' ; how soon the arpeggio should change
- lperm dta d' ' ; counter for arpeggio
- kolejn dta d' ' ; order of arpeggio
- sndfilter dta d' ' ; filter from sound data
- mainaudctl dta d' ' ; main audctl
- addaudctl dta d' ' ; additional audctl
- shiftfrq dta d' '
- shiftnote dta d' '
- shiftfilter dta d' '
- ; some useful tables
- ift normal ; !!!
- przeci dta 4,5,6,7 ; which channel is the opposite (used only in stereo)
- dta 0,1,2,3
- eif ; !!!
- audtb1 dta 4,2,0,0 ; which byte in audctl has to be set to make sound "2 channel synth"
- dta 4,2,0,0
- audtb2 dta 0,16,0,8 ; which byte in audctl has to be set to make sound "2 channel bass"
- dta 0,16,0,8
- usedaudctl dta 4+129,$50+2+129,129,$28+129 ; bits of AUDCTL used in channel
- dta 4+129,$50+2+129,129,$28+129
- ;-------------------------
- ; start of player program
- player_program equ *
- ; new address of song line
- p3 dey
- lda (addr),y
- sta pozsng
- mvx #0 byte
- asl @
- rol byte
- asl @
- rol byte
- asl @
- rol byte
- asl @
- rol byte
- adc pozsng ; clc
- scc:inc byte
- clc
- zm0 adc #0
- sta addr
- lda byte
- zm1 adc #0
- sta addr+1
- jmp p1
- ; play song (call only one time per frame)
- play jsr pokey
- lda czygrc
- beq rsound
- dec ltempo
- bmi p4
- rsound jmp sound+3
- p4 dec pozptr
- bne r1
- ; get new patterns from song
- ldx #0
- inc pozsng
- mwa adrsng addr
- p1 ldy #16
- lda (addr),y
- bmi p3
- jeq stop
- sta pozptr
- dey
- p2 lda (addr),y
- dey
- sty byte
- tay
- zm2 lda $ffff,y
- sta adrptl,x
- zm3 lda $ffff,y
- sta adrpth,x
- lda #0
- sta delay,x
- sta pozwpt,x
- ldy byte
- lda (addr),y
- sta poddzw,x
- inx
- dey
- bpl p2
- lda #17
- add addr
- sta adrsng
- lda #0
- adc addr+1
- sta adrsng+1
- ; get new data from patterns
- r1 mva tempo ltempo
- ldx #7
- r2 dec delay,x
- bmi r13
- r14 dex
- bpl r2
- jmp sound+3
- r13 mva adrptl,x addr
- mva adrpth,x addr+1
- ldy pozwpt,x
- r3 lda (addr),y ; get data
- bne r4
- iny ; $00: only new volume
- lda (addr),y
- sta actvol,x
- and #$f0
- sta actvl1,x
- ift normal ; !!!
- lda (addr),y
- asl @
- asl @
- asl @
- asl @
- sta actvl2,x
- eif ; !!!
- iny
- tya
- sta pozwpt,x
- jmp r14
- r4 cmp #$40
- bcs r5
- adc poddzw,x ; $01-$3f: new note with sound and maybe volume
- sta wysdzw,x
- iny
- lda (addr),y
- bpl r11
- and #$7f
- sta byte
- iny
- lda (addr),y
- sta actvol,x
- and #$f0
- sta actvl1,x
- ift normal ; !!!
- lda (addr),y
- asl @
- asl @
- asl @
- asl @
- sta actvl2,x
- eif ; !!!
- iny
- tya
- sta pozwpt,x
- ldy byte
- jsr dzwiek
- jmp r14
- r11 tay ; without volume
- inc pozwpt,x
- inc pozwpt,x
- lda actvol,x
- and #$f0
- sta actvl1,x
- ift normal ; !!!
- lda actvol,x
- asl @
- asl @
- asl @
- asl @
- sta actvl2,x
- eif ; !!!
- jsr dzwiek
- jmp r14
- r5 cmp #$80
- bcs r6
- and #$3f ; $41-$7f: new note with volume
- add poddzw,x
- sta wysdzw,x
- iny
- lda (addr),y
- sta actvol,x
- and #$f0
- sta actvl1,x
- ift normal ; !!!
- lda (addr),y
- asl @
- asl @
- asl @
- asl @
- sta actvl2,x
- eif ; !!!
- iny
- tya
- sta pozwpt,x
- jmp r14
- r6 bne r7
- iny ; $80: more than 15 spaces
- lda (addr),y
- sta delay,x
- iny
- tya
- sta pozwpt,x
- jmp r14
- r7 cmp #$c0
- bcs r8
- and #$3f ; $81-$bf: new note
- add poddzw,x
- sta wysdzw,x
- inc pozwpt,x
- jmp r14
- r8 cmp #$d0
- bcs r9
- iny ; $c0-$cf: new tempo
- inc pozwpt,x
- and #15
- sta tempo
- sta ltempo
- jmp r3
- r9 cmp #$e0 ; special code
- bcs r15
- mva (addr),y byte
- iny
- mva (addr),y bajt
- iny
- tya
- sta pozwpt,x
- lda byte
- jsr specialcode
- jmp r14
- r15 cmp #$f0 ; special code with volume
- bcs r12
- mva (addr),y byte
- iny
- mva (addr),y bajt
- lda byte
- jsr specialcode
- ldy pozwpt,x
- iny
- iny
- lda (addr),y
- sta actvol,x
- and #$f0
- sta actvl1,x
- ift normal ; !!!
- lda (addr),y
- asl @
- asl @
- asl @
- asl @
- sta actvl2,x
- eif ; !!!
- iny
- tya
- sta pozwpt,x
- jmp r14
- r12 cmp #$ff
- bcs r10
- sbc #$ef ; $f0-$fe: spaces-$f0 (c is clear here)
- sta delay,x
- inc pozwpt,x
- jmp r14
- r10 lda #$40 ; $ff: spaces till the end of pattern
- sta delay,x
- jmp r14
- ; main play sound loop
- sound jsr pokey
- ldx #7
- p5 lda czygrx,x
- beq p6
- jmp graj
- grajreturn equ *
- lda silent,x
- beq p7
- lda #0 ; silent channel
- sta vol1ch,x
- ift normal ; !!!
- sta vol2ch,x
- eif ; !!!
- dex
- bpl p5
- jmp p8
- p7 ldy bajt
- lda frqtab,y
- add byte
- sta frq,x
- tya
- sta aktwys,x
- lda audctl,x
- and audtb2,x
- beq p11
- lda bajt ; 2 channel bass
- and #$7f
- tay
- lda basslo,y
- add byte
- sta frq-1,x
- lda basshi,y
- adc #0
- sta frq,x
- lda #0
- sta vol1ch-1,x
- ldy przeci,x
- sta vol2ch-1,y
- dex
- dex
- bpl p5
- jmp p8
- p11 lda audctl,x
- and audtb1,x
- beq p6
- lda sndfilter,x ;two channel filter
- add bajt
- sta aktwys+2,x
- tay
- lda frqtab,y
- add byte
- sec
- adc filter
- sta frq+2,x
- p6 dex
- bpl p5
- ; sound postprocessing
- p8 inx
- stx byte
- ift normal ; !!!
- ldx #3
- lda quadro
- beq p9
- and #$40
- bne p12
- ldx #7 ; standard stereo settings
- p9 txa
- tay
- lda vol1ch,y
- bne p10
- ldy przeci,x
- lda vol2ch,y
- bne p10
- txa
- tay
- lda #0
- p10 ora znksz,y
- sta volume,x
- lda frq,y
- sta freqen,x
- lda aktwys,y
- sta note,x
- lda audctl,y
- ora byte
- sta byte
- cpx #4
- sne:sta aud2
- dex
- bpl p9
- sta aud1
- rts
- p12 equ * ; RMT stereo
- p13 lda vol1ch,x
- ora znksz,x
- sta volume,x
- lda vol2ch+4,x
- ora znksz+4,x
- sta volume+4,x
- mva frq,x freqen,x
- mva frq+4,x freqen+4,x
- mva aktwys,x note,x
- mva aktwys+4,x note+4,x
- dex
- bpl p13
- lda audctl
- ora audctl+1
- ora audctl+2
- ora audctl+3
- sta aud1
- lda audctl+4
- ora audctl+5
- ora audctl+6
- ora audctl+7
- sta aud2
- rts
- ; set pokey
- pokey lda quadro
- jeq pokey1
- jpl pokey2
- lda pokeys+3 ; data for pokey 3
- tax
- lsr @
- lsr @
- and #1
- tay
- lda aud1,y
- sta $d238
- txa
- and #4
- tay
- lda freqtabs,y
- sta $d230
- lda voltabs,x
- sta $d231
- lda freqtabs+1,y
- sta $d232
- lda voltabs+1,x
- sta $d233
- lda freqtabs+2,y
- sta $d234
- lda voltabs+2,x
- sta $d235
- lda freqtabs+3,y
- sta $d236
- lda voltabs+3,x
- sta $d237
- lda pokeys+2 ; data for pokey 2
- tax
- lsr @
- lsr @
- and #1
- tay
- lda aud1,y
- sta $d228
- txa
- and #4
- tay
- lda freqtabs,y
- sta $d220
- lda voltabs,x
- sta $d221
- lda freqtabs+1,y
- sta $d222
- lda voltabs+1,x
- sta $d223
- lda freqtabs+2,y
- sta $d224
- lda voltabs+2,x
- sta $d225
- lda freqtabs+3,y
- sta $d226
- lda voltabs+3,x
- sta $d227
- pokey2 lda pokeys+1 ; data for pokey 1
- tax
- lsr @
- lsr @
- and #1
- tay
- lda aud1,y
- sta $d218
- txa
- ldy quadro
- spl:and #4
- tay
- lda freqtabs,y
- sta $d210
- lda voltabs,x
- sta $d211
- lda freqtabs+1,y
- sta $d212
- lda voltabs+1,x
- sta $d213
- lda freqtabs+2,y
- sta $d214
- lda voltabs+2,x
- sta $d215
- lda freqtabs+3,y
- sta $d216
- lda voltabs+3,x
- sta $d217
- pokey1 lda pokeys ; data for pokey 0
- tax
- lsr @
- lsr @
- and #1
- tay
- lda aud1,y
- sta $d208
- txa
- ldy quadro
- spl:and #4
- tay
- lda freqtabs,y
- sta $d200
- lda voltabs,x
- sta $d201
- lda freqtabs+1,y
- sta $d202
- lda voltabs+1,x
- sta $d203
- lda freqtabs+2,y
- sta $d204
- lda voltabs+2,x
- sta $d205
- lda freqtabs+3,y
- sta $d206
- lda voltabs+3,x
- sta $d207
- rts
- els ; !!!
- rts
- pokey lda audctl+4
- ora audctl+5
- ora audctl+6
- ora audctl+7
- sta $d218
- lda frq+4
- sta $d210
- lda vol1ch+4
- ora znksz+4
- sta $d211
- lda frq+5
- sta $d212
- lda vol1ch+5
- ora znksz+5
- sta $d213
- lda frq+6
- sta $d214
- lda vol1ch+6
- ora znksz+6
- sta $d215
- lda frq+7
- sta $d216
- lda vol1ch+7
- ora znksz+7
- sta $d217
- lda audctl+0
- ora audctl+1
- ora audctl+2
- ora audctl+3
- sta $d208
- lda frq+0
- sta $d200
- lda vol1ch+0
- ora znksz+0
- sta $d201
- lda frq+1
- sta $d202
- lda vol1ch+1
- ora znksz+1
- sta $d203
- lda frq+2
- sta $d204
- lda vol1ch+2
- ora znksz+2
- sta $d205
- lda frq+3
- sta $d206
- lda vol1ch+3
- ora znksz+3
- sta $d207
- rts
- eif ; !!!
- ; sound processing
- graj lda adrsnl,x
- sta addr
- lda adrsnh,x
- sta addr+1
- mva shiftfrq,x byte
- mva shiftnote,x bajt
- mva shiftfilter,x filter
- lda slupy,x
- cmp sndlen,x
- bcc n1
- sta opadst,x
- lda sndlop,x
- sta slupy,x
- jmp n0
- n1 lda opadst,x ; sound fading
- beq n6
- n0 lda opad1,x
- beq n7
- dec lopad1,x
- bne n7
- sta lopad1,x
- lda actvl1,x
- beq n7
- sub #16
- sta actvl1,x
- n7 lda opad2,x
- beq n6
- dec lopad2,x
- bne n6
- sta lopad2,x
- ift normal ; !!!
- lda actvl2,x
- beq n6
- sub #16
- sta actvl2,x
- eif ; !!!
- n6 ldy aperm,x ; arpeggio
- lda (addr),y
- add wysdzw,x
- add:sta bajt
- dec lperm,x
- bpl m1
- lda dperm,x
- sta lperm,x
- lda kolejn,x
- beq m6
- add aperm,x
- sta aperm,x
- beq m7
- cmp ilperm,x
- bcc m1
- lda #$ff
- sta kolejn,x
- jmp m1
- m7 lda #1
- sta kolejn,x
- jmp m1
- m6 inc aperm,x
- lda ilperm,x
- cmp aperm,x
- bcs m1
- lda #0
- sta aperm,x
- m1 lda #19
- add:sta addr
- scc:inc addr+1
- ldy slupy,x
- lda (addr),y ; main sound data
- and #$f0
- sta znksz,x
- lda (addr),y
- and #15
- ora actvl1,x
- tay
- lda voltab,y
- ora maxvol
- tay
- lda voltab,y
- sta vol1ch,x
- ift normal ; !!!
- ldy slupy,x
- iny
- lda (addr),y
- and #15
- ora actvl2,x
- tay
- lda voltab,y
- ora maxvol
- tay
- lda voltab,y
- sta vol2ch,x
- eif ; !!!
- lda czekaj,x
- bne m2
- lda typ,x
- sta m5+1
- m5 bpl * ; jmp
- jmp typ0
- nop
- jmp typ1
- nop
- jmp typ2
- nop
- jmp typ3
- nop
- jmp typ4
- nop
- jmp typ5
- nop
- jmp typ6
- nop
- jmp typ7
- m2 dec czekaj,x
- m3 ldy slupy,x ; accents
- iny
- lda (addr),y
- and #$70
- lsr @
- lsr @
- lsr @
- sta n5+1
- lda (addr),y
- bmi n3
- lda mainaudctl,x
- jmp n4
- n3 lda addaudctl,x
- n4 and usedaudctl,x
- sta audctl,x
- iny
- iny
- tya
- sta slupy,x
- dey
- lda (addr),y
- n5 bcc * ; jmp
- bcc a0
- bcc a1
- bcc a2
- bcc a3
- bcc a4
- bcc a5
- bcc a6
- bcc a7
- ; accents
- a1 adc:sta shiftfrq,x
- lda (addr),y
- a0 add:sta byte
- jmp grajreturn
- a3 adc:sta shiftnote,x
- lda (addr),y
- a2 add:sta bajt
- jmp grajreturn
- a5 adc:sta shiftfilter,x
- lda (addr),y
- a4 add:sta filter
- jmp grajreturn
- a6 sta byte
- lda #0
- a7 sta bajt
- jmp grajreturn
- ; effects
- typ1 lda typdat,x
- and #3
- lsr @
- bcc t0
- bne t1
- lda param,x
- add:sta byte
- t0 dec ltyp,x
- bpl typ0
- inc typdat,x
- mva dtyp,x ltyp,x
- jmp m3
- t1 lda byte
- sbc param,x ; sec
- sta byte
- dec ltyp,x
- bpl typ0
- inc typdat,x
- mva dtyp,x ltyp,x
- jmp m3
- typ2 ldy typdat,x
- lda param,x
- bmi t2
- iny
- iny
- t2 dey
- tya
- add:sta byte
- dec ltyp,x
- bpl typ0
- tya
- sta typdat,x
- cmp param,x
- bne t3
- eor #$ff
- sta param,x
- t3 mva dtyp,x ltyp,x
- typ0 jmp m3
- typ3 ldy typdat,x
- lda param,x
- bmi t4
- iny
- iny
- t4 dey
- tya
- add:sta bajt
- dec ltyp,x
- bpl typ0
- tya
- sta typdat,x
- cmp param,x
- bne t3
- eor #$ff
- sta param,x
- mva dtyp,x ltyp,x
- jmp m3
- typ4 lda typdat,x
- add:sta byte
- dec ltyp,x
- bpl typ0
- lda param,x
- add:sta typdat,x
- mva dtyp,x ltyp,x
- jmp m3
- typ5 lda bajt
- sub typdat,x
- sta bajt
- dec ltyp,x
- bpl typ0
- lda param,x
- add:sta typdat,x
- mva dtyp,x ltyp,x
- jmp m3
- typ6 lda param,x
- add:sta byte
- typ7 jmp m3 ; placeholder for new type of sound
- ;----------------
- ; init functions
- ; play song, X=number of song
- songx ldy #16
- zm4 lda #0
- sta addr
- zm5 lda #0
- sta addr+1
- mva #0 pozsng
- d5 txa
- beq inic
- lda (addr),y
- seq:bpl d4
- dex
- d4 lda #17
- add:sta addr
- scc:inc addr+1
- inc pozsng
- bne d5
- ldx #0
- ; play song, X=line of song
- playx lda #0
- sta byte
- txa
- sta pozsng
- asl @
- rol byte
- asl @
- rol byte
- asl @
- rol byte
- asl @
- rol byte
- adc pozsng ; clc
- scc:inc byte
- clc
- zm6 adc #0
- sta addr
- lda byte
- zm7 adc #0
- sta addr+1
- inic jsr stop
- mwa addr adrsng
- ldx #7
- i4 mva #$ff actvol,x
- lda #$f0
- sta actvl1,x
- ift normal ; !!!
- sta actvl2,x
- eif ; !!!
- dex
- bpl i4
- lda #3
- sta $d20f
- sta $d21f
- ift normal ; !!!
- sta $d22f
- sta $d23f
- eif ; !!!
- dec pozsng
- inx
- stx ltempo
- inx
- stx pozptr
- stx czygrc
- rts
- i1 txa ; change of tempo
- and #15
- sta tempo
- rts
- i2 stx czygrc ; pause, continue
- rts
- init cmp #$10 ; A=$00
- jcc songx
- cmp #$20 ; A=$10
- bcc playx
- cmp #$30 ; A=$20
- jcc d2
- cmp #$40 ; A=$30
- bcc i1
- cmp #$50 ; A=$40
- jcc stop
- cmp #$60 ; A=$50
- bcc i2
- cmp #$70 ; A=$60
- jcs i3
- sty bajt
- specialcode and #15
- asl @
- sta sc17+1
- lda bajt
- sc17 bcc * ; jmp
- bcc sc0
- bcc sc1
- bcc sc2
- bcc sc3
- bcc sc4
- bcc sc5
- bcc sc6
- bcc sc7
- bcc sc8
- bcc sc9
- bcc sc10
- bcc sc11
- bcc sc12
- bcc sc13
- bcc sc14
- bcc sc15
- sc0 sta specialflag ; code 0: set special flag
- sc10 equ *
- sc11 equ *
- sc12 equ *
- sc13 equ *
- sc14 equ *
- sc15 equ *
- rts
- ; special codes
- sc4 sta sndfilter,x
- rts
- sc5 sta mainaudctl,x
- rts
- sc6 sta addaudctl,x
- rts
- sc7 sta shiftfilter,x
- rts
- sc8 sta shiftfrq,x
- rts
- sc9 sta shiftnote,x
- rts
- sc1 and #$70
- lsr @
- lsr @
- sta typ,x
- and #$30
- sne:sta typdat,x
- lda bajt
- bmi sc16
- and #15
- sta param,x
- rts
- sc16 and #15
- eor #$ff
- add #1
- sta param,x
- rts
- sc2 and #$3f
- sta dtyp,x
- sta ltyp,x
- rts
- sc3 and #$80
- asl @
- rol @
- sta kolejn,x
- lda bajt
- and #$70
- lsr @
- lsr @
- lsr @
- lsr @
- sta ilperm,x
- sne:sta kolejn,x
- lda bajt
- and #15
- sta dperm,x
- sta lperm,x
- lda aperm,x
- cmp ilperm,x
- bcc sc0
- lda ilperm,x
- seq:sbc #1 ; sec
- sta aperm,x
- rts
- ; init of new song
- i3 sty addr
- stx addr+1
- ldy #25
- mva (addr),y+ quadro
- mva (addr),y+ pokeys
- mva (addr),y+ pokeys+1
- mva (addr),y+ pokeys+2
- mva (addr),y+ pokeys+3
- lda (addr),y
- sta tempo
- lda addr ; low byte of instruments data
- eor #$80
- smi:inx
- sta zm8+1
- stx zm8+2
- eor #$80 ; low byte of pattern data
- smi:inx
- sta zm2+1
- stx zm2+2
- inx ; high byte of pattern data
- sta zm3+1
- stx zm3+2
- inx ; high byte of instrument data
- sta zm9+1
- stx zm9+2
- eor #$80 ; track data
- smi:inx
- sta adrsng
- sta zm0+1
- sta zm4+1
- sta zm6+1
- stx adrsng+1
- stx zm1+1
- stx zm5+1
- stx zm7+1
- mva #$f0 maxvol
- lda #0
- sta czygrc
- sta specialflag
- ; stop playing
- stop ldx #7
- lda #0
- sta czygrc
- d9 sta czygrx,x
- sta audctl,x
- sta vol1ch,x
- ift normal ; !!!
- sta vol2ch,x
- sta volume,x
- sta $d230,x
- sta $d220,x
- eif ; !!!
- sta $d210,x
- sta $d200,x
- dex
- bpl d9
- sta $d218
- sta $d208
- ift normal ; !!!
- sta $d238
- sta $d228
- sta aud1
- sta aud2
- eif ; !!!
- rts
- ; procedures for play new instrument
- d1 sta vol1ch,x ; if attempt to play empty sound - clear data
- ift normal ; !!!
- sta vol2ch,x
- sta volume,x
- eif ; !!!
- sta audctl,x
- rts
- d0 tya ; change only volume
- sta actvol,x
- d3 and #$f0
- sta actvl1,x
- lda actvol,x
- ift normal ; !!!
- asl @
- asl @
- asl @
- asl @
- sta actvl2,x
- eif ; !!!
- rts
- d2 and #7
- sta addr
- txa
- ldx addr
- and #$3f
- beq d0
- sta wysdzw,x
- tya
- bmi d2-1
- lda actvol,x
- jsr d3
- dzwiek mva #0 czygrx,x
- zm9 lda $ffff,y
- beq d1
- sta adrsnh,x
- sta addr+1
- zm8 lda $ffff,y
- sta adrsnl,x
- sta addr
- tya
- sta numdzw,x
- ldy #8
- mva (addr),y+ sndlen,x
- mva (addr),y+ sndlop,x
- mva (addr),y+ sndfilter,x
- mva (addr),y+ mainaudctl,x
- mva (addr),y+ addaudctl,x
- mva (addr),y+ opad1,x
- sta lopad1,x
- mva (addr),y+ opad2,x
- sta lopad2,x
- lda (addr),y
- and #$70
- lsr @
- lsr @
- sta typ,x
- lda (addr),y+
- bmi d7
- and #15
- sta param,x
- jmp d8
- d7 and #15
- eor #$ff
- add #1
- sta param,x
- d8 mva (addr),y+ czekaj,x
- lda (addr),y+
- and #$3f
- sta dtyp,x
- sta ltyp,x
- lda (addr),y
- and #$80
- asl @
- rol @
- sta kolejn,x
- lda (addr),y
- and #$70
- lsr @
- lsr @
- lsr @
- lsr @
- sta ilperm,x
- bne d6
- sta kolejn,x
- d6 lda (addr),y-
- and #15
- sta dperm,x
- sta lperm,x
- lda (addr),y
- and #$c0
- ora wysdzw,x
- sta wysdzw,x
- tay
- lda frqtab,y
- sta frq,x
- lda #0
- sta slupy,x
- sta typdat,x
- sta opadst,x
- sta aperm,x
- sta shiftfrq,x
- sta shiftnote,x
- sta shiftfilter,x
- lda #1
- sta czygrx,x
- rts
- endplr end