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

@ -94,7 +94,6 @@ SET_FM: CALL FM_FIND
XOR A ;LD A,DSS_Error.sys.NO_ERROR XOR A ;LD A,DSS_Error.sys.NO_ERROR
; CF = 0 ; CF = 0
RET RET
RES_FM: CALL FM_FIND RES_FM: CALL FM_FIND

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