mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
...
This commit is contained in:
parent
7d98613cb5
commit
cfb3543373
@ -10,11 +10,13 @@
|
||||
CLOSE_FN: LD (.TMP),A
|
||||
CALL SET_FM
|
||||
RET C
|
||||
;
|
||||
LD A,(TASK)
|
||||
CP (IY+_sFM.TASK_NUM)
|
||||
LD A,DSS_Error.sys.ACCESS_DENIED
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
BIT 7,(IY+_sFM.ACCESS_MODE)
|
||||
JR Z,.NOTMODF
|
||||
;
|
||||
@ -47,7 +49,7 @@ CLOSE_FN: LD (.TMP),A
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
|
||||
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D
|
||||
;
|
||||
CALL LOADDIR
|
||||
CALL LOADDIR ; [ ] big dir
|
||||
; [ ] big dir
|
||||
;!TODO ®â¬®â âì ªíè ¤® 㦮£® record index?
|
||||
;
|
||||
@ -75,9 +77,6 @@ CLOSE_FN: LD (.TMP),A
|
||||
LD D,YH
|
||||
LD E,YL
|
||||
EX DE,HL
|
||||
;PUSH HL
|
||||
;SET_PAGE_X DIRPAGE
|
||||
;POP HL
|
||||
LD BC,FAT_DIRECTORY_RECORD
|
||||
LDIR
|
||||
EX AF,AF'
|
||||
|
||||
@ -80,7 +80,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
|
||||
INC HL
|
||||
DJNZ .loop2
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
CALL WRT_HND
|
||||
CALL WRITE_DIR_HANDLE
|
||||
RET C
|
||||
;CALL SAVEDIR
|
||||
.PATH0+1: LD HL,0
|
||||
@ -97,7 +97,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
|
||||
LD (.PATH0),HL
|
||||
CALL SetPath_GetName
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
; [x] 26/06/2024 {64 kb cluster}
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
RET C
|
||||
;
|
||||
|
||||
@ -10,7 +10,7 @@ DEL_FN: ;Current Dir ;[x] 15/10/23
|
||||
;
|
||||
CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
; [x] 26/06/2024 {64 kb cluster}
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
RET C
|
||||
;
|
||||
@ -27,7 +27,8 @@ DEL_FN: ;Current Dir ;[x] 15/10/23
|
||||
CALL CHECK_NAME
|
||||
;
|
||||
RET Z
|
||||
CALL LOADDIR
|
||||
;
|
||||
CALL LOADDIR ; [ ] big dir
|
||||
CALL SEARCH.File
|
||||
RET C
|
||||
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
|
||||
@ -28,7 +28,7 @@ MKDIR:
|
||||
;
|
||||
.START: CALL SetPath_GetName ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
; [x] 26/06/2024 {64 kb cluster}
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
RET C
|
||||
;
|
||||
@ -101,7 +101,7 @@ MKDIR:
|
||||
INC HL
|
||||
DJNZ .loop2
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
CALL WRT_HND ; αͺ<CEB1>―¨ΰ. <>’γξ § ―¨αμ ’ α―¨α<C2A8>ͺ €¨αͺ (ͺ β «<C2A0>£ )
|
||||
CALL WRITE_DIR_HANDLE ; ᪮¯¨à. ®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||||
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
;
|
||||
; á®§¤ ñ¬ á«ã¦¥¡ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ®¬ ª â «®£¥
|
||||
|
||||
@ -19,7 +19,7 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;
|
||||
; !TODO ¢®âªãâì âãâ SetPath_GetName, ç⮡ ¬®¦® ¡ë«® 㤠«ïâì ¯® ®â®á¨â¥«ìë¬ ¯ãâï¬?
|
||||
;
|
||||
; [ ] 26/06/2024
|
||||
; [x] 26/06/2024 {64 kb cluster}
|
||||
PUSH HL
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
POP HL
|
||||
@ -41,10 +41,10 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;
|
||||
RET Z
|
||||
PUSH DE
|
||||
CALL LOADDIR ; ―ΰ<E28095>η¨β βμ α―¨α<C2A8>ͺ ͺ β «<C2A0>£
|
||||
CALL LOADDIR ; [ ] big dir ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
;LD A,#33
|
||||
LD A,FAT_ATTR.NoSYSnoVolID
|
||||
CALL SEARCH.Custom ; ―<>¨αͺ § ―¨α¨ ’ α―¨αͺ₯ €¨αͺ
|
||||
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "old_name.ext" ¢ ᯨ᪥ ¤¨áª
|
||||
POP HL
|
||||
RET C
|
||||
;LD DE,MASKARE
|
||||
@ -62,7 +62,7 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
|
||||
RET Z
|
||||
PUSH IX
|
||||
LD A,FAT_ATTR.NoSYSnoVolID
|
||||
CALL SEARCH.Custom ; ―<>¨αͺ § ―¨α¨ ’ α―¨αͺ₯ €¨αͺ
|
||||
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "new_name.ext" ¢ ᯨ᪥ ¤¨áª
|
||||
POP IX
|
||||
LD A,DSS_Error.sys.FILE_EXISTS
|
||||
CCF
|
||||
|
||||
@ -23,23 +23,17 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;
|
||||
.START: CALL SetPath_GetName
|
||||
RET C
|
||||
; [ ] 26/06/2024
|
||||
; [x] 26/06/2024 {64 kb cluster}
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
RET C
|
||||
;
|
||||
CALL MASK
|
||||
RET C
|
||||
;!TEST optimization
|
||||
;LD HL,MASKARE
|
||||
;LD BC,11
|
||||
;LD A,"?"
|
||||
;CPIR
|
||||
;LD A,DSS_Error.sys.INVALID_NAME
|
||||
;SCF
|
||||
CALL CHECK_NAME
|
||||
;
|
||||
CALL CHECK_NAME
|
||||
RET Z
|
||||
CALL LOADDIR
|
||||
;
|
||||
CALL LOADDIR ; [ ] big dir
|
||||
CALL SEARCH.Dir
|
||||
RET C
|
||||
; fat32 ; [ ] CDFS
|
||||
|
||||
@ -37,7 +37,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
||||
LD A,(IY + _sFM.DRIVE)
|
||||
CALL OPENDSK
|
||||
JR C,.ERR1
|
||||
; [ ] 26/06/2024
|
||||
; [x] 26/06/2024 {64 kb cluster}
|
||||
CALL CHECK_64kb_CLUSTER
|
||||
RET C
|
||||
;
|
||||
|
||||
184
DSS/FS/FAT.asm
184
DSS/FS/FAT.asm
@ -85,13 +85,15 @@ RW_SECTOR: IN A,(SLOT3)
|
||||
|
||||
; [ ] 㤠«¥¨¥ § ¯¨á¨ LFN
|
||||
;
|
||||
; ¢å®¤: IX = ⥪ãé ï § ¯¨áì ¢ áâà ¨æ¥ á ª â «®£®¬ FAT ¤«ï ª®â®à®©
|
||||
; ¢å®¤: IX = 㪠§ ⥫ì ⥪ãéãî § ¯¨áì ¢ áâà ¨æ¥ á ª â «®£®¬ FAT ¤«ï ª®â®à®©
|
||||
; ¤® 㤠«¨âì § ¯¨á¨ LFS
|
||||
; [ ] big dir
|
||||
DELETE_LFN_RECORDS:
|
||||
PUSH IX
|
||||
LD A,XH
|
||||
AND #C0
|
||||
SUB 1
|
||||
DEC A
|
||||
;SUB 1
|
||||
LD C,A
|
||||
; ‚ ॣ¨áâॠC ¬ ᪠¤«ï ®¯à¥¤¥«¥¨ï ¢ë室 § ¯à¥¤¥«ë áâà ¨æë
|
||||
;
|
||||
@ -101,7 +103,7 @@ DELETE_LFN_RECORDS:
|
||||
.loop: ADD IX,DE
|
||||
LD A,XH
|
||||
CP C
|
||||
JR Z,.beyond_boundaries
|
||||
JR Z,.beyond_boundaries ; [ ] big dir âãâ ¤® ¯®¤£à㦠âì ¯à¥¤ë¤ã騩 DIR_BLOCK
|
||||
;
|
||||
LD A,FAT_ATTR.LFS_Entry
|
||||
CP (IX+FAT_DIRECTORY_RECORD.ATTRIBUT)
|
||||
@ -488,7 +490,7 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||
.REROOT: LD DE,0 ; !FIXIT ; [ ] CDFS - ¡à âì ¯¥à¢ë© ª« áâ¥à ¨§ ¯¥à¥¬¥®©
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),DE
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),DE
|
||||
CALL LOADDIR
|
||||
CALL LOADDIR ; [ ] big dir
|
||||
; CF=0
|
||||
LD HL,CORE_BUFFERS.WorkDirectory
|
||||
LD (HL),'\'
|
||||
@ -529,16 +531,20 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
|
||||
; fat32
|
||||
.SUBDIR3: CALL FINDDIR
|
||||
RET C
|
||||
;
|
||||
EX DE,HL
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL ; fat32
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),IY ; fat32
|
||||
; [ ] big dir
|
||||
; ...
|
||||
;
|
||||
;LD HL,#4000 ;!HARDCODE
|
||||
;LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
|
||||
;-------------; EX DE,HL
|
||||
; JP LOADDIR
|
||||
|
||||
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
; [x] fat32 ;!TEST
|
||||
; ¢å®¤ (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L), (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
|
||||
LOADDIR: ;!TODO optimize
|
||||
CALL LOAD_SAVE_DIR_PREPARE
|
||||
.next: PUSH AF
|
||||
@ -553,13 +559,12 @@ LOADDIR: ;!TODO optimize
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
|
||||
|
||||
;LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) ; !FIXIT ¢ëç¨âë¢ âì ¯®«®áâìî ª â «®£
|
||||
LD HL,#4000 ; à §¬¥à ¤¨à¥ªâ®à¨¨ ;!HARDCODE
|
||||
LD HL,DIRPAGE.size ; à §¬¥à ¤¨à¥ªâ®à¨¨ ;!HARDCODE
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
|
||||
;
|
||||
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤
|
||||
LD DE,#4000 ; ᪮«ìª®
|
||||
LD DE,DIRPAGE.size ; ᪮«ìª®
|
||||
XOR A ; ¤¥áªà¨¯â®à
|
||||
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||
EX AF,AF'
|
||||
@ -577,7 +582,8 @@ LOADDIR: ;!TODO optimize
|
||||
JR NC,.RTD1
|
||||
;
|
||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||
.RTD1: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
.RTD1: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; ®¬
|
||||
¥à ¤¨áª
|
||||
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
||||
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||||
RST ToDSS.DRV
|
||||
@ -594,131 +600,44 @@ LOADDIR: ;!TODO optimize
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
ld
|
||||
; ¤®¤¥« âì ¯¥à¥¤ çã ID § ¯¨á¨ ¤¨à¥ªâ®à¨¨ ¨ § £à㧪¨ ¯® ¥© 㦮£® ªã᪠¢ ªíè
|
||||
;!TODO FAT procedures
|
||||
;----------------------------------------------------------------------;
|
||||
/*
|
||||
LOAD_SAVE_DIR_PREPARE:
|
||||
;!TODO optimize
|
||||
XOR A ; FILE MANIPULATOR = 0
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD IX,0
|
||||
LD B,A ; ®â ç « ä ©«
|
||||
CALL MOVE_FP
|
||||
|
||||
SET_PAGE_X DIRPAGE
|
||||
AND A
|
||||
PUSH AF
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||
LD (CORE_BUFFERS.FM_BUF.DRIVE),A
|
||||
;;;;;;;;
|
||||
;LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H)
|
||||
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
|
||||
;
|
||||
XOR A
|
||||
LD D,#40
|
||||
LD E,A
|
||||
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
|
||||
EXX
|
||||
LD D,A
|
||||
LD E,A
|
||||
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
|
||||
OR H
|
||||
OR L
|
||||
EXX
|
||||
OR H
|
||||
OR L
|
||||
;;;;;;;;
|
||||
PUSH AF
|
||||
CALL NZ,.CalcDirSize
|
||||
;
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),DE
|
||||
EXX
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE
|
||||
POP AF
|
||||
EX AF,AF'
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
.CalcDirSize: ; calc dir size in clusters
|
||||
LD DE,0
|
||||
;LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
|
||||
;EXX
|
||||
; LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
|
||||
.loop: ; ;
|
||||
;EXX
|
||||
INC DE ; <20> ¤¥¥¬áï âãâ â®, ç⮠ᯥæ¨ä¨ª æ¨ï ¢ë¯®«ï¥âáï ¨ ¯¥à¥¯®«¥¨ï ¥ ¡ã¤¥â
|
||||
PUSH DE
|
||||
CALL READ_FROM_FAT
|
||||
EX DE,HL
|
||||
POP DE
|
||||
EXX
|
||||
EX DE,HL
|
||||
EXX
|
||||
JR NC,.loop
|
||||
;
|
||||
; DE - à §¬¥à ¤¨à¥ªâ®à¨¨ ¢ ª« áâ¥à å
|
||||
;!FIXIT ¬®¦® ®¯â¨¬¨§ãâì ª®«-¢® ᤢ¨£®¢
|
||||
;0001 0000 0000 0000 max ª®«-¢® ª« áâ¥à®¢
|
||||
; ¯à¨¬¥à
|
||||
;0000 0000 0000 0111 Clusters
|
||||
; 0100 0000 SectorsPerCluster
|
||||
;0000 0010 0000 0000 BytesPerSector
|
||||
; D' E' D E
|
||||
;0000 0000 0000 0011 1000 0000 0000 0000
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
|
||||
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector)
|
||||
; DE':DE - ª®«-¢® ª« áâ¥à®¢
|
||||
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
; --> DE*BC*A = DE':DE ¤«ï ®â¢¥â å¢ â¨â, ¯®å®¤ã, 4å ॣ¨áâ஢
|
||||
EXX
|
||||
LD DE,0
|
||||
EXX
|
||||
SRL B
|
||||
RR C
|
||||
RRCA
|
||||
JR C,.loop2
|
||||
;
|
||||
.loop1: ;
|
||||
SLA E
|
||||
RL D
|
||||
EXX
|
||||
RL E
|
||||
RL D
|
||||
;RL C
|
||||
EXX
|
||||
;
|
||||
RRCA
|
||||
JR NC,.loop1
|
||||
;
|
||||
.loop2: ;
|
||||
SLA E
|
||||
RL D
|
||||
EXX
|
||||
RL E
|
||||
RL D
|
||||
;RL C
|
||||
EXX
|
||||
;
|
||||
SRL B
|
||||
RR C
|
||||
JR NC,.loop2
|
||||
; <-- DE*BC*A = DE':DE
|
||||
RET
|
||||
*/
|
||||
; ‚室:
|
||||
; ID § ¯¨á¨, ª®â®àë© ¤®«¦¥ ¯®¯ áâì ¢ Š<>˜
|
||||
; HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥ ¯®¯ áâì ¢ Š<>˜
|
||||
LOAD_SAVE_DIR_PREPARE:
|
||||
;!TODO optimize
|
||||
XOR A ; FILE MANIPULATOR = 0
|
||||
LD H,A
|
||||
; [ ] ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥ ¯®¯ áâì ¢ Š<>˜
|
||||
; [ ] ‚ë室: HLIX - ᬥ饨¥ ¢ ä ©«¥ ª â «®£ ã¦ë© ¡«®ª ¯® #4000 ¡ ©â®¢
|
||||
; HLIX = (HL*32) & #1FC000 ᬥ饨¥ ã¦ë© ¡«®ª ¯® #4000 ¡ ©â®¢
|
||||
XOR A
|
||||
LD XL,A
|
||||
LD L,A
|
||||
LD IX,0
|
||||
LD A,H
|
||||
AND #0E
|
||||
RRA
|
||||
RR L
|
||||
RRA
|
||||
RR L
|
||||
RRA
|
||||
RR L
|
||||
LD E,L
|
||||
LD XH,E
|
||||
LD L,A
|
||||
; ;
|
||||
;
|
||||
; A = ®¬¥à ¡«®ª ªíè ¤¨à¥ªâ®à¨¨
|
||||
RL E
|
||||
RLA
|
||||
RL E
|
||||
RLA
|
||||
LD (CORE_BUFFERS.FS_Buffer.DIR_BLOCK),A
|
||||
;
|
||||
XOR A ; FILE MANIPULATOR = 0
|
||||
;LD H,A
|
||||
;LD L,A
|
||||
;LD IX,0
|
||||
LD B,A ; ®â ç « ä ©«
|
||||
CALL MOVE_FP
|
||||
|
||||
@ -839,11 +758,12 @@ LOAD_SAVE_DIR_PREPARE:
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
; [ ] big dir
|
||||
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ ) de ix iy
|
||||
; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
; ¢å®¤: (HANDBUF) - § ¯¨áì ª â «®£
|
||||
; ¢ë室: DE - record index
|
||||
WRT_HND:
|
||||
WRITE_DIR_HANDLE:
|
||||
SET_PAGE_X DIRPAGE
|
||||
EX AF,AF'
|
||||
LD HL,DIRPAGE.buffer
|
||||
@ -1047,7 +967,7 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector)
|
||||
LD A,B
|
||||
AND A
|
||||
;
|
||||
; BytesPerSector/FAT_DIRECTORY_RECORD (32)
|
||||
RL C
|
||||
RLA
|
||||
RL C
|
||||
@ -3019,7 +2939,7 @@ GET_OFFSET_IN_SECTORS:
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; [x] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb
|
||||
; [x] 26/06/2024 {64 kb cluster} read only 64kb cluster ; !TODO cluster 64kb
|
||||
CHECK_64kb_CLUSTER:
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster)
|
||||
; CF=0
|
||||
|
||||
@ -111,8 +111,8 @@
|
||||
.UPD_FSINFO: BYTE 0
|
||||
.FREE_CLUSTERS_COUNT_L: WORD #FFFF
|
||||
.FREE_CLUSTERS_COUNT_H: WORD #FFFF
|
||||
.DIR_BLOCK BYTE #00 ; ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ § £à㦥 ¢ ªíè ¤¨à¥ªâ®à¨© DIRPAGE
|
||||
.DIR_BLOCK_CHANGES DWORD #00000000 ; ª ª¨¥ ¨§ ªã᪮¢ ¢ ¡«®ª¥ ªíè DIRPAGE ¨§¬¥¨«¨áì ¤® á®åà ¥¨ï
|
||||
.DIR_BLOCK BYTE #00 ; [ ] big dir. ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ § £à㦥 ¢ ªíè ¤¨à¥ªâ®à¨© DIRPAGE
|
||||
.DIR_BLOCK_CHANGES DWORD #00000000 ; [ ] big dir. ª ª¨¥ ¨§ ªã᪮¢ ¢ ¡«®ª¥ ªíè DIRPAGE ¨§¬¥¨«¨áì ¤® á®åà ¥¨ï
|
||||
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ¡«®ª އ“)
|
||||
;.READ_PG: BYTE #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||
|
||||
15
DSS/ToDo.txt
15
DSS/ToDo.txt
@ -1,6 +1,21 @@
|
||||
<EFBFBD>® ¯®«ë¬ ¤¨à¥ªâ®à¨ï¬.
|
||||
;[ ] <20>¥à¥¤¥« âì WRITE_DIR_HANDLE ¤«ï à ¡®âë á «î¡®© § ¯¨áìî ¢ ª â «®£¥ (ᥩç á ¨é¥â ¯¥à¢ãî ¯ãáâãî, ç⮡ § ¯¨á âì ¢ ¥ñ)
|
||||
;[ ] ‚ᥠ¨§¬¥¥¨ï ¢ § ¯¨áïå ª â «®£ ¤¥« âì ¢ ¡ãä¥à¥ CORE_BUFFERS.HANDBUF ¨ á®åà ïâì ç¥à¥§ WRITE_DIR_HANDLE
|
||||
;[ ] <20>¥à¥¬¥ ï DIR_BLOCK ¯®ª §ë¢ îé ï ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ ¢ ªíè.
|
||||
;[ ] <20>¥à¥¬¥ ï DIR_BLOCK_CHANGED ¯®ª §ë¢ îé ï ª ª®© ¨§ ªã᪮¢ ¢ ¡«®ª¥ ªíè ¨§¬¥¨«áï ¤® á®åà ¥¨ï. Š ª ¢ FAT.
|
||||
;[ ] <20>à®æ¥¤ãàë ¬¥ïî騥 ¤ ë¥ ¢ ªíè ¤¨à¥ªâ®à¨¨ ¤®«¦ë ¬¥ïâì DIR_BLOCK_CHANGED.
|
||||
;[ ] <20>¥à¥¤ ¢ âì ¢ LOADDIR ã¦ë© ¡«®ª ¤«ï § £à㧪¨ ¢ ªíè (¨«¨ ®¬¥à 㦮© § ¯¨á¨ ª â «®£ ).
|
||||
;[ ] <20>¥à¥¤ ¢ âì ¢ SAVEDIR ã¦ë© ¡«®ª ¤«ï § ¯¨á¨ ¨§ ªíè (¨«¨ ®¬¥à 㦮© § ¯¨á¨ ª â «®£ ).
|
||||
;[ ] LOAD_SAVE_DIR_PREPARE ¯®å®¤ã, ¯¥à¥¤¥« âì ª å¥à ¬ ¢¬¥á⥠á LOADDIR ¨ SAVEDIR
|
||||
|
||||
|
||||
<EFBFBD>¥à¥«®¯ â¨âì
|
||||
;[ ] LOAD_SAVE_DIR_PREPARE
|
||||
;[ ] LOADDIR
|
||||
;[ ] SAVEDIR
|
||||
;[ ] RENAME
|
||||
;[ ] CLOSE_FN
|
||||
;[ ] DEL_FN
|
||||
;[ ] RMDIR
|
||||
;[ ] OPENDIR
|
||||
;[ ] DELETE_LFN_RECORDS
|
||||
@ -73,6 +73,7 @@ MINIMUM_BIOS_VERSION EQU 3*256 + 06 ; version 3.06
|
||||
; ªíè ᯨ᪠ª â «®£
|
||||
DIRPAGE EQU 0 + (low BANKTBL)
|
||||
.buffer EQU #C000
|
||||
.size EQU #4000
|
||||
FATPAGE EQU 1 + (low BANKTBL)
|
||||
.cache EQU #C000
|
||||
TXTPAGE EQU 2 + (low BANKTBL)
|
||||
|
||||
@ -291,7 +291,7 @@ ACCESS DEFB #00
|
||||
HANDBUF DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
|
||||
|
||||
;WRITE_DIR_HANDLE
|
||||
WRT_HND LD A,DIRPAGE
|
||||
CALL BANK
|
||||
PUSH AF
|
||||
|
||||
377
TMP_CODE.ASM
Normal file
377
TMP_CODE.ASM
Normal file
@ -0,0 +1,377 @@
|
||||
FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
|
||||
CP #F0
|
||||
JP C,RD_BPB.UnknownBPB
|
||||
; PREPARE
|
||||
XOR A
|
||||
LD (.UsesVarsFAT32),A
|
||||
;
|
||||
;EXX
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD D,A
|
||||
LD E,A
|
||||
EXX
|
||||
;[ ] fat32
|
||||
LD B,A
|
||||
LD C,A
|
||||
LD (CORE_BUFFERS.FS_Buffer.SectorsPerFAT_H),A ; [ ] fat32
|
||||
;
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BytesPerSector)
|
||||
LD (CORE_BUFFERS.FS_Buffer.BytesPerSector),HL
|
||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerCluster)
|
||||
LD (CORE_BUFFERS.FS_Buffer.SectorsPerCluster),A
|
||||
; calc. first sector FAT
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.RESERVED_SECTORS)
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_L),HL ; low word first sector FAT #2
|
||||
;[ ] fat32
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||
LD (CORE_BUFFERS.FS_Buffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32
|
||||
LD (CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H),BC
|
||||
;LD (CORE_BUFFERS.FS_Buffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables
|
||||
;
|
||||
;
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT16)
|
||||
LD A,E
|
||||
OR D
|
||||
JR NZ,.skip_high
|
||||
;
|
||||
LD (.UsesVarsFAT32),A
|
||||
|
||||
/*
|
||||
0001 0000 0000 0000 max ª®«-¢® ª« áâ¥à®¢
|
||||
0000 0000 0000 0111 Clusters
|
||||
0100 0000 SectorsPerCluster
|
||||
0000 0010 0000 0000 BytesPerSector
|
||||
D' E' D E
|
||||
0000 0000 0000 0011 1000 0000 0000 0000
|
||||
|
||||
|
||||
#FFFF<<5 = #1FFFE0 = 0000 0000 0001 1111 1111 1111 1110 0000
|
||||
|
||||
#FFFF ®¬¥à § ¯¨á¨
|
||||
#1FFFE0 ᬥ饨¥ § ¯¨áì ¢ ä ©«¥ ¤¨à¥ªâ®à¨¨
|
||||
#1FFFE0 & #1FC000 ᬥ饨¥ ã¦ë© ¡«®ª ¯® #4000 ¡ ©â®¢
|
||||
#1FFFE0 & #3FFF €¤à¥á 㦮© ¯®§¨æ¨¨ ¢ ªíè
|
||||
(#1FFFE0 & #1FC000)<<2 ¤¢¨£ ¥¬ ¡ ©â 2 ¨ 3 ç⮡ ¯®«ãç¨âì ®¬¥à ¡«®ª
|
||||
|
||||
H L
|
||||
0000 1011 1101 0001 3025
|
||||
0001 0111 1010 0010 0000 3025*32
|
||||
0001 0100 0000 0000 0000 and #1FC000
|
||||
0011 1010 0010 0000 addr in page
|
||||
|
||||
H L
|
||||
1111 1111 1111 1111 65535
|
||||
0001 1111 1111 1111 1110 0000 65535*32
|
||||
L Xh Xl
|
||||
0001 1111 1100 0000 0000 0000 and #1FC000
|
||||
0011 1010 0010 0000 addr in page
|
||||
|
||||
1 0111 1010 001
|
||||
0000 0001 0111 1010 0010 0000
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
; [x] fat32 ;!TEST
|
||||
LOADDIR: ;!TODO optimize
|
||||
CALL LOAD_SAVE_DIR_PREPARE
|
||||
.next: PUSH AF
|
||||
EX AF,AF'
|
||||
JR NZ,.read_dir ; root dir or not
|
||||
; root dir
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR NZ,.LoadRootDir
|
||||
; fat32
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
|
||||
;LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) ; !FIXIT ¢ëç¨âë¢ âì ¯®«®áâìî ª â «®£
|
||||
LD HL,DIRPAGE.size
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
|
||||
;
|
||||
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤
|
||||
LD DE,DIRPAGE.size ; ᪮«ìª®
|
||||
XOR A ; ¤¥áªà¨¯â®à
|
||||
CALL READ ; ç⥨¥ ¨§ ä ©«
|
||||
EX AF,AF'
|
||||
LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
EX AF,AF'
|
||||
RET
|
||||
;
|
||||
.LoadRootDir: LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H) ;!TODO ¢®§¬®¦®, å¢ â¨â LD HL,0
|
||||
LD IX,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
|
||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||
CP B
|
||||
JR NC,.RTD1
|
||||
;
|
||||
LD B,A ; ç¨á«® ᥪâ®à®¢
|
||||
.RTD1: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD DE,DIRPAGE.buffer ; ¡ãä¥à
|
||||
LD C,Dss.DRV.Read ; ç⥨¥ ᥪâ®à®¢
|
||||
RST ToDSS.DRV
|
||||
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||||
; 21/04/2025 fix ¬ãá®à ¢ áâà ¨æ¥ ª â «®£ , ¥á«¨ ª â «®£ ¬¥ìè¥ áâà ¨æë
|
||||
BIT 7,D
|
||||
JR Z,.exit
|
||||
XOR A
|
||||
LD (DE),A
|
||||
;
|
||||
.exit: POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
|
||||
|
||||
; <20>à®ç¨â âì ᯨ᮪ ª â «®£
|
||||
; ‚室:
|
||||
; (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L), (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
|
||||
; [ ] ID § ¯¨á¨, ª®â®àë© ¤®«¦¥ ¯®¯ áâì ¢ Š<>˜
|
||||
LOAD_SAVE_DIR_PREPARE:
|
||||
;!TODO optimize
|
||||
XOR A ; FILE MANIPULATOR = 0
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD IX,0
|
||||
LD B,A ; ®â ç « ä ©«
|
||||
CALL MOVE_FP
|
||||
;
|
||||
SET_PAGE_X DIRPAGE
|
||||
AND A
|
||||
PUSH AF
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||
LD (CORE_BUFFERS.FM_BUF.DRIVE),A
|
||||
;;;;;;;;
|
||||
;LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
|
||||
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
|
||||
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H)
|
||||
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
|
||||
;
|
||||
XOR A
|
||||
LD D,#40
|
||||
LD E,A
|
||||
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
|
||||
EXX
|
||||
LD D,A
|
||||
LD E,A
|
||||
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
|
||||
OR H
|
||||
OR L
|
||||
EXX
|
||||
OR H
|
||||
OR L
|
||||
;;;;;;;;
|
||||
PUSH AF
|
||||
CALL NZ,.CalcDirSize
|
||||
;
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),DE
|
||||
EXX
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE
|
||||
POP AF
|
||||
EX AF,AF'
|
||||
POP AF
|
||||
RET
|
||||
;
|
||||
.CalcDirSize: ; calc dir size in clusters
|
||||
LD DE,0
|
||||
;LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
|
||||
;EXX
|
||||
; LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
|
||||
.loop: ; ;
|
||||
;EXX
|
||||
INC DE ; <20> ¤¥¥¬áï âãâ â®, ç⮠ᯥæ¨ä¨ª æ¨ï ¢ë¯®«ï¥âáï ¨ ¯¥à¥¯®«¥¨ï ¥ ¡ã¤¥â
|
||||
PUSH DE
|
||||
CALL READ_FROM_FAT
|
||||
EX DE,HL
|
||||
POP DE
|
||||
EXX
|
||||
EX DE,HL
|
||||
EXX
|
||||
JR NC,.loop
|
||||
;
|
||||
; DE - à §¬¥à ¤¨à¥ªâ®à¨¨ ¢ ª« áâ¥à å
|
||||
;!FIXIT ¬®¦® ®¯â¨¬¨§ãâì ª®«-¢® ᤢ¨£®¢
|
||||
;0001 0000 0000 0000 max ª®«-¢® ª« áâ¥à®¢
|
||||
; ¯à¨¬¥à
|
||||
;0000 0000 0000 0111 Clusters
|
||||
; 0100 0000 SectorsPerCluster
|
||||
;0000 0010 0000 0000 BytesPerSector
|
||||
; D' E' D E
|
||||
;0000 0000 0000 0011 1000 0000 0000 0000
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
|
||||
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector)
|
||||
; DE':DE - ª®«-¢® ª« áâ¥à®¢
|
||||
; A - à §¬¥à ª« áâ¥à ¢ ᥪâ®à å
|
||||
; BC - à §¬¥à ᥪâ®à ¢ ¡ ©â å
|
||||
; --> DE*BC*A = DE':DE ¤«ï ®â¢¥â å¢ â¨â, ¯®å®¤ã, 4å ॣ¨áâ஢
|
||||
EXX
|
||||
LD DE,0
|
||||
EXX
|
||||
SRL B
|
||||
RR C
|
||||
RRCA
|
||||
JR C,.loop2
|
||||
;
|
||||
.loop1: ;
|
||||
SLA E
|
||||
RL D
|
||||
EXX
|
||||
RL E
|
||||
RL D
|
||||
;RL C
|
||||
EXX
|
||||
;
|
||||
RRCA
|
||||
JR NC,.loop1
|
||||
;
|
||||
.loop2: ;
|
||||
SLA E
|
||||
RL D
|
||||
EXX
|
||||
RL E
|
||||
RL D
|
||||
;RL C
|
||||
EXX
|
||||
;
|
||||
SRL B
|
||||
RR C
|
||||
JR NC,.loop2
|
||||
; <-- DE*BC*A = DE':DE
|
||||
RET
|
||||
|
||||
/* 4 3 2 1
|
||||
#FFFF<<5 = #1FFFE0 = 0000 0000 0001 1111 1111 1111 1110 0000
|
||||
|
||||
#FFFF ®¬¥à § ¯¨á¨
|
||||
#1FFFE0 ᬥ饨¥ § ¯¨áì ¢ ä ©«¥ ¤¨à¥ªâ®à¨¨
|
||||
#1FFFE0 & #1FC000 ᬥ饨¥ ã¦ë© ¡«®ª ¯® #4000 ¡ ©â®¢
|
||||
#1FFFE0 & #3FFF €¤à¥á 㦮© ¯®§¨æ¨¨ ¢ ªíè
|
||||
(#1FFFE0 & #1FC000)<<2 ¤¢¨£ ¥¬ ¡ ©â 2 ¨ 3 ç⮡ ¯®«ãç¨âì ®¬¥à ¡«®ª
|
||||
*/
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
; [ ] big dir
|
||||
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ ) de ix iy
|
||||
; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
; ¢å®¤: (HANDBUF) - § ¯¨áì ª â «®£
|
||||
; ¢ë室: DE - record index
|
||||
WRITE_DIR_HANDLE:
|
||||
SET_PAGE_X DIRPAGE
|
||||
EX AF,AF'
|
||||
LD HL,DIRPAGE.buffer
|
||||
;!TEST 9/11/23 record index
|
||||
EXX
|
||||
LD DE,0
|
||||
EXX
|
||||
;
|
||||
LD BC,FAT_DIRECTORY_RECORD
|
||||
.loop: ;LD A,(IX+00)
|
||||
LD A,(HL)
|
||||
OR A
|
||||
JR Z,.WRT_HN2
|
||||
CP #E5
|
||||
JR Z,.WRT_HN2
|
||||
;ADD IX,BC
|
||||
ADD HL,BC
|
||||
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£ = áâà ¨æ
|
||||
;
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
LD A,DSS_Error.sys.ROOT_OVERFLOW
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.WRT_HN2: ;LD D,XH
|
||||
;LD E,XL
|
||||
EX DE,HL
|
||||
LD HL,CORE_BUFFERS.HANDBUF
|
||||
LD BC,CORE_BUFFERS.HANDBUF.SIZE
|
||||
LDIR
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
; ¯à®¢¥à塞, 㢥«¨ç¨«áï «¨ à §¬¥à ¤ ëå ¤¨à¥ªâ®à¨¨
|
||||
LD HL,DIRPAGE.buffer
|
||||
LD BC,(SAVEDIR.DIRSIZE)
|
||||
DEC BC
|
||||
ADD HL,BC
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR NC,.SAVEDIR
|
||||
;
|
||||
; à §¬¥à ¤ ëå ¤¨à¥ªâ®à¨¨ 㢥«¨ç¨«áï
|
||||
LD HL,(SAVEDIR.DIRSIZE)
|
||||
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerCluster)
|
||||
ADD HL,BC
|
||||
LD (SAVEDIR.DIRSIZE),HL
|
||||
AND A
|
||||
.SAVEDIR: EXX
|
||||
PUSH DE
|
||||
EXX
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
CALL SAVEDIR
|
||||
POP DE
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
; ‘¡à®á¨âì ª¥è ª â «®£ ¤¨áª.
|
||||
; ¢å®¤: iy=áâàãªâãà ¤¥áªà¨¯â®à
|
||||
; [ ] big dir ¯®«ãç âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
SAVEDIR: ;!TODO optimize
|
||||
CALL LOAD_SAVE_DIR_PREPARE
|
||||
PUSH AF
|
||||
EX AF,AF'
|
||||
JR NZ,.save_dir
|
||||
;
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
JR NZ,.SaveRootDir
|
||||
; fat32
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
|
||||
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
|
||||
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
|
||||
;
|
||||
.save_dir: LD HL,DIRPAGE.buffer
|
||||
; à §¬¥à ᯨ᪠ª â «®£ size_cash_directory
|
||||
;!FIXIT ¥á«¨ ® 㦠, â® ¯à®¢¥à¨âì ¡ £¨ ( ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
|
||||
; ª®£¤ ¡ã¤¥â ç⥨¥ ªã᪠¬¨ ª â «®£ ¢ ªíè, âãâ ¥éñ áçñâ稪 ¯à¨ªàãâ¨âì
|
||||
.DIRSIZE+1: LD DE,0
|
||||
XOR A
|
||||
CALL WRITE
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
;
|
||||
.SaveRootDir: LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H) ;!TODO ¢®§¬®¦®, å¢ â¨â LD HL,0
|
||||
LD IX,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_L)
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
|
||||
LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors
|
||||
SUB B
|
||||
JR NC,.RTD1S
|
||||
ADD A,B
|
||||
LD B,A
|
||||
.RTD1S: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||
LD DE,DIRPAGE.buffer
|
||||
LD C,Dss.DRV.Write
|
||||
RST ToDSS.DRV
|
||||
POP AF
|
||||
OUT (SLOT3),A
|
||||
RET
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user