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