Login

Subversion Repositories NedoOS

Rev

Rev 1616 | Rev 1987 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

;trdos driver (izzx)
    MODULE Dos
; API methods
ESX_GETSETDRV = #89
ESX_FOPEN = #9A
ESX_FCLOSE = #9B
ESX_FSYNC = #9C
ESX_FREAD = #9D
ESX_FWRITE = #9E

; File modes
FMODE_READ = #01
FMODE_WRITE = #06
FMODE_CREATE = #0E

    ; MACRO esxCall func
    ; rst #8 : db func
    ; ENDM
       
;id = 0 ╤Д╨░╨╣╨╗ ╨╜╨╡ ╨╛╤В╨║╤А╤Л╤В
;id = 1 ╤Д╨░╨╣╨╗ ╨┤╨╗╤П ╤З╤В╨╡╨╜╨╕╤П
;id = 2 ╤Д╨░╨╣╨╗ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕
;id = 3 ╤Д╨░╨╣╨╗ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕ ╤В╨╕╨┐ TRD
;id = 4 ╤Д╨░╨╣╨╗ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕ ╤В╨╕╨┐ SCL

; HL - filename in ASCIIZ
loadBuffer:
    ld b, Dos.FMODE_READ: call Dos.fopen
    push af
        ld hl, outputBuffer, bc, #ffff - outputBuffer : call Dos.fread
        ld hl, outputBuffer : add hl, bc : xor a : ld (hl), a : inc hl : ld (hl), a
    pop af
    call Dos.fclose
    ret


; Returns:
;  A - current drive
; getDefaultDrive: ;╨╜╨╕╨│╨┤╨╡ ╨╜╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╤Б╤П
    ; ld a, 0 : esxCall ESX_GETSETDRV
    ; ret



; Opens file on default drive
; B - File mode
; HL - File name
; Returns:
;  A - file stream id
fopen:
    ; push bc : push hl
    ; call getDefaultDrive
    ; pop ix : pop bc
    ; esxCall ESX_FOPEN
    ; ret
        ld a,b
        cp FMODE_READ ;╨╡╤Б╨╗╨╕ ╤А╨╡╨╢╨╕╨╝ ╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Д╨░╨╣╨╗╨░
        jr z,fopen_r
        cp FMODE_CREATE
        jr z,fopen_c ;╨╡╤Б╨╗╨╕ ╤А╨╡╨╢╨╕╨╝ ╤Б╨╛╨╖╨┤╨░╨╜╨╕╨╡ ╤Д╨░╨╣╨╗╨░
        jr fopen_err ;╨╕╨╜╨░╤З╨╡ ╨▓╤Л╤Е╨╛╨┤
       
