⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tm2.asx

📁 这是著名的TCPMP播放器在WINDWOWS,和WINCE下编译通过的源程序.笔者对其中的LIBMAD库做了针对ARM MPU的优化. 并增加了词幕功能.
💻 ASX
📖 第 1 页 / 共 2 页
字号:
       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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -