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

@ -6,41 +6,41 @@
; B = #01 SET ATTRIB ; B = #01 SET ATTRIB
; OUTPUT: A - ATTRIB ; OUTPUT: A - ATTRIB
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
LD C,A LD C,A
PUSH HL PUSH HL
PUSH BC PUSH BC
CALL DIR_PATH_CHECK CALL DIR_PATH_CHECK
POP BC POP BC
POP HL POP HL
RET C RET C
LD A,C LD A,C
; ;
; ;
INC B INC B
DEC B DJNZ .B_1
JP Z,.READ ; B = 0
DEC B .READ: ;!TEST ;[x] 16/11/23 optimize get attribute
JP Z,.WRITE_FN ;XOR A
LD A,DSS_Error.sys.INVALID_FUNCTION ;
SCF CALL .OPENATR ;R002
RET RET C
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute ;!TEST ;[x] 16/11/23 optimize get attribute
;XOR A LD A,(HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
; ;LD B,(IY+_sFM.ATTRIBUT)
CALL .OPENATR ;R002 ;PUSH BC
RET C ;CALL CLOSE
;!TEST ;[x] 16/11/23 optimize get attribute ;POP BC
LD A,(HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT) ;RET C
;LD B,(IY+_sFM.ATTRIBUT) ;LD A,B
;PUSH BC ;
;CALL CLOSE RET
;POP BC ;
;RET C .error_fn: LD A,DSS_Error.sys.INVALID_FUNCTION
;LD A,B SCF
; RET
RET ;
; .B_1: DJNZ .error_fn
.WRITE_FN: .WRITE_FN:
AND FAT_ATTR.NoVolID ; [x] 2/12/23 ¢à¥¬¥­­ë© ä¨ªá ¤«ï volume ID AND FAT_ATTR.NoVolID ; [x] 2/12/23 ¢à¥¬¥­­ë© ä¨ªá ¤«ï volume ID
.WRITE: PUSH AF .WRITE: PUSH AF

View File

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

View File

@ -3,111 +3,99 @@
; A - File attribute ; A - File attribute
; OUTPUT: A - FM ; OUTPUT: A - FM
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
CREATE: ;!TEST Current Dir ;[x] 15/10/23 CREATE: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL PUSH HL
LD C,A LD C,A
PUSH BC PUSH BC
CALL DIR_PATH_CHECK CALL DIR_PATH_CHECK
POP BC POP BC
POP HL POP HL
RET C RET C
LD A,C LD A,C
; ;
CALL .Prepare CALL .Prepare
RET C RET C
CALL SEARCH.File CALL SEARCH.File
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024 ; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT ;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
CP DSS_Error.sys.FILE_NOT_FOUND CP DSS_Error.sys.FILE_NOT_FOUND
JR Z,.DO JR Z,.DO
SCF SCF
RET RET
.FILE_EXISTS_DEL: .FILE_EXISTS_DEL:
CALL DEL_FN.DELETE CALL DEL_FN.DELETE
LD A,DSS_Error.sys.FILE_NOT_FOUND LD A,DSS_Error.sys.FILE_NOT_FOUND
RET RET
; ;
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; OUTPUT: A - FM ; OUTPUT: A - FM
.NEW: ;!TEST Current Dir ;[x] 15/10/23 .NEW: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL PUSH HL
LD C,A LD C,A
PUSH BC PUSH BC
CALL DIR_PATH_CHECK CALL DIR_PATH_CHECK
POP BC POP BC
POP HL POP HL
RET C RET C
LD A,C LD A,C
; ;
CALL .Prepare CALL .Prepare
RET C RET C
CALL SEARCH.File CALL SEARCH.File
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024 ; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
; LD A,DSS_Error.sys.FILE_EXISTS ; LD A,DSS_Error.sys.FILE_EXISTS
; CCF ; CCF
; RET C ; RET C
JR NC,.FILE_EXISTS JR NC,.FILE_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND CP DSS_Error.sys.FILE_NOT_FOUND
SCF SCF
RET NZ RET NZ
; ;
; ;
;no_file_found ;no_file_found
.DO: LD HL,MASKARE .DO: LD HL,MASKARE
LD DE,HANDBUF LD DE,HANDBUF
LD BC,11 LD BC,11
LDIR LDIR
EX DE,HL EX DE,HL
.TMP+1: LD A,0 .TMP+1: LD A,0
LD (HL),A LD (HL),A
INC HL INC HL
LD BC,#0A00 ;!HARDCODE LD BC,#0A00 ;!HARDCODE
; ;
.loop1: LD (HL),C .loop1: LD (HL),C
INC HL INC HL
DJNZ .loop1 DJNZ .loop1
;AaRR ;AaRR
PUSH HL CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
CALL SYSTIME ;
CALL MK_TIME LD BC,#0600
POP HL ;
LD (HL),E .loop2: LD (HL),C
INC HL INC HL
LD (HL),D DJNZ .loop2
INC HL ;
LD (HL),C CALL WRT_HND
INC HL RET C
LD (HL),B ;CALL SAVEDIR
INC HL .PATH0+1: LD HL,0
LD BC,#0600 XOR A
; LD (OPEN_FN.TMP),A
.loop2: LD (HL),C JP OPEN_FN.FILE ;R008
INC HL ;
DJNZ .loop2 .Prepare: ;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
; AND FAT_ATTR.NoDIRnoVolID
CALL WRT_HND LD (.TMP),A
RET C LD (.PATH0),HL
;CALL SAVEDIR CALL GETWORD
.PATH0+1: RET C
LD HL,0 ; LD HL,TMPNAME
XOR A ; LD DE,MASKARE
LD (OPEN_FN.TMP),A JP MASK
JP OPEN_FN.FILE ;R008 ;
.Prepare:
;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
AND FAT_ATTR.NoDIRnoVolID
LD (.TMP),A
LD (.PATH0),HL
CALL GETWORD
RET C
; LD HL,TMPNAME
; LD DE,MASKARE
JP MASK
;
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024 ; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
.FILE_EXISTS: .FILE_EXISTS: LD A,DSS_Error.sys.FILE_EXISTS
LD A,DSS_Error.sys.FILE_EXISTS CCF
CCF RET
RET
; ;

View File

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

View File

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

View File

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

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1B. ‘®§¤ ­¨¥ ª â «®£ . ; ”ã­ªæ¨ï #1B. ‘®§¤ ­¨¥ ª â «®£ .
; ;
@ -6,196 +7,206 @@
; ;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
MKDIR:
;error ;error
MKDIR.DIR_EXISTS: .DIR_EXISTS: LD A,DSS_Error.sys.DIR_EXISTS
LD A,DSS_Error.sys.DIR_EXISTS CCF
CCF RET
RET ;
; Entry point ;!TEST Current Dir ;[x] 15/10/23
.B: PUSH HL
MKDIR: ;!TEST Current Dir ;[x] 15/10/23 CALL DIR_PATH_CHECK
PUSH HL POP HL
CALL DIR_PATH_CHECK RET C
POP HL CALL .START
RET C PUSH AF
CALL .START LD HL,CurrentDirectory
PUSH AF CALL CHDIR
LD HL,CurrentDirectory POP AF
CALL CHDIR RET
POP AF ;
RET .START: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
;LD HL,TMPNAME ; 8.3 ¨¬ï
;LD DE,MASKARE ; ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â 
CALL MASK ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
RET C
;!TEST optimization à ­¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ¤¨áª 
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
; LD A,DSS_Error.sys.DIR_EXISTS
; CCF
; RET C ; ª â «®£ ­ ©¤¥­
JR NC,.DIR_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
CALL G_CLUST
RET C
; fat32
PUSH HL ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
EXX
PUSH HL ; áâ à訩 ­®¬¥à ᥪâ®à 
EXX
;
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
LD A,FAT_ATTR.DIRECTORY ;  âਡãâ § ¯¨á¨ ª â «®£ 
; _sFAT_DIRECTORY_RECORD.ATTRIBUT
LD (HL),A
INC HL
LD BC,#0800 ; b=áç¥â稪
;
.loop1: LD (HL),C
INC HL
DJNZ .loop1
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
; fat32 § ¯¨áì áâ à襣® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_H
POP DE
PUSH DE ; áâ à訩 ­®¬¥à ᥪâ®à 
LD (HL),E
INC HL
LD (HL),D
INC HL
;
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
; § ¯¨áì ¬« ¤è¥£® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_L
POP BC ; áâ à訩 ­®¬¥à ᥪâ®à 
POP DE ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
PUSH DE
PUSH BC
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L
LD (HL),E
INC HL
LD (HL),D
INC HL
; _sFAT_DIRECTORY_RECORD.F_SIZE
LD BC,#0400 ; b=áç¥â稪
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ )
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ;
.START: CALL GETWORD ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª ; á®§¤ ñ¬ á«ã¦¥¡­ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ­­®¬ ª â «®£¥
RET C ; Š€’€‹Žƒ "."
;LD HL,TMPNAME ; 8.3 ¨¬ï LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
;LD DE,MASKARE ; ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â  LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
CALL MASK ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
RET C ;
;!TEST optimization à ­¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î .loop3: INC HL
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£  LD (HL),C
; DJNZ .loop3
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ¤¨áª  ; ᪮¯¨à®¢ âì ¡ ©âë 11..31 _sFAT_DIRECTORY_RECORD
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024 INC HL
; LD A,DSS_Error.sys.DIR_EXISTS LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
; CCF EX DE,HL
; RET C ; ª â «®£ ­ ©¤¥­ LD BC,21 ; !HARDCODE
JR NC,.DIR_EXISTS LDIR
CP DSS_Error.sys.FILE_NOT_FOUND ; Š€’€‹Žƒ ".."
SCF EX DE,HL
RET NZ LD (HL),"." ; § ¯¨áì த¨â. ª â «®£ 
; INC HL
CALL G_CLUST LD (HL),"."
RET C LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
; [x] fat32 .loop4: INC HL
PUSH HL ; ¬« ¤è¨© ­®¬¥à ᥪâ®à  LD (HL),C
EXX DJNZ .loop4
PUSH HL ; áâ à訩 ­®¬¥à ᥪâ®à  ;
EXX INC HL
; SET_PAGE_X DIRPAGE
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  PUSH AF
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª ;
LD HL,MASKARE LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
LD DE,HANDBUF ;
LD BC,11 LD A,(DIRPAGE.buffer)
LDIR CP "."
EX DE,HL JR Z,.copy_dir_record
LD A,FAT_ATTR.DIRECTORY ;  âਡãâ § ¯¨á¨ ª â «®£  ; fat32
; _sFAT_DIRECTORY_RECORD.ATTRIBUT LD A,(FatBuffer.FAT_TYPE)
LD (HL),A CP FAT_TYPE.x32
INC HL JR NZ,.fat16_root_dir
LD BC,#0800 ; b=áç¥â稪 ; fat 32
; EX DE,HL
.loop1: LD (HL),C LD HL,(FatBuffer.RootDirStartCluster_L)
INC HL LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),HL
DJNZ .loop1 LD HL,(FatBuffer.RootDirStartCluster_H)
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),HL
; [x] fat32 § ¯¨áì áâ à襣® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_H EX DE,HL
POP DE JR .set_rec
PUSH DE ; áâ à訩 ­®¬¥à ᥪâ®à  ;
LD (HL),E .fat16_root_dir:; fat 12/16
INC HL ;LD IX,HANDBUF
LD (HL),D XOR A
INC HL LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
; [ ] fat32 & VFAT LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
PUSH HL .set_rec: LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï .copy_dir_record:
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã EX DE,HL
POP HL LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21
; _sFAT_DIRECTORY_RECORD.TIME LDIR
LD (HL),E ; de=¢à¥¬ï POP AF
INC HL OUT (SLOT3),A
LD (HL),D ;
INC HL EX DE,HL
; _sFAT_DIRECTORY_RECORD.DATE LD D,H
LD (HL),C ; ¤¥­ì LD E,L
INC HL INC DE
LD (HL),B ; ¬¥áïæ LD (HL),0
INC HL LD BC,512-65 ;!HARDCODE
; § ¯¨áì ¬« ¤è¥£® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_L LDIR
POP BC ; áâ à訩 ­®¬¥à ᥪâ®à  ;
POP DE ; ¬« ¤è¨© ­®¬¥à ᥪâ®à  POP HL ; áâ à訩 ­®¬¥à ᥪâ®à 
PUSH DE EXX
PUSH BC POP HL ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L CALL CLUSTER_TO_SECTOR
LD (HL),E LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ­  ª« áâ¥à
INC HL .MKD12: PUSH AF
LD (HL),D PUSH HL ; áâ. à §àï¤
INC HL PUSH IX ; ­®¬¥à «®£. ᥪâ®à 
; _sFAT_DIRECTORY_RECORD.F_SIZE IN A,(SLOT3)
LD BC,#0400 ; b=áç¥â稪 PUSH AF
.loop2: LD (HL),C IN A,(SLOT0)
INC HL OUT (SLOT3),A
DJNZ .loop2 ;
; LD A,(FatBuffer.DRIVE)
CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) LD DE,CORE_BUFFERS.SECBUF+#C000
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª LD BC,1*256 + Dss.DRV.Write
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à RST ToDSS.DRV
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£  ;
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥« POP AF
; OUT (SLOT3),A
.loop3: INC HL ;
LD (HL),C LD HL,CORE_BUFFERS.SECBUF
DJNZ .loop3 ; [x] optimization
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 _sFAT_DIRECTORY_RECORD LD A,(HL)
INC HL OR A
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©«  JR Z,.skip_clean
EX DE,HL ;
LD BC,21 LD DE,CORE_BUFFERS.SECBUF+1
LDIR LD BC,511 ;!HARDCODE
EX DE,HL LD (HL),0
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£  LDIR
INC HL .skip_clean: ;
LD (HL),"." POP IX
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥« POP HL
.MKD03: INC HL INC IX
LD (HL),C LD A,XH
DJNZ .MKD03 OR XL
; JR NZ,.MKD11
INC HL INC HL
SET_PAGE_X DIRPAGE .MKD11 POP AF
PUSH AF DEC A
; JR NZ,.MKD12
LD A,(DIRPAGE.buffer) AND A
CP "." RET
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
JP Z,.MKD04
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 BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21
LDIR
POP AF
OUT (SLOT3),A
;
EX DE,HL
LD D,H
LD E,L
INC DE
LD (HL),0
LD BC,512-65 ;!HARDCODE
LDIR
;
POP HL ; áâ à訩 ­®¬¥à ᥪâ®à 
EXX
POP HL ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ­  ª« áâ¥à
.MKD12: PUSH AF
PUSH HL ; áâ. à §àï¤
PUSH IX ; ­®¬¥à «®£. ᥪâ®à 
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
;
LD A,(FatBuffer.DRIVE)
LD DE,CORE_BUFFERS.SECBUF+#C000
LD BC,1*256 + Dss.DRV.Write
RST ToDSS.DRV
;
POP AF
OUT (SLOT3),A
;
LD HL,CORE_BUFFERS.SECBUF
LD DE,CORE_BUFFERS.SECBUF+1
LD BC,511
LD (HL),0
LDIR
;
POP IX
POP HL
INC IX
LD A,XH
OR XL
JR NZ,.MKD11
INC HL
.MKD11 POP AF
DEC A
JR NZ,.MKD12
AND A
RET
; ;

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #11. Žâªàë⨥ ä ©« . ; ”ã­ªæ¨ï #11. Žâªàë⨥ ä ©« .
; ;
@ -11,71 +12,79 @@
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« . ; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
; CF=1, A - ª®¤ ®è¨¡ª¨. ; CF=1, A - ª®¤ ®è¨¡ª¨.
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
OPEN_FN:;!TEST Current Dir ;[x] 15/10/23 OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
LD (.TMP),A ;AND #7F ; ACCESS_MODE bit7 - ¤«ï ¢­ãâ७­¥£® ¨á¯®«ì§®¢ ­¨ï))) ;!TODO
PUSH HL LD (.TMP),A
CALL DIR_PATH_CHECK.forceCheck PUSH HL
POP HL CALL DIR_PATH_CHECK.forceCheck
RET C POP HL
;JR .start RET C
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir? ;JR .start
;R008 ; ;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
.start: CALL GETWORD ;R008 ;
RET C .start: CALL GETWORD
CALL MASK RET C
RET C CALL MASK
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE RET C
RET C .FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
;!TEST 9/11/23 record index RET C
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH) ;!TEST 9/11/23 record index
;R002 ; PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
.FM: CALL GET_FM ; enter point from ATTRIB ;R002 ;
RET C .FM: CALL GET_FM ; enter point from ATTRIB
LD A,C RET C
EX AF,AF' LD A,C
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS EX AF,AF'
POP DE ;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
; EXX POP DE
LD (IY+_sFM.HANDLE),E ; EXX
LD (IY+_sFM.HANDLE+1),D LD (IY+_sFM.HANDLE),E
; EXX LD (IY+_sFM.HANDLE+1),D
; ; EXX
LD D,YH ;
LD E,YL LD D,YH
LD HL,HANDBUF LD E,YL
LD BC,HANDBUF.SIZE LD HL,HANDBUF
LDIR LD BC,HANDBUF.SIZE
.TMP+1: LD A,0 LDIR
LD (IY+_sFM.ACCESS_MODE),A .TMP+1: LD A,0
LD A,(TASK) LD (IY+_sFM.ACCESS_MODE),A
LD (IY+_sFM.TASK_NUM),A LD A,(TASK)
XOR A LD (IY+_sFM.TASK_NUM),A
LD (IY+_sFM.KnownCluster_L),A XOR A
LD (IY+_sFM.KnownCluster_L+1),A LD (IY+_sFM.OptimizedClusters),A
LD (IY+_sFM.KnownOffset_L),A LD (IY+_sFM.KnownCluster_L),A
LD (IY+_sFM.KnownOffset_L+1),A LD (IY+_sFM.KnownCluster_L+1),A
LD (IY+_sFM.OptimizedClusters),A LD (IY+_sFM.KnownOffset_L),A
; [x] fat32 LD (IY+_sFM.KnownOffset_L+1),A
LD (IY+_sFM.KnownCluster_H),A ; fat32
LD (IY+_sFM.KnownCluster_H+1),A LD (IY+_sFM.KnownCluster_H),A
LD (IY+_sFM.KnownOffset_H),A LD (IY+_sFM.KnownCluster_H+1),A
LD (IY+_sFM.KnownOffset_H+1),A LD (IY+_sFM.KnownOffset_H),A
; LD (IY+_sFM.KnownOffset_H+1),A
LD (IY+_sFM.F_POSITION),A ;
LD (IY+_sFM.F_POSITION+1),A LD (IY+_sFM.F_POSITION),A
LD (IY+_sFM.F_POSITION+2),A LD (IY+_sFM.F_POSITION+1),A
LD (IY+_sFM.F_POSITION+3),A LD (IY+_sFM.F_POSITION+2),A
LD A,(FatBuffer.DRIVE) LD (IY+_sFM.F_POSITION+3),A
LD (IY+_sFM.DRIVE),A LD A,(FatBuffer.DRIVE)
; [ ] fat32 LD (IY+_sFM.DRIVE),A
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L ; fat32
LD E,(HL) LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
INC HL LD E,(HL)
LD D,(HL) INC HL
; [ ] fat32 LD D,(HL)
LD (IY+_sFM.DIR_CLUSTER),E LD (IY+_sFM.DIR_CLUSTER_H),E
LD (IY+_sFM.DIR_CLUSTER+1),D LD (IY+_sFM.DIR_CLUSTER_H+1),D
EX AF,AF' ;
AND A LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L ; work directory FM
RET 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) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
JP C,.ERR_1 JP C,.ERR_1
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sectro size CALL GET_OFFSET_IN_SECTORS
LD H,0 ;!HARDCODE max file size = 8 gb ; ;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sector size
LD E,(IY+_sFM.F_POSITION+1) ; LD H,0 ;!HARDCODE max file size = 8 gb
LD D,(IY+_sFM.F_POSITION+2) ; LD E,(IY+_sFM.F_POSITION+1)
LD L,(IY+_sFM.F_POSITION+3) ; LD D,(IY+_sFM.F_POSITION+2)
LD A,E ; LD L,(IY+_sFM.F_POSITION+3)
AND #01 ; LD A,E
LD B,A ; AND #01
LD C,(IY+_sFM.F_POSITION) ; LD B,A
RR L ; LD C,(IY+_sFM.F_POSITION)
RR D ; RR L
RR E ; RR D
;HL:DE FP (in sectors) ; RR E
;BC FP residue (in bytes) ; ;HL:DE FP (in sectors)
; ; ;BC FP residue (in bytes)
OR C ; ;
; OR C
JP NZ,.ROV1 JP NZ,.ROV1
.ROV4: POP BC .ROV4: POP BC
PUSH BC PUSH BC
@ -145,9 +146,9 @@ READ: LD (.R_POINT),HL
JP .ROV4 JP .ROV4
; ;
.ERR_3: POP HL .ERR_3: POP HL
.ERR_2: POP HL POP HL
.ERR_1: POP BC .ERR_1: POP BC
SCF ;SCF
RET RET
; ;
.TEST_SIZE: XOR A .TEST_SIZE: XOR A

