;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ;Û Û ;Û SOUND PROCEDURES Û ;Û Û ;Û These procedures are not optimized. Û ;Û Û ;Û NOTE: '&' - this char can use only with PROC/PROCS and MACRO. Û ;Û Û ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ;----------------------------------------------------------------------------- ; Generate sound. ; in: A - channel. ; (34) - voice. ; (33) - tone. ; (32) - loud. ;----------------------------------------------------------------------------- Sound PROC A,(34),(33),(32) ldx 34 and #3 asl @ tay lda #0 STA 53768 lda #3 sta 53775 txa sta 53760,y lda 32 and #%00001111 sta 32 lda 33 asl @ asl @ asl @ asl @ clc adc 32 sta 53761,y rts ENDP ;----------------------------------------------------------------------------- ; Play the CMC file. ; in: YX - address. ;----------------------------------------------------------------------------- PlayCMC PROC YX ; CMC Player by MP's ; (c) 1992 Tajemnice ATARI stx _adrcmc2_ sty _adrcmc2_+1 ldy #7 lda (_adrcmc2_),y cmp #227 ;c bne _errcmc_ iny lda (_adrcmc2_),y cmp #237 ;m bne _errcmc_ iny lda (_adrcmc2_),y cmp #227 ;c bne _errcmc_ ldy #2 lda (_adrcmc2_),y sta _adrcmc1_ iny lda (_adrcmc2_),y STA _adrcmc1_+1 lda _adrcmc2_ clc adc #6 sta _adrcmc2_ lda _adrcmc2_+1 adc #0 sta _adrcmc2_+1 lda _adrcmc2_ clc adc #$14 sta _lsbcmc_ lda _adrcmc2_+1 adc #0 sta _lsbcmc_+1 lda _adrcmc2_ clc adc #$54 sta _msbcmc_ lda _adrcmc2_+1 ADC #0 sta _msbcmc_+1 jsr _reloc_cmc_ ldx _adrcmc2_ ldy _adrcmc2_+1 ;zachowaj stary adres przerwania lda 546 sta _hlp_w_+1 lda 547 sta _hlp_w_+2 ;inicjalizuj lda #$70 jsr _m_init_ ;graj muzyk© lda #$00 tax jsr _m_init_ ;inicjalizuj nowe przerwanie ldy <_play_cmc_ ldx >_play_cmc_ LDA #6 jmp 58460 _play_cmc_: jsr _m_tact_ _hlp_w_: jmp $FFFF ;------------------ ; SYZYGY #6 : ; Relokator CMC : ;------------------ _reloc_cmc_: ldy #0 lda (_lsbcmc_),y cmp #$ff bne _k1_ lda (_msbcmc_),y cmp #$ff beq _k3_ lda (_lsbcmc_),y _k1_: sec sbc _adrcmc1_ STA (_lsbcmc_),Y bcs _k2_ lda (_msbcmc_),y tax dex txa sta (_msbcmc_),y _k2_: lda (_msbcmc_),y sec sbc _adrcmc1_+1 clc adc _adrcmc2_+1 sta (_msbcmc_),y lda (_lsbcmc_),y clc adc _adrcmc2_ sta (_lsbcmc_),y bcc _k3_ lda (_msbcmc_),y tax inx txa STA (_msbcmc_),Y _k3_: iny cpy #$40 bne _reloc_cmc_+2 rts _errcmc_: COLOR 1 POSITION 0,0 PRINTE 'ERROR: THIS IS NOT THE CMC FILE!' jmp * _m_init_=_player_cmc_+3 _m_tact_=_player_cmc_+6 _adrcmc1_=32 ;pocz.adr.muz.(nagˆ¢wek) _adrcmc2_=34 ;gdzie relokowa† _lsbcmc_=36 ;(2) _msbcmc_=38 ;(2) ;*---------------------------* ;* cmc player v 2.1 * ;* by Marcin Lewandowski * ;* based on cmc player v 2.0 * ;* by Janusz Pelc * ;*---------------------------* ;*--- strona 0 _addr_ = 61 ;(2) _word_ = 63 ;(2) ;*--- skoki _player_cmc_: jmp _basic_ jmp _init_ jmp _play_ ;*--- dane _volume_ db s' ' _czest_ db s' ' _numins_ db s' ' db c' cmc player v 2.1 ' _frq_ db s' ' _znieks_ DB S' ' _audc_ db b(0) _czest1_ db s' ' _czest2_ db s' ' _czest3_ db s' ' _zniek_ db s' ' _count1_ db b($ff),b($ff),b($ff) _count2_ db s' ' _lopad_ db s' ' _numptr_ db s' ' _poswpt_ db s' ' _ilewol_ db s' ' _czygrx_ db b($80),b($80),b($80) _czygrc_ db b($80) _dana0_ db s' ' _dana1_ db s' ' _dana2_ db s' ' _dana3_ db s' ' _dana4_ db s' ' _dana5_ db s' ' _ladr_ DB S' ' _hadr_ db s' ' _posptr_ db b(0) _possng_ db b(0) _pocrep_ db b(0) _konrep_ db b(0) _ilrep_ db b(0) _tmpo_ db b(0) _ltemp_ db b(0) _b1_ db b(0) _b2_ db b(0) _b3_ db b(0) _czygr_ db b(0) _adrmus_ db a(0) _adradr_ db a(0) _adrsng_ db 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 txa and #$3f sta _posptr_ _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_ bne _p3_ lda $225 cmp >_p8_ beq _p1_ _p3_: lda $224 sta _p9_+1 lda $225 sta _p9_+2 lda <_p8_ sta $224 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 lda $225 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_ db a(_graj_) db a(_grajx_) db a(_instr_) db a(_tempo_) db a(_skoncz_) db a(_przer_) db a(_kont_) db a(_inic_) _tab2_ db a(_stop_) db a(_jump_) db a(_up_) db a(_down_) DB A(_temp_) db a(_rep_) db a(_break_) _tab3_ db a(_tab5_) db a(_tab6_) db a(_tab7_) _tab4_ db b($80),b($a0) db b($20),b($40) _tab5_ db b($ff),b($f1),b($e4),b($d7) db b($cb),b($c0),b($b5),b($aa) db b($a1),b($98),b($8f),b($87) db b($7f),b($78),b($72),b($6b) db b($65),b($5f),b($5a),b($55) db b($50),b($4b),b($47),b($43) db b($3f),b($3c),b($38),b($35) db b($32),b($2f),b($2c),b($2a) db b($27),b($25),b($23),b($21) db b($1f),b($1d),b($1c),b($1a) db b($18),b($17),b($16),b($14) DB B($13),B($12),B($11),B($10) db b($0f),b($0e),b($0d),b($0c) db b($0b),b($0a),b($09),b($08) db b($07),b($06),b($05),b($04) db b($03),b($02),b($01),b($00) db b($00) _tab6_ db b($00),b($00),b($00),b($00) db b($f2),b($e9),b($da),b($ce) db b($bf),b($b6),b($aa),b($a1) db b($98),b($8f),b($89),b($80) db b($7a),b($71),b($6b),b($65) db b($5f),b($00),b($56),b($50) db b($67),b($60),b($5a),b($55) db b($51),b($4c),b($48),b($43) db b($3f),b($3d),b($39),b($34) db b($33),b($39),b($2d),b($2a) db b($28),b($25),b($24),b($21) db b($1f),b($1e),b($00),b($00) db b($0f),b($0e),b($0d),b($0c) db b($0b),b($0a),b($09),b($08) db b($07),b($06),b($05),b($04) DB B($03),B($02),B($01),B($00) db b($00) _tab7_ db a($b38),a($a8c),a($a00),a($96a) db a($8e8),a($86a),a($7ef),a($780) db a($708),a($6ae),a($646),a($5e6) db a($595),a($541),a($4f6),a($4b0) db a($46e),a($430),a($3f6),a($3bb) db a($384),a($352),a($322),a($2f4) db a($2c8),a($2a0),a($27a),a($255) db a($234),a($214),a($1f5),a($1d8) db a($1bd),a($1a4),a($18d),a($177) db a($160),a($14e),a($138),a($127) db a($115),a($106),a($0f7),a($0e8) db a($0db),a($0cf),a($0c3),a($0b8) db a($0ac),a($0a2),a($09a),a($090) db a($088),a($07f),a($078),a($070) db a($06a),a($064),a($05e),a($057) db a($052),a($032),a($00a) _tab8_ db b($00),b($01),b($02),b($83) db b($00),b($01),b($02),b($03) DB B($01),B($00),B($02),B($83) db b($01),b($00),b($02),b($03) db b($01),b($02),b($80),b($03) _tab9_ db b($80),b($40),b($20),b($10) db b($08),b($04),b($02),b($01) _tab10_ db b(3),b(3),b(3),b(3) db b(7),b($b),b($f),b($13) ;*--- koniec ENDP ;----------------------------------------------------------------------------- ; Stop playing of the CMC file. ;----------------------------------------------------------------------------- StopCMC PROC lda _czygr_ bne _stopcmc1_ rts _stopcmc1_: ldy _hlp_w_+1 ldx _hlp_w_+2 lda #6 jsr 58460 lda #$40 jmp _m_init_ IfNDef PlayCMC PlayCMC $FFFF endndef ENDP ;----------------------------------------------------------------------------- ; Set the tempo of the CMC file. ; in: X - tempo. ;----------------------------------------------------------------------------- TempoCMC PROC X lda #$30 jmp _m_init_ ifndef PlayCMC PlayCMC $FFFF endndef ENDP ;----------------------------------------------------------------------------- ; Continue playing after StopCMC. ;----------------------------------------------------------------------------- ContCMC PROC lda 546 sta _hlp_w_+1 lda 547 STA _hlp_w_+2 ldy <_play_cmc_ ldx >_play_cmc_ lda #6 jsr 58460 lda #$60 jmp _m_init_ ifndef PlayCMC PlayCMC $FFFF endndef ENDP ;----------------------------------------------------------------------------- ; Set the position of playing. ; in: X - position. ;----------------------------------------------------------------------------- PosCMC PROC X lda #$10 jmp _m_init_ ifndef PlayCMC PlayCMC $FFFF endndef ENDP ;----------------------------------------------------------------------------- ; Set the frequency of first generator. ;----------------------------------------------------------------------------- AudF1 MACRO freq lda #freq sta $D200 ;set AUDF1 ENDM ;----------------------------------------------------------------------------- ; Set the frequency of second generator. ;----------------------------------------------------------------------------- AudF2 MACRO freq lda #freq sta $D202 ;set AUDF2 ENDM ;----------------------------------------------------------------------------- ; Set the frequency of third generator. ;----------------------------------------------------------------------------- AudF3 MACRO freq lda #freq sta $D204 ;set AUDF3 ENDM ;----------------------------------------------------------------------------- ; Set the frequency of fourth generator. ;----------------------------------------------------------------------------- AudF4 MACRO freq lda #freq sta $D206 ;set AUDF4 ENDM ;----------------------------------------------------------------------------- ; Set the tone and the loud of first generator. ;----------------------------------------------------------------------------- AudC1 MACRO tone_loud lda #tone_loud sta $D201 ;set AUDC1 ENDM ;----------------------------------------------------------------------------- ; Set the tone and the loud of second generator. ;----------------------------------------------------------------------------- AudC2 MACRO tone_loud lda #tone_loud sta $D203 ;set AUDC2 ENDM ;----------------------------------------------------------------------------- ; Set the tone and the loud of third generator. ;----------------------------------------------------------------------------- AudC3 MACRO tone_loud lda #tone_loud sta $D205 ;set AUDC3 ENDM ;----------------------------------------------------------------------------- ; Set the tone and the loud of fourth generator. ;----------------------------------------------------------------------------- AudC4 MACRO tone_loud lda #tone_loud sta $D207 ;set AUDC4 ENDM ;----------------------------------------------------------------------------- ; Set the control register. ;----------------------------------------------------------------------------- AudCTL MACRO option lda #opton sta $D208 ;set AUDCTL ENDM ;----------------------------------------------------------------------------- ; Play the SMP file. ; in: YX - address. ;----------------------------------------------------------------------------- PlaySMP PROC YX stx 32 sty 33 ldy #0 lda (32),y cmp #'S' bne _error_smp_ iny lda (32),y cmp #'M' bne _error_smp_ iny lda (32),y cmp #'P' bne _error_smp_ ldy #3+13+2 lda (32),y lda #0 sta $D206 ;audf4 lda #%10101010 sta _high_smp_ ;ustaw bufor na dane digital'a lda 32 add #3+13+2+1 ;dˆugo˜† nagˆ¢wka sta _init_sample_+1 lda 33 adc #0 sta _init_sample_+2 ; sei ldx <_init_sample_ ;Set address ldy >_init_sample_ stx 532 sty 533 lda $D208 ;64 kHz and #%11111110 sta $D208 ;zzz lda #0 sta $D40E sta $D400 ; lda 53774 ;Enable ; ora #%00000100 ; sta 53774 ; cli lda #196 sta 16 sta 53774 rts _error_smp_: COLOR 1 POSITION 0,0 PRINTE 'THIS IS NOT THE SMP FILE !' jmp * ;procedura odgrywa digital'a na audc4 _init_sample_: lda $FFFF beq _plays3_ bit _high_smp_ bvc _plays2_ ora #$F0 sta $D207 ;audc4 clc ROL _high_smp_ inc _init_sample_+1 bne _plays1_ inc _init_sample_+2 _plays1_: ; jmp _init_sample_ pla rti _plays2_: LSR @ lsr @ lsr @ lsr @ ora #$F0 sta $D207 ;audc4 sec rol _high_smp_ ; jmp _init_sample_ pla rti _plays3_: lda 53774 and #%11111011 sta 53774 pla rti ;zmienne _high_smp_ db 0 ENDP