;*---------------* ;* TMC Player * ;*Jaskier/Taquart* ;*---------------* _byte_ EQU 32 _bajt_ EQU 33 _addrtmc_ EQU 34 ;(2) _adrsng_ EQU 36 ;(2) player = * JMP _inittmc_ JMP _playtmc_ JMP _soundtmc_ _maxvol_ DB B(15) _volume_ DB S' ' _freqen_ DB S' ' _kanal_ DB S' ' _aktwys_ DB S' ' _numdzw_ DB S' ' _audctl_ DB S' ' _aud1_ DB B(0) _aud2_ DB B(0) _voltab_: DB S' ' DB S' !!!!!!!!' DB S' !!!!!!!!""""' DB s' !!!!!"""""###' DB s' !!!!""""####$$' DB s' !!!"""###$$$%%' DB S' !!"""##$$$%%&&' DB S' !!""##$$%%&&',39,39,39,39 DB S' !!""##$$%%&&',39,39,39,39,'(' DB S' !!""#$$%%&',39,39,39,39,'(()' DB S' !!"##$%%&',39,39,39,39,'())*' DB S' !!"#$$%&',39,39,39,39,'()**+' DB S' !""#$%&&',39,39,'()**+,' DB S' !"##$%&',39,39,'()**+,-' DB S' !"#$%&',39,39,39,39,'()*+,-.' DB S' !"#$%&',39,39,'()*+,-./' _frqtab_: DB B(0),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(15),b(14),b(13),b(12) db b(11),b(10),b(9),b(8) db b(7),b(6),b(5),b(4) db b(3),b(2),b(1),b(0) db b(0),b($f2),b($e6),b($da) db b($ce),b($bf),b($b6),b($aa) db b($a1),b($98),b($8f),b($89) db b($80),b($7a),b($71),b($6b) DB B($65),B($5f),B($5c),B($56) DB B($50),B($4d),B($47),B($44) db b($3e),b($3c),b($38),b($35) DB B($32),B($2f),B($2d),B($2a) DB B($28),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(15),b(14),b(13),b(12) db b(11),b(10),b(9),b(8) db b(7),b(6),b(5),b(4) DB B(3),B(2),B(1),B(0) db b(0),b($ff),b($f1),b($e4) db b($d8),b($ca),b($c0),b($b5) db b($ab),b($a2),b($99),b($8e) db b($87),b($7f),b($79),b($73) DB B($70),B($66),B($61),B($5a) db b($55),b($52),b($4b),b($48) db b($43),b($3f),b($3c),b($39) db b($37),b($33),b($30),b($2d) db b($2a),b($28),b($25),b($24) DB B($21),B($1f),B($1e),B($1c) DB B($1b),B($19),B($17),B($16) db b($15),b($13),b($12),b($11) DB B($10),B(15),B(14),B(13) DB B(12),B(11),B(10),B(9) DB B(8),B(7),B(6),B(5) db b(4),b(3),b(2),b(1) db b(0),b($f3),b($e6),b($d9) db b($cc),b($c1),b($b5),b($ad) db b($a2),b($99),b($90),b($88) DB B($80),B($79),B($72),B($6c) db b($66),b($60),b($5b),b($55) db b($51),b($4c),b($48),b($44) db b($40),b($3c),b($39),b($35) db b($32),b($2f),b($2d),b($2a) db b($28),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(15),b(14),b(13),b(12) db b(11),b(10),b(9),b(8) DB B(7),B(6),B(5),B(4) DB B(3),B(2),B(1),B(0) _basslo_: DB B(0),B($f2),B($33),B($96) DB B($e2),B($38),B($8c),B($00) db b($6a),b($e8),b($6a),b($ef) db b($80),b($08),b($ae),b($46) db b($e6),b($95),b($41),b($f6) db b($b0),b($6e),b($30),b($f6) db b($bb),b($84),b($52),b($22) DB B($f4),B($c8),B($a0),B($7a) db b($55),b($34),b($14),b($f5) db b($d8),b($bd),b($a4),b($8d) db b($77),b($60),b($4e),b($38) db b($27),b($15),b($06),b($f7) db b($e8),b($db),b($cf),b($c3) DB B($b8),B($ac),B($a2),B($9a) db b($90),b($88),b($7f),b($78) db b($70),b($6a),b($64),b($5e) _basshi_: DB B(0),B(13),B(13),B(12) DB B(11),B(11),B(10),B(10) DB B(9),B(8),B(8),B(7) DB B(7),B(7),B(6),B(6) DB B(5),B(5),B(5),B(4) DB B(4),B(4),B(4),B(3) db b(3),b(3),b(3),b(3) db b(2),b(2),b(2),b(2) db b(2),b(2),b(2),b(1) db b(1),b(1),b(1),b(1) db b(1),b(1),b(1),b(1) db b(1),b(1),b(1),b(0) db b(0),b(0),b(0),b(0) db b(0),b(0),b(0),b(0) DB B(0),B(0),B(0),B(0) DB B(0),B(0),B(0),B(0) _czygrx_ DB S' ' _pozwpt_ DB S' ' _delay_ DB S' ' _numptr_ DB S' ' _poddzw_ DB S' ' _wysdzw_ DB S' ' _znksz_ DB S' ' _frq_ DB S' ' _vol1ch_ DB S' ' _vol2ch_ DB S' ' _adcvl1_ DB S' ' _adcvl2_ DB S' ' _adrsnl_ DB S' ' _adrsnh_ DB S' ' _slupy_ DB S' ' _opad1_ DB S' ' _opad2_ DB S' ' _lopad1_ DB S' ' _lopad2_ DB S' ' _typ_ DB S' ' _param_ DB S' ' _pomoc1_ DB S' ' _pomoc2_ DB S' ' _czekaj_ DB S' ' _dtyp_ DB S' ' _ltyp_ DB S' ' _ilperm_ DB S' ' _aperm_ DB S' ' _dperm_ DB S' ' _lperm_ DB S' ' _kolejn_ DB S' ' _tempo_ DB B(0) _ltempo_ DB B(0) _pozptr_ DB B(0) _czygrc_ DB B(0) _przeci_: DB B(4),B(5),B(6),B(7) DB B(0),B(1),B(2),B(3) _audtb1_: DB B(4),B(2),B(0),B(0) DB B(4),B(2),B(0),B(0) _audtb2_: DB B(0),B(16),B(0),B(8) DB B(0),B(16),B(0),B(8) _playtmc_: LDA _czygrc_ BEQ _r1_-3 LDA _pozptr_ CMP #64 BCC _r1_ DEC _ltempo_ BEQ *+5 JMP _soundtmc_ 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 _addrtmc_ ASL @ ASL @ ROL _addrtmc_ ASL @ ROL _addrtmc_ ASL @ ROL _addrtmc_ _zm0_: ADC #0 STA _adrsng_ LDA _addrtmc_ _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 _soundtmc_ _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 _addrtmc_ _zm3_: LDA $ffff,Y STA _addrtmc_+1 LDY _pozwpt_,X _r3_: LDA (_addrtmc_),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 (_addrtmc_),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 (_addrtmc_),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 _soundtmc_ JMP _r2_ _soundtmc_: LDX #7 _p5_: LDA _czygrx_,X BEQ _p6_ JSR _graj_ LDA _audctl_,X AND _audtb1_,X BEQ _p6_ LDY #71 LDA (_addrtmc_),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 _addrtmc_ STX _addrtmc_+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 _addrtmc_+1 STA _addrtmc_+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 _addrtmc_ LDA _basshi_-1,Y STA _freqen_,X JMP _p13_ _p12_: LDY _addrtmc_ BEQ _p13_ LDA _basslo_-1,Y STA _freqen_,X LDA #0 STA _addrtmc_ _p13_: LDA _byte_ ORA _maxvol_ TAY LDA _voltab_,Y LDY _kanal_,X ORA _znksz_,Y STA _volume_,X CPX #4 BNE _p14_ LDA _addrtmc_+1 STA _aud2_ LDA #0 STA _addrtmc_+1 _p14_: DEX BPL _p9_ LSR _maxvol_ LSR _maxvol_ LSR _maxvol_ LSR _maxvol_ LDA _addrtmc_+1 _quit_: 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 _addrtmc_ LDA _adrsnh_,X STA _addrtmc_+1 LDY _slupy_,X CPY #63 BEQ _n6_ INC _slupy_,X INC _slupy_,X INC _slupy_,X LDA (_addrtmc_),Y AND #$f0 STA _znksz_,X LDA (_addrtmc_),Y AND #15 SEC SBC _adcvl1_,X BPL _n1_ LDA #0 _n1_: STA _vol1ch_,X INY LDA (_addrtmc_),Y AND #15 SEC SBC _adcvl2_,X BPL _n2_ LDA #0 _n2_: STA _vol2ch_,X LDA (_addrtmc_),Y AND #$f0 BEQ _n8_ BPL _n3_ LDY #73 LDA (_addrtmc_),Y LDY _slupy_,X DEY DEY BPL _n4_ _n3_: LDA #0 _n4_: STA _audctl_,X LDA (_addrtmc_),Y AND #$70 BEQ _n9_ LSR @ LSR @ STA _n5_+1 LDA #0 STA _pomoc1_,X INY LDA (_addrtmc_),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 (_addrtmc_),Y STA _audctl_,X _n9_: LDA _aperm_,X CLC ADC #63 TAY LDA (_addrtmc_),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 (_addrtmc_),Y LSR @ LSR @ LSR @ LSR @ STA _adcvl1_,X LDA (_addrtmc_),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 _addrtmc_ TXA ASL @ ASL @ ROL _addrtmc_ ASL @ ROL _addrtmc_ ASL @ ROL _addrtmc_ _zm6_: ADC #0 STA _adrsng_ LDA _addrtmc_ _zm7_: ADC #0 STA _adrsng_+1 _inic_: LDA #64 STA _pozptr_ LDA #1 STA _ltempo_ STA _czygrc_ RTS _inittmc_: 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 _addrtmc_ STX _addrtmc_+1 LDY #30 LDA (_addrtmc_),Y STA _tempo_ LDA _addrtmc_ 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 _addrtmc_ TXA LDX _addrtmc_ AND #$3f BEQ _d0_ STA _wysdzw_,X _dzwiek_: LDA #0 STA _czygrx_,X _zm8_: LDA $ffff,Y STA _adrsnl_,X STA _addrtmc_ _zm9_: LDA $ffff,Y STA _adrsnh_,X STA _addrtmc_+1 ORA _addrtmc_ BEQ _d1_ LDY #74 LDA (_addrtmc_),Y STA _opad1_,X STA _lopad1_,X INY LDA (_addrtmc_),Y STA _opad2_,X STA _lopad2_,X INY LDA (_addrtmc_),Y AND #$70 LSR @ LSR @ STA _typ_,X LDA (_addrtmc_),Y AND #15 STA _param_,X LDA (_addrtmc_),Y BPL _d7_ LDA _param_,X EOR #$ff CLC ADC #1 STA _param_,X _d7_: INY LDA (_addrtmc_),Y STA _czekaj_,X INY LDA (_addrtmc_),Y AND #$3f STA _dtyp_,X STA _ltyp_,X INY LDA (_addrtmc_),Y AND #$80 BEQ _d8_ LDA #1 _d8_: STA _kolejn_,X LDA (_addrtmc_),Y AND #$70 LSR @ LSR @ LSR @ LSR @ STA _ilperm_,X BNE _d6_ STA _kolejn_,X _d6_: LDA (_addrtmc_),Y AND #15 STA _dperm_,X STA _lperm_,X DEY LDA (_addrtmc_),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