fat32 - 80% (но это не точно)

This commit is contained in:
Anatoliy Belyanskiy 2024-04-06 04:27:47 +10:00
parent 53dbf83712
commit ada25b0fe1
20 changed files with 866 additions and 754 deletions

View File

@ -18,13 +18,8 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
;
;
INC B
DEC B
JP Z,.READ
DEC B
JP Z,.WRITE_FN
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
DJNZ .B_1
; B = 0
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
;XOR A
;
@ -41,6 +36,11 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
;
RET
;
.error_fn: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
;
.B_1: DJNZ .error_fn
.WRITE_FN:
AND FAT_ATTR.NoVolID ; [x] 2/12/23 ¢à¥¬¥­­ë© ä¨ªá ¤«ï volume ID
.WRITE: PUSH AF

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
;<3B>絎き襯 Л<>腑⑧<E88591>:
; C - #12
@ -18,18 +19,30 @@ CLOSE_FN:
RET NZ
BIT 7,(IY+_sFM.ACCESS_MODE)
JR Z,.NOTMODF
LD E,(IY+_sFM.DIR_CLUSTER)
LD D,(IY+_sFM.DIR_CLUSTER+1)
LD E,(IY+_sFM.DIR_CLUSTER_L)
LD D,(IY+_sFM.DIR_CLUSTER_L+1)
PUSH DE
; [x] fat32
LD E,(IY+_sFM.DIR_CLUSTER_H)
LD D,(IY+_sFM.DIR_CLUSTER_H+1)
PUSH DE
;
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
;
XOR A
CALL SET_FM
; [x] fat32
POP DE
LD (IY+_sFM.DIR_CLUSTER),E
LD (IY+_sFM.DIR_CLUSTER+1),D
LD (IY+_sFM.DIR_CLUSTER_H),E
LD (IY+_sFM.DIR_CLUSTER_H+1),D
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),D
;
POP DE
LD (IY+_sFM.DIR_CLUSTER_L),E
LD (IY+_sFM.DIR_CLUSTER_L+1),D
; [x] 15/11/2023 -bug with bad clusters ;!TEST
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D

View File

