;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
;Û                                                                           Û
;Û                              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