fopen_r ;╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Б╤Г╤Й╨╡╤Б╤В╨▓╤Г╤О╤Й╨╡╨│╨╛ ╤Д╨░╨╣╨╗╨░ ╨╜╨░ ╤З╤В╨╡╨╜╨╕╨╡ (id=1)
                        call format_name ;
                        ld      c,#13 ;move file info to syst var
            call    #3d13
            ld      c,#0a ;find file
            call    #3d13
            ld      a,c
                        cp              #ff
                        jr              z,fopen_err ;╨╡╤Б╨╗╨╕ ╨╜╨╡ ╨╜╨░╤И╨╗╨╕ ╤Д╨░╨╣╨╗╨░
            ld      c,#08 ;read file title
            call    #3d13
            ;ld      hl,loadadr ;╨║╤Г╨┤╨░
            ld      de,(#5ceb) ;╨╜╨░╤З╨░╨╗╨╛ ╤Д╨░╨╣╨╗╨░ ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░
            ld      (f_r_cur_trk),de

            ld      a,(#5cea)
            ld      (f_r_len_sec),a ;╨┤╨╗╨╕╨╜╨░ ╨▓ ╤Б╨╡╨║╤В╨╛╤А╨░╤Е
            ;or      a
            ;ret     z    ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨┐╤Г╤Б╤В╨╛╨╣
                       
                        ld de,(#5CE8) ; ╨┤╨╗╨╕╨╜╨░ ╤Д╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╜╨╛╨╣ ╤З╨░╤Б╤В╨╕ ╨┤╨╗╤П BASIC
                        ld      (f_r_len),de

            ; ld      de,(fcurtrk) ;╤В╨╡╨║╤Г╤Й╨╕╨╡ ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░
            ; ld      (#5cf4),de ;╨▓╨╛╤Б╤Б╤В╨░╨╜╨╛╨▓╨╕╨╝
                        xor a
                        ld              a,1
                        ld (f_r_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╤Д╨░╨╣╨╗ ╨┤╨╗╤П ╤З╤В╨╡╨╜╨╕╤П ╨╛╤В╨║╤А╤Л╤В
                        ;id ╨║╨░╨╜╨░╨╗╨░ ╨▒╤Г╨┤╨╡╤В 1
        ret
       
fopen_err
        xor a ;╨╡╤Б╨╗╨╕ ╨╜╨╕╨║╨░╨║╨╛╨╣ ╤Д╨░╨╣╨╗ ╨╜╨╡ ╨╛╤В╨║╤А╤Л╨╗╨╕, ╤В╨╛ id = 0
        scf ;╤Д╨╗╨░╨│ ╨╛╤И╨╕╨▒╨║╨╕
        ret


fopen_c ;╤Б╨╛╨╖╨┤╨░╨╜╨╕╨╡ ╨╜╨╛╨▓╨╛╨│╨╛ ╤Д╨░╨╣╨╗╨░ (id=2-4)
        call format_name ;
        ;╨▓╤Л╤П╤Б╨╜╨╕╨╝, ╨╜╨╡ ╨╛╨▒╤А╨░╨╖ ╨╗╨╕ ╤Н╤В╨╛ ╨┤╨╗╤П ╤А╨░╨╖╨▓╨╛╤А╨░╤З╨╕╨▓╨░╨╜╨╕╤П
    ld hl, trdExt1 : call CompareBuff.search : and a : jr nz, fopen_c_trd
    ld hl, trdExt2 : call CompareBuff.search : and a : jr nz, fopen_c_trd
        ld hl, sclExt1 : call CompareBuff.search : and a : jr nz, fopen_c_scl
    ld hl, sclExt2 : call CompareBuff.search : and a : jr nz, fopen_c_scl

       
fopen_c_2       ;╤Б╨╛╨╖╨┤╨░╨╜╨╕╨╡ ╨┐╤А╨╛╨╕╨╖╨▓╨╛╨╗╤М╨╜╨╛╨│╨╛ ╤Д╨░╨╣╨╗╨░
        jr              fopen_err ;╨┐╨╛╨║╨░ ╨╛╤В╨║╨╗╤О╤З╨╡╨╜╨╛

        ; ld      c,#13 ;move file info to syst var
    ; call    #3d13
        ; ld de,256 ;╨╖╨░╨┐╨╕╤И╨╡╨╝ ╨┐╨╛╨║╨░ 1 ╤Б╨╡╨║╤В╨╛╤А
        ; ld hl,#4000 ;╨▓╨╛╨╖╤М╨╝╤С╨╝ ╤Б╨╗╤Г╤З╨░╨╣╨╜╤Л╨╡ ╨┤╨░╨╜╨╜╤Л╨╡ ╨╕╨╖ ╤Н╨║╤А╨░╨╜╨░
    ; ld      c,#0b ;╨╖╨░╨┐╨╕╤Б╤М ╤Д╨░╨╣╨╗╨░ CODE
    ; call    #3d13
    ; ld      a,c
        ; cp            #ff
        ; jr            z,fopen_err ;╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░
               
    ; ld      de,(#5ceb) ;╨╜╨░╤З╨░╨╗╨╛ ╤Д╨░╨╣╨╗╨░ ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░
    ; ld      (f_w_cur_trk),de
    ; ld      a,(#5cea)
    ; ld      (f_w_len_sec),a ;╨┤╨╗╨╕╨╜╨░ ╨▓ ╤Б╨╡╨║╤В╨╛╤А╨░╤Е
        ; xor a ;id ╨║╨░╨╜╨░╨╗╨░ ╨▒╤Г╨┤╨╡╤В 2
        ; ld a,2
        ; ld (f_w_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╤Д╨░╨╣╨╗ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕ ╨╛╤В╨║╤А╤Л╤В
        ; ret          
       




fopen_c_trd     ;╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Д╨░╨╣╨╗╨░ ╨┤╨╗╤П ╤А╨░╨╖╨▓╨╛╤А╨░╤З╨╕╨▓╨░╨╜╨╕╤П ╨╛╨▒╤А╨░╨╖╨░ trd (id=3)
        ld a,(#5D19) ;╨╜╨╛╨╝╨╡╤А ╨┤╨╕╤Б╨║╨╛╨▓╨╛╨┤╨░ ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О
        add a,"A"
        ld (write_ima_d),a ;╨┐╨╛╨┤╤Б╤В╨░╨▓╨╕╨╝ ╨▒╤Г╨║╨▓╤Г ╨▓ ╨╖╨░╨┐╤А╨╛╤Б╨╡
    ld hl, write_ima
    call DialogBox.msgBox ;╨┐╤А╨╡╨┤╤Г╤А╨╡╨╢╨┤╨╡╨╜╨╕╨╡
WAITKEY_trd    
        ld              a,(23556)
        cp 255
        JR Z,WAITKEY_trd        ;╨╢╨┤╤С╨╝ ╨╗╤О╨▒╤Г╤О ╨║╨╗╨░╨▓╨╕╤И╤Г
       
        ld      de,0 ;╨╜╨░╤З╨░╨╗╨╛ ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░
    ld      (#5cf4),de
        xor a
        ld (sec_shift),a ;╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П
        ld hl,0
        ld (f_w_len+0),hl
        ld (f_w_len+2),hl
        ld a,3 ;id ╨║╨░╨╜╨░╨╗╨░
        ld (f_w_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ trd ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕ ╨╛╤В╨║╤А╤Л╤В
        ret




fopen_c_scl     ;╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Д╨░╨╣╨╗╨░ ╨┤╨╗╤П ╤А╨░╨╖╨▓╨╛╤А╨░╤З╨╕╨▓╨░╨╜╨╕╤П ╨╛╨▒╤А╨░╨╖╨░ scl (id=4)
        ld a,(#5D19) ;╨╜╨╛╨╝╨╡╤А ╨┤╨╕╤Б╨║╨╛╨▓╨╛╨┤╨░ ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О
        add a,"A"
        ld (write_ima_d),a ;╨┐╨╛╨┤╤Б╤В╨░╨▓╨╕╨╝ ╨▒╤Г╨║╨▓╤Г ╨▓ ╨╖╨░╨┐╤А╨╛╤Б╨╡
    ld hl, write_ima
    call DialogBox.msgBox ;╨┐╤А╨╡╨┤╤Г╤А╨╡╨╢╨┤╨╡╨╜╨╕╨╡
WAITKEY_scl    
        ld              a,(23556)
        cp 255
        JR Z,WAITKEY_scl        ;╨╢╨┤╤С╨╝ ╨╗╤О╨▒╤Г╤О ╨║╨╗╨░╨▓╨╕╤И╤Г
       
        ld      de,0 ;╨╜╨░╤З╨░╨╗╨╛ ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░
    ld      (#5cf4),de
       
        ld hl,cat_buf ;╨╛╤З╨╕╤Б╤В╨╕╤В╤М ╨╝╨╡╤Б╤В╨╛ ╨┤╨╗╤П ╨║╨░╤В╨░╨╗╨╛╨│╨░ ╨┤╨╕╤Б╨║╨╡╤В╤Л
        ld de,cat_buf+1
        ld (hl),0
        ld bc,9*256-1
        ldir
       
        call scl_parse ;╨╖╨░╨┐╤Г╤Б╨║ ╤Ж╨╕╨║╨╗╨░ ╤Б╨▒╨╛╤А╨║╨╕ ╨╛╨▒╤А╨░╨╖╨░
       
        xor a
        ld (sec_shift),a ;╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П
        ;ld (scl_que),a
        ld hl,0
        ld (f_w_len+0),hl
        ld (f_w_len+2),hl
        ld a,4 ;id ╨║╨░╨╜╨░╨╗╨░
        ld (f_w_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ scl ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕ ╨╛╤В╨║╤А╤Л╤В
        ret    



; A - file stream id
fclose:
    ;esxCall ESX_FCLOSE
        ; push af
; WAITKEY2      XOR A:IN A,(#FE):CPL:AND #1F:JR Z,WAITKEY2
        ; pop af
        cp 4 ;╨╡╤Б╨╗╨╕ scl
        jr nz,fclose2
        ld hl,sec_buf ;
        ld b,1
        call scl_write_buf ;╨┤╨╛╨┐╨╕╤И╨╡╨╝ ╨╛╤Б╤В╨░╤В╨╛╨║ scl, ╨╡╤Б╨╗╨╕ ╨╡╤Б╤В╤М
       
fclose2
        xor a ;╨║╨░╨║ ╨▒╤Л ╨╖╨░╨║╤А╤Л╨▓╨░╨╡╨╝ ╨▓╤Б╨╡ ╤Д╨░╨╣╨╗╤Л
        ld (f_r_flag),a
        ld (f_w_flag),a
    ret




; A - file stream id
; BC - length
; HL - buffer
; Returns
;  BC - length(how much was actually read)
fread: ;(id=1)
    ; push hl : pop ix
    ; esxCall ESX_FREAD
        ; push af
        ; ld a,4
        ; out (254),a
; WAITKEY       XOR A:IN A,(#FE):CPL:AND #1F:JR Z,WAITKEY
        ; xor a
        ; out (254),a
        ; pop af

        cp 1 ;id = 1?
        jr nz,fread_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╜╨╛╨╝╨╡╤А ╨┐╨╛╤В╨╛╨║╨░ ╨╜╨╡ = 1
        ld a,(f_r_flag)
        or a
        jr nz,fread_chek ;╤Д╨░╨╣╨╗ ╤Г╨╢╨╡ ╨╛╤В╨║╤А╤Л╤В?
fread_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╤Б ╨╛╤И╨╕╨▒╨║╨╛╨╣
        xor a
        scf ;╤Д╨╗╨░╨│ ╨╛╤И╨╕╨▒╨║╨╕
        ld bc,0 ;╨╜╨╕╤З╨╡╨│╨╛ ╨╝╤Л ╨╜╨╡ ╤Б╤З╨╕╤В╨░╨╗╨╕
        ret
       
fread_chek
        ld bc,(f_r_len_sec-1) ;╨╖╨░╨│╤А╤Г╨╢╨░╨╡╨╝ ╤Д╨░╨╣╨╗ ╤Ж╨╡╨╗╨╕╨║╨╛╨╝, ╨╜╨╡ ╤Б╨╝╨╛╤В╤А╤П ╨╜╨░ ╤В╨╛, ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨▒╨░╨╣╤В ╨▒╤Л╨╗╨╛ ╨╖╨░╨┐╤А╨╛╤И╨╡╨╜╨╛
    ld      c,5 ;read ╤З╨╕╤В╨░╨╡╨╝ ╤Ж╨╡╨╗╤Л╨╝╨╕ ╤Б╨╡╨║╤В╨╛╤А╨░╨╝╨╕
        ld de,(f_r_cur_trk)
    call    #3d13      
        ld bc,(f_r_len) ;╨▓╨╛╨╖╨▓╤А╨░╤В╨╕╨╝ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╤Б╤З╨╕╤В╨░╨╗╨╕ ╨▒╨░╨╣╤В (╨┤╨╗╨╕╨╜╤Г ╤Д╨░╨╣╨╗╨░)
        xor a ;╤Д╨╗╨░╨│╨╕ ╤Б╨▒╤А╨╛╤Б╨╕╨╝
    ret

; A - file stream id
; BC - length
; HL - buffer
; Returns:
;   BC - actually written bytes
fwrite: ;
    ; push hl : pop ix
    ; esxCall ESX_FWRITE
       
        ; push af
        ; ld a,2
        ; out (254),a
; WAITKEY1      XOR A:IN A,(#FE):CPL:AND #1F:JR Z,WAITKEY1
        ; xor a
        ; out (254),a
        ; pop af

        cp 2 ;id = 2?
        jr z,fwrite_chek ;╨┐╤А╨╛╨▓╨╡╤А╨║╨░ id ╨┐╨╛╤В╨╛╨║╨░
        cp 3 ;id = 3?
        jr z,fwrite_chek_trd ;╨┐╤А╨╛╨▓╨╡╤А╨║╨░ id ╨┐╨╛╤В╨╛╨║╨░
        cp 4 ;id = 4?
        jp z,fwrite_chek_scl ;╨┐╤А╨╛╨▓╨╡╤А╨║╨░ id ╨┐╨╛╤В╨╛╨║╨░

       
fwrite_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╤Б ╨╛╤И╨╕╨▒╨║╨╛╨╣
        xor a
        scf ;╤Д╨╗╨░╨│ ╨╛╤И╨╕╨▒╨║╨╕
        ld bc,0 ;╨╜╨╕╤З╨╡╨│╨╛ ╨╝╤Л ╨╜╨╡ ╨╖╨░╨┐╨╕╤Б╨░╨╗╨╕
        ret
       
fwrite_chek ;╨╖╨░╨┐╨╕╤Б╤М ╨┐╤А╨╛╨╕╨╖╨▓╨╛╨╗╤М╨╜╨╛╨│╨╛ ╤В╨╕╨┐╨░ ╤Д╨░╨╣╨╗╨░
        jr fwrite_no_chek ;╨┐╨╛╨║╨░ ╨╛╤В╨║╨╗╤О╤З╨╡╨╜╨╛
        ; ld a,(f_w_flag)
        ; or a
        ; jr z,fwrite_no_chek ;╤Д╨░╨╣╨╗ ╤Г╨╢╨╡ ╨╛╤В╨║╤А╤Л╤В?
        ; ld (temp_bc),bc
        ; ;ld bc,(f_r_len_sec-1) ;
    ; ld      c,6 ;╨┐╨╕╤И╨╡╨╝ ╤Ж╨╡╨╗╤Л╨╝╨╕ ╤Б╨╡╨║╤В╨╛╤А╨░╨╝╨╕
        ; ld de,(f_w_cur_trk)
    ; call    #3d13    
        ; ld bc,(temp_bc) ;╨▓╨╛╨╖╨▓╤А╨░╤В╨╕╨╝, ╤З╤В╨╛ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨╖╨░╨┐╤А╨░╤И╨╕╨▓╨░╨╗╨╕, ╤Б╤В╨╛╨╗╤М╨║╨╛ ╨╕ ╤Б╤З╨╕╤В╨░╨╗╨╕ ╨▒╨░╨╣╤В
        ; xor a ;╤Д╨╗╨░╨│╨╕ ╤Б╨▒╤А╨╛╤Б╨╕╨╝
    ; ret





fwrite_chek_trd ;╨╖╨░╨┐╨╕╤Б╤М trd ╤Д╨░╨╣╨╗╨░ (╤А╨░╨╖╨▓╨╛╤А╨░╤З╨╕╨▓╨░╨╜╨╕╨╡ ╨╛╨▒╤А╨░╨╖╨░)
        ; ld a,2
        ; out (254),a
; WAITKEY_t     XOR A:IN A,(#FE):CPL:AND #1F:JR Z,WAITKEY_t
        ; xor a
        ; out (254),a
        ld a,(f_w_flag)
        or a
        jr z,fwrite_no_chek ;╤Д╨░╨╣╨╗ ╤Г╨╢╨╡ ╨╛╤В╨║╤А╤Л╤В?
        ld (temp_bc),bc ;╨┤╨╗╨╕╨╜╨░
        ld (temp_hl),hl ;╨░╨┤╤А╨╡╤Б ╨┤╨░╨╜╨╜╤Л╤Е
        ld a,b
        or c
        jr z,fwrite_no_chek ; ╨╡╤Б╨╗╨╕ ╨┤╨╗╨╕╨╜╨░ 0, ╤В╨╛ ╨▓╤Л╤Е╨╛╨┤
       
        ; ld a,b
        ; or a
        ; jr nz,testt1
        ; nop
       
; testt1
       
        xor a
        ld (sec_part),a ;╨╛╨▒╨╜╤Г╨╗╨╕╤В╤М ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╨╡
        ld (sec_shift2),a
        ld (sec_shift2+1),a
        ld (sec_shift_flag),a
        ld (write_end_flag),a ;
       

        ld a,(sec_shift)
        or a
        jr z,fwrite_trd3 ;╨╡╤Б╨╗╨╕ ╤Б╨╝╨╡╤Й╨╡╨╜╨╕╤П ╨╜╨╡╤В, ╤В╨╛ ╨┐╨╡╤А╨▓╤Г╤О ╤З╨░╤Б╤В╤М ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝
       

        ld c,a
        ld b,0
        ld hl,(temp_bc) ;╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╖╨░╨┐╨╛╨╗╨╜╨╕╤В╤Б╤П ╨╗╨╕ ╤Ж╨╡╨╗╤Л╨╣ ╤Б╨╡╨║╤В╨╛╤А
        add hl,bc
       
        ld a,1
        ld (write_end_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╨╡ ╨╜╤Г╨╢╨╜╨╛ ╨┤╨╛╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║
       
        ld a,h
        or a
        jr nz,fwrite_trd4
        ld a,1
        ld (sec_shift_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜ ╤Б╨╡╨║╤В╨╛╤А
       
fwrite_trd4    
        ld hl,sec_buf ;╨▒╤Г╤Д╨╡╤А ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨│╨╛ ╤Б╨╡╨║╤В╨╛╤А╨░  
        add hl,bc ;╨╜╨░ ╤Н╤В╨╛╨╣ ╤В╨╛╤З╨║╨╡ ╨╛╤Б╤В╨░╨╜╨╛╨▓╨╕╨╗╨╕╤Б╤М
        ex de,hl
        ld hl,(temp_hl) ;╨┐╤А╨╕╤Б╨╛╨╡╨┤╨╕╨╜╨╕╨╝ ╨╜╨░╤З╨░╨╗╨╛ ╨┤╨░╨╜╨╜╤Л╤Е ╨▓ ╨║╨╛╨╜╨╡╤Ж ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╕╤Е
        ; ld a,c
        ; or a
        ; jr nz,fwrite_trd2
        ; inc b ;╨║╨╛╤А╤А╨╡╨║╤Ж╨╕╤П
; fwrite_trd2          
        ; ld c,a
        xor a
        sub c
        ld c,a ;╤Б╨║╨╛╨╗╤М╨║╨╛ ╨╛╤Б╤В╨░╨╗╨╛╤Б╤М ╨┐╨╡╤А╨╡╨╜╨╡╤Б╤В╨╕ ╨┤╨╛ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜╨╕╤П ╤Б╨╡╨║╤В╨╛╤А╨░
        ld (sec_shift2),bc ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨┤╨╛╨▒╨░╨▓╨╕╨╗╨╕ ╨▒╨░╨╣╤В
        ldir

        ld a,(sec_shift_flag)
        or a
        jr nz,fwrite_trd3 ;╨╡╤Б╨╗╨╕ ╤Б╨╡╨║╤В╨╛╤А ╨╡╤Й╤С ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜ ╨┐╨╕╤Б╨░╤В╤М ╨╜╨╡ ╨▒╤Г╨┤╨╡╨╝

        ld hl,sec_buf
        ld de,(#5cf4)
        ;ld (f_w_cur_trk),de    ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╝ ╨┐╨╛╨╖╨╕╤Ж╨╕╤О
    ld      bc,#0106 ;╨┐╨╕╤И╨╡╨╝ 1 ╤Б╨╡╨║╤В╨╛╤А ╨╕╨╖ ╨▒╤Г╤Д╨╡╤А╨░
    call    #3d13      
        ld a,c
        cp 255
        jp z,fwrite_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░  

        xor a
        ld (write_end_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╨╛ ╨┤╨╛╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║  
        ; ld de,(f_w_cur_trk) ;╨╡╤Б╨╗╨╕ ╤Б╨╡╨║╤В╨╛╤А ╨╡╤Й╤С ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜, ╨╛╤Б╤В╨░╨╜╨╡╨╝╤Б╤П ╨╜╨░ ╤Б╤В╨░╤А╨╛╨╣ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕
        ; ld (#5cf4),de
        ; ld b,1 ;╨╜╨░ ╤Б╨╡╨║╤В╨╛╤А ╨▓╨┐╨╡╤А╤С╨┤
        ; ld de,(f_w_cur_trk)
        ; call calc_next_pos
        ; ld (f_w_cur_trk),de  

fwrite_trd3    
        ld hl,(temp_hl) ;╨╖╨░╨┐╨╕╤И╨╡╨╝ ╨╛╤Б╤В╨░╤В╨╛╨║ ╨┤╨░╨╜╨╜╤Л╤Е
        ;ld a,(sec_shift)
        ;ld c,a
        ;ld b,0
        ld bc,(sec_shift2)
        add hl,bc ;╤Б ╤Н╤В╨╛╨╣ ╤В╨╛╤З╨║╨╕ ╨┐╨╕╤И╨╡╨╝
        ld (temp_hl2),hl ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨╜╨░╤З╨░╨╗╨╛ ╨╖╨░╨┐╨╕╤Б╨╕ ╨▓╤В╨╛╤А╨╛╨│╨╛ ╤Б╨╡╨║╤В╨╛╤А╨░
       
        ld hl,(temp_bc) ;╨▓╤Л╤З╨╕╤Б╨╗╨╡╨╜╨╕╨╡ ╨╜╨░ ╤З╤С╨╝ ╨╛╤Б╤В╨░╨╜╨╛╨▓╨╕╨╝╤Б╤П ╨▓ ╤Н╤В╨╛╤В ╤А╨░╨╖
        and a
        sbc hl,bc ;╨▓╤Л╤З╤В╨╡╨╝ ╤В╨╛, ╤З╤В╨╛ ╨┤╨╛╨▒╨░╨▓╨╕╨╗╨╕ ╨║ ╨┐╨╡╤А╨▓╨╛╨╝╤Г ╤Б╨╡╨║╤В╨╛╤А╤Г
        ld c,l
        ld b,h
        jr nc,fwrite_trd5
        ld b,0 ;╨║╨╛╤А╤А╨╡╨║╤Ж╨╕╤П ╨╡╤Б╨╗╨╕ ╨▓╤Л╤И╨╡╨╗ ╨╝╨╕╨╜╤Г╤Б
fwrite_trd5
        ld hl,(temp_hl)
        add hl,bc
       
        ld de,outputBuffer
        and a
        sbc hl,de
       
        ld a,l
        ld (sec_shift),a ;╤Б╨╝╨╡╤Й╨╡╨╜╨╕╨╡ ╨╜╨░ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╕╨╣ ╤А╨░╨╖
        ;ld hl,(temp_hl)       
       

        ; or a
        ; jr z,fwrite_trd1
        ; inc b  ;╨║╨╛╤А╤А╨╡╨║╤Ж╨╕╤П ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓
       
        ld a,b ;╨╜╤Г╨╢╨╜╨░ ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╜╨░ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓!!!
        ld (sec_part),a ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╝ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╨▓╨╛ ╨▓╤В╨╛╤А╨╛╨╣ ╤З╨░╤Б╤В╨╕
       
        ;ld a,b
        or a
        jr z,fwrite_trd1 ;╨╡╤Б╨╗╨╕ ╤А╨░╨╖╨╝╨╡╤А ╨┤╨░╨╜╨╜╤Л╤Е ╨╝╨╡╨╜╤М╤И╨╡ ╤Б╨╡╨║╤В╨╛╤А╨░, ╤В╨╛ ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝ ╨╖╨░╨┐╨╕╤Б╤М
       
        ld hl,(temp_hl2)
        ;push bc
        ld de,(#5cf4)
    ld      c,6 ;╨┐╨╕╤И╨╡╨╝ ╤Ж╨╡╨╗╤Л╨╝╨╕ ╤Б╨╡╨║╤В╨╛╤А╨░╨╝╨╕
    call    #3d13      
        ld a,c
        ;pop bc
        cp 255
        jp z,fwrite_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░
        ; ld de,(f_w_cur_trk)
        ; call calc_next_pos
        ; ld (f_w_cur_trk),de
       
        xor a
        ld (write_end_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╨╛ ╨┤╨╛╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║  
       
fwrite_trd1    
        ld a,(write_end_flag) ;╨╜╤Г╨╢╨╜╨╛ ╨╖╨░╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║?
        or a
        jr nz,fwrite_trd_ex ;╨╜╨╡ ╨╜╤Г╨╢╨╜╨╛

        ld hl,(temp_hl2) ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨╜╨╡╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╤Л╨╣ ╨╛╤Б╤В╨░╤В╨╛╨║
        ld a,(sec_part)
        ld b,a
        ld c,0
        add hl,bc
        ld de,sec_buf
        ld bc,256
        ldir
;fwrite_trd2   

       
fwrite_trd_ex  
        ld bc,(temp_bc) ;╨▓╨╛╨╖╨▓╤А╨░╤В╨╕╨╝, ╤З╤В╨╛ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨╖╨░╨┐╤А╨░╤И╨╕╨▓╨░╨╗╨╕, ╤Б╤В╨╛╨╗╤М╨║╨╛ ╨╕ ╨╖╨░╨┐╨╕╤Б╨░╨╗╨╕ ╨▒╨░╨╣╤В
        ;╨┐╨╛╤Б╤З╨╕╤В╨░╨╡╨╝ ╨╛╨▒╤Й╤Г╤О ╨┤╨╗╨╕╨╜╤Г ╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╨╛╨│╨╛
        ld hl,(f_w_len)
        add hl,bc
        ld (f_w_len),hl
        jr nc,fwrite_trd_ex1
        ld hl,(f_w_len+2)
        inc hl
        ld (f_w_len+2),hl
       
fwrite_trd_ex1
        xor a ;╤Д╨╗╨░╨│╨╕ ╤Б╨▒╤А╨╛╤Б╨╕╨╝
    ret





;------------------scl----------------------
fwrite_chek_scl ;╨╖╨░╨┐╨╕╤Б╤М scl ╤Д╨░╨╣╨╗╨░ (╤А╨░╨╖╨▓╨╛╤А╨░╤З╨╕╨▓╨░╨╜╨╕╨╡ ╨╛╨▒╤А╨░╨╖╨░)
        ; ld a,2
        ; out (254),a
; WAITKEY_t     XOR A:IN A,(#FE):CPL:AND #1F:JR Z,WAITKEY_t
        ; xor a
        ; out (254),a
        ld a,(f_w_flag)
        or a
        jp z,fwrite_no_chek ;╤Д╨░╨╣╨╗ ╤Г╨╢╨╡ ╨╛╤В╨║╤А╤Л╤В?
        ld (temp_bc),bc ;╨┤╨╗╨╕╨╜╨░
        ld (temp_hl),hl ;╨░╨┤╤А╨╡╤Б ╨┤╨░╨╜╨╜╤Л╤Е
        ld a,b
        or c
        jp z,fwrite_no_chek ; ╨╡╤Б╨╗╨╕ ╨┤╨╗╨╕╨╜╨░ 0, ╤В╨╛ ╨▓╤Л╤Е╨╛╨┤
       
        ; ld a,b
        ; or a
        ; jr nz,testt1
        ; nop
       
; testt1
       
        xor a
        ld (sec_part),a ;╨╛╨▒╨╜╤Г╨╗╨╕╤В╤М ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╤Л╨╡
        ld (sec_shift2),a
        ld (sec_shift2+1),a
        ld (sec_shift_flag),a
        ld (write_end_flag),a ;
       

        ld a,(sec_shift)
        or a
        jr z,fwrite_scl3 ;╨╡╤Б╨╗╨╕ ╤Б╨╝╨╡╤Й╨╡╨╜╨╕╤П ╨╜╨╡╤В, ╤В╨╛ ╨┐╨╡╤А╨▓╤Г╤О ╤З╨░╤Б╤В╤М ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝
       

        ld c,a
        ld b,0
        ld hl,(temp_bc) ;╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╖╨░╨┐╨╛╨╗╨╜╨╕╤В╤Б╤П ╨╗╨╕ ╤Ж╨╡╨╗╤Л╨╣ ╤Б╨╡╨║╤В╨╛╤А
        add hl,bc
       
        ld a,1
        ld (write_end_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╨╡ ╨╜╤Г╨╢╨╜╨╛ ╨┤╨╛╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║
       
        ld a,h
        or a
        jr nz,fwrite_scl4
        ld a,1
        ld (sec_shift_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜ ╤Б╨╡╨║╤В╨╛╤А
       
fwrite_scl4    
        ld hl,sec_buf ;╨▒╤Г╤Д╨╡╤А ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨│╨╛ ╤Б╨╡╨║╤В╨╛╤А╨░  
        add hl,bc ;╨╜╨░ ╤Н╤В╨╛╨╣ ╤В╨╛╤З╨║╨╡ ╨╛╤Б╤В╨░╨╜╨╛╨▓╨╕╨╗╨╕╤Б╤М
        ex de,hl
        ld hl,(temp_hl) ;╨┐╤А╨╕╤Б╨╛╨╡╨┤╨╕╨╜╨╕╨╝ ╨╜╨░╤З╨░╨╗╨╛ ╨┤╨░╨╜╨╜╤Л╤Е ╨▓ ╨║╨╛╨╜╨╡╤Ж ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╕╤Е
        ; ld a,c
        ; or a
        ; jr nz,fwrite_scl2
        ; inc b ;╨║╨╛╤А╤А╨╡╨║╤Ж╨╕╤П
; fwrite_scl2          
        ; ld c,a
        xor a
        sub c
        ld c,a ;╤Б╨║╨╛╨╗╤М╨║╨╛ ╨╛╤Б╤В╨░╨╗╨╛╤Б╤М ╨┐╨╡╤А╨╡╨╜╨╡╤Б╤В╨╕ ╨┤╨╛ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜╨╕╤П ╤Б╨╡╨║╤В╨╛╤А╨░
        ld (sec_shift2),bc ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨┤╨╛╨▒╨░╨▓╨╕╨╗╨╕ ╨▒╨░╨╣╤В
        ldir

        ld a,(sec_shift_flag)
        or a
        jr nz,fwrite_scl3 ;╨╡╤Б╨╗╨╕ ╤Б╨╡╨║╤В╨╛╤А ╨╡╤Й╤С ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜ ╨┐╨╕╤Б╨░╤В╤М ╨╜╨╡ ╨▒╤Г╨┤╨╡╨╝

        ld hl,sec_buf
        ;ld de,(#5cf4)
        ;ld (f_w_cur_trk),de    ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╝ ╨┐╨╛╨╖╨╕╤Ж╨╕╤О
    ld      b,#01 ;╨┐╨╕╤И╨╡╨╝ 1 ╤Б╨╡╨║╤В╨╛╤А ╨╕╨╖ ╨▒╤Г╤Д╨╡╤А╨░
    call    scl_write_buf      
        ; ld a,c
        ; cp 255
        ; jp z,fwrite_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░

        xor a
        ld (write_end_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╨╛ ╨┤╨╛╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║  
        ; ld de,(f_w_cur_trk) ;╨╡╤Б╨╗╨╕ ╤Б╨╡╨║╤В╨╛╤А ╨╡╤Й╤С ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜, ╨╛╤Б╤В╨░╨╜╨╡╨╝╤Б╤П ╨╜╨░ ╤Б╤В╨░╤А╨╛╨╣ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕
        ; ld (#5cf4),de
        ; ld b,1 ;╨╜╨░ ╤Б╨╡╨║╤В╨╛╤А ╨▓╨┐╨╡╤А╤С╨┤
        ; ld de,(f_w_cur_trk)
        ; call calc_next_pos
        ; ld (f_w_cur_trk),de  

fwrite_scl3    
        ld hl,(temp_hl) ;╨╖╨░╨┐╨╕╤И╨╡╨╝ ╨╛╤Б╤В╨░╤В╨╛╨║ ╨┤╨░╨╜╨╜╤Л╤Е
        ;ld a,(sec_shift)
        ;ld c,a
        ;ld b,0
        ld bc,(sec_shift2)
        add hl,bc ;╤Б ╤Н╤В╨╛╨╣ ╤В╨╛╤З╨║╨╕ ╨┐╨╕╤И╨╡╨╝
        ld (temp_hl2),hl ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨╜╨░╤З╨░╨╗╨╛ ╨╖╨░╨┐╨╕╤Б╨╕ ╨▓╤В╨╛╤А╨╛╨│╨╛ ╤Б╨╡╨║╤В╨╛╤А╨░
       
        ld hl,(temp_bc) ;╨▓╤Л╤З╨╕╤Б╨╗╨╡╨╜╨╕╨╡ ╨╜╨░ ╤З╤С╨╝ ╨╛╤Б╤В╨░╨╜╨╛╨▓╨╕╨╝╤Б╤П ╨▓ ╤Н╤В╨╛╤В ╤А╨░╨╖
        and a
        sbc hl,bc ;╨▓╤Л╤З╤В╨╡╨╝ ╤В╨╛, ╤З╤В╨╛ ╨┤╨╛╨▒╨░╨▓╨╕╨╗╨╕ ╨║ ╨┐╨╡╤А╨▓╨╛╨╝╤Г ╤Б╨╡╨║╤В╨╛╤А╤Г
        ld c,l
        ld b,h
        jr nc,fwrite_scl5
        ld b,0 ;╨║╨╛╤А╤А╨╡╨║╤Ж╨╕╤П ╨╡╤Б╨╗╨╕ ╨▓╤Л╤И╨╡╨╗ ╨╝╨╕╨╜╤Г╤Б
fwrite_scl5
        ld hl,(temp_hl)
        add hl,bc
       
        ld de,outputBuffer
        and a
        sbc hl,de
       
        ld a,l
        ld (sec_shift),a ;╤Б╨╝╨╡╤Й╨╡╨╜╨╕╨╡ ╨╜╨░ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╕╨╣ ╤А╨░╨╖
        ;ld hl,(temp_hl)       
       

        ; or a
        ; jr z,fwrite_scl1
        ; inc b  ;╨║╨╛╤А╤А╨╡╨║╤Ж╨╕╤П ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓
       
        ld a,b ;╨╜╤Г╨╢╨╜╨░ ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╜╨░ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓!!!
        ld (sec_part),a ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╝ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╨▓╨╛ ╨▓╤В╨╛╤А╨╛╨╣ ╤З╨░╤Б╤В╨╕
       
        ;ld a,b
        or a
        jr z,fwrite_scl1 ;╨╡╤Б╨╗╨╕ ╤А╨░╨╖╨╝╨╡╤А ╨┤╨░╨╜╨╜╤Л╤Е ╨╝╨╡╨╜╤М╤И╨╡ ╤Б╨╡╨║╤В╨╛╤А╨░, ╤В╨╛ ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝ ╨╖╨░╨┐╨╕╤Б╤М
       
        ld hl,(temp_hl2)
        ;push bc
        ;ld de,(#5cf4)
    ;ld      c,6 ;╨┐╨╕╤И╨╡╨╝ ╤Ж╨╡╨╗╤Л╨╝╨╕ ╤Б╨╡╨║╤В╨╛╤А╨░╨╝╨╕
    call    scl_write_buf      
        ;ld a,c
        ;pop bc
        ; cp 255
        ; jp z,fwrite_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░
        ; ld de,(f_w_cur_trk)
        ; call calc_next_pos
        ; ld (f_w_cur_trk),de
       
        xor a
        ld (write_end_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╨╛ ╨┤╨╛╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║  
       
fwrite_scl1    
        ld a,(write_end_flag) ;╨╜╤Г╨╢╨╜╨╛ ╨╖╨░╨┐╨╕╤Б╤Л╨▓╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║?
        or a
        jr nz,fwrite_scl_ex ;╨╜╨╡ ╨╜╤Г╨╢╨╜╨╛

        ld hl,(temp_hl2) ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨╜╨╡╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╤Л╨╣ ╨╛╤Б╤В╨░╤В╨╛╨║
        ld a,(sec_part)
        ld b,a
        ld c,0
        add hl,bc
        ld de,sec_buf
        ld bc,256
        ldir
;fwrite_scl2   

       
fwrite_scl_ex  
        ld bc,(temp_bc) ;╨▓╨╛╨╖╨▓╤А╨░╤В╨╕╨╝, ╤З╤В╨╛ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨╖╨░╨┐╤А╨░╤И╨╕╨▓╨░╨╗╨╕, ╤Б╤В╨╛╨╗╤М╨║╨╛ ╨╕ ╨╖╨░╨┐╨╕╤Б╨░╨╗╨╕ ╨▒╨░╨╣╤В
        ;╨┐╨╛╤Б╤З╨╕╤В╨░╨╡╨╝ ╨╛╨▒╤Й╤Г╤О ╨┤╨╗╨╕╨╜╤Г ╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╨╛╨│╨╛
        ld hl,(f_w_len)
        add hl,bc
        ld (f_w_len),hl
        jr nc,fwrite_scl_ex1
        ld hl,(f_w_len+2)
        inc hl
        ld (f_w_len+2),hl
       
fwrite_scl_ex1
        xor a ;╤Д╨╗╨░╨│╨╕ ╤Б╨▒╤А╨╛╤Б╨╕╨╝
    ret






scl_write_buf ;╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ ╨┐╤А╨╛╨╝╨╡╨╢╤Г╤В╨╛╤З╨╜╨╛╨│╨╛ ╨▒╤Г╤Д╨╡╤А╨░
        push bc ;╤Б╨║╨╛╨╗╤М╨║╨╛ ╨┐╨░╨║╨╡╤В╨╛╨▓ ╤Г╨║╨░╨╖╨░╨╜╨╛ ╨▓ b
        ld de,scl_buf ;╨┐╨╡╤А╨╡╨╜╨╡╤Б╤С╨╝ ╤Б╨╡╨║╤В╨╛╤А ╨▓╨╛ ╨▓╤А╨╡╨╝╨╡╨╜╨╜╤Л╨╣ ╨▒╤Г╤Д╨╡╤А
        ld bc,256
        ldir
        ld (scl_temp_hl2),hl ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨░╨┤╤А╨╡╤Б ╨┤╨░╨╜╨╜╤Л╤Е
        ld a,(scl_que) ;╨┐╤А╨╛╨▓╨╡╤А╨╕╨╝ ╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╤Л ╨┤╨░╨╜╨╜╤Л╨╡
        or a
        jr z,scl_write_buf_ret ;╨╜╨╡ ╨▒╤Г╨┤╨╡╨╝ ╨▓╤Л╨╖╤Л╨▓╨░╤В╤М ╨┐╨░╤А╤Б╨╡╤А ╨╡╤Б╨╗╨╕ ╨╜╨╡ ╨╜╤Г╨╢╨╜╤Л
        ld hl,scl_write_buf_ret ;╨░╨┤╤А╨╡╤Б ╨▓╨╛╨╖╨▓╤А╨░╤В╨░
        push hl
        ld hl,(scl_parse_ret_adr) ;╨░╨┤╤А╨╡╤Б ╨┤╨╗╤П ╨┐╤А╨╛╨┤╨╛╨╗╨╢╨╡╨╜╨╕╤П ╨╛╤Б╨╜╨╛╨▓╨╜╨╛╨│╨╛ ╤Ж╨╕╨║╨╗╨░ ╤Б╨▒╨╛╤А╨║╨╕
        jp (hl) ;╨╛╤В╨┤╨░╨┤╨╕╨╝ ╨┐╨░╨║╨╡╤В 256 ╨▒╨░╨╣╤В ╨┐╨░╤А╤Б╨╡╤А╤Г
scl_write_buf_ret
        ld hl,(scl_temp_hl2)
        pop bc
        djnz scl_write_buf

        ret
       
       
       
scl_parse ;╤А╨░╨╖╨▒╨╛╤А ╨╛╨▒╤А╨░╨╖╨░ scl ╨▓ trd, ╨╛╤Б╨╜╨╛╨▓╨╜╨╛╨╣ ╤Ж╨╕╨║╨╗
        ;╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╨┐╨╡╤А╨▓╤Л╨╣ ╤Б╨╡╨║╤В╨╛╤А
;╨╖╨░╨┐╤А╨╛╤Б ╨┐╨╛╤А╤Ж╨╕╨╕ ╨┤╨░╨╜╨╜╤Л╤Е ╨┐╨╛ 256 ╨▒╨░╨╣╤В
        ld (scl_temp_hl),hl
        ld (scl_temp_de),de
        ld (scl_temp_bc),bc
        ld a,1
        ld (scl_que),a ;╨▓╨║╨╗╤О╤З╨╕╨╝ ╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╤Л ╨┤╨░╨╜╨╜╤Л╨╡
        ld hl,scl_parse_ret ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨░╨┤╤А╨╡╤Б ╨▓╨╛╨╖╨▓╤А╨░╤В╨░
        ld (scl_parse_ret_adr),hl
        ret ;╨▓╨╡╤А╨╜╤С╨╝╤Б╤П ╨┤╨╗╤П ╨╛╨╢╨╕╨┤╨░╨╜╨╕╤П ╨┤╨░╨╜╨╜╤Л╤Е
scl_parse_ret  
        xor a
        ld (scl_que),a
        ld hl,(scl_temp_hl)
        ld de,(scl_temp_de)
        ld bc,(scl_temp_bc)
       
        ld de,scl_buf ;╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╝╨╡╤В╨║╨╕ ╨╛╨▒╤А╨░╨╖╨░
        ld hl,scl_sign
        ld b,8
scl_parse_chk
        ld a,(de)
        cp (hl)
        jr nz,scl_parse_chk_no
        inc hl
        inc de
        djnz scl_parse_chk
        jr scl_parse_chk_ok
scl_parse_chk_no ;╨╡╤Б╨╗╨╕ ╨╜╨╡ ╤Б╨╛╨▓╨┐╨░╨╗╨╛, ╨╖╨╜╨░╤З╨╕╤В ╨┐╨╗╨╛╤Е╨╛╨╣ ╨╛╨▒╤А╨░╨╖
    ld hl, scl_err
    call DialogBox.msgBox ;╨┐╤А╨╡╨┤╤Г╤А╨╡╨╢╨┤╨╡╨╜╨╕╨╡
        xor a
        ld (scl_que),a ;╨▓╤Л╨║╨╗╤О╤З╨╕╨╝ ╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╤Л ╨┤╨░╨╜╨╜╤Л╨╡
        ld a,4 ;╨╖╨░╨║╤А╨╛╨╡╨╝ ╤Д╨░╨╣╨╗
        call fclose
        ret
scl_parse_chk_ok ;╤Б╨╕╨│╨╜╨░╤В╤Г╤А╨░ ╨┐╤А╨░╨▓╨╕╨╗╤М╨╜╨░╤П

;╤Д╨╛╤А╨╝╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ ╨║╨░╤В╨░╨╗╨╛╨│╨░
        ld a,(scl_buf+8)
        ld (scl_files),a ;╨▓╤Б╨╡╨│╨╛ ╤Д╨░╨╣╨╗╨╛╨▓
        ld (scl_cat_cycl),a ;╤Ж╨╕╨║╨╗
        ld hl,scl_buf+9 ;╨░╨┤╤А╨╡╤Б ╨┐╨╡╤А╨▓╨╛╨│╨╛ ╨╖╨░╨│╨╛╨╗╨╛╨▓╨║╨░
        ld de,cat_buf ;╨░╨┤╤А╨╡╤Б ╤Д╨╛╤А╨╝╨╕╤А╤Г╨╡╨╝╨╛╨│╨╛ ╨║╨░╤В╨░╨╗╨╛╨│╨░ trd
scl_parse_cat2 
        ld b,14 ;14 ╨▒╨░╨╣╤В ╨╛╨┤╨╜╨░ ╨╖╨░╨┐╨╕╤Б╤М
scl_parse_cat  
        ld a,(hl)
        ld (de),a
        inc de
        inc l ;╨░╨┤╤А╨╡╤Б ╤Г╨▓╨╡╨╗╨╕╤З╨╕╨▓╨░╨╡╨╝ ╤В╨╛╨╗╤М╨║╨╛ ╨▓ ╨┐╤А╨╡╨┤╨╡╨╗╨░╤Е ╨╝╨╗╨░╨┤╤И╨╡╨│╨╛ ╤А╨╡╨│╨╕╤Б╤В╤А╨░
        jr nz,scl_parse_cat1
        ;╤В╤Г╤В ╨┐╨╛╤А╨░ ╨╖╨░╨┐╤А╨╛╤Б╨╕╤В╤М ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╕╨╣ ╤Б╨╡╨║╤В╨╛╤А
;╨╖╨░╨┐╤А╨╛╤Б ╨┐╨╛╤А╤Ж╨╕╨╕ ╨┤╨░╨╜╨╜╤Л╤Е ╨┐╨╛ 256 ╨▒╨░╨╣╤В
        ld (scl_temp_hl),hl
        ld (scl_temp_de),de
        ld (scl_temp_bc),bc
        ld a,1
        ld (scl_que),a ;╨▓╨║╨╗╤О╤З╨╕╨╝ ╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╤Л ╨┤╨░╨╜╨╜╤Л╨╡
        ld hl,scl_parse_ret1 ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨░╨┤╤А╨╡╤Б ╨▓╨╛╨╖╨▓╤А╨░╤В╨░
        ld (scl_parse_ret_adr),hl
        ret ;╨▓╨╡╤А╨╜╤С╨╝╤Б╤П ╨┤╨╗╤П ╨╛╨╢╨╕╨┤╨░╨╜╨╕╤П ╨┤╨░╨╜╨╜╤Л╤Е
scl_parse_ret1
        xor a
        ld (scl_que),a
        ld hl,(scl_temp_hl)
        ld de,(scl_temp_de)
        ld bc,(scl_temp_bc)
       
scl_parse_cat1
        djnz scl_parse_cat
        inc de
        inc de
        ld a,(scl_cat_cycl)
        dec a
        ld (scl_cat_cycl),a
        jr nz,scl_parse_cat2
       
        ld (scl_temp_hl),hl ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╤В╤М ╨│╨┤╨╡ ╨╛╤Б╤В╨░╨╜╨╛╨▓╨╕╨╗╨╕╤Б╤М
       
;╨┐╨╛╨┤╤Б╤З╤С╤В ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╨╕ ╨┤╨╛╤А╨╛╨╢╨╡╨║
        push ix
        ld a,(scl_files)
        ld de,#0100 ;╨┤╨░╨╜╨╜╤Л╨╡ ╤Б ╨┐╨╡╤А╨▓╨╛╨╣ ╨┤╨╛╤А╨╛╨╢╨║╨╕
        ld ix,cat_buf
        ld (ix+14),e
        ld (ix+15),d
        ld hl,0 ;╨╛╨▒╤Й╨╡╨╡ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓
scl_cacl
        ld (scl_cat_cycl),a ;╤Ж╨╕╨║╨╗
        ld a,(ix+13) ;╨┤╨╗╨╕╨╜╨░ ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Б╨╡╨║╤В╨╛╤А╨░╤Е
        ld c,a
        ld b,0
        add hl,bc ;╤Б╨╡╨║╤В╨╛╤А╨╛╨▓
       
        ld bc,16
        add ix,bc
        ld b,a
        call calc_next_pos
        ld a,(scl_cat_cycl)
        cp 1
        jr z,scl_cacl2 ;╨▓ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╣ ╤А╨░╨╖ ╨┐╤А╨╛╨┐╤Г╤Б╨╕╨╝
        ld (ix+14),e
        ld (ix+15),d
scl_cacl2
        dec a
        jr nz,scl_cacl
        ;╤В╨╡╨┐╨╡╤А╤М ╤Г╨╖╨╜╨░╨╡╨╝ ╨┐╨╡╤А╨▓╤Л╨╣ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╤Л╨╣ ╤Б╨╡╨║╤В╨╛╤А
        ld a,(ix+13) ;╨┤╨╗╨╕╨╜╨░ ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Б╨╡╨║╤В╨╛╤А╨░╤Е
        ld c,a
        ld b,0
        add hl,bc
        ; ld b,a
        ; call calc_next_pos
        ld (cat_buf+8*256+#e1),de ;╨Я╨╡╤А╨▓╤Л╨╣ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╤Л╨╣ ╤Б╨╡╨║╤В╨╛╤А ╨╕ ╨┤╨╛╤А╨╛╨╢╨║╨░ ╨╜╨░ ╨┤╨╕╤Б╨║╨╡╤В╨╡
        ld de,16*159
        ex de,hl
        and a
        sbc hl,de
        ld (cat_buf+8*256+#e5),hl ;╨з╨╕╤Б╨╗╨╛ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╤Л╤Е ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╨╜╨░ ╨┤╨╕╤Б╨║╨╡
        pop ix


       
;╨╖╨░╨┐╨╕╤Б╤М ╤Б╨╛╨┤╨╡╤А╨╢╨╕╨╝╨╛╨│╨╛ ╤Д╨░╨╣╨╗╨╛╨▓
        ld a,(scl_files) ;╨▓╤Б╨╡╨│╨╛ ╤Д╨░╨╣╨╗╨╛╨▓
        ld (scl_cat_cycl),a ;╤Ж╨╕╨║╨╗
        ld hl,cat_buf+13 ;╨░╨┤╤А╨╡╤Б ╤А╨░╨╖╨╝╨╡╤А ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╤Д╨░╨╣╨╗╨░
        ld (cat_cur_adr),hl

        ld hl,#0100 ;╨╜╨░╤З╨╕╨╜╨░╤П ╤Б ╨┐╨╡╤А╨▓╨╛╨╣ ╨┤╨╛╤А╨╛╨╢╨║╨╕
        ld (#5cf4),hl
scl_parse_file2
        ld hl,(scl_temp_hl) ;╨░╨┤╤А╨╡╤Б ╨┤╨░╨╜╨╜╤Л╤Е
        ld de,(cat_cur_adr) ;╨░╨┤╤А╨╡╤Б ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░ ╤Д╨░╨╣╨╗╨░
        ;dec de
        ld a,(de) ;╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓, ╤Ж╨╕╨║╨╗
        ld c,a
scl_parse_file3
        ld de,scl_buf2 ;╨░╨┤╤А╨╡╤Б ╨╡╤Й╤С ╨╛╨┤╨╜╨╛╨│╨╛ ╨▒╤Г╤Д╨╡╤А╨░
        ld b,0 ;256 ╨▒╨░╨╣╤В ╨╛╨┤╨╕╨╜ ╤Б╨╡╨║╤В╨╛╤А, ╤Ж╨╕╨║╨╗
scl_parse_file 
        ld a,(hl)
        ld (de),a
        inc de
        inc l ;╨░╨┤╤А╨╡╤Б ╤Г╨▓╨╡╨╗╨╕╤З╨╕╨▓╨░╨╡╨╝ ╤В╨╛╨╗╤М╨║╨╛ ╨▓ ╨┐╤А╨╡╨┤╨╡╨╗╨░╤Е ╨╝╨╗╨░╨┤╤И╨╡╨│╨╛ ╤А╨╡╨│╨╕╤Б╤В╤А╨░
        jr nz,scl_parse_file1
        ;╤В╤Г╤В ╨┐╨╛╤А╨░ ╨╖╨░╨┐╤А╨╛╤Б╨╕╤В╤М ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╕╨╣ ╤Б╨╡╨║╤В╨╛╤А
;╨╖╨░╨┐╤А╨╛╤Б ╨┐╨╛╤А╤Ж╨╕╨╕ ╨┤╨░╨╜╨╜╤Л╤Е ╨┐╨╛ 256 ╨▒╨░╨╣╤В
        ld (scl_temp_hl),hl
        ld (scl_temp_de),de
        ld (scl_temp_bc),bc
        ld a,1
        ld (scl_que),a ;╨▓╨║╨╗╤О╤З╨╕╨╝ ╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╤Л ╨┤╨░╨╜╨╜╤Л╨╡
        ld hl,scl_parse_ret2 ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨░╨┤╤А╨╡╤Б ╨▓╨╛╨╖╨▓╤А╨░╤В╨░
        ld (scl_parse_ret_adr),hl
        ret ;╨▓╨╡╤А╨╜╤С╨╝╤Б╤П ╨┤╨╗╤П ╨╛╨╢╨╕╨┤╨░╨╜╨╕╤П ╨┤╨░╨╜╨╜╤Л╤Е
scl_parse_ret2
        xor a
        ld (scl_que),a
        ld hl,(scl_temp_hl)
        ld de,(scl_temp_de)
        ld bc,(scl_temp_bc)
       
scl_parse_file1
        djnz scl_parse_file
        ld (scl_temp_hl),hl    
        ld (scl_temp_bc),bc
       
        ld hl,scl_buf2 ;;╨╖╨░╨┐╨╕╤И╨╡╨╝ ╨╛╨┤╨╕╨╜ ╤Б╨╡╨║╤В╨╛╤А
        ld  de,(#5cf4)
    ld      bc,#0106 ;
    call    #3d13      
        ; ld a,c
        ; cp 255
        ; jp z,fwrite_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░
        ld hl,(scl_temp_hl)
        ld bc,(scl_temp_bc)
       
        dec c
        jr nz,scl_parse_file3
       
        ld hl,(cat_cur_adr) ;╨░╨┤╤А╨╡╤Б ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░ ╤Д╨░╨╣╨╗╨░
        ; ld e,(hl)
        ; inc hl
        ; ld d,(hl)
        ld bc,16
        add hl,bc ;╨╜╨░ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╕╨╣ ╤Д╨░╨╣╨╗
        ld (cat_cur_adr),hl    
       
       
        ld a,(scl_cat_cycl)
        dec a
        ld (scl_cat_cycl),a
        jr nz,scl_parse_file2   ;╨╜╨░ ╤Б╨╗╨╡╨┤╤Г╤О╤Й╨╕╨╣ ╤Д╨░╨╣╨╗
       
       

;╤Д╨╛╤А╨╝╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╨╕╤Б╤В╨╡╨╝╨╜╨╛╨│╨╛ ╤Б╨╡╨║╤В╨╛╤А╨░ тДЦ9 (8)
        ;
        ;ld (cat_buf+8*256+#e1),a ;// #E1 ╨Я╨╡╤А╨▓╤Л╨╣ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╤Л╨╣ ╤Б╨╡╨║╤В╨╛╤А ╨╜╨░ ╨┤╨╕╤Б╨║╨╡╤В╨╡
        ;
        ;ld (cat_buf+8*256+#e2),a ;// #E2 ╨Я╨╡╤А╨▓╤Л╨╣ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╤Л╨╣ ╤В╤А╨╡╨║
        ld a,#16
        ld (cat_buf+8*256+#e3),a ;// #E3 16 80 ╨┤╨╛╤А╨╛╨╢╨╡╨║, 2 ╤Б╤В╨╛╤А╨╛╨╜╤Л
        ld a,(scl_files)
        ld (cat_buf+8*256+#e4),a ;// #E4 ╨Ю╨▒╤Й╨╡╨╡ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Д╨░╨╣╨╗╨╛╨▓ ╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╤Л╤Е ╨╜╨░ ╨┤╨╕╤Б╨║
        ;
        ;ld (cat_buf+8*256+#e5),a ;// #╨Х5,╨Х6 ╨з╨╕╤Б╨╗╨╛ ╤Б╨▓╨╛╨▒╨╛╨┤╨╜╤Л╤Е ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╨╜╨░ ╨┤╨╕╤Б╨║╨╡
        ;ld (cat_buf+8*256+#e6),a
        ld a,#10
        ld (cat_buf+8*256+#e7),a ;// #E7 ╨Ъ╨╛╨┤  #10,╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╤О╤Й╨╕╨╣ ╨┐╤А╨╕╨╜╨░╨┤╨╗╨╡╨╢╨╜╨╛╤Б╤В╤М ╨║ TR-DOS   

        ld hl,f_name ;╨╖╨░╨┐╨╕╤И╨╡╨╝ ╨╕╨╝╤П ╨┤╨╕╤Б╨║╨░, ╨▓╨╖╤П╨▓ ╨┤╨╗╤П ╤Н╤В╨╛╨│╨╛ ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░
        ld de,cat_buf+8*256+#f5 ;// #F5-#FC ╨Ш╨╝╤П ╨┤╨╕╤Б╨║╨░ ╨▓ ASCII ╤Д╨╛╤А╨╝╨░╤В╨╡
        ld bc,8
        ldir
       
        ld hl,cat_buf ;╨╖╨░╨┐╨╕╤И╨╡╨╝ ╨║╨░╤В╨░╨╗╨╛╨│ ╨╜╨░ ╨┤╨╕╤Б╨║
        ld de,0
    ld      bc,#0906 ;
    call    #3d13      
        ; ld a,c
        ; cp 255
        ; jp z,fwrite_no_chek ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░
        ret


;-----------scl end --------------------









   
; A - file stream id
; fsync:
;     esxCall ESX_FSYNC
    ; ret


; HL - name (name.ext)
; Returns:
; HL - name (name    e)
format_name ;╨┐╨╛╨┤╨│╨╛╨╜╤П╨╡╤В ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░ ╨┐╨╛╨┤ ╤Б╤В╨░╨╜╨┤╨░╤А╤В trdos (8+1)

        ;╤Б╨╜╨░╤З╨░╨╗╨░ ╨┐╨╛╨┐╤А╨╛╨▒╤Г╨╡╨╝ ╤Г╨▒╤А╨░╤В╤М ╨╕╨╖ ╨┐╤Г╤В╨╕ ╨┐╨╛╨┤╨┐╨░╨┐╨║╤Г, ╨╡╤Б╨╗╨╕ ╨╛╨╜╨░ ╨╡╤Б╤В╤М
        ld (temp_hl),hl ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨░╨┤╤А╨╡╤Б ╨╕╤Б╤Е╨╛╨┤╨╜╨╛╨│╨╛ ╨╕╨╝╨╡╨╜╨╕
        ld b,#00 ;╨╜╨╡ ╨▒╨╛╨╗╤М╤И╨╡ 255 ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓       
format_name5   
        ld a,(hl)
        cp "/" ;╨╡╤Б╨╗╨╕ ╨╡╤Б╤В╤М ╨┐╨╛╨┤╨┐╨░╨┐╨║╨░
        jr z,format_name_path_yep
        ld a,(hl)
        cp "." ;╨╡╤Б╨╗╨╕ ╨╡╤Й╤С ╨╜╨╡ ╨┤╨╛╤И╨╗╨╕ ╨┤╨╛ ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П
        jr nz,format_name6
        ld hl,(temp_hl) ;╨╡╤Б╨╗╨╕ ╨┤╨╛╤И╨╗╨╕ ╨┤╨╛ ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П, ╤В╨╛ ╨┐╤Г╤В╨╡╨╣ ╨╜╨╡╤В, ╨▓╨╡╤А╨╜╤С╨╝╤Б╤П ╨╜╨░ ╨╜╨░╤З╨░╨╗╨╛ ╨╕╨╝╨╡╨╜╨╕
        jr format_name_7 ;╨╜╨░ ╨▓╤Л╤Е╨╛╨┤
format_name6
        inc hl
        djnz format_name5
       
format_name_path_yep ;╨╜╨░╤И╨╗╨╕
        inc hl ;╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝ ╨╖╨╜╨░╨║ "/"
       
format_name_7  


        push hl ;╨╛╤З╨╕╤Б╤В╨╕╨╝ ╨╝╨╡╤Б╤В╨╛ ╨┤╨╗╤П ╨╜╨╛╨▓╨╛╨│╨╛ ╨╕╨╝╨╡╨╜╨╕
        ld hl,f_name
        ld de,f_name+1
        ld (hl)," "
        ld bc,8
        ldir
        pop hl

        ld bc,#09ff ;╨┤╨╗╨╕╨╜╨░ ╨╕╨╝╨╡╨╜╨╕ 9 ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓
        ld de,f_name ;╨║╤Г╨┤╨░
format_name2   
        ld a,(hl)
        cp "."
        jr nz,format_name1
        inc hl
        ld a,(hl)
        ld (f_name+8),a ; ╨╕ ╨▓ ╨║╨╛╨╜╤Ж╨╡ ╨┐╨╡╤А╨▓╤Г╤О ╨▒╤Г╨║╨▓╤Г ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П
        ex de,hl ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨░╨┤╤А╨╡╤Б ╨╕╤Б╤Е╨╛╨┤╨╜╨╛╨│╨╛ ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П
        jr format_name_e
format_name1
        ldi
        djnz format_name2
       
        ;╨╡╤Б╨╗╨╕ ╨╕╨╝╤П ╨┤╨╗╨╕╨╜╨╜╨╛╨╡, ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝ ╨╗╨╕╤И╨╜╨╡╨╡ ╨┤╨╛ ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П
        ld b,#00 ;╨╜╨╡ ╨▒╨╛╨╗╤М╤И╨╡ 255 ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓       
format_name3   
        ld a,(hl)
        cp "."
        jr nz,format_name4
        inc hl
        ld a,(hl)
        ld (f_name+8),a ; ╨╕ ╨▓ ╨║╨╛╨╜╤Ж╨╡ ╨┐╨╡╤А╨▓╤Г╤О ╨▒╤Г╨║╨▓╤Г ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П
        ex de,hl ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨░╨┤╤А╨╡╤Б ╨╕╤Б╤Е╨╛╨┤╨╜╨╛╨│╨╛ ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П
        jr format_name_e
format_name4
        inc hl
        djnz format_name3
       
format_name_e ;╨▓╤Л╤Е╨╛╨┤
        ld hl,f_name ;╨▓╨╡╤А╨╜╤С╨╝ ╤А╨╡╨╖╤Г╨╗╤М╤В╨░╤В
        ret

; DE - trk/sec
; B - sectors step
; Returns:
; DE - trk/sec 
calc_next_pos           ;╨▓╨┐╨╡╤А╤С╨┤ ╨╜╨░ N ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓  
                        ;ld b,4
                        ;ld  de,(#5ceb)
calc_next_pos2         
                        inc e
                        ld a,e
                        cp 16
                        jr c,calc_next_pos1
                        inc d
                        ld e,0
calc_next_pos1
                        ;ld (#5ceb),de
                        djnz calc_next_pos2
                        ret
                       

;testt db "123.trd"
write_ima db "Insert disk to drive "
write_ima_d db "A. "
                db "All data will be lost!",0
               
trdExt1 db ".trd", 0
trdExt2 db ".TRD", 0

sclExt1 db ".scl", 0
sclExt2 db ".SCL", 0

f_name ds 9 ;╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░
f_r_cur_trk dw   0 ;╤В╨╡╨║╤Г╤Й╨╕╨╡ ╤Б╨╡╨║╤В╨╛╤А-╨┤╨╛╤А╨╛╨╢╨║╨░ ╤Д╨░╨╣╨╗╨░ ╨╜╨░ ╤З╤В╨╡╨╜╨╕╨╡
f_r_len_sec db 0 ;╨┤╨╗╨╕╨╜╨░ ╤Д╨░╨╣╨╗╨░ ╨╜╨░ ╤З╤В╨╡╨╜╨╕╨╡ ╨▓ ╤Б╨╡╨║╤В╨╛╤А╨░╤Е
f_r_len dw 0;╨┤╨╗╨╕╨╜╨░ ╤Д╨░╨╣╨╗╨░ ╨▓ ╨▒╨░╨╣╤В╨░╤Е
f_r_flag db 0 ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╛╤В╨║╤А╤Л╤В ╤Д╨░╨╣╨╗ ╨╜╨░ ╤З╤В╨╡╨╜╨╕╨╡

f_w_cur_trk dw   0 ;╤В╨╡╨║╤Г╤Й╨╕╨╡ ╤Б╨╡╨║╤В╨╛╤А-╨┤╨╛╤А╨╛╨╢╨║╨░ ╤Д╨░╨╣╨╗╨░ ╨╜╨░ ╨╖╨░╨┐╨╕╤Б╤М
f_w_len_sec db 0 ;╨┤╨╗╨╕╨╜╨░ ╤Д╨░╨╣╨╗╨░ ╨╜╨░ ╨╖╨░╨┐╨╕╤Б╤М ╨▓ ╤Б╨╡╨║╤В╨╛╤А╨░╤Е
f_w_flag db 0 ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╛╤В╨║╤А╤Л╤В ╤Д╨░╨╣╨╗ ╨╜╨░ ╨╖╨░╨┐╨╕╤Б╤М
f_w_len ds 4 ;╨┤╨╗╨╕╨╜╨░ ╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╤Л╤Е ╨┤╨░╨╜╨╜╤Л╤Е
write_end_flag db 0 ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨╜╤Г╨╢╨╜╨╛ ╨╖╨░╨┐╨╕╤Б╨░╤В╤М ╨╛╤Б╤В╨░╤В╨╛╨║

temp_bc dw 0 ;╤Е╤А╨░╨╜╨╡╨╜╨╕╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨░
temp_hl dw 0 ;╤Е╤А╨░╨╜╨╡╨╜╨╕╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨░
temp_hl2 dw 0 ;╤Е╤А╨░╨╜╨╡╨╜╨╕╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨░

sec_shift db 0 ;╤Г╨║╨░╨╖╨░╤В╨╡╨╗╤М ╨╜╨░ ╨║╨░╨║╨╛╨╝ ╨▒╨░╨╣╤В╨╡ ╨╛╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜╨░ ╨╖╨░╨┐╨╕╤Б╤М
sec_shift2 db 0 ;╤Г╨║╨░╨╖╨░╤В╨╡╨╗╤М ╨╜╨░ ╨║╨░╨║╨╛╨╝ ╨▒╨░╨╣╤В╨╡ ╨╛╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜╨░ ╨╖╨░╨┐╨╕╤Б╤М (╨╛╤Б╤В╨░╤В╨╛╨║)
sec_part db 0 ;╤Б╨║╨╛╨╗╤М╨║╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╨▓╨╛ ╨▓╤В╨╛╤А╨╛╨╣ ╨┐╨╛╤А╤Ж╨╕╨╕ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕
sec_shift_flag db 0 ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨▒╤Г╤Д╨╡╤А ╤Б╨╡╨║╤В╨╛╤А╨░ ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜

;╤Б╨╡╨║╤Ж╨╕╤П scl
scl_sign db "SINCLAIR" ;╨╝╨╡╤В╨║╨░
scl_que db 0 ;╤Д╨╗╨░╨│ ╨╖╨░╨┐╤А╨╛╤Б╨░ ╨┐╨╛╤А╤Ж╨╕╨╕ ╨┤╨░╨╜╨╜╤Л╤Е
scl_err db "SCL image error!",0
scl_parse_ret_adr dw 0; ╨░╨┤╤А╨╡╤Б ╨▓╨╛╨╖╨▓╤А╨░╤В╨░ ╨▓ ╤Ж╨╕╨║╨╗
scl_cat_cycl db 0 ;╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨░╤П ╤Ж╨╕╨║╨╗╨░
scl_files db 0 ;╨▓╤Б╨╡╨│╨╛ ╤Д╨░╨╣╨╗╨╛╨▓
scl_temp_hl dw 0;;╤Е╤А╨░╨╜╨╡╨╜╨╕╨╡ ╤А╨╡╨│╨╕╤Б╤В╤А╨░
scl_temp_hl2 dw 0;
scl_temp_de dw 0;
scl_temp_bc dw 0;
cat_cur_adr dw 0;
;scl end
        align 256 ;╨▓╤А╨╡╨╝╨╡╨╜╨╜╨╛
        ;╨┐╨╛ ╨░╨┤╤А╨╡╤Б╤Г #4000 ╤И╤А╨╕╤Д╤В
cat_buf equ #4800 ;╨▒╤Г╤Д╨╡╤А ╨┤╨╗╤П ╨║╨░╤В╨░╤В╨╛╨│╨░ ╨┤╨╕╤Б╨║╨░ 9*256
sec_buf equ cat_buf + 9*256 ;╨▒╤Г╤Д╨╡╤А ╤Б╨╡╨║╤В╨╛╤А╨░ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕ 256
scl_buf equ sec_buf + 512 ;╨┐╤А╨╛╨╝╨╡╨╢╤Г╤В╨╛╤З╨╜╤Л╨╣ ╨▒╤Г╤Д╨╡╤А 256
scl_buf2 equ scl_buf + 512 ;╨┐╤А╨╛╨╝╨╡╨╢╤Г╤В╨╛╤З╨╜╤Л╨╣ ╨▒╤Г╤Д╨╡╤А 256

    ENDMODULE