@ -68,18 +68,8 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
INC HL
DJNZ .loop1
;AaRR
PUSH HL
CALL SYSTIME
CALL MK_TIME
POP HL
LD (HL),E
INC HL
LD (HL),D
INC HL
LD (HL),C
INC HL
LD (HL),B
INC HL
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
;
LD BC,#0600
;
.loop2: LD (HL),C
@ -89,13 +79,12 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
CALL WRT_HND
RET C
;CALL SAVEDIR
.PATH0+1:
LD HL,0
.PATH0+1: LD HL,0
XOR A
LD (OPEN_FN.TMP),A
JP OPEN_FN.FILE ;R008
.Prepare:
;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
;
.Prepare: ;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
AND FAT_ATTR.NoDIRnoVolID
LD (.TMP),A
LD (.PATH0),HL
@ -106,8 +95,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
JP MASK
;
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
.FILE_EXISTS:
LD A,DSS_Error.sys.FILE_EXISTS
.FILE_EXISTS: LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET
;

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ?
////////////////////////////////////////////////////////////////////////
@ -27,26 +28,46 @@ DEL_FN: ;!TEST
CALL SEARCH.File
RET C
; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
.DELETE:
SET_PAGE_X DIRPAGE
EX AF,AF'
LD (IX + _sFAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©« 
; [ ] fat32
LD E,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
;
OUT (SLOT3),A
; fat32
LD E,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD A,E
OR D
EXX
LD E,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
OR D
OR E
;
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ¥á«¨ à §¬¥à ä ©«  ­¥ ­®«ì
.loop: EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
EXX
EX DE,HL
EXX
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EXX
PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à 
PUSH AF
LD DE,#0000 ; ­®¬¥à ª« áâ¥à 
EXX
PUSH DE
LD DE,#0000 ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
POP AF
POP DE
EXX
POP DE
EXX
JP NC,.loop
CALL WRITE_FAT_TABLE ;!FIXIT ¬®¦¥â ­¥ ­ã¦­  âãâ? ’ ¬ ¤ «ìè¥ ¡ã¤¥â
CALL WRITE_FAT_TABLE
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
;

View File

@ -266,13 +266,13 @@ ERREXE: PUSH AF
_mDECTASK
POP AF
RET
;
;!TODO áà ¢­¨âì á EXEC02
PRELOAD: EX DE,HL
LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD A,D
AND #3F
LD D,A
ADC HL,DE
ADD HL,DE
XOR A
SLA H
RLA

View File

@ -3,11 +3,11 @@
; B = 1 ‚ë§®¢ ä㭪樨 SETUP_CURSORS ¤«ï ¢®ááâ ­®¢«¥­¨ï á¨á⥬­ëå èà¨ä⮢ DSS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIB_SUB:
DJNZ 1F
DJNZ .B_2
; func B = 1
JP SETUP_CURSORS
;
1: ; func B > 1 or 0
.B_2: ; func B > 1 or 0
SCF
RET
;

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1B. ‘®§¤ ­¨¥ ª â «®£ .
;
@ -6,15 +7,14 @@
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
MKDIR:
;error
MKDIR.DIR_EXISTS:
LD A,DSS_Error.sys.DIR_EXISTS
.DIR_EXISTS: LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
;
; Entry point ;!TEST Current Dir ;[x] 15/10/23
.B: PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
@ -46,7 +46,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
;
CALL G_CLUST
RET C
; [x] fat32
; fat32
PUSH HL ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
EXX
PUSH HL ; áâ à訩 ­®¬¥à ᥪâ®à 
@ -69,28 +69,15 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
INC HL
DJNZ .loop1
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
; [x] fat32 § ¯¨áì áâ à襣® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_H
; fat32 § ¯¨áì áâ à襣® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_H
POP DE
PUSH DE ; áâ à訩 ­®¬¥à ᥪâ®à 
LD (HL),E
INC HL
LD (HL),D
INC HL
; [ ] fat32 & VFAT
PUSH HL
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
POP HL
; _sFAT_DIRECTORY_RECORD.TIME
LD (HL),E ; de=¢à¥¬ï
INC HL
LD (HL),D
INC HL
; _sFAT_DIRECTORY_RECORD.DATE
LD (HL),C ; ¤¥­ì
INC HL
LD (HL),B ; ¬¥áïæ
INC HL
;
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
; § ¯¨áì ¬« ¤è¥£® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_L
POP BC ; áâ à訩 ­®¬¥à ᥪâ®à 
POP DE ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
@ -109,6 +96,9 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
;
CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ )
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
;
; á®§¤ ñ¬ á«ã¦¥¡­ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ­­®¬ ª â «®£¥
; Š€’€‹Žƒ "."
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
@ -120,32 +110,48 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
INC HL
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
EX DE,HL
LD BC,21
LD BC,21 ; !HARDCODE
LDIR
; Š€’€‹Žƒ ".."
EX DE,HL
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£ 
INC HL
LD (HL),"."
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
.MKD03: INC HL
.loop4: INC HL
LD (HL),C
DJNZ .MKD03
DJNZ .loop4
;
INC HL
SET_PAGE_X DIRPAGE
PUSH AF
;
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
;
LD A,(DIRPAGE.buffer)
CP "."
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
JP Z,.MKD04
LD IX,HANDBUF
JR Z,.copy_dir_record
; fat32
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
JR NZ,.fat16_root_dir
; fat 32
EX DE,HL
LD HL,(FatBuffer.RootDirStartCluster_L)
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),HL
LD HL,(FatBuffer.RootDirStartCluster_H)
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),HL
EX DE,HL
JR .set_rec
;
.fat16_root_dir:; fat 12/16
;LD IX,HANDBUF
XOR A
; [ ] fat32 à §®¡à âìáï
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
.MKD04: EX DE,HL
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
.set_rec: LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
.copy_dir_record:
EX DE,HL
LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21
LDIR
POP AF
@ -181,11 +187,16 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
OUT (SLOT3),A
;
LD HL,CORE_BUFFERS.SECBUF
; [x] optimization
LD A,(HL)
OR A
JR Z,.skip_clean
;
LD DE,CORE_BUFFERS.SECBUF+1
LD BC,511
LD BC,511 ;!HARDCODE
LD (HL),0
LDIR
;
.skip_clean: ;
POP IX
POP HL
INC IX

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #11. Žâªàë⨥ ä ©« .
;
@ -11,7 +12,8 @@
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
; CF=1, A - ª®¤ ®è¨¡ª¨.
////////////////////////////////////////////////////////////////////////
OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
;AND #7F ; ACCESS_MODE bit7 - ¤«ï ¢­ãâ७­¥£® ¨á¯®«ì§®¢ ­¨ï))) ;!TODO
LD (.TMP),A
PUSH HL
CALL DIR_PATH_CHECK.forceCheck
@ -50,12 +52,12 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD A,(TASK)
LD (IY+_sFM.TASK_NUM),A
XOR A
LD (IY+_sFM.OptimizedClusters),A
LD (IY+_sFM.KnownCluster_L),A
LD (IY+_sFM.KnownCluster_L+1),A
LD (IY+_sFM.KnownOffset_L),A
LD (IY+_sFM.KnownOffset_L+1),A
LD (IY+_sFM.OptimizedClusters),A
; [x] fat32
; fat32
LD (IY+_sFM.KnownCluster_H),A
LD (IY+_sFM.KnownCluster_H+1),A
LD (IY+_sFM.KnownOffset_H),A
@ -67,14 +69,21 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD (IY+_sFM.F_POSITION+3),A
LD A,(FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A
; [ ] fat32
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L
; fat32
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
LD E,(HL)
INC HL
LD D,(HL)
; [ ] fat32
LD (IY+_sFM.DIR_CLUSTER),E
LD (IY+_sFM.DIR_CLUSTER+1),D
LD (IY+_sFM.DIR_CLUSTER_H),E
LD (IY+_sFM.DIR_CLUSTER_H+1),D
;
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L ; work directory FM
LD E,(HL)
INC HL
LD D,(HL)
LD (IY+_sFM.DIR_CLUSTER_L),E
LD (IY+_sFM.DIR_CLUSTER_L+1),D
;
EX AF,AF'
AND A
RET

View File

@ -15,22 +15,23 @@ READ: LD (.R_POINT),HL
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JP C,.ERR_1
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sectro size
LD H,0 ;!HARDCODE max file size = 8 gb
LD E,(IY+_sFM.F_POSITION+1)
LD D,(IY+_sFM.F_POSITION+2)
LD L,(IY+_sFM.F_POSITION+3)
LD A,E
AND #01
LD B,A
LD C,(IY+_sFM.F_POSITION)
RR L
RR D
RR E
;HL:DE FP (in sectors)
;BC FP residue (in bytes)
;
OR C
CALL GET_OFFSET_IN_SECTORS
; ;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sector size
; LD H,0 ;!HARDCODE max file size = 8 gb
; LD E,(IY+_sFM.F_POSITION+1)
; LD D,(IY+_sFM.F_POSITION+2)
; LD L,(IY+_sFM.F_POSITION+3)
; LD A,E
; AND #01
; LD B,A
; LD C,(IY+_sFM.F_POSITION)
; RR L
; RR D
; RR E
; ;HL:DE FP (in sectors)
; ;BC FP residue (in bytes)
; ;
; OR C
JP NZ,.ROV1
.ROV4: POP BC
PUSH BC
@ -145,9 +146,9 @@ READ: LD (.R_POINT),HL
JP .ROV4
;
.ERR_3: POP HL
.ERR_2: POP HL
POP HL
.ERR_1: POP BC
SCF
;SCF
RET
;
.TEST_SIZE: XOR A

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ .
; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
@ -37,15 +38,25 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
CALL LOADDIR
CALL SEARCH.Dir
RET C
; [ ] fat32
; fat32
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
EXX
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
PUSH IX
.RMD17: PUSH HL
PUSH IX ;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
;
;!TODO <20>à®æ¥¤ãà  ¯®«­®£® ¢ëç¨â뢠­¨ï ª â «®£  (¢á¥ ª« áâ¥àë). Œ®¦­® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
.read_dir_big_loop:
PUSH HL
EXX
PUSH HL
EXX
CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
LD B,A
LD C,Dss.DRV.Read
; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­®
.read_dir_loop:
PUSH AF
.read_dir_loop: ;PUSH AF
PUSH BC
PUSH HL
PUSH IX
;
@ -54,7 +65,8 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
IN A,(SLOT0)
OUT (SLOT3),A
LD DE,CORE_BUFFERS.SECBUF+#C000
LD BC,1*256 + Dss.DRV.Read
;LD BC,1*256 + Dss.DRV.Read
LD B,1
LD A,(FatBuffer.DRIVE)
RST ToDSS.DRV
POP AF
@ -77,8 +89,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
SBC HL,DE
AND FAT_ATTR.VOLUME_ID
JP Z,.error ;DIR NOT EMPTY
.next_record:
LD DE,#0020
.next_record: LD DE,#0020
ADD HL,DE
DJNZ .check_dir_loop
;
@ -89,29 +100,39 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
OR XL
JR NZ,.no_inc_hl
INC HL
.no_inc_hl:
POP AF
DEC A
JR NZ,.read_dir_loop
; [ ] fat32
.no_inc_hl: ; POP AF
; DEC A
; JR NZ,.read_dir_loop
POP BC
DJNZ .read_dir_loop
; fat32
EXX
POP HL ; ­®¬¥à ª« áâ¥à 
EXX
POP HL ; ­®¬¥à ª« áâ¥à 
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
JR NC,.RMD17 ; ­¥ ª®­¥æ 楯®çª¨
.delete:
POP IX
EXX
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
EXX
JR NC,.read_dir_big_loop ; ­¥ ª®­¥æ 楯®çª¨
;
.delete: POP IX
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
.RMD15: POP IX
;
.RMD15: POP HL
POP HL
POP HL
POP HL
POP AF
POP HL
JR .delete
;
.error: POP IX
.error: POP HL
POP HL
POP HL
POP HL
POP HL
POP AF
POP HL
POP IX
LD A,DSS_Error.sys.DIR_NOT_EMPTY
SCF
RET

View File

@ -20,6 +20,7 @@ PUT_D_T:
POP BC
POP DE
RET C
; [ ] VFAT
LD (IY + _sFM.FS_REC.TIME),E
LD (IY + _sFM.FS_REC.TIME+1),D
LD (IY + _sFM.FS_REC.DATE),C

View File

@ -30,31 +30,32 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
CALL SET_FM
JR C,.ERR1
LD A,(IY+_sFM.ACCESS_MODE)
AND FAT_ATTR.READ_ONLY
AND Dss.Open.R
JR NZ,.RD_ONLY
SET 7,(IY + _sFM.ACCESS_MODE)
SET 5,(IY + _sFM.FS_REC.ATTRIBUT)
LD A,(IY + _sFM.DRIVE)
CALL OPENDSK
JR C,.ERR1
;
LD C,(IY+_sFM.F_POSITION)
LD A,(IY+_sFM.F_POSITION+1)
LD E,A
AND #01
LD B,A
LD D,(IY+_sFM.F_POSITION+2)
LD L,(IY+_sFM.F_POSITION+3)
LD H,0
OR A
RR L
RR D
RR E
; HL:DE - FP (in sectors)
; BC - FP residue (in bytes)
LD A,B
OR C
CALL GET_OFFSET_IN_SECTORS
; ;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sector size
; LD H,0 ;!HARDCODE max file size = 8 gb
; LD E,(IY+_sFM.F_POSITION+1)
; LD D,(IY+_sFM.F_POSITION+2)
; LD L,(IY+_sFM.F_POSITION+3)
; LD A,E
; AND #01
; LD B,A
; LD C,(IY+_sFM.F_POSITION)
; RR L
; RR D
; RR E
; ;HL:DE FP (in sectors)
; ;BC FP residue (in bytes)
; ;
; OR C
JP NZ,.WOV1
;
.WOV4: POP BC
PUSH BC
SRL B
@ -62,8 +63,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH HL
PUSH DE
PUSH BC
.R_POINT+2:
LD IX,0
.R_POINT+2: LD IX,0
CALL BLOK_WRITE
POP BC
JR C,.ERR3

View File

@ -131,6 +131,7 @@ DISKINF:; [ ] 22/11/23
LD HL,2
LD BC,0
.FRESP: PUSH BC
; [ ] fat32
CALL READ_FROM_FAT
POP BC
CP DSS_Error.sys.DISK_FULL

View File

@ -96,7 +96,6 @@ SET_FM: CALL FM_FIND
RET
RES_FM: CALL FM_FIND
; error
; LD A,DSS_Error.sys.INVALID_HANDLE

View File

@ -446,6 +446,3 @@ CHECK_NAME:
SCF
RET
;----------------------------------------------------------------------;

View File

@ -297,7 +297,7 @@ ADRST10: ;DS 512 ;,0
; 0 1 2 3 4 5 6 7 8 9 DEC HEX
DB low F_START, low CHNDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09
DB low CREATE, low CREATE.NEW, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR, low RMDIR, low CHDIR_FN ; 2 14..1D
DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR.B, low RMDIR, low CHDIR_FN ; 2 14..1D
DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27
DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31
DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B
@ -324,7 +324,7 @@ ADRST10: ;DS 512 ;,0
;...............................................[HIGH ADDRESS]:
DB high F_START, high CHNDISK_FN,high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK
DB high CREATE, high CREATE.NEW,high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR, high RMDIR, high CHDIR_FN
DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR.B,high RMDIR, high CHDIR_FN
DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS
DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY
DB high ECHOKEY, high CTRLKEY, high NOPS, high K_CLEAR,high K_SETUP,high TESTKEY,high SETWIN, high SETWIN1,high SETWIN2, high SETWIN3

View File

@ -170,7 +170,7 @@ SEARCH:
;----------------------------------------------------------------------;
; FIND "MASKAREA" IN DIRECTORY
; [ ] fat32
; [x] fat32 ;!TEST
; ¢ë室: IY:DE - cluster number
FINDDIR:
SET_PAGE_X DIRPAGE
@ -292,7 +292,7 @@ FINDDIR:
; .MM3: LD (HL),0
; ; JP IT_DIR
;
.IT_DIR: ; [ ] fat32
.IT_DIR:; fat32
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD YH,D
@ -338,7 +338,7 @@ CHECK_ZERO_CLUSTER:
;----------------------------------------------------------------------;
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
; [x] fat32
; [x] fat32 ;!TEST
OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
LD A,(HL)
OR A
@ -392,8 +392,8 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
.SUBDIR3: CALL FINDDIR
RET C
EX DE,HL
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; [ ] fat32
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),IY ; [ ] fat32
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; fat32
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),IY ; fat32
LD HL,#4000 ;!HARDCODE
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
;EX DE,HL

