*---------------------------* * cmc player v 2.1 * * by Marcin Lewandowski * * based on cmc player v 2.0 * * by Janusz Pelc * *---------------------------* org $0500 *--- strona 0 addr equ $fc word equ $fe *--- skoki jmp basic jmp init jmp play *--- dane volume dta d' ' czest dta d' ' numins dta d' ' dta c' cmc player v 2.1 '* frq dta d' ' znieks dta d' ' audc dta b(0) czest1 dta d' ' czest2 dta d' ' czest3 dta d' ' zniek dta d' ' count1 dta b($ff),b($ff),b($ff) count2 dta d' ' lopad dta d' ' numptr dta d' ' poswpt dta d' ' ilewol dta d' ' czygrx dta b($80),b($80),b($80) czygrc dta b($80) dana0 dta d' ' dana1 dta d' ' dana2 dta d' ' dana3 dta d' ' dana4 dta d' ' dana5 dta d' ' ladr dta d' ' hadr dta d' ' posptr dta b(0) possng dta b(0) pocrep dta b(0) konrep dta b(0) ilrep dta b(0) tmpo dta b(0) ltemp dta b(0) b1 dta b(0) b2 dta b(0) b3 dta b(0) czygr dta b(0) adrmus dta a(0) adradr dta a(0) adrsng dta a(0) *--- init init sta b1 stx b2 sty b3 and #$70 lsr @ lsr @ lsr @ tax lda tab1,x sta zm1+1 lda tab1+1,x sta zm1+2 lda #3 sta $d20f cld lda word pha lda word+1 pha ldy b3 ldx b2 lda b1 zm1 jsr graj pla sta word+1 pla sta word rts graj lda adrsng sta word lda adrsng+1 sta word+1 ldy #0 txa beq grajx l1 lda (word),y cmp #$8f beq l2 cmp #$ef bne l3 l2 dex bne l3 iny cpy #$54 bcs l4 tya tax bpl grajx l3 iny cpy #$54 bcc l1 l4 rts grajx stx possng jsr skoncz lda #0 ldx #9 l5 sta poswpt,x dex bpl l5 sta posptr lda #1 sta czygr lda #$ff sta konrep lda adrmus sta word lda adrmus+1 sta word+1 ldy #$13 lda (word),y tax lda adrsng sta word lda adrsng+1 sta word+1 ldy possng l6 lda (word),y cmp #$cf bne l7 tya clc adc #$55 tay lda (word),y bmi l8 tax jmp l8 l7 cmp #$8f beq l8 cmp #$ef beq l8 dey bpl l6 l8 stx tmpo stx ltemp rts tempo and #$f beq l8 stx d0+1 stx d1+1 stx d2+1 sty d0+2 sty d1+2 sty d2+2 rts inic stx adrmus stx word sty adrmus+1 sty word+1 clc txa adc #$14 sta adradr tya adc #0 sta adradr+1 stx adrsng iny iny sty adrsng+1 ldy #$13 lda (word),y sta tmpo sta ltemp skoncz ldx #8 l9 lda #0 sta czygr sta $d200,x cpx #3 bcs l10 sta volume,x lda #$ff sta count1,x l10 dex bpl l9 przer lda #$80 l11 ldx #3 l12 sta czygrx,x dex bpl l12 l13 rts kont lda #1 sta czygr lda #0 beq l11 instr and #3 cmp #3 beq l13 cpx #$40 bcs l13 cpy #26 bcs l13 tax lda #$80 sta czygrx,x inst lda #0 sta count1,x sta count2,x sta lopad,x lda b2 sta czest,x lda b3 asl @ asl @ asl @ sta word clc lda adrmus adc #$30 pha lda adrmus+1 adc #1 tay pla clc adc word sta ladr,x tya adc #0 sta hadr,x clc lda adrmus adc #$94 sta word lda adrmus+1 adc #0 sta word+1 lda b3 asl @ adc b3 asl @ tay lda (word),y sta dana0,x iny lda (word),y sta dana1,x and #7 sta b1 iny lda (word),y sta dana2,x iny lda (word),y sta dana3,x iny lda (word),y sta dana4,x iny lda (word),y sta dana5,x ldy #0 lda b1 cmp #3 bne l14 ldy #2 l14 cmp #7 bne l15 ldy #4 l15 lda tab3,y sta word lda tab3+1,y sta word+1 lda dana2,x lsr @ lsr @ lsr @ lsr @ clc adc b2 sta b2 sta zm2+1 tay lda b1 cmp #7 bne l16 tya asl @ tay lda (word),y sta czest1,x iny sty b2 jmp l17 l16 lda (word),y sta czest1,x lda dana2,x and #$f clc adc b2 sta b2 l17 ldy b2 lda b1 cmp #5 php lda (word),y plp beq l18 cmp czest1,x bne l18 sec sbc #1 l18 sta czest2,x lda dana0,x pha and #3 tay lda tab4,y sta zniek,x pla lsr @ lsr @ lsr @ lsr @ ldy #$3e cmp #$f beq l19 ldy #$37 cmp #$e beq l19 ldy #$30 cmp #$d beq l19 clc zm2 adc #0 tay l19 lda tab5,y sta czest3,x rts *--- play play cld lda addr pha lda addr+1 pha lda word pha lda word+1 pha lda czygr bne g1 jmp end g1 lda czygrc beq g2 jmp dal3 g2 lda tmpo cmp ltemp beq g3 jmp dal2 g3 lda posptr beq g4 jmp dal1 g4 ldx #2 g5 ldy czygrx,x bmi g6 sta czygrx,x g6 sta poswpt,x dex bpl g5 lda adrsng sta addr lda adrsng+1 sta addr+1 ldy possng sty word g7 cpy konrep bne g8 lda ilrep beq g8 lda possng ldy pocrep sty possng dec ilrep bne g7 sta possng tay bpl g7 g8 ldx #0 g9 lda (addr),y cmp #$fe bne g10 ldy possng iny cpy word beq g11 sty possng jmp g7 g10 sta numptr,x clc tya adc #$55 tay inx cpx #3 bcc g9 ldy possng lda (addr),y bpl dal1 cmp #$ff beq dal1 lsr @ lsr @ lsr @ and #$e tax lda tab2,x sta zm3+1 lda tab2+1,x sta zm3+2 lda numptr+1 sta word+1 zm3 jsr stop sty possng cpy #$55 bcs g11 cpy word bne g7 g11 ldy word sty possng jmp end stop jsr przer g12 ldy #$ff rts jump bmi g12 tay rts up bmi g12 sec tya sbc word+1 tay rts down bmi g12 clc tya adc word+1 tay rts temp bmi g12 sta tmpo sta ltemp iny rts rep bmi g12 lda numptr+2 bmi g12 sta ilrep iny sty pocrep clc tya adc word+1 sta konrep rts break dey bmi g13 lda (addr),y cmp #$8f beq g13 cmp #$ef bne break g13 iny rts dal1 ldx #2 v1 lda ilewol,x beq v2 dec ilewol,x bpl v7 v2 lda czygrx,x bne v7 ldy numptr,x cpy #$40 bcs v7 lda adradr sta addr lda adradr+1 sta addr+1 lda (addr),y sta word clc tya adc #$40 tay lda (addr),y sta word+1 and word cmp #$ff beq v7 v3 ldy poswpt,x lda (word),y and #$c0 bne v4 lda (word),y and #$3f sta numins,x inc poswpt,x bpl v3 v4 cmp #$40 bne v5 lda (word),y and #$3f sta b2 lda numins,x sta b3 jsr inst jmp v6 v5 cmp #$80 bne v7 lda (word),y and #$3f sta ilewol,x v6 inc poswpt,x v7 dex bpl v1 ldx posptr inx ift CM3 cpx #$30 scc:ldx #0 stx posptr els txa and #$3f sta posptr eif dal2 dec ltemp bne dal3 lda tmpo sta ltemp lda posptr bne dal3 inc possng dal3 ldy czest2 lda dana1 and #7 cmp #5 beq a1 cmp #6 bne a2 a1 dey a2 sty frq+3 ldy #0 cmp #5 beq a3 cmp #6 bne a4 a3 ldy #2 a4 cmp #7 bne a5 ldy #$28 a5 sty audc ldx #2 loop lda dana1,x and #$e0 sta znieks,x lda ladr,x sta addr lda hadr,x sta addr+1 lda count1,x cmp #$ff beq y4 cmp #$f bne y2 lda lopad,x beq y4 dec lopad,x lda lopad,x bne y4 ldy volume,x beq y1 dey y1 tya sta volume,x lda dana3,x sta lopad,x jmp y4 y2 lda count1,x lsr @ tay lda (addr),y bcc y3 lsr @ lsr @ lsr @ lsr @ y3 and #$f sta volume,x y4 ldy czest1,x lda dana1,x and #7 cmp #1 bne y6 dey tya iny cmp czest2,x php lda #1 plp bne y5 asl @ asl @ y5 and count2,x beq y6 ldy czest2,x cpy #$ff bne y6 lda #0 sta volume,x y6 tya sta frq,x lda #1 sta b1 lda count1,x cmp #$f beq y9 and #7 tay lda tab9,y sta word lda count1,x and #8 php txa plp clc beq y7 adc #3 y7 tay lda dana4,y and word beq y9 lda czest3,x sta frq,x stx b1 dex bpl y8 sta frq+3 lda #0 sta audc y8 inx lda zniek,x sta znieks,x y9 lda count1,x and #$f cmp #$f beq y10 inc count1,x lda count1,x cmp #$f bne y10 lda dana3,x sta lopad,x y10 lda czygrx,x bpl y11 lda volume,x bne y11 lda #$40 sta czygrx,x y11 inc count2,x ldy #0 lda dana1,x lsr @ lsr @ lsr @ lsr @ bcc y12 dey y12 lsr @ bcc y13 iny y13 clc tya adc czest1,x sta czest1,x lda czest2,x cmp #$ff bne y14 ldy #0 y14 clc tya adc czest2,x sta czest2,x dex bmi x1 jmp loop x1 lda znieks sta znieks+3 lda dana1 and #7 tax ldy #3 lda b1 beq x2 ldy tab10,x x2 tya pha lda tab8,y php and #$7f tax tya and #3 asl @ tay lda frq,x d0 sta $d200,y iny lda volume,x cpx #3 bne x3 lda volume x3 ora znieks,x plp bpl d1 lda #0 d1 sta $d200,y pla tay dey and #3 bne x2 ldy #8 lda audc d2 sta $d200,y clc end pla sta word+1 pla sta word pla sta addr+1 pla sta addr rts *--- basic basic pla tax beq p6 cmp #2 beq p2 p1 pla pla dex bne p1 rts p2 lda $14 cmp $14 beq *-2 lda $224 cmp p8 beq p1 p3 lda $224 sta p9+1 lda $225 sta p9+2 lda p8 sta $225 pla pla beq p4 sec sbc #1 p4 sta p5+1 pla tay pla tax lda #$70 jsr init lda #0 p5 ldx #0 jmp init p6 lda $14 cmp $14 beq *-2 lda $224 cmp p8 bne p2-1 p7 lda p9+1 sta $224 lda p9+2 sta $225 lda #$40 jmp init p8 jsr play bcc p9 jsr p7 p9 jmp $ffff *--- tablice tab1 dta a(graj) dta a(grajx) dta a(instr) dta a(tempo) dta a(skoncz) dta a(przer) dta a(kont) dta a(inic) tab2 dta a(stop) dta a(jump) dta a(up) dta a(down) dta a(temp) dta a(rep) dta a(break) tab3 dta a(tab5) dta a(tab6) dta a(tab7) tab4 dta b($80),b($a0) dta b($20),b($40) tab5 dta b($ff),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($0f),b($0e),b($0d),b($0c) dta b($0b),b($0a),b($09),b($08) dta b($07),b($06),b($05),b($04) dta b($03),b($02),b($01),b($00) dta b($00) tab6 dta b($00),b($00),b($00),b($00) dta b($f2),b($e9),b($da),b($ce) dta b($bf),b($b6),b($aa),b($a1) dta b($98),b($8f),b($89),b($80) dta b($7a),b($71),b($6b),b($65) dta b($5f),b($00),b($56),b($50) dta b($67),b($60),b($5a),b($55) dta b($51),b($4c),b($48),b($43) dta b($3f),b($3d),b($39),b($34) dta b($33),b($39),b($2d),b($2a) dta b($28),b($25),b($24),b($21) dta b($1f),b($1e),b($00),b($00) dta b($0f),b($0e),b($0d),b($0c) dta b($0b),b($0a),b($09),b($08) dta b($07),b($06),b($05),b($04) dta b($03),b($02),b($01),b($00) dta b($00) tab7 dta a($b38),a($a8c),a($a00),a($96a) dta a($8e8),a($86a),a($7ef),a($780) dta a($708),a($6ae),a($646),a($5e6) dta a($595),a($541),a($4f6),a($4b0) dta a($46e),a($430),a($3f6),a($3bb) dta a($384),a($352),a($322),a($2f4) dta a($2c8),a($2a0),a($27a),a($255) dta a($234),a($214),a($1f5),a($1d8) dta a($1bd),a($1a4),a($18d),a($177) dta a($160),a($14e),a($138),a($127) dta a($115),a($106),a($0f7),a($0e8) dta a($0db),a($0cf),a($0c3),a($0b8) dta a($0ac),a($0a2),a($09a),a($090) dta a($088),a($07f),a($078),a($070) dta a($06a),a($064),a($05e),a($057) dta a($052),a($032),a($00a) tab8 dta b($00),b($01),b($02),b($83) dta b($00),b($01),b($02),b($03) dta b($01),b($00),b($02),b($83) dta b($01),b($00),b($02),b($03) dta b($01),b($02),b($80),b($03) tab9 dta b($80),b($40),b($20),b($10) dta b($08),b($04),b($02),b($01) tab10 dta b(3),b(3),b(3),b(3) dta b(7),b($b),b($f),b($13) *--- koniec end