View File

@ -1,3 +1,4 @@
; [x] fat32 ;!TEST
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ . ; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ .
; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£. ; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
@ -7,112 +8,132 @@
; ;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
RMDIR: ;!TEST Current Dir ;[x] 15/10/23 RMDIR: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL PUSH HL
CALL DIR_PATH_CHECK CALL DIR_PATH_CHECK
POP HL POP HL
RET C RET C
CALL .START CALL .START
PUSH AF PUSH AF
LD HL,CurrentDirectory LD HL,CurrentDirectory
CALL CHDIR CALL CHDIR
CALL DIR_PATH_CHANGE.Current CALL DIR_PATH_CHANGE.Current
POP AF POP AF
RET RET
; ;
.START: CALL GETWORD .START: CALL GETWORD
RET C RET C
CALL MASK CALL MASK
RET C RET C
;!TEST optimization ;!TEST optimization
;LD HL,MASKARE ;LD HL,MASKARE
;LD BC,11 ;LD BC,11
;LD A,"?" ;LD A,"?"
;CPIR ;CPIR
;LD A,DSS_Error.sys.INVALID_NAME ;LD A,DSS_Error.sys.INVALID_NAME
;SCF ;SCF
CALL CHECK_NAME CALL CHECK_NAME
; ;
RET Z RET Z
CALL LOADDIR CALL LOADDIR
CALL SEARCH.Dir CALL SEARCH.Dir
RET C RET C
; [ ] fat32 ; fat32
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
PUSH IX EXX
.RMD17: PUSH HL LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
CALL CLUSTER_TO_SECTOR PUSH IX ;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;
; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­® ;!TODO <20>à®æ¥¤ãà  ¯®«­®£® ¢ëç¨â뢠­¨ï ª â «®£  (¢á¥ ª« áâ¥àë). Œ®¦­® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
.read_dir_loop: .read_dir_big_loop:
PUSH AF PUSH HL
PUSH HL EXX
PUSH IX PUSH HL
; EXX
IN A,(SLOT3) CALL CLUSTER_TO_SECTOR
PUSH AF LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
IN A,(SLOT0) LD B,A
OUT (SLOT3),A LD C,Dss.DRV.Read
LD DE,CORE_BUFFERS.SECBUF+#C000 ; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­®
LD BC,1*256 + Dss.DRV.Read .read_dir_loop: ;PUSH AF
LD A,(FatBuffer.DRIVE) PUSH BC
RST ToDSS.DRV PUSH HL
POP AF PUSH IX
OUT (SLOT3),A ;
; IN A,(SLOT3)
;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ­­®£® ᥪâ®à  PUSH AF
LD B,16 IN A,(SLOT0)
LD HL,CORE_BUFFERS.SECBUF OUT (SLOT3),A
LD DE,CORE_BUFFERS.SECBUF+#C000
;LD BC,1*256 + Dss.DRV.Read
LD B,1
LD A,(FatBuffer.DRIVE)
RST ToDSS.DRV
POP AF
OUT (SLOT3),A
;
;!HARDCODE 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ­­®£® ᥪâ®à 
LD B,16
LD HL,CORE_BUFFERS.SECBUF
.check_dir_loop: .check_dir_loop:
LD A,(HL) LD A,(HL)
OR A OR A
JP Z,.RMD15 ;DIR EMPTY JP Z,.RMD15 ;DIR EMPTY
CP "." CP "."
JR Z,.next_record JR Z,.next_record
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©«  CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.next_record JR Z,.next_record
LD DE,_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢ LD DE,_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
ADD HL,DE ADD HL,DE
LD A,(HL) LD A,(HL)
SBC HL,DE SBC HL,DE
AND FAT_ATTR.VOLUME_ID AND FAT_ATTR.VOLUME_ID
JP Z,.error ;DIR NOT EMPTY JP Z,.error ;DIR NOT EMPTY
.next_record: .next_record: LD DE,#0020
LD DE,#0020 ADD HL,DE
ADD HL,DE DJNZ .check_dir_loop
DJNZ .check_dir_loop ;
; POP IX
POP IX POP HL
POP HL INC IX
INC IX LD A,XH
LD A,XH OR XL
OR XL JR NZ,.no_inc_hl
JR NZ,.no_inc_hl INC HL
INC HL .no_inc_hl: ; POP AF
.no_inc_hl: ; DEC A
POP AF ; JR NZ,.read_dir_loop
DEC A POP BC
JR NZ,.read_dir_loop DJNZ .read_dir_loop
; [ ] fat32 ; fat32
POP HL ; ­®¬¥à ª« áâ¥à  EXX
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  POP HL ; ­®¬¥à ª« áâ¥à 
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à  EXX
JR NC,.RMD17 ; ­¥ ª®­¥æ 楯®çª¨ POP HL ; ­®¬¥à ª« áâ¥à 
.delete: CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
POP IX EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï" EXX
.RMD15: POP IX EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
POP HL EXX
POP AF JR NC,.read_dir_big_loop ; ­¥ ª®­¥æ 楯®çª¨
POP HL ;
JR .delete .delete: POP IX
; JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
.error: POP IX ;
POP HL .RMD15: POP HL
POP AF POP HL
POP HL POP HL
POP IX POP HL
LD A,DSS_Error.sys.DIR_NOT_EMPTY POP HL
SCF JR .delete
RET ;
.error: POP HL
POP HL
POP HL
POP HL
POP HL
POP HL
LD A,DSS_Error.sys.DIR_NOT_EMPTY
SCF
RET
; ;

