;- 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  ;ustaw adres na
 sta filndn        ;ekranie
 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
 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
 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 $230
 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 ;ustaw adres nazwy sampla
 sta hlp
 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 $230
 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 <dliv2
 sta $200
 pla
 rti

dliv2 pha
 lda #$02
 sta $d40a
 sta $d018
 lda <dliv
 sta $200
 pla
 rti

_ondli jsr wait
 lda <dliv
 sta $200
 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 $230
 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 $230
 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
