;- ProTracker v1.51 03.05.2003 ;- Profi/Madteam ;- przerobka na format Mads 19.11.2004 by TeBe ;- drobne poprawki ;- optymalizacja procedur zmiany oktawy '_up' '_dn' filndn equ $e0 filord equ filndn+2 patno equ filord+2 patend equ patno+1 pataed equ patend+1 patadr equ pataed+1 cnts equ patadr+2 pause equ cnts+1 istr_4 equ pause+1 tse equ istr_4+3 _ol equ tse+2 _sc equ _ol+2 _sr equ _sc+2 fpisz equ _sr+2 _dx equ fpisz+2 lop equ _dx+2 hlp equ lop+2 pse equ hlp+2 ZeroPage equ 0 _bnk equ $bb00 _bf equ $bb00 volume equ $8800 fnt equ $2000 PatternAdres equ $c600 AdrTidl equ $ff00 AdrTid2 equ $fe00 opt h- org fnt ins 'tracker.fnt' ;pod $2000 org volume ins 'volume.tab' ;pod $8800 opt h+o+ org $2400 dl dta b($50),b($42),a(skr) dta d'""""""""""""""""""',b($82),b($82) dta d'""""""""' dta b($41),a(dl) init jsr move lda #0 ldx #3 sta _offst,x dex bpl *-4 sta _5+1 sta _a2+1 sta _n5+1 sta winpoz sta p_pat lda #$40 sta _atmp+2 lda #0 sta _atmp sta _atmp+1 sta n_pat sta p_pat sta winpoz sta fi_0+1 sta p_trk sta okt sta o_win sta o_licz sta p_ord sta patno lda #1 sta n_inst sta instr jsr filneg jsr neg jsr cl_k tsx ;zapamietaj wskaznik stx status ;stosu jmp _clws keybd jsr wait lda 764 cmp #231 bne *+5 jmp _exit ;opusc program cmp #173 bne *+5 jmp _trans ;transpozycja cmp #150 bne *+5 jmp _exchg ;zmiana instrumentu cmp #71 bne *+5 jmp inc_p ;zwieksz nr. patternu cmp #70 bne *+5 jmp dec_p ;zmniejsz nr.patternu cmp #15 bne *+5 jmp dn_p ;przes. w dol patt. cmp #14 bne *+5 jmp up_p ;przes. w gore patt. cmp #7 bne *+5 jmp i_p ;przes. w prawo patt. cmp #6 bne *+5 jmp d_p ;przes. w lewo patt. cmp #135 bne *+5 jmp i_in ;zwieksz nr. sampla cmp #134 bne *+5 jmp d_in ;zmniejsz nr.sampla cmp #136 bne *+5 jmp o_jmp ;skocz do proc. orders cmp #39 bne *+5 jmp _play ;odgrywaj modul cmp #172 bne *+5 jmp l_io ;procedury i/o cmp #165 bne *+5 jmp p_ply ;odgrywaj pattern cmp #54 bne *+5 jmp p_cli ;pattern do bufora cmp #55 bne *+5 jmp p_ilc ;pattern z bufora cmp #244 bne *+5 jmp _clws ;wyczysc cala pamiec cmp #218 bne *+5 jmp _coptr ;track do bufora cmp #216 bne *+5 jmp _buptr ;track z bufora cmp #119 bne *+5 jmp _movi ;insert pos. track cmp #116 bne *+5 jmp _movd ;delete pos. track cmp #219 beq _j18 cmp #243 beq _j18+5 cmp #245 beq _j18+10 cmp #240 beq _j18+15 jsr _offtrack jsr _pput jsr _ppoz jmp keybd _j18 lda #0 jmp *+15 ;skok do poz 00 lda #$10 jmp *+10 ;skok do poz 10 lda #$20 jmp *+5 ;skok do poz 20 lda #$30 ;skok do poz 30 sta winpoz jsr srt2 jsr neg jsr cl_k jmp keybd i_in lda n_inst cmp #31 beq *+5 inc n_inst jsr p_ins jsr cl_k jmp keybd d_in lda n_inst cmp #1 beq *+5 dec n_inst jsr p_ins jsr cl_k jmp keybd i_p lda p_trk cmp #3 bne *+17 jsr s_eor jsr s_trk jsr s_eor jsr cl_k jmp keybd inc p_trk jsr s_eor jsr s_trk jsr s_eor jsr cl_k jmp keybd d_p lda p_trk bne *+17 jsr s_eor jsr s_trk jsr s_eor jsr cl_k jmp keybd dec p_trk jsr s_eor jsr s_trk jsr s_eor jsr cl_k jmp keybd inc_p lda n_pat cmp #33 ;patternow jest 34 beq in_1 inc n_pat jsr set_h0 jsr set_sc lda #15 sta licznik lda #0 sta p_pat jsr srt2 jsr s_eor in_1 jsr cl_k jmp keybd dec_p lda n_pat beq in_2 dec n_pat jsr set_h0 jsr set_sc lda #15 sta licznik lda #0 sta p_pat jsr srt2 jsr s_eor in_2 jsr cl_k jmp keybd dn_p lda winpoz cmp #63 beq tam2 inc winpoz jsr cl_k jsr srt2 jsr neg jmp tam2 up_p lda winpoz beq tam2 dec winpoz jsr cl_k jsr srt2 ;wyrzuc pattern na ekran jsr neg jmp keybd tam2 jsr cl_k jmp keybd filneg lda scr+284 sta filndn+1 clc lda filndn fi_0 adc #0 ;w ktorym track'u jest sta filndn ;kursor bcc *+4 inc filndn+1 rts s_eor jsr filneg ;eor na pozycji jsr fneg rts fneg ldy #7 ;eor 8 komorek lda (filndn),y ;pamieci ekranu eor #$80 sta (filndn),y dey bpl *-7 rts neg ldx #7 ;srodkowa linia ng_2 lda scr+284,x ;okna patt. eor #$80 ng_3 sta scr+284,x dex bpl ng_2 rts srt2 jsr set_h0 lda winpoz tax sec sbc #7 bpl *+7 ldx #0 | jmp _sr3 | lda winpoz  sec sbc #7 tax _sr3 beq *+16 clc | lda hlp || adc #12 || sta hlp || bcc *+4 || inc hlp+1 || dex || bne *-12 | jsr set_sc  lda #15 sta licznik lda winpoz sta p_pat sec sbc #7 bpl *+7 lda #0 | jmp *+9 | lda winpoz  sec sbc #7 sta p_pat jsr start jsr cl_k rts s_trk ldx p_trk ;ustawia adres lda _tn2,x sta ng_2+1 sta ng_3+1 lda _tn3,x sta ng_2+2 sta ng_3+2 lda _tn4,x sta fi_0+1 rts _put0 stx pomoc ldx #7 lda #' '-32 sta bf_tmp,x dex bpl *-4 ldy #11 jsr writ2 ldy #20 jsr writ2 ldy #29 jsr writ2 ldy #38 jsr writ2 ldy #1 lda #' '-32 sta (pse),y iny sta (pse),y ldx pomoc rts writ2 ldx #7 lda bf_tmp,x sta (pse),y dey dex bpl *-7 rts start lda winpoz sec sbc #7 bpl _st0 tax jsr _put0 jsr in_pse dec licznik inx bne *-10 jmp _st2 _st0 lda winpoz cmp #56 bcc _st2 beq _st2 lda #56 sec sbc winpoz ;A=56-winpoz clc adc licznik sta licznik tay tax jsr set_sc jsr in_pse dey bne *-4 jsr _put0 jsr in_pse inx cpx #15 bne *-9 jsr set_sc _st2 ldx p_pat ;wyswietla pattern jsr p_hex ;na ekranie ldx cf_1 lda hex,x ldy #1 sta (pse),y iny ldx cf_1+1 lda hex,x sta (pse),y jsr y_0 ldy #4 jsr write jsr n_hlp jsr y_0 ldy #13 jsr write jsr n_hlp jsr y_0 ldy #22 jsr write jsr n_hlp jsr y_0 ldy #31 jsr write jsr n_hlp jsr in_pse inc p_pat dec licznik bne _st2 ldx n_pat jsr p_hex ldx cf_1 lda hex,x sta _e2+10 ldx cf_1+1 lda hex,x sta _e2+11 rts write ldx nuta ;wyswietla w danym lda t_nut,x ;tracku nute,instrument sta (pse),y ;komende iny lda t_okt,x sta (pse),y iny lda _hash,x sta (pse),y iny ldx instr beq zer0 jsr p_hex ldx cf_1 lda hex,x sta (pse),y iny ldx cf_1+1 lda hex,x sta (pse),y iny _w1 ldx komend beq zer1 lda hex,x sta (pse),y iny ldx kom beq zer2 jsr p_hex ldx cf_1 lda hex,x sta (pse),y iny ldx cf_1+1 lda hex,x sta (pse),y rts zer0 lda #'-'-32 sta (pse),y iny sta (pse),y iny jmp _w1 zer1 lda #'0'-32 sta (pse),y iny sta (pse),y iny sta (pse),y rts zer2 lda #'0'-32 sta (pse),y iny sta (pse),y rts set_h0 jsr set_hl ;ustawia adres pocz. ldx n_pat ;wyswietlania patternu beq *-7 clc lda hlp adc <$300 sta hlp lda hlp+1 adc >$300 sta hlp+1 dex bne *-14 rts set_hl lda #0 sta hlp lda tapat sta hlp+1 rts set_sc lda scr sta pse+1 rts n_hlp clc lda hlp adc #3 sta hlp bcc *+4 inc hlp+1 rts in_pse clc lda pse adc <40 sta pse bcc *+4 inc pse+1 rts p_hex stx pomoc txa jsr _h sta cf_1 lda pomoc and #$f sta cf_1+1 rts *-----------------------------------* * wyslij dane z patternu na ekran * *-----------------------------------* y_0 ldy #1 lda (hlp),y and #$1f beq y_0c sta instr ldy #0 lda (hlp),y and #$3f sta nuta jmp y_4 y_0c sta instr lda #36 sta nuta y_4 ldy #1 lda (hlp),y and #$e0 cmp #$20 beq *+13 cmp #$40 beq y_vol cmp #$80 beq y_tmp jmp y_1 lda #$d sta komend lda #0 sta kom rts y_vol ldy #2 lda (hlp),y ldx #0 cmp tab_a1,x beq *+9 inx cpx #33 bne *-8 ldx #0 txa asl @ sta kom lda #$c sta komend rts y_tmp ldy #2 lda (hlp),y sta kom lda #$f sta komend rts y_1 lda #0 sta komend sta kom rts *-----------------------* * edycja nut,komend * *-----------------------* s_vol ldx #$c ;volume ldy #$40 jmp j_kom s_brk ldx #$d ;break ldy #$20 jmp j_kom s_tmp ldx #$f ;tempo ldy #$80 jmp j_kom jmp _up ;obsluga klawiszy jmp _dn ;(zmiana oktaw) _pput sta pomoc ;wpisywanie nut cmp #142 ;i komend beq *-11 cmp #143 beq *-12 cmp #146 beq s_vol ;volume cmp #186 beq s_brk ;break cmp #184 beq s_tmp ;tempo ldx #0 cmp #33 bne _s0 lda #'-'-32 sta bf_tmp,x inx cpx #5 bne *-6 lda #'0'-32 sta bf_tmp,x inx cpx #8 bne *-6 lda #0 sta nuta sta instr jmp _s3 _s0 lda n_inst sta instr lda pomoc cmp t_klw,x bne _s1 jsr _pr txa clc adc przes tax stx nuta lda t_nut,x sta bf_tmp lda t_okt,x sta bf_tmp+1 lda _hash,x sta bf_tmp+2 lda #'0'-32 sta bf_tmp+5 sta bf_tmp+6 sta bf_tmp+7 jsr _psmp jsr _ondli _s3 jsr set_in jsr _pscr lda winpoz cmp #63 beq *+8 inc winpoz jsr srt2 jsr neg jsr cl_k rts _s1 inx cpx #24 bne *+3 rts jmp _s0 _up lda okt ;podnies oktawe 1 wyzej cmp #2 beq _up1 inc okt inc okt _oktShow ldx okt lda oktawa,x sta _e1+9 inx lda oktawa,x sta _e1+10 inx lda oktawa,x sta _e1+11 jsr _pr _up1 jsr cl_k rts _dn lda okt ;opusc oktawe nizej beq _up1 dec okt dec okt ; ldx okt ; lda oktawa,x ; sta _e1+9 ; inx ; lda oktawa,x ; sta _e1+10 ; inx ; lda oktawa,x ; sta _e1+11 ; jsr _pr ; jsr cl_k ; rts jmp _oktShow _pr lda #0 sta przes lda okt beq _prQ lsr @ tay _prAdd clc lda przes adc #12 sta przes dey bne _prAdd _prQ rts _pscr ldy #7 ;wypisz na ekran _pscrL lda bf_tmp,y ;i do pamieci to co sta (filndn),y ;wklepales z kla- dey ;wiatury bpl _pscrL ldx n_pat lda tapat,x sta hlp+1 lda #0 sta hlp ldx winpoz beq *+16 clc lda hlp adc <12 sta hlp bcc *+4 inc hlp+1 dex bne *-12 ldx p_trk lda _tn5,x clc adc hlp sta hlp lda hlp+1 adc #0 sta hlp+1 lda nuta ldy #0 sta (hlp),y iny lda instr sta (hlp),y rts _ppoz ldx patno ;wypisz pozycje w jsr p_hex ;orders ldx cf_1 lda hex,x sta _e3+10 ldx cf_1+1 lda hex,x sta _e3+11 rts set_in ldx instr beq *+24 ;ustaw nr. instrumentu jsr p_hex ldx cf_1 lda hex,x sta bf_tmp+3 ldx cf_1+1 lda hex,x sta bf_tmp+4 rts zer_in lda #'-'-32 sta bf_tmp+3 sta bf_tmp+4 rts *----------------------------------* * wypisz dane o instrumencie * *----------------------------------* p_ins ldx n_inst stx instr jsr p_hex ldx cf_1 lda hex,x sta _e4+8 ldx cf_1+1 lda hex,x sta _e4+9 ldx n_inst lda tivol,x sec sbc #$d8 asl @ tax jsr p_hex ldx cf_1 lda hex,x sta _e4+48 ldx cf_1+1 lda hex,x sta _e4+49 ldx n_inst lda tendl,x sec sbc tstrl,x sta pomoc1 lda tendh,x sbc tstrh,x tax jsr p_hex ldx cf_1 lda hex,x sta _e4+88 ldx cf_1+1 lda hex,x sta _e4+89 ldx pomoc1 jsr p_hex ldx cf_1 lda hex,x sta _e4+90 ldx cf_1+1 lda hex,x sta _e4+91 ldx n_inst lda trepl,x sec sbc tstrl,x sta pomoc1 lda treph,x sbc tstrh,x tax jsr p_hex ldx cf_1 lda hex,x sta _e4+128 ldx cf_1+1 lda hex,x sta _e4+129 ldx pomoc1 jsr p_hex ldx cf_1 lda hex,x sta _e4+130 ldx cf_1+1 lda hex,x sta _e4+131 ldx n_inst lda tendl,x sec sbc trepl,x sta pomoc1 lda tendh,x sbc treph,x tax jsr p_hex ldx cf_1 lda hex,x sta _e4+168 ldx cf_1+1 lda hex,x sta _e4+169 ldx pomoc1 jsr p_hex ldx cf_1 lda hex,x sta _e4+170 ldx cf_1+1 lda hex,x sta _e4+171 jsr _stname lda #0 ldx #22 sta _e1+13,x dex bpl *-4 jsr on ldy #21 lda (hlp),y bne *+5 dey bpl *-5 iny sty _n5+1 ldy #21 ;wypisz nazwe sampla lda (hlp),y tax lda chg,x sta _e1+13,y dey bpl *-10 jsr of rts _kill lda tapat ;wykiluj RAM sta hlp+1 lda #0 sta _a2+1 sta _5+1 sta _n5+1 tay sta hlp sta (hlp),y iny bne *-3 ldy #0 inc hlp+1 ldx hlp+1 cpx #$ac bne *-13 lda #$ff sta sng,y iny cpy #128 bne *-6 lda tapat sta sng jsr on lda #0 tax sta PatternAdres,x sta PatternAdres+$100,x sta PatternAdres+$200,x sta $480,x sta $4c0,x inx bne *-16 jsr of ldy #31 lda #$d8 sta tivol,y dey bpl *-4 rts o_jmp jsr s_eor jsr orders jmp keybd *--------------------* * zagraj MOD'a * *--------------------* _play jsr _volmv _mst ldx #0 ;od ktorej pozycji stx patno ;grac utwor lda #6 sta pause lda sng,x sta patadr+1 clc adc #3 sta pataed lda #$ea sta _type sta _type+1 sta _type+2 ldx #0 stx patadr stx $d400 lda sng,x cmp #$ff beq *+10 inx cpx #128 bne *-10 jmp *+6 stx patmax+1 jsr _p0rom jsr cl_ram ldy #0 sty $d200 sty $d202 sty $d204 sty $d206 sty $d208 jsr pre jsr _ondli jmp keybd *----------------------* * zagraj pattern * *----------------------* p_ply jsr _volmv ldx n_pat lda tapat,x sta patadr+1 clc adc #3 sta pataed lda #0 sta patadr lda #1 sta patmax+1 lda #6 sta pause ldx winpoz beq *+16 clc lda patadr adc #12 sta patadr bcc *+4 inc patadr+1 dex bne *-12 lda #$4c sta _type lda <_prod0 sta _type+1 lda >_prod0 sta _type+2 jsr _p0rom jsr cl_ram ldy #0 sty $d200 sty $d202 sty $d204 sty $d206 sty $d208 sty patno sty $d400 jsr pre jsr _ondli jmp keybd *-----------------------* * wczytanie MOD'a * *-----------------------* _rmod jsr _kill jsr _mod jsr _null lda #1 sta n_inst sta instr jsr p_ins lda #0 sta winpoz sta o_licz sta o_win sta n_pat sta p_pat lda #5 sta _licz2 jsr s_pse jsr _shlp lda o_licz sta p_ord jsr _ost jsr set_hl jsr set_sc lda #15 sta licznik jsr start jsr fneg rts *-------------------------* * wpisywanie komend * *-------------------------* j_kom sty komend jsr fneg lda hex,x sta bf_tmp+5 ldy #5 eor #$80 sta (filndn),y lda #0 sta bf_tmp+6 sta bf_tmp+7 iny lda #'?'-32 eor #$80 sta (filndn),y iny lda #'-'-32 eor #$80 sta (filndn),y jsr cl_k lda 764 cmp #$ff beq *-5 ldy #6 ldx #0 cmp o_klw,x  bne *+14 | stx _yp || lda hex,x || sta bf_tmp,y || jmp _h2 || inx | cpx #16 | bne *-20 jsr cl_k rts _h2 lda #'?'-32 eor #$80 ldy #7 sta (filndn),y dey lda bf_tmp+6 eor #$80 sta (filndn),y jsr cl_k lda 764 cmp #$ff beq *-5 ldy #7 ldx #0 cmp o_klw,x  bne *+14 | stx _yp+1 || lda hex,x || sta bf_tmp,y || jmp _h4 || inx | cpx #16 | bne *-20 jsr cl_k rts _h4 jsr cl_k ldy #5 lda bf_tmp,y sta (filndn),y iny cpy #8 bne *-8 lda _yp jsr _q ora _yp+1 sta param ldx n_pat lda tapat,x sta hlp+1 lda #0 sta hlp ldx winpoz beq *+16 clc lda hlp adc <12 sta hlp bcc *+4 inc hlp+1 dex bne *-12 ldx p_trk lda _tn5,x clc adc hlp sta hlp lda hlp+1 adc #0 sta hlp+1 ldy #1 lda (hlp),y and #$1f ora komend sta (hlp),y lda komend cmp #$40 ;kod komendy volume bne *+17 lda param | lsr @ | tax | lda tab_a1,x | ldy #2 | sta (hlp),y | jmp *+10 | lda param  ldy #2 sta (hlp),y lda winpoz cmp #63 beq *+8 inc winpoz jsr srt2 jsr neg jsr cl_k rts ;------------; ;- _VOLMV -; ;------------; _volmv sei lda #0 sta $22f sta $d400 sta $d40e ldx <$4000 ldy >$4000 stx hlp sty hlp+1 ldx <$d800 ldy >$d800 stx pse sty pse+1 ldx il_bnk dex lda tab_1,x sec sbc #1 sta $d301 ldy #0 lda (hlp),y sta (pse),y iny bne *-5 inc hlp+1 inc pse+1 lda pse+1 cmp #$f8 bne *-15 lda $f700,y sta $f800,y iny bne *-7 lda #$fe sta $d301 rts ;-------------; ;- LOA_MOD -; ;-------------; * odczyt utworu _mod lda PatternAdres sta patadr+1 ldx <_loa ldy >_loa lda #4 sta __k+1 lda #3 jsr _op ;odczyt naglowka ldx <1084 ldy >1084 jsr _le ldx <_bf ldy >_bf lda #7 jsr _re ldx #3 lda _bf+1080,x cmp title,x bne *+8 dex bpl *-9 jmp _omvl jsr _cl lda #16 sta pom_1 ldx <_txt5 ldy >_txt5 jsr _wname lda 764 cmp #28 bne *-5 lda #16 sta pom_1 ldx <_txt5 ldy >_txt5 jsr _wname ldx status txs jmp keybd _omvl ldx #19 ;odczyt nazwy utworu lda _bf,x sta _nam,x dex bpl *-7 ldx #19 ;oblicz dlugosc nazwy lda _nam,x bne *+5 dex bpl *-6 inx stx _5+1 ldx #19 ;wpisz na ekran lda _nam,x tay lda chg,y sta _e1-22,x dex bpl *-11 jsr _ad lda #1 sta _co+1 _co ldx #0 _1 ldy #42 ;dlug. sampla lda (pse),y tax iny lda (pse),y jsr _mot ldx _co+1 sta tendl,x tya sta tendh,x cmp #$40 bcc *+5 jmp _long ldy #45 ;glosnosc sampla lda (pse),y cmp #64 bne *+8 sec sbc #1 jmp *+7 lda (pse),y and #$3f lsr @ clc adc #$d8 sta tivol,x ldy #46 lda (pse),y ;pocz. petli sampla tax iny lda (pse),y jsr _mot ldx _co+1 sta trepl,x tya sta treph,x ldy #48 lda (pse),y ;dlug. petli sampla tax iny lda (pse),y jsr _mot ldx _co+1 sta tlenl,x tya sta tlenh,x ldx #0 ;czytaj nazwy sampli ldy #20 lda (pse),y sta $680,x iny inx cpx #22 bne *-9 jsr on ;wpisz do pamieci ldy #21 ;nazwe sampla ldx #21 lda $680,x sta (patadr),y dey dex bpl *-7 jsr of clc lda pse adc #30 sta pse bcc *+4 inc pse+1 clc lda patadr adc #22 sta patadr bcc *+4 inc patadr+1 inc _co+1 lda _co+1 cmp #32 beq *+5 jmp _1 lda _bf+950 ;dl. utworu sta patmax+1 lda _bf+952 ;najw. num. patternu sta _mx+1 ldy #0 sty _mor+1 lda _bf+952,y ? _mx cmp #0 | bcc *+5 | sta _mx+1 | | iny ? | cpy #128 | bne *-13 ldy _mx+1 iny sty tse cpy #35 bcc *+5 jmp _optrn ldy #127 ;orders ldx _bf+952,y lda tapat,x sta sng,y dey bpl *-10 ldx _bf+950 lda #$ff sta sng,x inx cpx #128 bne *-6 *--------------------* * odczyt patternow * *--------------------* _mor ldy #0 ;adres paternu w pamieci lda tapat,y sta hlp+1 lda #0 sta hlp ldx <1024 ldy >1024 jsr _le ;x,y -> ile wczytac jsr _ad ;_bf -> pse,pse+1 lda #7 jsr _re lda #0 sta tse+1 _thi ldy #3 ;czytanie 4 bajtow lda (pse),y sta tmp,y dey bpl *-6 jsr e_cnv clc lda hlp adc <3 sta hlp bcc *+4 inc hlp+1 clc lda pse adc <4 sta pse bcc *+4 inc pse+1 dec tse+1 bne _thi inc _mor+1 dec tse bne _mor lda #1 sta lic+1 lda #0 sta n_ins sta n_bnk jsr s_hl *-----------------* * odczyt sampli * *-----------------* lic ldy #1 ;czy wczytac lda tendl,y ora tendh,y beq _jm ldy lic+1 ;czy zmiesci sie w banku clc lda _atmp+2 adc tendh,y cmp #$7f bcc _nz inc n_bnk lda n_bnk clc adc #1 cmp il_bnk beq _sdq jsr s_hl jmp _nz _sdq jmp _oomem _nz jsr set_b jsr st_adr ldx tendl,y ;odczyt sampla lda tendh,y tay jsr _le ldx hlp ldy hlp+1 lda #7 jsr _re jsr real_a jsr cnv_sm jsr _pam lda #0 sta hlp lda _atmp+2 sta hlp+1 _jm inc lic+1 lda lic+1 cmp #32 bne lic jmp n_12 real_a ldy lic+1 clc lda tstrl,y adc trepl,y sta trepl,y lda tstrh,y adc treph,y sta treph,y clc lda tstrl,y adc tendl,y sta tendl,y lda tstrh,y adc tendh,y sta tendh,y lda tlenl,y ora tlenh,y beq no_lop cmp #2 beq no_lop rts no_lop lda #0 sta trepl,y lda tendh,y sta treph,y rts s_hl lda #0 sta hlp sta _atmp+1 lda #$40 sta hlp+1 lda #$41 sta _atmp+2 rts _pam lda n_bnk sta _atmp ldy lic+1 lda tendl,y sta _atmp+1 lda tendh,y clc adc #1 sta _atmp+2 rts st_adr lda #0 sec sbc tendl,y sta hlp sta tstrl,y lda hlp+1 sta tstrh,y rts set_b ldy lic+1 ldx n_bnk lda tab_1,x sta $d301 lda tab_1,x sec sbc #1 sta tab_3,y rts cnv_sm ldy lic+1 lda tendh,y sta pse+1 lda #0 sta pse tay sta (pse),y iny bne *-3 rts n_12 lda #$ff sta $d301 rts cl_ram lda #0 sta rep0_m+1 sta rep0_s+1 sta rep1_m+1 sta rep1_s+1 sta rep2_m+1 sta rep2_s+1 sta rep3_m+1 sta rep3_s+1 sta iad0_m+1 sta iad1_m+1 sta iad2_m+1 sta iad3_m+1 sta iad0_s+1 sta iad1_s+1 sta iad2_s+1 sta iad3_s+1 sta ien0_s+1 sta ien1_s+1 sta ien2_s+1 sta ien3_s+1 sta p_0c+1 sta p_1c+1 sta p_2c+1 sta p_3c+1 sta cm_0+1 sta cm_1+1 sta cm_2+1 sta cm_3+1 lda #$40 sta p_0c+2 sta p_1c+2 sta p_2c+2 sta p_3c+2 lda #$d8 sta ivol10+2 sta ivol11+2 sta ivol12+2 sta ivol13+2 rts e_cnv lda tmp and #$f ora tmp+1 bne _nl lda #36 ldy #0 sta (hlp),y iny lda #0 sta (hlp),y jmp f_2 _nl ldy #0 _tst lda kod,y cmp tmp+1 bne pls lda tmp and #$f cmp kod+1,y bne pls tya lsr @ f_1 ldy #0 sta (hlp),y jmp f_2 pls iny iny cpy #72 bne _tst lda #36 jmp f_1 f_2 lda tmp+2 jsr _h sta pomoc lda tmp and #$10 clc adc pomoc ldy #1 sta (hlp),y ldy #2 lda #0 sta (hlp),y ldy #1 lda tmp+2 and #$f cmp #$c beq _vol cmp #$f beq _tmp cmp #$d beq _break rts _break lda #$20 ora (hlp),y sta (hlp),y rts _vol lda #$40 ora (hlp),y sta (hlp),y ldy #2 lda tmp+3 cmp #64 bne *+8 sec sbc #1 jmp *+8 lda tmp+3 and #$3f clc lsr @ adc #$d8 sta (hlp),y rts _tmp lda tmp+3 cmp #$20 bcs *-6 lda #$80 ora (hlp),y sta (hlp),y ldy #2 lda tmp+3 and #$1f sta (hlp),y rts _optrn jsr _cl lda #19 sta pom_1 ldx <_txt3 ldy >_txt3 jsr _wname jsr cl_k lda 764 cmp #28 bne *-5 lda #19 sta pom_1 ldx <_txt3 ldy >_txt3 jsr _wname ldx status txs jmp keybd _long jsr _cl lda #17 sta pom_1 ldx <_txt4 ldy >_txt4 jsr _wname jsr cl_k lda 764 cmp #28 bne *-5 lda #17 sta pom_1 ldx <_txt4 ldy >_txt4 jsr _wname ldx status txs jmp keybd _op stx _n+1 sty __n+1 ldx #$10 sta $342,x _n lda #0 sta $344,x __n lda #0 sta $345,x __k lda #4 sta $34a,x jsr $e456 bmi _er1 rts _er1 jsr n_12 sty byte cpy #136 bne *+3 rts lda #15 sta pom_1 ldx <_txt0 ldy >_txt0 jsr _wname jsr _errkd jsr cl_k lda 764 cmp #28 bne *-5 lda #15 sta pom_1 ldx <_txt0 ldy >_txt0 jsr _wname ldx status txs jmp keybd _cl ldx #$10 lda #$c sta $342,x jsr $e456 bmi _er1 rts _le stx _l+1 sty __l+1 rts _re stx _a+1 sty __a+1 ldx #$10 sta $342,x _a lda #0 sta $344,x __a lda #0 sta $345,x _l lda #0 sta $348,x __l lda #0 sta $349,x jsr $e456 bmi _er1 rts on sei lda #0 sta $d40e lda #$fe sta $d301 rts of jsr n_12 lda #$40 sta $d40e cli jsr _ondli rts ;-----------; ;- PMAIN -; ;-----------; *----------- * track 0 i_0 ldy #1 lda (patadr),y and #$1f beq i_0c tax lda tab_3,x sta bank0+1 lda tendh,x sta ien0_s+1 lda tstrl,x sta p_0c+1 lda tstrh,x sta p_0c+2 lda trepl,x sta rep0_m+1 lda treph,x sta rep0_s+1 lda tivol,x sta ivol10+2 ldy #0 lda (patadr),y and #$3f tax lda AdrTidl,x sta iad0_m+1 lda AdrTidl+37,x sta iad0_s+1 i_0c ldy #1 lda (patadr),y and #$e0 cmp #$20 beq *+13 cmp #$40 beq *+14 cmp #$80 beq _tmp0 jmp i_1 inc patend jmp i_1 ldy #2 lda (patadr),y sta ivol10+2 jmp i_1 _tmp0 ldy #2 lda (patadr),y sta pause *-------------- * track 1 i_1 ldy #4 lda (patadr),y and #$1f beq i_1c tax lda tab_3,x sta bank1+1 lda tendh,x sta ien1_s+1 lda tstrl,x sta p_1c+1 lda tstrh,x sta p_1c+2 lda trepl,x sta rep1_m+1 lda treph,x sta rep1_s+1 lda tivol,x sta ivol11+2 ldy #3 lda (patadr),y and #$3f tax lda AdrTidl,x sta iad1_m+1 lda AdrTidl+37,x sta iad1_s+1 i_1c ldy #4 lda (patadr),y and #$e0 cmp #$20 beq *+13 cmp #$40 beq *+14 cmp #$80 beq _tmp1 jmp i_2 inc patend jmp i_2 ldy #5 lda (patadr),y sta ivol11+2 jmp i_2 _tmp1 ldy #5 lda (patadr),y sta pause *-------------- * track 2 i_2 ldy #7 lda (patadr),y and #$1f beq i_2c tax lda tab_3,x sta bank2+1 lda tendh,x sta ien2_s+1 lda tstrl,x sta p_2c+1 lda tstrh,x sta p_2c+2 lda trepl,x sta rep2_m+1 lda treph,x sta rep2_s+1 lda tivol,x sta ivol12+2 ldy #6 lda (patadr),y and #$3f tax lda AdrTidl,x sta iad2_m+1 lda AdrTidl+37,x sta iad2_s+1 i_2c ldy #7 lda (patadr),y and #$e0 cmp #$20 beq *+13 cmp #$40 beq *+14 cmp #$80 beq _tmp2 jmp i_3 inc patend jmp i_3 ldy #8 lda (patadr),y sta ivol12+2 jmp i_3 _tmp2 ldy #8 lda (patadr),y sta pause *-------------- * track 3 i_3 ldy #10 lda (patadr),y and #$1f beq i_3c tax lda tab_3,x sta bank3+1 lda tendh,x sta ien3_s+1 lda tstrl,x sta p_3c+1 lda tstrh,x sta p_3c+2 lda trepl,x sta rep3_m+1 lda treph,x sta rep3_s+1 lda tivol,x sta ivol13+2 ldy #9 lda (patadr),y and #$3f tax lda AdrTidl,x sta iad3_m+1 lda AdrTidl+37,x sta iad3_s+1 i_3c ldy #10 lda (patadr),y and #$e0 cmp #$20 beq *+13 cmp #$40 beq *+14 cmp #$80 beq _tmp3 jmp i_e inc patend jmp i_e ldy #11 lda (patadr),y sta ivol13+2 jmp i_e _tmp3 ldy #11 lda (patadr),y sta pause i_e lda patend bne i_en clc lda patadr adc <12 sta patadr lda patadr+1 adc >12 sta patadr+1 cmp pataed bcc i_end i_en inc patno ldx patno a patmax cpx #0 bcc i_ens _type jmp _prod0 lda #6 sta pause ldx #0 stx patno i_ens lda sng,x sta patadr+1 clc adc #3 sta pataed lda #0 sta patadr i_end lda $d20f and #8 beq quit lda pause sta cnts clc ldy #vbl jmp $0000 quit jsr _p0rom jsr of jsr wait lda #$22 sta $d400 sta $22f lda
dl sta $231 lda >fnt sta 756 lda #2 sta $2c6 lda #8 sta $2c5 jsr cl_k lda patno cmp o_win bcs *+5 lda o_win sec sbc o_win sta o_licz jsr _ppoz rts _prod0 ldx n_pat lda tapat,x sta patadr+1 clc adc #3 sta pataed lda #0 sta patno sta patadr lda #1 sta patmax+1 lda pause sta cnts clc ldy #vbl jmp $0000 ;--------; ;- IO -; ;--------; l_io lda #0 sta l_poz jsr cl_k jsr _xneg ldx #10 lda _e3+19,x eor #$80 sta _e3+19,x dex bpl *-9 exit lda 764 cmp #12 beq j_pi cmp #15 beq _nt cmp #14 beq _pv cmp #28 beq *+5 jmp exit jsr _lneg jsr cl_k jmp keybd j_pi jsr _lneg jsr cl_k ldx l_poz lda _jtab1,x sta _gproc+1 lda _jtab1+7,x sta _gproc+2 _gproc jsr $a000 jmp keybd _nt lda l_poz cmp #6 beq *+8 inc l_poz jsr _ng0 jsr cl_k jmp exit _pv lda l_poz beq *+8 dec l_poz jsr _ng1 jsr cl_k jmp exit _xneg lda <_e3+19 sta _ol lda >_e3+19 sta _ol+1 rts _lneg ldy #10 lda (_ol),y eor #$80 sta (_ol),y dey bpl *-7 rts _ng0 jsr _xneg ldx l_poz dex beq *+8 jsr ol_adc dex bne *-4 jsr _lneg jsr ol_adc jsr _lneg rts _ng1 jsr _xneg ldx l_poz inx jsr ol_adc dex bne *-4 jsr _lneg sec lda _ol sbc <40 sta _ol bcs *+4 dec _ol+1 jsr _lneg rts ol_adc clc lda _ol adc <40 sta _ol bcc *+4 inc _ol+1 rts _jtab1 dta l(_ldir),l(_sdir) dta l(_lsamp),l(_ssamp),l(_clall) dta l(_clpat),l(_clsmp) dta h(_ldir),h(_sdir) dta h(_lsamp),h(_ssamp),h(_clall) dta h(_clpat),h(_clsmp) t_klw dta b(23),b(62),b(22),b(58) dta b(18),b(16),b(61),b(21) dta b(57),b(35),b(01),b(37) dta b(47),b(30),b(46),b(26) dta b(42),b(40),b(29),b(45) dta b(27),b(43),b(51),b(11) bf_tmp dta d' _____' tmp dta d' ' pomoc brk pomoc1 brk licznik brk instr brk nuta brk n_pat brk komend brk kom brk cf_1 dta a(0) winpoz brk p_trk brk p_pat brk okt brk przes brk n_inst brk ;numer sampla status brk ;stan wskaznika stosu param brk l_poz brk n_ins brk n_bnk brk il_bnk brk pom_1 dta d' ' tab_1 dta d' ' ;tablica z wykrytymi bankami pamieci oktawa dta d'1:2:3' t_nut dta d'ccddeffggaahccddeffggaahccddeffggaah-' t_okt dta d'111111111111222222222222333333333333-' _hash dta d'-#-#--#-#-#--#-#--#-#-#--#-#--#-#-#--' tapat dta b($46),b($49),b($4c) dta b($4f),b($52),b($55),b($58) dta b($5b),b($5e),b($61),b($64) dta b($67),b($6a),b($6d),b($70) dta b($73),b($76),b($79),b($7c) dta b($7f),b($82),b($85),b($88) dta b($8b),b($8e),b($91),b($94) dta b($97),b($9a),b($9d),b($a0) dta b($a3),b($a6),b($a9) kod equ * dta a($358),a($328),a($2fa),a($2d0) dta a($2a6),a($280),a($25c),a($23a) dta a($21a),a($1fc),a($1e0),a($1c5) dta a($1ac),a($194),a($17d),a($168) dta a($153),a($140),a($12e),a($11d) dta a($10d),a($fe),a($f0),a($e2) dta a($d6),a($ca),a($be),a($b4) dta a($aa),a($a0),a($97),a($8f) dta a($87),a($7f),a($78),a($71) dta a($00) ;kod 37 nut _tn2 dta l(scr+284),l(scr+293),l(scr+302),l(scr+311) _tn3 dta h(scr+284),h(scr+293),h(scr+302),h(scr+311) _tn4 dta b(0),b(9),b(18),b(27) _tn5 dta b(0),b(3),b(6),b(9) sng equ $400 tivol equ sng+128 tstrl equ tivol+32 tstrh equ tstrl+32 trepl equ tstrh+32 treph equ trepl+32 tendl equ treph+32 tendh equ tendl+32 tlenl equ tendh+32 tlenh equ tlenl+32 tab_3 equ tlenh+32 tab_a1 dta b($d8),b($d9),b($da),b($db) dta b($dc),b($dd),b($de),b($df) dta b($e0),b($e1),b($e2),b($e3) dta b($e4),b($e5),b($e6),b($e7) dta b($e8),b($e9),b($ea),b($eb) dta b($ec),b($ed),b($ee),b($ef) dta b($f0),b($f1),b($f2),b($f3) dta b($f4),b($f5),b($f6),b($f7) dta b($f7) _txt0 dta c'QMMMMMMMMMMMMME' dta b($56),d'i/o error ' dta c'ZNNNNNNNNNNNNNC' _txt1 dta c'QMMMMMMMMMMMMME' dta b($56),d'out of memory' dta c'ZNNNNNNNNNNNNNC' _txt2 dta c'QMMMMMMMMMMMMMMMME' dta b($56),d'd1:noname**.mod ' dta c'ZNNNNNNNNNNNNNNNNC' _txt3 dta c'QMMMMMMMMMMMMMMMMME' dta b($56),d'too many patterns' dta c'ZNNNNNNNNNNNNNNNNNC' _txt4 dta c'QMMMMMMMMMMMMMMME' dta b($56),d'sample too long' dta c'ZNNNNNNNNNNNNNNNC' _txt6 dta c'QMMMMMMMMMMMMMMME' dta b($56),d'transpose 00-00' dta c'ZNNNNNNNNNNNNNNNC' _txt7 dta c'QMMMMMMMMMMMMMME' dta b($56),d'exchange 00-00' dta c'ZNNNNNNNNNNNNNNC' _loa dta d' ' ;-----------; ;- FUNC2 -; ;-----------; *--------------------------------* * wczytanie jednego sampla * *--------------------------------* _rsmp jsr _cl ldx <_loa ldy >_loa lda #4 sta __k+1 lda #3 jsr _op ldx <27 ldy >27 jsr _le ldx <$680 _btmp ldy >$680 lda #7 jsr _re lda $681 cmp #$40 bcc *+5 jmp _long lda _atmp sta n_bnk clc ;czy zmiesci sie w tym lda $680 ;banku adc _atmp+1 lda $681 adc _atmp+2 adc #1 cmp #$7f bcc _lg0 ldy n_inst lda #$40 sta hlp+1 sta tstrh,y lda #0 sec sbc $680 sta hlp sta tstrl,y inc n_bnk lda n_bnk clc adc #1 cmp il_bnk beq *+5 jmp _lg1 _lg2 jmp _oomem _lg0 ldy n_inst lda _atmp+2 clc adc #1 sta hlp+1 sta tstrh,y lda #0 sec sbc $680 sta hlp sta tstrl,y _lg1 ldy n_inst ;ustaw bank ldx n_bnk lda tab_1,x sta $d301 sec sbc #1 sta tab_3,y ldx $680 ;wczytanie sampla ldy $681 jsr _le ldx hlp ldy hlp+1 lda #7 jsr _re jsr _cl ldy n_inst lda $682 lsr @ tax lda tab_a1,x sta tivol,y clc lda tstrl,y adc $680 sta tendl,y lda tstrh,y adc $681 sta tendh,y clc lda tstrl,y adc $683 sta trepl,y lda tstrh,y adc $684 sta treph,y lda n_inst sta lic+1 jsr _pam jsr cnv_sm jsr _stname jsr on ldx #21 ldy #21 lda $685,x sta (hlp),y dey dex bpl *-7 jsr of jsr n_12 jsr p_ins jsr cl_k rts _errkd jsr convr ldy #3 lda word jsr disp_2 lda word+1 jsr disp_1 rts convr lda #0 sta word sta word+1 ldx #8 sed asl byte lda word adc word sta word rol word+1 dex bne *-16 cld rts disp_1 and #$f ora #'0'-32 sta _e4+70,y dey rts disp_2 pha jsr disp_1 pla jsr _h jsr disp_1 rts *------------------------* * wylaczanie kanalow * *------------------------* _off3 jsr _p0rom lda _offst+2 eor #1 sta _offst+2 beq _of3 lda #$5d sta _e1-33 lda #$ff sta ch_2+1 lda #$23 sta ch_2+2 jsr cl_k jsr _p0rom rts _of3 lda #2 sta ch_2+1 _df3 lda #$d6 sta ch_2+2 lda #$5c sta _e1-33 jsr cl_k jsr _p0rom rts _off4 jsr _p0rom lda _offst+3 eor #1 sta _offst+3 beq _of4 lda #$5d sta _e1-30 lda #$ff sta ch_3+1 lda #$23 sta ch_3+2 jsr cl_k jsr _p0rom rts _of4 lda #3 sta ch_3+1 _df4 lda #$d6 sta ch_3+2 lda #$5c sta _e1-30 jsr cl_k jsr _p0rom rts _offtrack cmp #95 ;shift+1 beq _off1 cmp #117 ;shift+2 beq _off2 cmp #90 ;shift+3 beq _off3 cmp #88 ;shift+4 beq _off4 rts _off1 jsr _p0rom lda _offst eor #1 sta _offst beq _of1 lda #$5d sta _e1-39 lda #$ff sta ch_0+1 lda #$23 sta ch_0+2 jsr cl_k jsr _p0rom rts _of1 lda #0 sta ch_0+1 _df1 lda #$d6 sta ch_0+2 lda #$5c sta _e1-39 jsr cl_k jsr _p0rom rts _off2 jsr _p0rom lda _offst+1 eor #1 sta _offst+1 beq _of2 lda #$5d sta _e1-36 lda #$ff sta ch_1+1 lda #$23 sta ch_1+2 jsr cl_k jsr _p0rom rts _of2 lda #1 sta ch_1+1 _df2 lda #$d6 sta ch_1+2 lda #$5c sta _e1-36 jsr cl_k jsr _p0rom rts *----------------------------* * ustaw adres nazwy sampla * *----------------------------* _stname lda PatternAdres sta hlp+1 ldx n_inst cpx #1 beq *+17 dex clc lda hlp adc #22 sta hlp bcc *+4 inc hlp+1 dex bne *-12 rts *-------------------------------* * graj sampla w czasie edycji * *-------------------------------* _psmp sei ldy #0 sty $d40e ldx n_inst lda tivol,x cmp #$d8 bne *+12 jsr n_12 lda #$40 sta $d40e cli rts ldx n_inst lda tab_3,x sta $d301 lda tendh,x sta ien4_s+1 lda tstrl,x sta istr_4+1 lda tstrh,x sta istr_4+2 ldx nuta lda AdrTid2,x sta iad4_m+1 lda AdrTid2+37,x sta iad4_s+1 clc lda istr_4 iad4_m adc #0 sta istr_4 lda istr_4+1 iad4_s adc #0 sta istr_4+1 bcc p_4c inc istr_4+2 lda istr_4+2 ien4_s cmp #0 bcc p_4c jsr n_12 lda #$40 sta $d40e cli rts p_4c lda (istr_4+1),y eor #$80 ldx $d40b cpx $d40b beq *-3 ch_4 sta $d600 jmp iad4_m-2 _atmp dta d' ' _mload dta c'D1:********.MOD',b($9b) _sload dta c'D1:********.SMP',b($9b) _offst dta d' ' chg ins 'chg.dat' d_win brk d_licz brk d_co brk d_il brk ppm brk ble brk il_pt brk byte brk word dta a(0) ;------------; ;- ORDERS -; ;------------; orders jsr cl_k lda o_licz sta p_ord lda #5 sta _licz2 jsr s_pse jsr _shlp jsr _ost jsr _olneg jsr o_eor key2 lda 764 cmp #15 beq _dnx cmp #14 beq _upx cmp #28 beq _eord cmp #119 beq *+14 cmp #116 beq *+13 ldy #0 jsr _oput jmp key2 jmp _inr jmp _der _dnx jmp _dno _upx jmp _upo _eord jsr cl_k jsr _olneg ldx o_win beq *+8 jsr _iord dex bne *-4 jsr _neg jsr s_eor clc lda o_licz adc o_win sta _mst+1 rts _dno lda o_win cmp #4 beq *+12 inc o_win | lda o_win | cmp #5 | bne *+47 inc o_licz ?| lda o_licz | cmp #124 | beq *+31 | jsr cl_k || lda #5 || sta _licz2 || jsr s_pse || jsr _shlp || lda o_licz || sta p_ord || jsr _ost || jsr _on5 || jmp key2 || || dec o_licz ?| jmp key2 | | jsr _odn ? jsr cl_k jmp key2 _upo lda o_win beq *+8 dec o_win | jmp _otam2 | lda o_licz ? beq *+40 dec o_licz | jsr cl_k | lda #5 | sta _licz2 | jsr s_pse | jsr _shlp | lda o_licz | sta p_ord | jsr _ost | jsr _onp | jmp key2 | | _otam2 jsr _oup | jsr cl_k | jmp key2 ? _olneg lda <_e4+13 sta filord lda >_e4+13 sta filord+1 rts o_eor jsr _olneg ldx o_win beq *+8 jsr _iord dex bne *-4 jsr _neg rts _neg ldy #4 lda (filord),y eor #$80 sta (filord),y dey bpl *-7 clc lda o_licz adc o_win sta patno jsr _ppoz rts _odn jsr _olneg ldx o_win dex beq *+8 jsr _iord dex bne *-4 jsr _neg jsr _iord jsr _neg rts _oup jsr _olneg ldx o_win inx jsr _iord dex bne *-4 jsr _neg sec lda filord sbc <40 sta filord bcs *+4 dec filord+1 jsr _neg rts _on5 ldx #4 lda _e4+173,x eor #$80 sta _e4+173,x dex bpl *-9 rts _onp ldx #4 lda _e4+13,x eor #$80 sta _e4+13,x dex bpl *-9 rts _osr jsr _sh ldx o_licz beq *+12 clc lda hlp adc #1 sta hlp dex bne *-8 lda #5 sta _licz2 lda o_licz sta p_ord jsr _ost jsr cl_k rts _ost clc lda o_licz adc o_win sta patno jsr _ppoz ldx p_ord jsr p_hex ldx cf_1 lda hex,x ldy #0 sta (pse),y iny ldx cf_1+1 lda hex,x sta (pse),y ldy #0 lda (hlp),y ldx #0 cmp tapat,x beq *+19 inx cpx #128 bne *-8 lda #'-'-32 ldy #3 sta (pse),y iny sta (pse),y jmp _cn2 jsr p_hex ldx cf_1 lda hex,x ldy #3 sta (pse),y ldy #4 ldx cf_1+1 lda hex,x sta (pse),y _cn2 lda #0 ldy #2 sta (pse),y jsr i_pse inc hlp inc p_ord dec _licz2 bne _ost rts i_pse clc lda pse adc <40 sta pse bcc *+4 inc pse+1 rts _shlp jsr _sh ldx o_licz beq *+7 inc hlp dex bne *-3 rts s_pse lda <_e4+13 sta pse lda >_e4+13 sta pse+1 rts _oput ldx #0 cmp #33 bne *+21 lda #'-'-32 | sta _obf+3 | sta _obf+4 | lda #$f | sta _yp | sta _yp+1 | jmp _op4 | cmp o_klw,x ? bne *+14 | stx _yp || lda hex,x || sta _obf+3,y || jmp _op2 || inx ?| cpx #16 | bne *-20 rts _op2 jsr cl_k lda 764 cmp #$ff beq *-5 ldy #1 ldx #0 cmp o_klw,x bne *+14 stx _yp+1 lda hex,x sta _obf+3,y jmp _op4 inx cpx #16 bne *-20 rts _op4 jsr _adc jsr p_hex ldx cf_1 lda hex,x sta _obf ldx cf_1+1 lda hex,x sta _obf+1 jsr _olneg ldx o_win beq *+8 jsr _iord dex bne *-4 ldy #4 lda _obf,y sta (filord),y dey bpl *-6 jsr _sh jsr _adc beq *+7 inc hlp dex bne *-3 lda _yp jsr _q ora _yp+1 ldy #0 cmp #$ff beq *+6 tax lda tapat,x sta (hlp),y lda o_win cmp #4 beq *+12 inc o_win lda o_win cmp #5 bne _op12 inc o_licz lda o_licz cmp #124 beq _op13 jsr cl_k lda #5 sta _licz2 jsr s_pse lda o_licz sta p_ord jsr _shlp jsr _ost jsr _on5 rts _op13 jsr cl_k dec o_licz jsr _on5 rts _op12 jsr _olneg ldx o_win beq *+8 jsr _iord dex bne *-4 jsr cl_k lda #5 sta _licz2 jsr s_pse lda o_licz sta p_ord jsr _shlp jsr _ost jsr _neg rts _sh lda <$400 sta hlp lda >$400 sta hlp+1 rts _adc clc lda o_licz adc o_win tax rts _iord clc lda filord adc <40 sta filord bcc *+4 inc filord+1 rts bufclr lda #0 tax sta _bf,x sta _bf+$100,x sta _bf+$200,x sta _bf+$300,x sta _bf+$400,x inx bne *-16 ldx #7 sta _e3+31,x sta _e3+71,x sta _e3+111,x sta _e3+151,x sta _e3+191,x sta _e3+231,x sta _e3+271,x dex bpl *-22 rts _x1neg ldy #7 lda (_dx),y eor #$80 sta (_dx),y dey bpl *-7 rts o_klw dta b(50),b(31),b(30),b(26) dta b(24),b(29),b(27),b(51) dta b(53),b(48),b(63),b(21) dta b(18),b(58),b(42),b(56) o_win brk o_licz brk p_ord brk _licz2 brk _obf dta d' ' _yp dta a(0) ;----------; ;- XCHG -; ;----------; _exchg jsr cl_k lda #0 sta $2d9 ldx #4 lda #'?'-32 sta _txt7+26,x dex bpl *-4 lda #'_'-32 sta _txt7+28 lda #16 sta pom_1 ldx <_txt7 ldy >_txt7 jsr _wname lda 764 cmp #$ff beq *-5 cmp #28 bne *+24 lda #16 sta pom_1 ldx <_txt7 ldy >_txt7 jmp _ex9 jsr cl_k lda 764 cmp #$ff beq *-5 ldx #0 cmp o_klw,x ? bne *+14 | stx _yp || lda hex,x || sta _e4+70 || jmp _ex2 || inx ?| cpx #2 | bne *-20 jmp *-34 _ex2 jsr cl_k lda 764 cmp #$ff beq *-5 ldx #0 cmp o_klw,x ? bne *+14 | stx _yp+1 || lda hex,x || sta _e4+71 || jmp *+11 || inx ?| cpx #16 | bne *-20 jmp _ex2 lda _yp jsr _q ora _yp+1 sta komend _eq4 jsr cl_k lda 764 cmp #$ff beq *-5 ldx #0 cmp o_klw,x ? bne *+14 | stx _yp || lda hex,x || sta _e4+73 || jmp _ex5 || inx ?| cpx #2 | bne *-20 jmp _eq4 _ex5 jsr cl_k lda 764 cmp #$ff beq *-5 ldx #0 cmp o_klw,x ? bne *+14 | stx _yp+1 || lda hex,x || sta _e4+74 || jmp _ex6 || inx ?| cpx #16 | bne *-20 jmp _ex6 _ex6 lda _yp jsr _q ora _yp+1 sta param ldx n_pat lda tapat,x sta hlp+1 ldx p_trk lda _tn5,x sta hlp ldx #0 ldy #1 _xx0 lda (hlp),y and #$1f cmp komend bne *+11 lda (hlp),y | and #$e0 | ora param | sta (hlp),y | clc ? lda hlp adc #12 sta hlp bcc *+4 inc hlp+1 inx cpx #64 bne _xx0 jsr cl_k lda 764 cmp #12 bne *-5 lda #16 sta pom_1 ldx <_txt7 ldy >_txt7 _ex9 jsr _wname jsr set_h0 jsr set_sc lda #15 sta licznik lda #0 sta p_pat jsr srt2 jsr s_eor jsr cl_k lda #20 sta $2d9 jmp keybd ;-----------; ;- TRANS -; ;-----------; _trans jsr cl_k lda #0 sta $2d9 ldx #4 lda #'?'-32 sta _txt6+28,x dex bpl *-4 lda #'_'-32 sta _txt6+30 lda #17 sta pom_1 ldx <_txt6 ldy >_txt6 jsr _wname lda 764 cmp #$ff beq *-5 cmp #28 bne *+24 | lda #17 | sta pom_1 | ldx <_txt6 | ldy >_txt6 | jmp _ex9 | | jsr cl_k | lda 764 | cmp #$ff | beq *-5 | ldx #0 ? cmp o_klw,x ? bne *+14 | stx _yp || lda hex,x || sta _e4+71 || jmp _tp2 || inx ?| cpx #2 | bne *-20 jmp *-34 _tp2 jsr cl_k lda 764 cmp #$ff beq *-5 ldx #0 cmp o_klw,x ? bne *+14 | stx _yp+1 || lda hex,x || sta _e4+72 || jmp *+11 || inx ?| cpx #16 | bne *-20 jmp _tp2 lda _yp jsr _q ora _yp+1 sta komend _tp4 jsr cl_k lda 764 cmp #$ff beq *-5 ldx #0 cmp o_klw,x ? bne *+14 | stx _yp || lda hex,x || sta _e4+74 || jmp _tp5 || inx ?| cpx #16 | bne *-20 jmp _tp4 _tp5 jsr cl_k lda 764 cmp #$ff beq *-5 ldx #0 cmp o_klw,x ? bne *+14 | stx _yp+1 || lda hex,x || sta _e4+75 || jmp *+11 || inx ?| cpx #16 | bne *-20 jmp _tp5 lda _yp jsr _q ora _yp+1 sta param ldx n_pat lda tapat,x sta hlp+1 ldx p_trk lda _tn5,x sta hlp ldx #0 _tpx2 ldy #1 lda (hlp),y and #$1f cmp komend bne _tpx ldy #0 lda (hlp),y and #$3f clc adc param cmp #36 bcc *+14 lda #17 sta pom_1 ldx <_txt6 ldy >_txt6 jmp _ex9 sta (hlp),y _tpx clc lda hlp adc #12 sta hlp bcc *+4 inc hlp+1 inx cpx #64 bne _tpx2 jsr cl_k lda 764 cmp #12 bne *-5 lda #17 sta pom_1 ldx <_txt6 ldy >_txt6 jmp _ex9 *-----------------* * out of memory * *-----------------* _oomem jsr n_12 lda #15 sta pom_1 ldx <_txt1 ldy >_txt1 jsr _wname jsr cl_k lda 764 cmp #28 bne *-5 lda #15 sta pom_1 ldx <_txt1 ldy >_txt1 jsr _wname ldx status txs jmp keybd *--------------------------* * kopiowanie patternow * *--------------------------* p_cli jsr _setcli ldy #0 lda (pse),y sta (hlp),y lda #0 sta (pse),y iny bne *-9 inc pse+1 inc hlp+1 lda hlp+1 cmp #$c3 bne *-19 jsr _offcli jsr cl_k jmp keybd p_ilc jsr _setcli ldy #0 lda (hlp),y sta (pse),y iny bne *-5 inc pse+1 inc hlp+1 lda hlp+1 cmp #$c3 bne *-15 jsr _offcli jmp keybd _offcli jsr of jsr set_h0 jsr set_sc lda #15 sta licznik lda #0 sta p_pat jsr srt2 jsr s_eor jsr cl_k rts _setcli ldx n_pat lda tapat,x sta pse+1 lda #$c0 sta hlp+1 lda #0 sta pse sta hlp jsr wait jsr on rts *---------------------------------* * wykiluj caly RAM i wskazniki * *---------------------------------* _clws jsr _kill ldx #15 lda #' '-32 sta _txt2+19,x sta _nam,x dex bpl *-7 ldx #22 sta _e1+13,x dex bpl *-4 ldx #20 sta _e1-22,x dex bpl *-4 ldx #0 stx _5+1 stx _a2+1 stx _n5+1 lda #$ff sta sng,x inx cpx #128 bne *-6 lda tapat sta sng lda #0 ;ustaw wskazniki bufora sta _atmp ;na jego poczatek sta _atmp+1 lda #$40 sta _atmp+2 jsr set_h0 jsr set_sc lda #15 sta licznik lda #0 sta p_pat jsr srt2 jsr s_eor lda #0 sta o_licz sta o_win lda #5 sta _licz2 jsr s_pse jsr _shlp lda o_licz sta p_ord jsr _ost jsr p_ins jsr cl_k jsr wait lda
dl sta $231 lda >fnt sta 756 jsr _ondli lda <$c09e ;wektor klawisza break sta $236 lda >$c09e sta $237 ldy #2 sty $2c6 dey sty $2da dey sty $2c8 lda #8 sta $2c5 lda #20 sta $2d9 jmp keybd *------------------------* * kopiowanie track'u * *------------------------* _coptr jsr _strk ldy #2 lda (pse),y sta (hlp),y lda #0 sta (pse),y dey bpl *-9 ldy #2 jsr _a12pse lda hlp+1 cmp #$c6 bne *-20 jsr _offcli jmp keybd _buptr jsr _strk ldy #2 lda (hlp),y sta (pse),y dey bpl *-5 ldy #2 jsr _a12pse lda hlp+1 cmp #$c6 bne *-16 jsr _offcli jmp keybd _strk ldx n_pat lda tapat,x sta pse+1 ldx p_trk lda _tn5,x sta pse lda #$c3 sta hlp+1 lda #0 sta hlp jsr wait jsr on rts _ofdli ldx <$c0ce ldy >$c0ce stx $200 sty $201 rts wait lda 20 cmp 20 beq *-2 rts ;-- ; stad bedziemy kopiowali procedure playera na strone zerowa ;-- TempBuffer org $00,* icl 'pm.asm' org $b678 skr dta d' protracker 1.51 by profi/madteam 1997 ' dta c'QMMMMMMMMMMMWMMMMMMMMMMMMMMMMMMMMMMMMMME' dta b($56),d'1 2 3 4|name: ' _e1 dta b($56),d'oct 1:2| ' _e2 dta b($56),d'pattern: 00',c'HRRRRRGRRRRRRRRRRRGRRRRRRRRD' _e3 dta b($56),d'position:00|order|load module| ' dta c'ARRRRRRRRRRR',c'I',d' |save module| ' _e4 dta b($56),d'sample:01 |00 00|load sample| ' dta b($56),d'volume:00 |00 00|save sample| ' dta b($56),d'length:0000|00 00|samplename | ' dta b($56),d'repeat:0000|00 00|songname | ' dta b($56),d'replen:0000|00 00|clear inst.| ' dta c'ARRGRRRRRRRRSRRRRRFRRGRRRRRRRRSRRRRRRRRD' scr dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta b($56),d' | | | | ' dta c'ZNNXNNNNNNNNXNNNNNNNNXNNNNNNNNXNNNNNNNNC' org $ac00 _p0rom ldx #0 _pp1 ldy TempBuffer,x ; tay lda ZeroPage,x sta TempBuffer,x tya sta ZeroPage,x inx cpx #$d8 bne _pp1 rts _txt5 dta c'QMMMMMMMMMMMMMMME' dta b($56),d'unknown format' dta c'ZNNNNNNNNNNNNNNNC' hex dta d'0123456789abcdef' ;--------------; ;- FUNCTION -; ;--------------; *------------------------* * insert pos. in track * *------------------------* _movi ldx n_pat clc lda tapat,x adc #3 sta pse+1 ldx p_trk lda _tn5,x sec sbc #12 sta pse bcs *+4 dec pse+1 sec lda pse sbc <12 sta hlp lda pse+1 sbc >12 sta hlp+1 ldx #63 cpx winpoz beq _dh1 ldy #2 _ds lda (hlp),y sta (pse),y dey bpl _ds ldy #2 sec lda pse sbc #12 sta pse bcs *+4 dec pse+1 sec lda hlp sbc #12 sta hlp bcs *+4 dec hlp+1 dex cpx winpoz bne _ds lda #0 sta (pse),y dey bpl *-3 _dh1 jmp _dh0 *------------------------* * delete pos. in track * *------------------------* _movd ldx n_pat lda tapat,x sta pse+1 ldx p_trk lda _tn5,x sta pse ldx winpoz beq _dh3 cpx #63 beq _dh0 _dh2 clc lda pse adc #12 sta pse bcc *+4 inc pse+1 dex bne _dh2 _dh3 clc lda pse adc <12 sta hlp lda pse+1 adc >12 sta hlp+1 ldx winpoz ldy #2 _ds1 lda (hlp),y sta (pse),y dey bpl _ds1 ldy #2 clc lda pse adc #12 sta pse bcc *+4 inc pse+1 clc lda hlp adc #12 sta hlp bcc *+4 inc hlp+1 inx cpx #63 bne _ds1 lda #0 sta (pse),y dey bpl *-3 _dh0 jsr set_h0 jsr set_sc lda #15 sta licznik lda #0 sta p_pat jsr srt2 jsr s_eor jsr cl_k jmp keybd *---------------------------* * wpisywanie nazwy sampla * *---------------------------* _clall jsr _stname jsr on ldx #21 ldy #21 lda (hlp),y sta _snam,x dey dex bpl *-7 jsr of ldy _n5+1 lda #''-32 sta _e1+13,y jsr cl_k _n6 jsr $f2f8 cmp #$1b beq _endn cmp #$9b beq _endn cmp #$7e beq _del2 bmi *+4 eor #$80 ldy _n5+1 cpy #22 beq _n6 _n5 ldy #0 cmp #$40 bcc *+11 clc adc #32 sta _snam,y jmp *+12 sta _snam,y sec sbc #32 jmp *+6 sec sbc #64 sta _e1+13,y lda #''-32 sta _e1+14,y inc _n5+1 jmp _n6 _del2 ldy _n5+1 lda #' '-32 sta _snam,y sta _e1+13,y cpy #0 beq _n6 dec _n5+1 _n7 lda #''-32 sta _e1+12,y jmp _n6 _endn ldy _n5+1 lda #' '-32 sta _e1+13,y sta _snam,y jsr _stname jsr on ldx #21 ldy #21 lda _snam,x sta (hlp),y dey dex bpl *-7 jsr of jsr cl_k rts _snam dta c' ' *---------------------------* * wpisywanie nazwy utworu * *---------------------------* _clpat ldy _5+1 lda #''-32 sta _e1-22,y jsr cl_k _6 jsr $f2f8 cmp #$1b beq _endq cmp #$9b beq _endq cmp #$7e beq _del1 bmi *+4 eor #$80 ldy _5+1 cpy #20 beq _6 _5 ldy #0 cmp #$40 bcc *+11 clc adc #32 sta _nam,y jmp _10 sta _nam,y sec sbc #32 jmp *+6 _10 sec sbc #64 sta _e1-22,y lda #''-32 sta _e1-21,y inc _5+1 jmp _6 _del1 ldy _5+1 lda #' '-32 sta _nam,y sta _e1-22,y cpy #0 beq _6 dec _5+1 _7 lda #''-32 sta _e1-23,y jmp _6 _endq ldy _5+1 lda #' '-32 sta _e1-22,y jsr cl_k rts _nam dta c' ' *----------------------------* * wpisywanie nazwy pliku * *----------------------------* _name jsr cl_k lda #18 sta pom_1 ldx <_txt2 ldy >_txt2 jsr _wname lda #0 sta _a2+1 tax sta _loa,x sta _e4+61,x inx cpx #15 bne *-9 lda #''-32 sta _e4+61 _a1 jsr $f2f8 cmp #$1b beq krzoki cmp #$9b beq _end cmp #$7e beq _del bmi *+4 eor #$80 ldy _a2+1 cpy #15 beq _a1 _a2 ldy #0 sta _loa,y sec sbc #32 sta _e4+61,y lda #''-32 sta _e4+62,y inc _a2+1 jmp _a1 _del ldy _a2+1 lda #' '-32 sta _loa,y sta _e4+61,y cpy #0 beq _a1 dec _a2+1 _a4 lda #''-32 sta _e4+60,y jmp _a1 _end ldy _a2+1 sta _loa,y lda #' '-32 sta _e4+61,y lda #18 sta pom_1 ldx <_txt2 ldy >_txt2 jsr _wname rts krzoki ldy _a2+1 lda #' '-32 sta _e4+61,y lda #18 sta pom_1 ldx <_txt2 ldy >_txt2 jsr _wname ldx status ;przywroc stary stan txs ;wskaznika stosu jmp keybd _wname stx hlp sty hlp+1 lda <_e4+20 sta pse lda >_e4+20 ;w x,y podaj adres sta pse+1 ;komunikatu lda #2 sta pomoc ldy #0 _wi0 lda (hlp),y tax lda (pse),y sta (hlp),y txa sta (pse),y iny cpy pom_1 ;szerokosc textu bne _wi0 ldy #0 clc lda pse adc #40 sta pse bcc *+4 inc pse+1 clc lda hlp adc pom_1 ;szerokosc sta hlp bcc *+4 inc hlp+1 dec pomoc bpl _wi0 jsr _ondli rts *-----------------------* * zapis instrumentu * *-----------------------* _ssamp ldy n_inst lda tendl,y ora tendh,y bne *+6 jsr cl_k rts jsr _name jsr _cl ldx <_loa ldy >_loa lda #8 sta __k+1 lda #3 jsr _op ldy n_inst ;stworz naglowek sec lda tendl,y sbc tstrl,y sta $680 lda tendh,y sbc tstrh,y sta $681 sec lda tivol,y sbc #$d8 asl @ sta $682 sec lda trepl,y sbc tstrl,y sta $683 lda treph,y sbc tstrh,y sta $684 jsr _stname jsr on ldx #21 ldy #21 lda (hlp),y sta $685,x dey dex bpl *-7 jsr of ldx <27 ldy >27 jsr _le ldx <$680 ldy >$680 lda #11 jsr _re ldy n_inst ;przygotuj sampla lda tendl,y ;do zgrania sec sbc tstrl,y tax lda tendh,y sbc tstrh,y tay jsr _le ldy n_inst lda tab_3,y ora #1 sta $d301 ldx tstrl,y lda tstrh,y tay lda #11 jsr _re jsr _cl jsr n_12 jsr _ondli jsr cl_k rts *----------------------* * zapis utworu * *----------------------* _sdir jsr _name jsr bufclr ldx #0 lda _nam,x sta _bf,x inx cpx #20 bne *-9 lda <$c600 sta patadr lda >$c600 sta patadr+1 jsr _ad lda #1 sta _go+1 _go ldx #0 _13 lda tendh,x bne *+18 ;skok do lda tendl,x ldy #42 sta (pse),y iny cpy #49 bne *-5 lda #1 sta (pse),y jmp _rew lda tendl,x ;dlug. sampla sec sbc tstrl,x tay lda tendh,x sbc tstrh,x jsr _intel ldy #42 sta (pse),y txa iny sta (pse),y ldx _go+1 ;glosnosc sampla lda tivol,x sec sbc #$d8 asl @ ldy #45 sta (pse),y ldx _go+1 ;czy sampl jest lda tendh,x ;zapetlony cmp treph,x beq _rer ldx _go+1 ;pocz petli sampla lda trepl,x sec sbc tstrl,x tay lda treph,x sbc tstrh,x jsr _intel ldy #46 sta (pse),y txa iny sta (pse),y ldx _go+1 lda tendl,x sec sbc trepl,x tay lda tendh,x sbc treph,x jsr _intel ldy #48 sta (pse),y txa iny sta (pse),y jmp _rew _rer ldy #46 lda #0 sta (pse),y iny cpy #49 bne *-5 lda #1 sta (pse),y _rew jsr on ldy #0 ldx #0 lda (patadr),y sta $680,x iny inx cpx #22 bne *-9 jsr of ldx #0 ldy #20 lda $680,x sta (pse),y iny inx cpx #22 bne *-9 clc lda pse adc #30 sta pse bcc *+4 inc pse+1 clc lda patadr adc #22 sta patadr bcc *+4 inc patadr+1 inc _go+1 lda _go+1 cmp #32 bne j_13 beq *+5 j_13 jmp _go ldx #0 lda sng,x cmp #$ff beq *+9 inx cpx #128 bne *-10 ldx #0 stx _bf+950 ;dlugosc songu lda #127 sta _bf+951 lda tapat ;najw. num. patternu sta _m1+1 ldy #0 lda sng,y ? cmp #$ff | beq *+14 | _m1 cmp #0 | | bcc *+5 | | sta _m1+1 | | iny | | cpy #128 | | bne *-17 ldy _m1+1 ? tya ldx #1 _m5 cmp tapat,x bne *+8 stx il_pt jmp _m6 inx jmp _m5 _m6 ldx #0 ldy #0 _z5 lda sng,y cmp #$ff beq _z6 _z3 cmp tapat,x bne _z4 txa sta _bf+952,y ldx #0 iny jmp _z5 _z4 inx jmp _z3 _z6 ldx #0 lda title,x sta _bf+1080,x inx cpx #4 bne *-9 jsr _cl ldx <_loa ;zapis naglowka ldy >_loa lda #8 sta __k+1 lda #3 jsr _op ldx <1084 ldy >1084 jsr _le ldx <_bf ldy >_bf lda #11 jsr _re lda tapat ;zapis patternow sta pse+1 lda #0 sta pse _more lda #0 sta tse+1 lda <_bf sta hlp lda >_bf sta hlp+1 _kg jsr _scnv ldy #3 lda tmp,y sta (hlp),y dey bpl *-6 clc lda hlp adc #4 sta hlp bcc *+4 inc hlp+1 clc lda pse adc #3 sta pse bcc *+4 inc pse+1 inc tse+1 bne _kg ldx <1024 ldy >1024 jsr _le ;x,y -> ile zapisac ldx <_bf ldy >_bf lda #11 jsr _re dec il_pt bpl _more lda #1 sta _lip+1 _lip ldy #1 ;czy zapisac lda tstrl,y ora tstrh,y beq _jd ldy _lip+1 lda tab_3,y ora #1 sta $d301 ldy _lip+1 lda tendl,y sec sbc tstrl,y tax lda tendh,y sbc tstrh,y tay jsr _le ldy _lip+1 ldx tstrl,y lda tstrh,y tay lda #11 jsr _re _jd inc _lip+1 lda _lip+1 cmp #32 bne _lip jsr _cl jsr n_12 jsr _ondli jsr cl_k jsr of rts _scnv lda #0 ldy #3 sta tmp,y dey bpl *-4 ldy #1 lda (pse),y and #$1f beq _sc1 ldy #0 lda (pse),y and #$3f _sc0 asl @ tax lda kod,x sta tmp+1 lda kod+1,x sta tmp ldy #1 lda (pse),y and #$1f sta pomoc and #$f jsr _q sta tmp+2 lda pomoc and #$f0 ora tmp sta tmp _sc1 ldy #1 lda (pse),y and #$e0 cmp #$80 beq _speed cmp #$40 beq _volum cmp #$20 beq _brkx rts _speed lda #$f ora tmp+2 sta tmp+2 ldy #2 lda (pse),y sta tmp+3 rts _volum lda #$c ora tmp+2 sta tmp+2 ldy #2 lda (pse),y sec sbc #$d8 asl @ sta tmp+3 rts _brkx lda #$d ora tmp+2 sta tmp+2 lda #0 sta tmp+3 rts _intel sty hlp lsr @ ror hlp ldx hlp rts *------------------------* * wykasuj instrument * *------------------------* _clsmp ldx n_inst lda #$d8 sta tivol,x lda #0 sta tstrl,x sta tstrh,x sta trepl,x sta treph,x sta tendl,x sta tendh,x jsr _stname jsr on lda #0 ldy #21 sta (hlp),y dey bpl *-3 jsr of lda #0 ldx #22 sta _e1+13,x dex bpl *-4 jsr p_ins jsr cl_k rts *------------------------* * wczytywanie utworu * *------------------------* _ldir ldx #14 lda _mload,x sta _loa,x dex bpl *-7 ldx #2 lda _mload+12,x sta _dir+5,x dex bpl *-7 jsr katalog jsr _ofdli jsr _rmod jsr _ondli jsr cl_k jsr of rts *------------------------* * wczytywanie sampla * *------------------------* _lsamp ldx #14 lda _sload,x sta _loa,x dex bpl *-7 ldx #2 lda _sload+12,x sta _dir+5,x dex bpl *-7 jsr katalog jsr _ofdli jsr _rsmp jsr _ondli jsr cl_k jsr of rts *---------------------* * odczyt katalogu * *---------------------* katalog jsr _ofdli jsr bufclr jsr _cl ldx <_dir ldy >_dir lda #6 sta __k+1 lda #3 jsr _op ldx <$500 ldy >$500 jsr _le ldx <_bf ldy >_bf lda #7 jsr _re jsr _cl jsr src jsr _ondli lda #0 sta d_licz sta d_il sta d_win lda #7 sta d_co jsr obl jsr _wdth lda d_il cmp #1 beq _escd jsr _clnx jsr src jsr setsrc jsr _wrt2 jsr _x3neg jsr cl_k jsr of _dexit lda 764 cmp #12 beq _dpisz cmp #33 beq *+23 cmp #15 beq *+13 cmp #14 beq *+12 cmp #28 beq _escd jmp _dexit jmp _dxt jmp _dpv jmp katalog _escd jsr cl_k jsr bufclr ldx status txs jmp keybd _dpisz jsr _x4neg ldy #0 ldx #3 lda (fpisz),y eor #$80 beq *+14 clc adc #$20 sta _loa,x inx iny cpy #8 bne *-16 jsr bufclr jsr cl_k rts _dxt ldx d_il dex stx pomoc lda d_win cmp #6 beq *+17 inc d_win lda d_win cmp pomoc beq _ta0 cmp #7 bne _yn1 inc d_licz ;* lda d_licz clc adc #7 cmp d_il beq _yn3 jsr src jsr setsrc jsr cl_k lda #7 sta d_co jsr _wrt2 jsr _x2neg jmp _dexit _ta0 dec d_win jsr cl_k jmp _dexit _yn1 jsr _x6neg jsr cl_k jmp _dexit _dpv lda d_win beq *+8 dec d_win jmp _yn2 lda d_licz beq _yn4 dec d_licz jsr src jsr setsrc jsr cl_k lda #7 sta d_co jsr _wrt2 jsr _x3neg jmp _dexit _yn2 jsr _x5neg jsr cl_k _yn4 jmp _dexit _yn3 dec d_licz jmp _dexit _x0neg lda <_e3+31 sta _dx lda >_e3+31 sta _dx+1 rts _x6neg jsr _x0neg ldx d_win dex beq *+8 jsr _adcdn dex bne *-4 jsr _x1neg jsr _adcdn jsr _x1neg rts _x5neg jsr _x0neg ldx d_win inx jsr _adcdn dex bne *-4 jsr _x1neg sec lda _dx sbc #40 sta _dx bcs *+4 dec _dx+1 jsr _x1neg rts _x2neg ldx #7 lda _e3+271,x eor #$80 sta _e3+271,x dex bpl *-9 rts _x3neg ldx #7 lda _e3+31,x eor #$80 sta _e3+31,x dex bpl *-9 rts _wrt2 ldx d_il dex stx pomoc ldy #2 lda (_sr),y cpy #10 beq end2 sec sbc #$20 dey dey sta (_sc),y iny iny iny bne *-16 end2 jsr incadr jsr incsrc dec pomoc beq *+7 dec d_co bne _wrt2 rts setsrc ldx d_licz beq *-4 clc lda _sr adc pom_1 sta _sr bcc *+4 inc _sr+1 dex bne *-13 rts _x4neg lda <_e3+31 sta fpisz lda >_e3+31 sta fpisz+1 ldx d_win beq *-12 clc lda fpisz adc #40 sta fpisz bcc *+4 inc fpisz+1 dex bne *-12 rts incadr clc lda _sc adc #40 sta _sc bcc *+4 inc _sc+1 rts incsrc clc lda _sr adc pom_1 sta _sr bcc *+4 inc _sr+1 rts src lda <_bf sta _sr lda >_bf sta _sr+1 lda <_e3+31 sta _sc lda >_e3+31 sta _sc+1 rts _wdth ldx #0 ldy #1 lda _bf,x cmp #$9b beq *+7 iny inx jmp *-9 sty pom_1 rts obl lda <_bf sta lop lda >_bf sta lop+1 ldy #0 lda (lop),y cmp #$9b bne *+5 inc d_il iny bne *-10 inc lop+1 lda lop+1 cmp >_bf+$500 bne *-18 rts _clnx jsr _ad ldx d_il cpx #7 bcs *-9 dex clc lda pse adc pom_1 sta pse bcc *+4 inc pse+1 dex bne *-13 ldy #0 lda #32 sta (pse),y iny bne *-3 rts _adcdn clc lda _dx adc #40 sta _dx bcc *+4 inc _dx+1 rts _dir dta c'D1:*.***',b($9b) *------------------------* * efekt "sample zero" * *------------------------* _null ldx #0 jsr _pc ldx #3 jsr _pc ldx #6 jsr _pc ldx #9 jsr _pc rts _pc stx hlp lda tapat sta hlp+1 lda #$21 sta pse lda #0 sta instr ldx #63 jsr g_0 dec pse bpl *-12 rts g_0 ldy #1 lda (hlp),y and #$1f beq *+22 sta instr jmp *+30 g_1 ldy #1 lda (hlp),y and #%11100000 ora instr sta (hlp),y jmp *+16 ldy #0 lda (hlp),y and #$3f cmp #36 beq *+5 jmp g_1 clc lda hlp adc #12 sta hlp bcc *+4 inc hlp+1 dex bpl g_0 rts _mot stx hlp asl @ rol hlp ldy hlp rts title dta c'M.K.' *------------------------* * opuszczenie programu * *------------------------* _exit jmp $e474 org $a800 ;----------; ;- MOVE -; ;----------; *-----------------------------------* * rozpoznaj ilosc dodatkowego RAM'u * *-----------------------------------* move jsr wait ldx il_bnk dex lda tab_1,x sta $d301 ldx #0 pocz lda volume,x ;przepisanie tablicy glosnosci do ostatniego wykrytego banku lsr @ lsr @ lsr @ lsr @ lsr @ _eo eor #$10 kon sta $4000,x inx bne pocz inc pocz+2 inc kon+2 lda pocz+2 cmp #$a8 bne pocz jsr on lda #0 sta $22f sta $d400 ldy #0 ;tablice czestotliwosci "TIDL" pod AdrTidl, "TID2" pod AdrTid2 lda tidl,y sta AdrTidl,y lda tid2,y sta AdrTid2,y iny bne *-13 jsr of jsr wait lda #$22 sta $22f rts ;----------; ;- TIDL -; ;----------; tidl equ * dta l(100,106,112,119) ;37 bajtow dta l(126,134,142,150) dta l(159,168,178,189) dta l(200,212,225,238) dta l(252,267,283,300) dta l(318,337,357,378) dta l(401,424,450,476) dta l(504,535,567,600) dta l(636,674,714,756) dta l(0) dta h(100,106,112,119) ;37 bajtow dta h(126,134,142,150) dta h(159,168,178,189) dta h(200,212,225,238) dta h(252,267,283,300) dta h(318,337,357,378) dta h(401,424,450,476) dta h(504,535,567,600) dta h(636,674,714,756) dta h(0) tid2 equ * dta l(138,146,155,164) ;37 bajtow dta l(174,184,195,207) dta l(219,232,246,260) dta l(276,292,309,328) dta l(347,368,390,413) dta l(437,463,491,520) dta l(551,583,618,655) dta l(694,735,779,825) dta l(874,926,981,1039) dta l(0) dta h(138,146,155,164) ;37 bajtow dta h(174,184,195,207) dta h(219,232,246,260) dta h(276,292,309,328) dta h(347,368,390,413) dta h(437,463,491,520) dta h(551,583,618,655) dta h(694,735,779,825) dta h(874,926,981,1039) dta h(0) org $5c0 *--------------------------------* * insert pos. in window orders * *--------------------------------* _inr clc lda o_licz adc o_win sta patno cmp #$7f bne *+8 jsr cl_k jmp key2 ldx #$7e ldy #$7f lda sng,x sta sng,y dex dey cpy patno bne *-10 lda #$ff sta sng,y jmp orders *--------------------------------* * delete pos. in window orders * *--------------------------------* _der clc lda o_licz adc o_win sta patno cmp #$7f bne *+8 jsr cl_k jmp key2 lda patno tay iny tya tax dey lda sng,x sta sng,y inx iny cpy #$7f bne *-10 lda #$ff sta sng,y jmp orders _a12pse clc lda pse adc #12 sta pse bcc *+4 inc pse+1 clc lda hlp adc #12 sta hlp bcc *+4 inc hlp+1 rts _h lsr @ lsr @ lsr @ lsr @ rts _q asl @ asl @ asl @ asl @ rts cl_k lda #$ff sta 764 rts dliv pha lda #$14 sta $d40a sta $d018 lda dliv sta $201 lda #$c0 sta $d40e rts _ad ldx <_bf ldy >_bf stx pse sty pse+1 rts org $8000 ;------------; ;- SELECT -; ;------------; *-----------------------------------* * rozpoznaj ilosc dodatkowego RAM'u * * oraz wypisz to na ekranie * *-----------------------------------* select jsr wait ldx >$c0e2 ldy <$c0e2 lda #6 jsr $e45c jsr on ldx #9 ldy #0 tya _cl_ sta $c000,y dey bne _cl_ inc _cl_+2 dex bne _cl_ jsr of jsr wait jsr cl_k lda deelka sta $231 lda #10 sta $2c5 lda #0 sta $2c6 lda >fnt sta 756 ldy #0 tya sta _bnk,y dey bne *-4 ldy #0 tya ora #%10000011 and #%11101111 sta $d301 sta $4000 iny bne *-12 ldy #0 tya ora #%10000011 and #%11101111 sta $d301 ldx $4000 lda #1 sta _bnk,x iny bne *-17 ldy #0 ldx #0 _sv lda _bnk,y beq *+11 tya sta tab_1,x inx cpx #32 beq *+5 iny bne _sv stx il_bnk jsr n_12 lda #0 sta $23fd sta $23fe sta $23ff ldx il_bnk cpx #1 bne *+28 ldx #0 lda ek3+160,x sta ek3+120,x inx cpx #39 bne *-9 jsr cl_k lda 764 cmp #33 bne *-5 jmp ($a) sed clc lda $23fd adc #$84 sta $23fd lda $23fe adc #$63 sta $23fe lda $23ff adc #$01 sta $23ff cld dex bne *-28 lda $23fd tax and #$f ora #'0'-32 sta ek3+146 txa jsr _h ora #'0'-32 sta ek3+145 lda $23fe tax and #$f ora #'0'-32 sta ek3+144 txa jsr _h ora #'0'-32 sta ek3+143 lda $23ff tax and #$f ora #'0'-32 sta ek3+142 txa jsr _h ora #'0'-32 sta ek3+141 jsr cl_k lda 764 cmp #10 beq _pokey cmp #18 beq _covox jmp *-11 _pokey jsr wait jsr _p0rom lda #1 sta ch_0+1 sta ch_4+1 sta _of1+1 lda #3 sta ch_1+1 sta _of2+1 lda #5 sta ch_2+1 sta _of3+1 lda #7 sta ch_3+1 sta _of4+1 lda #$d2 sta ch_0+2 sta ch_1+2 sta ch_2+2 sta ch_3+2 sta ch_4+2 sta _df1+1 sta _df2+1 sta _df3+1 sta _df4+1 jsr _p0rom jmp init _covox lda dlk sta $231 lda #$ea ;kod rozkazu NOP sta pocz+3 sta pocz+4 sta pocz+5 sta pocz+6 sta pocz+7 lda #0 sta _eo+1 lda 764 cmp #31 beq *+13 cmp #30 beq *+14 cmp #26 beq *+15 jmp *-15 lda #$d5 jmp *+10 lda #$d6 jmp *+5 lda #$d7 pha jsr _p0rom pla sta _df1+1 sta _df2+1 sta _df3+1 sta _df4+1 sta ch_0+2 sta ch_1+2 sta ch_2+2 sta ch_3+2 sta ch_4+2 jsr _p0rom jsr cl_k jmp init deelka dta d'ppppppppppp' dta b($42),a(ek3),b(2),b(2) dta b($50),b(2) dta b($41),a(deelka) dlk dta d'ppppppppppp' dta b($42),a(ek4) dta b($50),b(2),b(2) dta b(2),b($41),a(dlk) ek3 dta d' select device: ' dta d' -pokey 4-bit ' dta d' -covox 8-bit ' dta d' extended RAM - 000000 bytes ' dta d' i need extended RAM ' ek4 dta d' select adress: ' dta d' -page $d5 ' dta d' -page $d6 ' dta d' -page $d7 ' run select end of file