View File

@ -610,7 +610,7 @@ GET_FAT16_CELL:
AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; [x] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
; CP C
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
@ -1220,6 +1220,50 @@ SaveGotCluster: LD A,C
RET
////////////////////////////////////////////////////////////////////////
;----------------------------------------------------------------------;
; ‚室: HL -  ¤à¥á ªã¤  ¯¨á âì
; ‚ë室: HL -  ¤à¥á á«¥¤ãî騩 ¯®á«¥ § ¯¨á ­®£®
WRITE_DATE_TIME_TO_DIRECTORY_RECORD:
; [ ] fat32 & VFAT date
PUSH HL
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
POP HL
; _sFAT_DIRECTORY_RECORD.TIME
LD (HL),E ; de=¢à¥¬ï
INC HL
LD (HL),D
INC HL
; _sFAT_DIRECTORY_RECORD.DATE
LD (HL),C ; ¤¥­ì
INC HL
LD (HL),B ; ¬¥áïæ
INC HL
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sector size
GET_OFFSET_IN_SECTORS:
LD H,0 ;!HARDCODE max file size = 8 gb
LD E,(IY+_sFM.F_POSITION+1)
LD D,(IY+_sFM.F_POSITION+2)
LD L,(IY+_sFM.F_POSITION+3)
LD A,E
AND #01
LD B,A
LD C,(IY+_sFM.F_POSITION)
RR L
RR D
RR E
;HL:DE FP (in sectors)
;BC FP residue (in bytes)
;
OR C
RET
;----------------------------------------------------------------------;
;!TODO fat32
;=======================================================================

View File

@ -35,22 +35,28 @@
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
; .TIME: WORD #0000 ;+ #16 +22 TIME
; .DATE: WORD #0000 ;+ #18 +24 DATE
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ;!TODO fat32
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
.FS_REC: _sFAT_DIRECTORY_RECORD
; from Core
.F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
.DIR_CLUSTER: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER
.HANDLE: WORD #0000 ;+ #26 +38 HANDLE NUMBER
.DRIVE: BYTE #00 ;+ #28 +40 DRIVE OR CURRENT
.ACCESS_MODE: BYTE #00 ;+ #29 +41 ACCESS MODE ¯à¨§­ ª ¨§¬¥­¥­¨ï ä ©« 
.TASK_NUM: BYTE #00 ;+ #2A +42 TASK
.OptimizedClusters BYTE #00 ;+ #2B +43
.KnownCluster_L: WORD #0000 ;+ #2C +44 Œ« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownCluster_H: WORD #0000 ;+ #2E +46 ‘â à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L: WORD #0000 ;+ #30 +48 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H: WORD #0000 ;+ #32 +50 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.DIR_CLUSTER_L: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW
.DIR_CLUSTER_H: WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32
.HANDLE: WORD #0000 ;+ #28 +40 HANDLE NUMBER
.DRIVE: BYTE #00 ;+ #2A +42 DRIVE OR CURRENT
.ACCESS_MODE: BYTE #00 ;+ #2B +43 ACCESS MODE
.TASK_NUM: BYTE #00 ;+ #2C +44 TASK
.OptimizedClusters BYTE #00 ;+ #2D +45
.KnownCluster_L: WORD #0000 ;+ #2E +46 Œ« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownCluster_H: WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L: WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H: WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
ENDS
;ACCESS MODE: A=0 ç⥭¨¥/§ ¯¨áì
; A=1 ç⥭¨¥
; A=2 § ¯¨áì
; ;!TODO A=3 § ¯¨áì ¡¥§ «¨è­¨å á®åà ­¥­¨© ªíè  FAT
; ;!TODO A=4 § ¯¨á âì ªíè FAT
;
;

View File

@ -1 +1 @@
956
949