View File

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

View File

@ -15,194 +15,194 @@ WRITE.RD_ONLY:
; HL - ADDRESS ; HL - ADDRESS
; DE - SIZE ; DE - SIZE
; A - FM ; A - FM
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®ç­ë¥ ¢ë§®¢ë WRITE_FAT_TABLE WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§¡ëâ®ç­ë¥ ¢ë§®¢ë WRITE_FAT_TABLE
CALL .Start CALL .Start
PUSH AF PUSH AF
LD A,(FatBuffer.CacheUpdated) LD A,(FatBuffer.CacheUpdated)
OR A OR A
CALL NZ,WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª CALL NZ,WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
POP AF POP AF
RET RET
; ;
.Start: LD (.R_POINT),HL .Start: LD (.R_POINT),HL
LD (.S_POINT),HL LD (.S_POINT),HL
PUSH DE PUSH DE
CALL SET_FM CALL SET_FM
JR C,.ERR1 JR C,.ERR1
LD A,(IY+_sFM.ACCESS_MODE) LD A,(IY+_sFM.ACCESS_MODE)
AND FAT_ATTR.READ_ONLY AND Dss.Open.R
JR NZ,.RD_ONLY JR NZ,.RD_ONLY
SET 7,(IY + _sFM.ACCESS_MODE) SET 7,(IY + _sFM.ACCESS_MODE)
SET 5,(IY + _sFM.FS_REC.ATTRIBUT) SET 5,(IY + _sFM.FS_REC.ATTRIBUT)
LD A,(IY + _sFM.DRIVE) LD A,(IY + _sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
JR C,.ERR1 JR C,.ERR1
; CALL GET_OFFSET_IN_SECTORS
LD C,(IY+_sFM.F_POSITION) ; ;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sector size
LD A,(IY+_sFM.F_POSITION+1) ; LD H,0 ;!HARDCODE max file size = 8 gb
LD E,A ; LD E,(IY+_sFM.F_POSITION+1)
AND #01 ; LD D,(IY+_sFM.F_POSITION+2)
LD B,A ; LD L,(IY+_sFM.F_POSITION+3)
LD D,(IY+_sFM.F_POSITION+2) ; LD A,E
LD L,(IY+_sFM.F_POSITION+3) ; AND #01
LD H,0 ; LD B,A
OR A ; LD C,(IY+_sFM.F_POSITION)
RR L ; RR L
RR D ; RR D
RR E ; RR E
; HL:DE - FP (in sectors) ; ;HL:DE FP (in sectors)
; BC - FP residue (in bytes) ; ;BC FP residue (in bytes)
LD A,B ; ;
OR C ; OR C
JP NZ,.WOV1 JP NZ,.WOV1
.WOV4: POP BC ;
PUSH BC .WOV4: POP BC
SRL B PUSH BC
JR Z,.WOV2 SRL B
PUSH HL JR Z,.WOV2
PUSH DE PUSH HL
PUSH BC PUSH DE
.R_POINT+2: PUSH BC
LD IX,0 .R_POINT+2: LD IX,0
CALL BLOK_WRITE CALL BLOK_WRITE
POP BC POP BC
JR C,.ERR3 JR C,.ERR3
LD C,B LD C,B
LD HL,(.R_POINT) LD HL,(.R_POINT)
LD DE,#0200 ;!HARDCODE LD DE,#0200 ;!HARDCODE
.WOV5: ADD HL,DE .WOV5: ADD HL,DE
DJNZ .WOV5 DJNZ .WOV5
; B=0 ; B=0
LD (.R_POINT),HL LD (.R_POINT),HL
;LD B,0 ;LD B,0
POP HL POP HL
ADD HL,BC ADD HL,BC
EX DE,HL EX DE,HL
POP HL POP HL
LD C,B LD C,B
ADC HL,BC ADC HL,BC
.WOV2: POP BC .WOV2: POP BC
LD A,B LD A,B
AND #01 AND #01
LD B,A LD B,A
OR C OR C
JR Z,.WOV6 JR Z,.WOV6
PUSH HL PUSH HL
PUSH DE PUSH DE
PUSH BC PUSH BC
LD IX,CORE_BUFFERS.BUFFER+#C000 LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1 LD B,1
IN A,(SLOT3) IN A,(SLOT3)
PUSH AF PUSH AF
IN A,(SLOT0) IN A,(SLOT0)
OUT (SLOT3),A OUT (SLOT3),A
CALL BLOCK_READ CALL BLOCK_READ
POP BC POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
LD DE,CORE_BUFFERS.BUFFER LD DE,CORE_BUFFERS.BUFFER
LD HL,(.R_POINT) LD HL,(.R_POINT)
POP BC POP BC
JP C,.ERR2 JP C,.ERR2
LDIR LDIR
LD (.R_POINT),HL LD (.R_POINT),HL
POP DE POP DE
POP HL POP HL
LD IX,CORE_BUFFERS.BUFFER+#C000 LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1 LD B,1
IN A,(SLOT3) IN A,(SLOT3)
PUSH AF PUSH AF
IN A,(SLOT0) IN A,(SLOT0)
OUT (SLOT3),A OUT (SLOT3),A
CALL BLOK_WRITE CALL BLOK_WRITE
POP BC POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
RET C RET C
.WOV6: LD HL,(.R_POINT) .WOV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0 .S_POINT+1: LD DE,0
; CF=0 ; CF=0
;AND A ;AND A
SBC HL,DE SBC HL,DE
PUSH HL PUSH HL
EX DE,HL EX DE,HL
LD XH,D LD XH,D
LD XL,E LD XL,E
LD HL,0 LD HL,0
CALL MOVE_FP.F_current CALL MOVE_FP.F_current
CALL MOVE_CP CALL MOVE_CP
POP DE POP DE
RET NC ; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë« RET NC ; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ <20>… áâ « ¡®«ìè¥, 祬 ¡ë«
; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë« ; …᫨ à §¬¥à ä ©«  ­  ¤¨áª¥ áâ « ¡®«ìè¥, 祬 ¡ë«
LD L,(IY + _sFM.F_POSITION+0) LD L,(IY + _sFM.F_POSITION+0)
LD H,(IY + _sFM.F_POSITION+1) LD H,(IY + _sFM.F_POSITION+1)
LD C,(IY + _sFM.F_POSITION+2) LD C,(IY + _sFM.F_POSITION+2)
LD B,(IY + _sFM.F_POSITION+3) LD B,(IY + _sFM.F_POSITION+3)
LD (IY + _sFM.FS_REC.F_SIZE+0),L LD (IY + _sFM.FS_REC.F_SIZE+0),L
LD (IY + _sFM.FS_REC.F_SIZE+1),H LD (IY + _sFM.FS_REC.F_SIZE+1),H
LD (IY + _sFM.FS_REC.F_SIZE+2),C LD (IY + _sFM.FS_REC.F_SIZE+2),C
LD (IY + _sFM.FS_REC.F_SIZE+3),B LD (IY + _sFM.FS_REC.F_SIZE+3),B
AND A AND A
RET RET
; ;
.WOV1: PUSH BC .WOV1: PUSH BC
PUSH HL PUSH HL
PUSH DE PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000 LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1 LD B,1
IN A,(SLOT3) IN A,(SLOT3)
PUSH AF PUSH AF
IN A,(SLOT0) IN A,(SLOT0)
OUT (SLOT3),A OUT (SLOT3),A
CALL BLOCK_READ CALL BLOCK_READ
POP BC POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
POP DE POP DE
POP HL POP HL
EXX EXX
POP DE POP DE
JP C,.ERR1 JP C,.ERR1
LD HL,512 ;!HARDCODE sector size! LD HL,512 ;!HARDCODE sector size!
AND A AND A
SBC HL,DE SBC HL,DE
LD B,H LD B,H
LD C,L LD C,L
POP HL POP HL
AND A AND A
SBC HL,BC SBC HL,BC
JR NC,.WOV3 JR NC,.WOV3
ADD HL,BC ADD HL,BC
LD B,H LD B,H
LD C,L LD C,L
LD HL,0 LD HL,0
.WOV3: PUSH HL .WOV3: PUSH HL
LD HL,CORE_BUFFERS.BUFFER LD HL,CORE_BUFFERS.BUFFER
ADD HL,DE ADD HL,DE
LD DE,(.R_POINT) LD DE,(.R_POINT)
EX DE,HL EX DE,HL
LDIR LDIR
LD (.R_POINT),HL LD (.R_POINT),HL
EXX EXX
PUSH HL PUSH HL
PUSH DE PUSH DE
LD IX,CORE_BUFFERS.BUFFER+#C000 LD IX,CORE_BUFFERS.BUFFER+#C000
LD B,1 LD B,1
IN A,(SLOT3) IN A,(SLOT3)
PUSH AF PUSH AF
IN A,(SLOT0) IN A,(SLOT0)
OUT (SLOT3),A OUT (SLOT3),A
CALL BLOK_WRITE CALL BLOK_WRITE
POP BC POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
POP HL POP HL
JP C,.ERR2 JP C,.ERR2
LD BC,1 LD BC,1
ADD HL,BC ADD HL,BC
EX DE,HL EX DE,HL
POP HL POP HL
LD C,B LD C,B
ADC HL,BC ADC HL,BC
JP .WOV4 JP .WOV4
; ;

View File

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

View File

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

View File

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

View File

@ -297,7 +297,7 @@ ADRST10: ;DS 512 ;,0
; 0 1 2 3 4 5 6 7 8 9 DEC HEX ; 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 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 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 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 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 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]: ;...............................................[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 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 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 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 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 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 ; FIND "MASKAREA" IN DIRECTORY
; [ ] fat32 ; [x] fat32 ;!TEST
; ¢ë室: IY:DE - cluster number ; ¢ë室: IY:DE - cluster number
FINDDIR: FINDDIR:
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
@ -292,7 +292,7 @@ FINDDIR:
; .MM3: LD (HL),0 ; .MM3: LD (HL),0
; ; JP IT_DIR ; ; JP IT_DIR
; ;
.IT_DIR: ; [ ] fat32 .IT_DIR:; fat32
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1) LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD YH,D LD YH,D
@ -338,7 +338,7 @@ CHECK_ZERO_CLUSTER:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨ ; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
; [x] fat32 ; [x] fat32 ;!TEST
OPENDIR: LD IY,CORE_BUFFERS.FM_BUF OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
LD A,(HL) LD A,(HL)
OR A OR A
@ -392,8 +392,8 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
.SUBDIR3: CALL FINDDIR .SUBDIR3: CALL FINDDIR
RET C RET C
EX DE,HL 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_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_H),IY ; fat32
LD HL,#4000 ;!HARDCODE LD HL,#4000 ;!HARDCODE
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
;EX DE,HL ;EX DE,HL

View File

@ -610,7 +610,7 @@ GET_FAT16_CELL:
AND FAT_CACHE.Part_Mask_16 AND FAT_CACHE.Part_Mask_16
; ;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) 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 ; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
; CP C ; CP C
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
@ -1220,6 +1220,50 @@ SaveGotCluster: LD A,C
RET 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 ;!TODO fat32
;======================================================================= ;=======================================================================

View File

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

View File

@ -1 +1 @@
956 949