Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

    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,(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 a,(de) ;╨▓╤Л╤П╤Б╨╜╨╕╨╝, ╨╜╨╡ ╨╛╨▒╤А╨░╨╖ ╨╗╨╕ ╤Н╤В╨╛ ╨┤╨╗╤П ╤А╨░╨╖╨▓╨╛╤А╨░╤З╨╕╨▓╨░╨╜╨╕╤П
        cp "t"
        jr nz,fopen_c_s
        inc de
        ld a,(de)
        cp "r"
        jr nz,fopen_c_2
        inc de
        ld a,(de)
        cp "d"
        jr nz,fopen_c_2
        jr fopen_c_trd
       
fopen_c_s
        ld a,(de)
        cp "s" 
        jr nz,fopen_c_2
        inc de
        ld a,(de)
        cp "c"
        jr nz,fopen_c_2        
        inc de
        ld a,(de)
        cp "l"
        jr nz,fopen_c_2        
        jr 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_trd_d),a ;╨┐╨╛╨┤╤Б╤В╨░╨▓╨╕╨╝ ╨▒╤Г╨║╨▓╤Г ╨▓ ╨╖╨░╨┐╤А╨╛╤Б╨╡
    ld hl, write_trd
    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)
        jp              fopen_err ;╨┐╨╛╨║╨░ ╨╛╤В╨║╨╗╤О╤З╨╡╨╜╨╛

        ld      de,0 ;╨╜╨░╤З╨░╨╗╨╛ ╤Б╨╡╨║╤В╨╛╤А ╨┤╨╛╤А╨╛╨╢╨║╨░
    ld      (f_w_cur_trk),de
        xor a
        ld a,4 ;id ╨║╨░╨╜╨░╨╗╨░
        ld (f_w_flag),a ;╤Д╨╗╨░╨│ ╤З╤В╨╛ scl ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕ ╨╛╤В╨║╤А╤Л╤В
        ret    



; A - file stream id
fclose:
    ;esxCall ESX_FCLOSE
        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
        push bc
        ld bc,(f_r_len_sec-1) ;╨╖╨░╨│╤А╤Г╨╢╨░╨╡╨╝ ╤Д╨░╨╣╨╗ ╤Ж╨╡╨╗╨╕╨║╨╛╨╝, ╨╜╨╡ ╤Б╨╝╨╛╤В╤А╤П ╨╜╨░ ╤В╨╛, ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨▒╨░╨╣╤В ╨▒╤Л╨╗╨╛ ╨╖╨░╨┐╤А╨╛╤И╨╡╨╜╨╛
    ld      c,5 ;read ╤З╨╕╤В╨░╨╡╨╝ ╤Ж╨╡╨╗╤Л╨╝╨╕ ╤Б╨╡╨║╤В╨╛╤А╨░╨╝╨╕
        ld de,(f_r_cur_trk)
    call    #3d13      
        pop bc ;╨▓╨╛╨╖╨▓╤А╨░╤В╨╕╨╝, ╤З╤В╨╛ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨╖╨░╨┐╤А╨░╤И╨╕╨▓╨░╨╗╨╕, ╤Б╤В╨╛╨╗╤М╨║╨╛ ╨╕ ╤Б╤З╨╕╤В╨░╨╗╨╕ ╨▒╨░╨╣╤В
        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,(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 a,(sec_shift)
        or a
        jr z,fwrite_trd3 ;╨╡╤Б╨╗╨╕ ╤Б╨╝╨╡╤Й╨╡╨╜╨╕╤П ╨╜╨╡╤В, ╤В╨╛ ╨┐╨╡╤А╨▓╤Г╤О ╤З╨░╤Б╤В╤М ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝
       
        ld c,a
        ld b,0
        ld hl,(temp_bc) ;╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╖╨░╨┐╨╛╨╗╨╜╨╕╤В╤Б╤П ╨╗╨╕ ╤Ж╨╡╨╗╤Л╨╣ ╤Б╨╡╨║╤В╨╛╤А
        add hl,bc
        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 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 ;╨▓╤Л╤Е╨╛╨┤ ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨║╨░  
        ld a,(sec_shift_flag)
        or a
        jr z,fwrite_trd3
        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 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 ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╝ ╤Б╨║╨╛╨╗╤М╨║╨╛ ╤Б╨╡╨║╤В╨╛╤А╨╛╨▓ ╨▓╨╛ ╨▓╤В╨╛╤А╨╛╨╣ ╤З╨░╤Б╤В╨╕
        or a
        jr z,fwrite_trd_ex ;╨╡╤Б╨╗╨╕ ╤А╨░╨╖╨╝╨╡╤А ╨┤╨░╨╜╨╜╤Л╤Е ╨╝╨╡╨╜╤М╤И╨╡ ╤Б╨╡╨║╤В╨╛╤А╨░, ╤В╨╛ ╨┐╤А╨╛╨┐╤Г╤Б╤В╨╕╨╝ ╨▓╤В╨╛╤А╨╛╨╣ ╤Н╤В╨░╨┐
       
        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
       
fwrite_trd1    
        ld hl,(temp_hl2) ;╤Б╨╛╤Е╤А╨░╨╜╨╕╨╝ ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╣ ╤Б╨╡╨║╤В╨╛╤А
        ld a,(sec_part)
        ld b,a
        ld c,0
        add hl,bc
        ld bc,256
        ld de,sec_buf
        ldir
       
       
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



fwrite_chek_scl ;╨╖╨░╨┐╨╕╤Б╤М scl ╤Д╨░╨╣╨╗╨░ ---------------
        jp fwrite_no_chek ;╨┐╨╛╨║╨░ ╨╛╤В╨║╨╗╤О╤З╨╡╨╜╨╛
        ld a,(f_w_flag)
        or a
        jp 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

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


; HL - name (name.ext)
; Returns:
; HL - name (name    e)
format_name ;╨┐╨╛╨┤╨│╨╛╨╜╤П╨╡╤В ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░ ╨┐╨╛╨┤ ╤Б╤В╨░╨╜╨┤╨░╤А╤В trdos (8+1)
        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
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_trd db "Insert disk to drive "
write_trd_d db "A. "
                db "All data will be lost!",0

f_name ds 9 ;╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░
f_r_cur_trk dw   0 ;╤В╨╡╨║╤Г╤Й╨╕╨╡ ╤Б╨╡╨║╤В╨╛╤А-╨┤╨╛╤А╨╛╨╢╨║╨░ ╤Д╨░╨╣╨╗╨░ ╨╜╨░ ╤З╤В╨╡╨╜╨╕╨╡
f_r_len_sec db 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 ;╨┤╨╗╨╕╨╜╨░ ╨╖╨░╨┐╨╕╤Б╨░╨╜╨╜╤Л╤Е ╨┤╨░╨╜╨╜╤Л╤Е

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 ;╤Д╨╗╨░╨│ ╤З╤В╨╛ ╨▒╤Г╤Д╨╡╤А ╤Б╨╡╨║╤В╨╛╤А╨░ ╨╜╨╡ ╨╖╨░╨┐╨╛╨╗╨╜╨╡╨╜

        align 256 ;╨▓╤А╨╡╨╝╨╡╨╜╨╜╨╛
sec_buf ds 256 ;╨▒╤Г╤Д╨╡╤А ╤Б╨╡╨║╤В╨╛╤А╨░ ╨┤╨╗╤П ╨╖╨░╨┐╨╕╤Б╨╕
    ENDMODULE