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
; OUTPUT: A - ATTRIB
////////////////////////////////////////////////////////////////////////
ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
LD C,A
PUSH HL
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
LD A,C
;
;
INC B
DEC B
JP Z,.READ
DEC B
JP Z,.WRITE_FN
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
;XOR A
;
CALL .OPENATR ;R002
RET C
;!TEST ;[x] 16/11/23 optimize get attribute
LD A,(HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
;LD B,(IY+_sFM.ATTRIBUT)
;PUSH BC
;CALL CLOSE
;POP BC
;RET C
;LD A,B
;
RET
;
ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
LD C,A
PUSH HL
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
LD A,C
;
;
INC B
DJNZ .B_1
; B = 0
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
;XOR A
;
CALL .OPENATR ;R002
RET C
;!TEST ;[x] 16/11/23 optimize get attribute
LD A,(HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
;LD B,(IY+_sFM.ATTRIBUT)
;PUSH BC
;CALL CLOSE
;POP BC
;RET C
;LD A,B
;
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

@ -3,111 +3,99 @@
; A - File attribute
; OUTPUT: A - FM
////////////////////////////////////////////////////////////////////////
CREATE: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
LD C,A
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [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,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
CP DSS_Error.sys.FILE_NOT_FOUND
JR Z,.DO
SCF
RET
CREATE: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
LD C,A
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [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,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
CP DSS_Error.sys.FILE_NOT_FOUND
JR Z,.DO
SCF
RET
.FILE_EXISTS_DEL:
CALL DEL_FN.DELETE
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET
;
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; OUTPUT: A - FM
.NEW: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
LD C,A
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [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
; CCF
; RET C
JR NC,.FILE_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
;
;no_file_found
.DO: LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
.TMP+1: LD A,0
LD (HL),A
INC HL
LD BC,#0A00 ;!HARDCODE
;
.loop1: LD (HL),C
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
LD BC,#0600
;
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND
RET C
;CALL SAVEDIR
.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
AND FAT_ATTR.NoDIRnoVolID
LD (.TMP),A
LD (.PATH0),HL
CALL GETWORD
RET C
; LD HL,TMPNAME
; LD DE,MASKARE
JP MASK
;
CALL DEL_FN.DELETE
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET
;
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; OUTPUT: A - FM
.NEW: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
LD C,A
PUSH BC
CALL DIR_PATH_CHECK
POP BC
POP HL
RET C
LD A,C
;
CALL .Prepare
RET C
CALL SEARCH.File
; [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
; CCF
; RET C
JR NC,.FILE_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
;
;no_file_found
.DO: LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
.TMP+1: LD A,0
LD (HL),A
INC HL
LD BC,#0A00 ;!HARDCODE
;
.loop1: LD (HL),C
INC HL
DJNZ .loop1
;AaRR
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
;
LD BC,#0600
;
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND
RET C
;CALL SAVEDIR
.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
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
.FILE_EXISTS:
LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET
.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-  ­®¬¥à á«¥¤. ª« áâ¥à 
PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à 
PUSH AF
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,196 +7,206 @@
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
MKDIR:
;error
MKDIR.DIR_EXISTS:
LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL .START
PUSH AF
LD HL,CurrentDirectory
CALL CHDIR
POP AF
RET
.DIR_EXISTS: LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET
;
; Entry point ;!TEST Current Dir ;[x] 15/10/23
.B: PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL .START
PUSH AF
LD HL,CurrentDirectory
CALL CHDIR
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 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
; [x] 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
; [x] 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
; § ¯¨áì ¬« ¤è¥£® ­®¬¥à  ª« áâ¥à  .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 ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
;
.loop3: INC HL
LD (HL),C
DJNZ .loop3
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 _sFAT_DIRECTORY_RECORD
INC HL
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
EX DE,HL
LD BC,21
LDIR
EX DE,HL
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£ 
INC HL
LD (HL),"."
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
.MKD03: INC HL
LD (HL),C
DJNZ .MKD03
;
INC HL
SET_PAGE_X DIRPAGE
PUSH AF
;
LD A,(DIRPAGE.buffer)
CP "."
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
; á®§¤ ñ¬ á«ã¦¥¡­ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ­­®¬ ª â «®£¥
; Š€’€‹Žƒ "."
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
;
.loop3: INC HL
LD (HL),C
DJNZ .loop3
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 _sFAT_DIRECTORY_RECORD
INC HL
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
EX DE,HL
LD BC,21 ; !HARDCODE
LDIR
; Š€’€‹Žƒ ".."
EX DE,HL
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£ 
INC HL
LD (HL),"."
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
.loop4: INC HL
LD (HL),C
DJNZ .loop4
;
INC HL
SET_PAGE_X DIRPAGE
PUSH AF
;
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
;
LD A,(DIRPAGE.buffer)
CP "."
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
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
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
; [x] optimization
LD A,(HL)
OR A
JR Z,.skip_clean
;
LD DE,CORE_BUFFERS.SECBUF+1
LD BC,511 ;!HARDCODE
LD (HL),0
LDIR
.skip_clean: ;
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,71 +12,79 @@
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
; CF=1, A - ª®¤ ®è¨¡ª¨.
////////////////////////////////////////////////////////////////////////
OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
LD (.TMP),A
PUSH HL
CALL DIR_PATH_CHECK.forceCheck
POP HL
RET C
;JR .start
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
;R008 ;
.start: CALL GETWORD
RET C
CALL MASK
RET C
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C
;!TEST 9/11/23 record index
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;R002 ;
.FM: CALL GET_FM ; enter point from ATTRIB
RET C
LD A,C
EX AF,AF'
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
POP DE
; EXX
LD (IY+_sFM.HANDLE),E
LD (IY+_sFM.HANDLE+1),D
; EXX
;
LD D,YH
LD E,YL
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
.TMP+1: LD A,0
LD (IY+_sFM.ACCESS_MODE),A
LD A,(TASK)
LD (IY+_sFM.TASK_NUM),A
XOR 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
LD (IY+_sFM.KnownCluster_H),A
LD (IY+_sFM.KnownCluster_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+2),A
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
LD E,(HL)
INC HL
LD D,(HL)
; [ ] fat32
LD (IY+_sFM.DIR_CLUSTER),E
LD (IY+_sFM.DIR_CLUSTER+1),D
EX AF,AF'
AND A
RET
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
POP HL
RET C
;JR .start
;!FIXIT ᤥ« âì ª ª ¢ mkdir ¨«¨ rmdir?
;R008 ;
.start: CALL GETWORD
RET C
CALL MASK
RET C
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C
;!TEST 9/11/23 record index
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;R002 ;
.FM: CALL GET_FM ; enter point from ATTRIB
RET C
LD A,C
EX AF,AF'
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
POP DE
; EXX
LD (IY+_sFM.HANDLE),E
LD (IY+_sFM.HANDLE+1),D
; EXX
;
LD D,YH
LD E,YL
LD HL,HANDBUF
LD BC,HANDBUF.SIZE
LDIR
.TMP+1: LD A,0
LD (IY+_sFM.ACCESS_MODE),A
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
; fat32
LD (IY+_sFM.KnownCluster_H),A
LD (IY+_sFM.KnownCluster_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+2),A
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_H
LD E,(HL)
INC HL
LD D,(HL)
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. “¤ «¥­¨¥ ª â «®£ .
; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
@ -7,112 +8,132 @@
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
RMDIR: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL .START
PUSH AF
LD HL,CurrentDirectory
CALL CHDIR
CALL DIR_PATH_CHANGE.Current
POP AF
RET
;
.START: CALL GETWORD
RET C
CALL MASK
RET C
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z
CALL LOADDIR
CALL SEARCH.Dir
RET C
; [ ] fat32
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
PUSH IX
.RMD17: PUSH HL
CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­®
.read_dir_loop:
PUSH AF
PUSH HL
PUSH IX
;
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
LD DE,CORE_BUFFERS.SECBUF+#C000
LD BC,1*256 + Dss.DRV.Read
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
RMDIR: ;!TEST Current Dir ;[x] 15/10/23
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
CALL .START
PUSH AF
LD HL,CurrentDirectory
CALL CHDIR
CALL DIR_PATH_CHANGE.Current
POP AF
RET
;
.START: CALL GETWORD
RET C
CALL MASK
RET C
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
RET Z
CALL LOADDIR
CALL SEARCH.Dir
RET C
; fat32
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
EXX
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
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
PUSH BC
PUSH HL
PUSH IX
;
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
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:
LD A,(HL)
OR A
JP Z,.RMD15 ;DIR EMPTY
CP "."
JR Z,.next_record
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.next_record
LD DE,_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
ADD HL,DE
LD A,(HL)
SBC HL,DE
AND FAT_ATTR.VOLUME_ID
JP Z,.error ;DIR NOT EMPTY
.next_record:
LD DE,#0020
ADD HL,DE
DJNZ .check_dir_loop
;
POP IX
POP HL
INC IX
LD A,XH
OR XL
JR NZ,.no_inc_hl
INC HL
.no_inc_hl:
POP AF
DEC A
JR NZ,.read_dir_loop
; [ ] fat32
POP HL ; ­®¬¥à ª« áâ¥à 
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
JR NC,.RMD17 ; ­¥ ª®­¥æ 楯®çª¨
.delete:
POP IX
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
.RMD15: POP IX
POP HL
POP AF
POP HL
JR .delete
;
.error: POP IX
POP HL
POP AF
POP HL
POP IX
LD A,DSS_Error.sys.DIR_NOT_EMPTY
SCF
RET
LD A,(HL)
OR A
JP Z,.RMD15 ;DIR EMPTY
CP "."
JR Z,.next_record
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.next_record
LD DE,_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
ADD HL,DE
LD A,(HL)
SBC HL,DE
AND FAT_ATTR.VOLUME_ID
JP Z,.error ;DIR NOT EMPTY
.next_record: LD DE,#0020
ADD HL,DE
DJNZ .check_dir_loop
;
POP IX
POP HL
INC IX
LD A,XH
OR XL
JR NZ,.no_inc_hl
INC HL
.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=­®¬¥à á«¥¤. ª« áâ¥à 
EXX
EX DE,HL ; hl=­®¬¥à á«¥¤. ª« áâ¥à 
EXX
JR NC,.read_dir_big_loop ; ­¥ ª®­¥æ 楯®çª¨
;
.delete: POP IX
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
;
.RMD15: POP HL
POP HL
POP HL
POP HL
POP HL
JR .delete
;
.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 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

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

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