📄 tm2.asx
字号:
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 $d217pokey1 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 ; !!! rtspokey 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 processinggraj 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 n0n1 lda opadst,x ; sound fading beq n6n0 lda opad1,x beq n7 dec lopad1,x bne n7 sta lopad1,x lda actvl1,x beq n7 sub #16 sta actvl1,xn7 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 m1m7 lda #1 sta kolejn,x jmp m1m6 inc aperm,x lda ilperm,x cmp aperm,x bcs m1 lda #0 sta aperm,xm1 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+1m5 bpl * ; jmp jmp typ0 nop jmp typ1 nop jmp typ2 nop jmp typ3 nop jmp typ4 nop jmp typ5 nop jmp typ6 nop jmp typ7m2 dec czekaj,xm3 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 n4n3 lda addaudctl,xn4 and usedaudctl,x sta audctl,x iny iny tya sta slupy,x dey lda (addr),yn5 bcc * ; jmp bcc a0 bcc a1 bcc a2 bcc a3 bcc a4 bcc a5 bcc a6 bcc a7; accentsa1 adc:sta shiftfrq,x lda (addr),ya0 add:sta byte jmp grajreturna3 adc:sta shiftnote,x lda (addr),ya2 add:sta bajt jmp grajreturna5 adc:sta shiftfilter,x lda (addr),ya4 add:sta filter jmp grajreturna6 sta byte lda #0a7 sta bajt jmp grajreturn; effectstyp1 lda typdat,x and #3 lsr @ bcc t0 bne t1 lda param,x add:sta bytet0 dec ltyp,x bpl typ0 inc typdat,x mva dtyp,x ltyp,x jmp m3t1 lda byte sbc param,x ; sec sta byte dec ltyp,x bpl typ0 inc typdat,x mva dtyp,x ltyp,x jmp m3typ2 ldy typdat,x lda param,x bmi t2 iny inyt2 dey tya add:sta byte dec ltyp,x bpl typ0 tya sta typdat,x cmp param,x bne t3 eor #$ff sta param,xt3 mva dtyp,x ltyp,xtyp0 jmp m3typ3 ldy typdat,x lda param,x bmi t4 iny inyt4 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 m3typ4 lda typdat,x add:sta byte dec ltyp,x bpl typ0 lda param,x add:sta typdat,x mva dtyp,x ltyp,x jmp m3typ5 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 m3typ6 lda param,x add:sta bytetyp7 jmp m3 ; placeholder for new type of sound;----------------; init functions; play song, X=number of songsongx ldy #16zm4 lda #0 sta addrzm5 lda #0 sta addr+1 mva #0 pozsngd5 txa beq inic lda (addr),y seq:bpl d4 dexd4 lda #17 add:sta addr scc:inc addr+1 inc pozsng bne d5 ldx #0; play song, X=line of songplayx 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 clczm6 adc #0 sta addr lda bytezm7 adc #0 sta addr+1inic jsr stop mwa addr adrsng ldx #7i4 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 rtsi1 txa ; change of tempo and #15 sta tempo rtsi2 stx czygrc ; pause, continue rtsinit 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 bajtspecialcode and #15 asl @ sta sc17+1 lda bajtsc17 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 sc15sc0 sta specialflag ; code 0: set special flagsc10 equ *sc11 equ *sc12 equ *sc13 equ *sc14 equ *sc15 equ * rts; special codessc4 sta sndfilter,x rtssc5 sta mainaudctl,x rtssc6 sta addaudctl,x rtssc7 sta shiftfilter,x rtssc8 sta shiftfrq,x rtssc9 sta shiftnote,x rtssc1 and #$70 lsr @ lsr @ sta typ,x and #$30 sne:sta typdat,x lda bajt bmi sc16 and #15 sta param,x rtssc16 and #15 eor #$ff add #1 sta param,x rtssc2 and #$3f sta dtyp,x sta ltyp,x rtssc3 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 songi3 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 playingstop ldx #7 lda #0 sta czygrcd9 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 instrumentd1 sta vol1ch,x ; if attempt to play empty sound - clear data ift normal ; !!! sta vol2ch,x sta volume,x eif ; !!! sta audctl,x rtsd0 tya ; change only volume sta actvol,xd3 and #$f0 sta actvl1,x lda actvol,x ift normal ; !!! asl @ asl @ asl @ asl @ sta actvl2,x eif ; !!! rtsd2 and #7 sta addr txa ldx addr and #$3f beq d0 sta wysdzw,x tya bmi d2-1 lda actvol,x jsr d3dzwiek mva #0 czygrx,xzm9 lda $ffff,y beq d1 sta adrsnh,x sta addr+1zm8 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 d8d7 and #15 eor #$ff add #1 sta param,xd8 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,xd6 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 rtsendplr end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -