*---------------* * TMC Player * *Jaskier/Taquart* *---------------* opt 6 org $ac00 byte equ $fa bajt equ $fb addr equ $fc adrsng equ $fe player equ * jmp init jmp play jmp sound maxvol dta b(15) volume dta d' ' freqen dta d' ' kanal dta d' ' aktwys dta d' ' numdzw dta d' ' audctl dta d' ' aud1 dta b(0) aud2 dta b(0) 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 b(0),b($f1),b($e4),b($d7) dta b($cb),b($c0),b($b5),b($aa) dta b($a1),b($98),b($8f),b($87) dta b($7f),b($78),b($72),b($6b) dta b($65),b($5f),b($5a),b($55) dta b($50),b($4b),b($47),b($43) dta b($3f),b($3c),b($38),b($35) dta b($32),b($2f),b($2c),b($2a) dta b($27),b($25),b($23),b($21) dta b($1f),b($1d),b($1c),b($1a) dta b($18),b($17),b($16),b($14) dta b($13),b($12),b($11),b($10) dta b(15),b(14),b(13),b(12) dta b(11),b(10),b(9),b(8) dta b(7),b(6),b(5),b(4) dta b(3),b(2),b(1),b(0) dta b(0),b($f2),b($e6),b($da) dta b($ce),b($bf),b($b6),b($aa) dta b($a1),b($98),b($8f),b($89) dta b($80),b($7a),b($71),b($6b) dta b($65),b($5f),b($5c),b($56) dta b($50),b($4d),b($47),b($44) dta b($3e),b($3c),b($38),b($35) dta b($32),b($2f),b($2d),b($2a) dta b($28),b($25),b($23),b($21) dta b($1f),b($1d),b($1c),b($1a) dta b($18),b($17),b($16),b($14) dta b($13),b($12),b($11),b($10) dta b(15),b(14),b(13),b(12) dta b(11),b(10),b(9),b(8) dta b(7),b(6),b(5),b(4) dta b(3),b(2),b(1),b(0) dta b(0),b($ff),b($f1),b($e4) dta b($d8),b($ca),b($c0),b($b5) dta b($ab),b($a2),b($99),b($8e) dta b($87),b($7f),b($79),b($73) dta b($70),b($66),b($61),b($5a) dta b($55),b($52),b($4b),b($48) dta b($43),b($3f),b($3c),b($39) dta b($37),b($33),b($30),b($2d) dta b($2a),b($28),b($25),b($24) dta b($21),b($1f),b($1e),b($1c) dta b($1b),b($19),b($17),b($16) dta b($15),b($13),b($12),b($11) dta b($10),b(15),b(14),b(13) dta b(12),b(11),b(10),b(9) dta b(8),b(7),b(6),b(5) dta b(4),b(3),b(2),b(1) dta b(0),b($f3),b($e6),b($d9) dta b($cc),b($c1),b($b5),b($ad) dta b($a2),b($99),b($90),b($88) dta b($80),b($79),b($72),b($6c) dta b($66),b($60),b($5b),b($55) dta b($51),b($4c),b($48),b($44) dta b($40),b($3c),b($39),b($35) dta b($32),b($2f),b($2d),b($2a) dta b($28),b($25),b($23),b($21) dta b($1f),b($1d),b($1c),b($1a) dta b($18),b($17),b($16),b($14) dta b($13),b($12),b($11),b($10) dta b(15),b(14),b(13),b(12) dta b(11),b(10),b(9),b(8) dta b(7),b(6),b(5),b(4) dta b(3),b(2),b(1),b(0) basslo dta b(0),b($f2),b($33),b($96) dta b($e2),b($38),b($8c),b($00) dta b($6a),b($e8),b($6a),b($ef) dta b($80),b($08),b($ae),b($46) dta b($e6),b($95),b($41),b($f6) dta b($b0),b($6e),b($30),b($f6) dta b($bb),b($84),b($52),b($22) dta b($f4),b($c8),b($a0),b($7a) dta b($55),b($34),b($14),b($f5) dta b($d8),b($bd),b($a4),b($8d) dta b($77),b($60),b($4e),b($38) dta b($27),b($15),b($06),b($f7) dta b($e8),b($db),b($cf),b($c3) dta b($b8),b($ac),b($a2),b($9a) dta b($90),b($88),b($7f),b($78) dta b($70),b($6a),b($64),b($5e) basshi dta b(0),b(13),b(13),b(12) dta b(11),b(11),b(10),b(10) dta b(9),b(8),b(8),b(7) dta b(7),b(7),b(6),b(6) dta b(5),b(5),b(5),b(4) dta b(4),b(4),b(4),b(3) dta b(3),b(3),b(3),b(3) dta b(2),b(2),b(2),b(2) dta b(2),b(2),b(2),b(1) dta b(1),b(1),b(1),b(1) dta b(1),b(1),b(1),b(1) dta b(1),b(1),b(1),b(0) dta b(0),b(0),b(0),b(0) dta b(0),b(0),b(0),b(0) dta b(0),b(0),b(0),b(0) dta b(0),b(0),b(0),b(0) czygrx dta d' ' pozwpt dta d' ' delay dta d' ' numptr dta d' ' poddzw dta d' ' wysdzw dta d' ' znksz dta d' ' frq dta d' ' vol1ch dta d' ' vol2ch dta d' ' adcvl1 dta d' ' adcvl2 dta d' ' adrsnl dta d' ' adrsnh dta d' ' slupy dta d' ' opad1 dta d' ' opad2 dta d' ' lopad1 dta d' ' lopad2 dta d' ' typ dta d' ' param dta d' ' pomoc1 dta d' ' pomoc2 dta d' ' czekaj dta d' ' dtyp dta d' ' ltyp dta d' ' ilperm dta d' ' aperm dta d' ' dperm dta d' ' lperm dta d' ' kolejn dta d' ' tempo dta b(0) ltempo dta b(0) pozptr dta b(0) czygrc dta b(0) przeci dta b(4),b(5),b(6),b(7) dta b(0),b(1),b(2),b(3) audtb1 dta b(4),b(2),b(0),b(0) dta b(4),b(2),b(0),b(0) audtb2 dta b(0),b(16),b(0),b(8) dta b(0),b(16),b(0),b(8) play lda czygrc beq r1-3 lda pozptr cmp #64 bcc r1 dec ltempo beq *+5 jmp sound ldx #7 lda #0 p1 sta pozwpt,x sta delay,x dex bpl p1 sta pozptr tax ldy #15 p2 lda (adrsng),y bpl p3 dey lda (adrsng),y bpl *+5 jmp stop stx addr asl @ asl @ rol addr asl @ rol addr asl @ rol addr zm0 adc #0 sta adrsng lda addr zm1 adc #0 sta adrsng+1 bcc p2-2 p3 sta numptr,x dey lda (adrsng),y sta poddzw,x inx dey bpl p2 clc lda adrsng adc #16 sta adrsng bcc *+4 inc adrsng+1 jmp sound r1 dec ltempo bpl r1-3 inc pozptr lda tempo sta ltempo ldx #7 r2 dec delay,x bmi *+5 jmp r14 ldy numptr,x zm2 lda $ffff,y sta addr zm3 lda $ffff,y sta addr+1 ldy pozwpt,x r3 lda (addr),y bne r4 jsr nparam jmp r13 r4 cmp #$40 bcs r5 adc poddzw,x sta wysdzw,x jsr nparam ldy numdzw,x jsr dzwiek jmp r13 r5 bne r8 iny inc pozwpt,x lda (addr),y bpl r6 sta bajt jsr nparam lda bajt r6 and #$7f bne r7 lda #64 sta pozptr bne r13 r7 sta tempo sta ltempo bne r13 r8 cmp #$80 bcs r11 and #$3f adc poddzw,x sta wysdzw,x iny inc pozwpt,x lda (addr),y and #127 bne r9 lda #64 sta pozptr bne r10 r9 sta tempo sta ltempo r10 jsr nparam ldy numdzw,x jsr dzwiek jmp r13 r11 cmp #$c0 bcs r12 and #$3f sta numdzw,x iny inc pozwpt,x jmp r3 r12 and #$3f sta delay,x r13 inc pozwpt,x r14 dex bmi sound jmp r2 sound ldx #7 p5 lda czygrx,x beq p6 jsr graj lda audctl,x and audtb1,x beq p6 ldy #71 lda (addr),y clc adc aktwys,x sta aktwys+2,x tay lda frqtab,y sec adc pomoc1,x sta frq+2,x p6 dex bpl p5 asl maxvol asl maxvol asl maxvol asl maxvol inx stx addr stx addr+1 ldx #7 p9 txa tay lda vol1ch,y bne p10 ldy przeci,x lda vol2ch,y bne p10 txa tay lda #0 p10 sta byte tya sta kanal,x lda frq,y sta freqen,x lda audctl,y sta bajt ora addr+1 sta addr+1 lda bajt and audtb1,x beq p11 lda frq+2,y sta freqen+2,x p11 lda bajt and audtb2,x beq p12 lda aktwys,y and #$3f tay iny sty addr lda basshi-1,y sta freqen,x jmp p13 p12 ldy addr beq p13 lda basslo-1,y sta freqen,x lda #0 sta addr p13 lda byte ora maxvol tay lda voltab,y ldy kanal,x ora znksz,y sta volume,x cpx #4 bne p14 lda addr+1 sta aud2 lda #0 sta addr+1 p14 dex bpl p9 lsr maxvol lsr maxvol lsr maxvol lsr maxvol lda addr+1 ldx #3 stx $d21f stx $d20f ldx freqen+4 ldy freqen stx $d210 sty $d200 ldx volume+4 ldy volume stx $d211 sty $d201 ldx freqen+5 ldy freqen+1 stx $d212 sty $d202 ldx volume+5 ldy volume+1 stx $d213 sty $d203 ldx freqen+6 ldy freqen+2 stx $d214 sty $d204 ldx volume+6 ldy volume+2 stx $d215 sty $d205 ldx freqen+7 ldy freqen+3 stx $d216 sty $d206 ldx volume+7 ldy volume+3 stx $d217 sty $d207 sta aud1 ldx aud2 stx $d218 sta $d208 rts graj lda adrsnl,x sta addr lda adrsnh,x sta addr+1 ldy slupy,x cpy #63 beq n6 inc slupy,x inc slupy,x inc slupy,x lda (addr),y and #$f0 sta znksz,x lda (addr),y and #15 sec sbc adcvl1,x bpl n1 lda #0 n1 sta vol1ch,x iny lda (addr),y and #15 sec sbc adcvl2,x bpl n2 lda #0 n2 sta vol2ch,x lda (addr),y and #$f0 beq n8 bpl n3 ldy #73 lda (addr),y ldy slupy,x dey dey bpl n4 n3 lda #0 n4 sta audctl,x lda (addr),y and #$70 beq n9 lsr @ lsr @ sta n5+1 lda #0 sta pomoc1,x iny lda (addr),y n5 bcc * nop nop nop nop jmp a1 nop jmp a2 nop jmp a3 nop jmp a4 nop jmp a5 nop jmp a6 nop jmp a7 n6 lda opad1,x beq n7 dec lopad1,x bne n7 sta lopad1,x lda vol1ch,x and #15 beq n7 dec vol1ch,x n7 lda opad2,x beq n8 dec lopad2,x bne n8 sta lopad2,x lda vol2ch,x and #15 beq n8 dec vol2ch,x n8 ldy #72 lda (addr),y sta audctl,x n9 lda aperm,x clc adc #63 tay lda (addr),y adc wysdzw,x sta aktwys,x tay lda frqtab,y sta frq,x dec lperm,x bpl m1 lda dperm,x sta lperm,x lda kolejn,x beq m6 clc adc aperm,x sta aperm,x beq m7 cmp ilperm,x bne m1 lda #$fe m7 clc adc #1 sta kolejn,x bne m1 m6 inc aperm,x lda ilperm,x cmp aperm,x bcs m1 lda #0 sta aperm,x m1 lda czekaj,x beq m2 dec czekaj,x rts m2 lda pomoc2,x sta byte lda param,x sta bajt jsr m4 dec ltyp,x bpl m4-1 lda byte sta pomoc2,x lda bajt sta param,x lda dtyp,x sta ltyp,x rts m4 lda typ,x sta m5+1 m5 bpl * jmp typ0 nop jmp typ1 nop jmp typ2 nop jmp typ3 nop jmp typ4 nop jmp typ5 nop jmp typ6 nop jmp typ7 typ1 lda byte inc byte and #3 lsr @ bcc t2 bne typ6 lda bajt t1 sta pomoc1,x clc adc frq,x sta frq,x typ0 rts t2 lda #0 sta pomoc1,x rts typ2 jsr t5 jmp t1 typ3 jsr t5 clc adc aktwys,x jmp a5 typ4 lda byte sta pomoc1,x clc adc frq,x t3 sta frq,x lda byte clc adc bajt sta byte rts typ5 lda aktwys,x sec sbc byte sta aktwys,x tay lda frqtab,y jmp t3 typ6 lda frq,x sec sbc bajt sta frq,x sec lda #0 sbc bajt sta pomoc1,x rts typ7 lda ltyp,x bne typ0 lda bajt bpl t4 lda vol2ch,x beq typ0 lda vol1ch,x cmp #15 beq typ0 inc vol1ch,x rts t4 lda vol1ch,x beq typ0 lda vol2ch,x cmp #15 beq typ0 inc vol2ch,x rts t5 ldy byte lda bajt bmi t6 iny iny t6 dey tya sta byte cmp bajt bne t7 lda bajt eor #$ff sta bajt t7 tya rts a2 adc frq,x a1 sta frq,x rts a3 ldy wysdzw,x adc frqtab,y sta frq,x tya sta aktwys,x rts a4 and $d20a sta frq,x rts a7 adc wysdzw,x a5 sta aktwys,x tay lda frqtab,y sta frq,x rts a6 sta aktwys,x tay lda frq,x adc frqtab,y sta frq,x rts nparam iny inc pozwpt,x lda (addr),y lsr @ lsr @ lsr @ lsr @ sta adcvl1,x lda (addr),y and #15 sta adcvl2,x rts songx jsr stop ldy #15 zm4 lda #0 sta adrsng zm5 lda #0 sta adrsng+1 d5 txa beq inic d3 lda (adrsng),y bpl d4 dex d4 clc lda adrsng adc #16 sta adrsng bcc d5 inc adrsng+1 bcs d5 playx jsr stop lda #0 sta addr txa asl @ asl @ rol addr asl @ rol addr asl @ rol addr zm6 adc #0 sta adrsng lda addr zm7 adc #0 sta adrsng+1 inic lda #64 sta pozptr lda #1 sta ltempo sta czygrc rts init cmp #$10 bcc songx cmp #$20 bcc playx cmp #$30 bcs *+5 jmp d2 cmp #$40 bcs i1 txa and #15 beq i1-1 sta tempo rts i1 cmp #$50 bcc stop cmp #$60 bcs i2 lda #0 i3 sta czygrc rts i2 cmp #$70 bcc i3 lda #1 sta ltempo lda #64 sta pozptr sty addr stx addr+1 ldy #30 lda (addr),y sta tempo lda addr clc adc #32 sta zm8+1 bcc *+3 inx stx zm8+2 clc adc #$40 sta zm9+1 bcc *+3 inx stx zm9+2 clc adc #$40 sta zm2+1 bcc *+3 inx stx zm2+2 clc adc #$80 sta zm3+1 bcc *+3 inx stx zm3+2 clc adc #$80 sta adrsng sta zm0+1 sta zm4+1 sta zm6+1 bcc *+3 inx stx adrsng+1 stx zm1+1 stx zm5+1 stx zm7+1 stop ldy #7 lda #0 sta czygrc d9 sta $d200,y sta $d210,y sta volume,y sta vol1ch,y sta vol2ch,y sta audctl,y sta czygrx,y dey bpl d9 sta $d208 sta $d218 sta aud1 sta aud2 rts d1 sta vol1ch,x sta vol2ch,x sta audctl,x lda wysdzw,x sta aktwys,x rts d0 tya eor #$f0 lsr @ lsr @ lsr @ lsr @ sta adcvl1,x tya and #15 eor #15 sta adcvl2,x rts d2 and #7 sta addr txa ldx addr and #$3f beq d0 sta wysdzw,x dzwiek lda #0 sta czygrx,x zm8 lda $ffff,y sta adrsnl,x sta addr zm9 lda $ffff,y sta adrsnh,x sta addr+1 ora addr beq d1 ldy #74 lda (addr),y sta opad1,x sta lopad1,x iny lda (addr),y sta opad2,x sta lopad2,x iny lda (addr),y and #$70 lsr @ lsr @ sta typ,x lda (addr),y and #15 sta param,x lda (addr),y bpl d7 lda param,x eor #$ff clc adc #1 sta param,x d7 iny lda (addr),y sta czekaj,x iny lda (addr),y and #$3f sta dtyp,x sta ltyp,x iny lda (addr),y and #$80 beq d8 lda #1 d8 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 dey lda (addr),y and #$c0 clc adc wysdzw,x sta wysdzw,x sta aktwys,x tay lda frqtab,y sta frq,x lda #0 sta slupy,x sta pomoc1,x sta pomoc2,x sta aperm,x lda #1 sta czygrx,x rts endplr end