mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
fat32 - 80% (но это не точно)
This commit is contained in:
parent
53dbf83712
commit
ada25b0fe1
@ -18,13 +18,8 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
;
|
;
|
||||||
;
|
;
|
||||||
INC B
|
INC B
|
||||||
DEC B
|
DJNZ .B_1
|
||||||
JP Z,.READ
|
; B = 0
|
||||||
DEC B
|
|
||||||
JP Z,.WRITE_FN
|
|
||||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
|
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
|
||||||
;XOR A
|
;XOR A
|
||||||
;
|
;
|
||||||
@ -41,6 +36,11 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
;
|
;
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
.error_fn: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||||
|
SCF
|
||||||
|
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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -68,18 +68,8 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
INC HL
|
INC HL
|
||||||
DJNZ .loop1
|
DJNZ .loop1
|
||||||
;AaRR
|
;AaRR
|
||||||
PUSH HL
|
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||||
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
|
LD BC,#0600
|
||||||
;
|
;
|
||||||
.loop2: LD (HL),C
|
.loop2: LD (HL),C
|
||||||
@ -89,13 +79,12 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
CALL WRT_HND
|
CALL WRT_HND
|
||||||
RET C
|
RET C
|
||||||
;CALL SAVEDIR
|
;CALL SAVEDIR
|
||||||
.PATH0+1:
|
.PATH0+1: LD HL,0
|
||||||
LD HL,0
|
|
||||||
XOR A
|
XOR A
|
||||||
LD (OPEN_FN.TMP),A
|
LD (OPEN_FN.TMP),A
|
||||||
JP OPEN_FN.FILE ;R008
|
JP OPEN_FN.FILE ;R008
|
||||||
.Prepare:
|
;
|
||||||
;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
|
.Prepare: ;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
|
||||||
AND FAT_ATTR.NoDIRnoVolID
|
AND FAT_ATTR.NoDIRnoVolID
|
||||||
LD (.TMP),A
|
LD (.TMP),A
|
||||||
LD (.PATH0),HL
|
LD (.PATH0),HL
|
||||||
@ -106,8 +95,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
JP MASK
|
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
|
||||||
;
|
;
|
||||||
@ -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- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
EXX
|
||||||
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
PUSH DE
|
||||||
|
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 ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
;
|
;
|
||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; ”ãªæ¨ï #1B. ‘®§¤ ¨¥ ª â «®£ .
|
; ”ãªæ¨ï #1B. ‘®§¤ ¨¥ ª â «®£ .
|
||||||
;
|
;
|
||||||
@ -6,15 +7,14 @@
|
|||||||
;
|
;
|
||||||
; 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
|
||||||
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
.B: PUSH HL
|
||||||
PUSH HL
|
|
||||||
CALL DIR_PATH_CHECK
|
CALL DIR_PATH_CHECK
|
||||||
POP HL
|
POP HL
|
||||||
RET C
|
RET C
|
||||||
@ -46,7 +46,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
;
|
;
|
||||||
CALL G_CLUST
|
CALL G_CLUST
|
||||||
RET C
|
RET C
|
||||||
; [x] fat32
|
; fat32
|
||||||
PUSH HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
PUSH HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||||
EXX
|
EXX
|
||||||
PUSH HL ; áâ à訩 ®¬¥à ᥪâ®à
|
PUSH HL ; áâ à訩 ®¬¥à ᥪâ®à
|
||||||
@ -69,28 +69,15 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
INC HL
|
INC HL
|
||||||
DJNZ .loop1
|
DJNZ .loop1
|
||||||
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
|
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
|
||||||
; [x] fat32 § ¯¨áì áâ à襣® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_H
|
; fat32 § ¯¨áì áâ à襣® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_H
|
||||||
POP DE
|
POP DE
|
||||||
PUSH DE ; áâ à訩 ®¬¥à ᥪâ®à
|
PUSH DE ; áâ à訩 ®¬¥à ᥪâ®à
|
||||||
LD (HL),E
|
LD (HL),E
|
||||||
INC HL
|
INC HL
|
||||||
LD (HL),D
|
LD (HL),D
|
||||||
INC HL
|
INC HL
|
||||||
; [ ] fat32 & VFAT
|
;
|
||||||
PUSH HL
|
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||||
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
|
; § ¯¨áì ¬« ¤è¥£® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_L
|
||||||
POP BC ; áâ à訩 ®¬¥à ᥪâ®à
|
POP BC ; áâ à訩 ®¬¥à ᥪâ®à
|
||||||
POP DE ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
POP DE ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||||
@ -109,6 +96,9 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
;
|
;
|
||||||
CALL WRT_HND ; ᪮¯¨à. ®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
CALL WRT_HND ; ᪮¯¨à. ®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||||||
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
;
|
||||||
|
; á®§¤ ñ¬ á«ã¦¥¡ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ®¬ ª â «®£¥
|
||||||
|
; Š€’€‹Žƒ "."
|
||||||
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
|
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
|
||||||
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
||||||
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
|
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
|
||||||
@ -120,32 +110,48 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
INC HL
|
INC HL
|
||||||
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD BC,21
|
LD BC,21 ; !HARDCODE
|
||||||
LDIR
|
LDIR
|
||||||
|
; Š€’€‹Žƒ ".."
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£
|
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£
|
||||||
INC HL
|
INC HL
|
||||||
LD (HL),"."
|
LD (HL),"."
|
||||||
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
||||||
.MKD03: INC HL
|
.loop4: INC HL
|
||||||
LD (HL),C
|
LD (HL),C
|
||||||
DJNZ .MKD03
|
DJNZ .loop4
|
||||||
;
|
;
|
||||||
INC HL
|
INC HL
|
||||||
SET_PAGE_X DIRPAGE
|
SET_PAGE_X DIRPAGE
|
||||||
PUSH AF
|
PUSH AF
|
||||||
;
|
;
|
||||||
|
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; âਡãâë § ¯¨á¨
|
||||||
|
;
|
||||||
LD A,(DIRPAGE.buffer)
|
LD A,(DIRPAGE.buffer)
|
||||||
CP "."
|
CP "."
|
||||||
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; âਡãâë § ¯¨á¨
|
JR Z,.copy_dir_record
|
||||||
JP Z,.MKD04
|
; fat32
|
||||||
LD IX,HANDBUF
|
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
|
XOR A
|
||||||
; [ ] fat32 à §®¡à âìáï
|
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
|
||||||
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
|
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
|
||||||
LD (IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
|
.set_rec: LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||||
LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
.copy_dir_record:
|
||||||
.MKD04: EX DE,HL
|
EX DE,HL
|
||||||
LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21
|
LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21
|
||||||
LDIR
|
LDIR
|
||||||
POP AF
|
POP AF
|
||||||
@ -181,11 +187,16 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
LD HL,CORE_BUFFERS.SECBUF
|
LD HL,CORE_BUFFERS.SECBUF
|
||||||
|
; [x] optimization
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR Z,.skip_clean
|
||||||
|
;
|
||||||
LD DE,CORE_BUFFERS.SECBUF+1
|
LD DE,CORE_BUFFERS.SECBUF+1
|
||||||
LD BC,511
|
LD BC,511 ;!HARDCODE
|
||||||
LD (HL),0
|
LD (HL),0
|
||||||
LDIR
|
LDIR
|
||||||
;
|
.skip_clean: ;
|
||||||
POP IX
|
POP IX
|
||||||
POP HL
|
POP HL
|
||||||
INC IX
|
INC IX
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; ”ãªæ¨ï #11. Žâªàë⨥ ä ©« .
|
; ”ãªæ¨ï #11. Žâªàë⨥ ä ©« .
|
||||||
;
|
;
|
||||||
@ -12,6 +13,7 @@
|
|||||||
; CF=1, A - ª®¤ ®è¨¡ª¨.
|
; CF=1, A - ª®¤ ®è¨¡ª¨.
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
|
||||||
|
;AND #7F ; ACCESS_MODE bit7 - ¤«ï ¢ãâ॥£® ¨á¯®«ì§®¢ ¨ï))) ;!TODO
|
||||||
LD (.TMP),A
|
LD (.TMP),A
|
||||||
PUSH HL
|
PUSH HL
|
||||||
CALL DIR_PATH_CHECK.forceCheck
|
CALL DIR_PATH_CHECK.forceCheck
|
||||||
@ -50,12 +52,12 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD A,(TASK)
|
LD A,(TASK)
|
||||||
LD (IY+_sFM.TASK_NUM),A
|
LD (IY+_sFM.TASK_NUM),A
|
||||||
XOR A
|
XOR A
|
||||||
|
LD (IY+_sFM.OptimizedClusters),A
|
||||||
LD (IY+_sFM.KnownCluster_L),A
|
LD (IY+_sFM.KnownCluster_L),A
|
||||||
LD (IY+_sFM.KnownCluster_L+1),A
|
LD (IY+_sFM.KnownCluster_L+1),A
|
||||||
LD (IY+_sFM.KnownOffset_L),A
|
LD (IY+_sFM.KnownOffset_L),A
|
||||||
LD (IY+_sFM.KnownOffset_L+1),A
|
LD (IY+_sFM.KnownOffset_L+1),A
|
||||||
LD (IY+_sFM.OptimizedClusters),A
|
; fat32
|
||||||
; [x] fat32
|
|
||||||
LD (IY+_sFM.KnownCluster_H),A
|
LD (IY+_sFM.KnownCluster_H),A
|
||||||
LD (IY+_sFM.KnownCluster_H+1),A
|
LD (IY+_sFM.KnownCluster_H+1),A
|
||||||
LD (IY+_sFM.KnownOffset_H),A
|
LD (IY+_sFM.KnownOffset_H),A
|
||||||
@ -67,14 +69,21 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD (IY+_sFM.F_POSITION+3),A
|
LD (IY+_sFM.F_POSITION+3),A
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(FatBuffer.DRIVE)
|
||||||
LD (IY+_sFM.DRIVE),A
|
LD (IY+_sFM.DRIVE),A
|
||||||
; [ ] fat32
|
; fat32
|
||||||
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L
|
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
|
||||||
LD E,(HL)
|
LD E,(HL)
|
||||||
INC HL
|
INC HL
|
||||||
LD D,(HL)
|
LD D,(HL)
|
||||||
; [ ] fat32
|
LD (IY+_sFM.DIR_CLUSTER_H),E
|
||||||
LD (IY+_sFM.DIR_CLUSTER),E
|
LD (IY+_sFM.DIR_CLUSTER_H+1),D
|
||||||
LD (IY+_sFM.DIR_CLUSTER+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'
|
EX AF,AF'
|
||||||
AND A
|
AND A
|
||||||
RET
|
RET
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
; [x] fat32 ;!TEST
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
; ”ãªæ¨ï #1C. “¤ «¥¨¥ ª â «®£ .
|
; ”ãªæ¨ï #1C. “¤ «¥¨¥ ª â «®£ .
|
||||||
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
||||||
@ -37,15 +38,25 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
CALL LOADDIR
|
CALL LOADDIR
|
||||||
CALL SEARCH.Dir
|
CALL SEARCH.Dir
|
||||||
RET C
|
RET C
|
||||||
; [ ] fat32
|
; fat32
|
||||||
|
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
|
||||||
|
EXX
|
||||||
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||||||
PUSH IX
|
PUSH IX ;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
||||||
.RMD17: PUSH HL
|
;
|
||||||
|
;!TODO <20>à®æ¥¤ãà ¯®«®£® ¢ëç¨âë¢ ¨ï ª â «®£ (¢á¥ ª« áâ¥àë). Œ®¦® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
|
||||||
|
.read_dir_big_loop:
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
CALL CLUSTER_TO_SECTOR
|
CALL CLUSTER_TO_SECTOR
|
||||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||||
|
LD B,A
|
||||||
|
LD C,Dss.DRV.Read
|
||||||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||||
.read_dir_loop:
|
.read_dir_loop: ;PUSH AF
|
||||||
PUSH AF
|
PUSH BC
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH IX
|
PUSH IX
|
||||||
;
|
;
|
||||||
@ -54,7 +65,8 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
IN A,(SLOT0)
|
IN A,(SLOT0)
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD DE,CORE_BUFFERS.SECBUF+#C000
|
LD DE,CORE_BUFFERS.SECBUF+#C000
|
||||||
LD BC,1*256 + Dss.DRV.Read
|
;LD BC,1*256 + Dss.DRV.Read
|
||||||
|
LD B,1
|
||||||
LD A,(FatBuffer.DRIVE)
|
LD A,(FatBuffer.DRIVE)
|
||||||
RST ToDSS.DRV
|
RST ToDSS.DRV
|
||||||
POP AF
|
POP AF
|
||||||
@ -77,8 +89,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
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
|
||||||
;
|
;
|
||||||
@ -89,29 +100,39 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
OR XL
|
OR XL
|
||||||
JR NZ,.no_inc_hl
|
JR NZ,.no_inc_hl
|
||||||
INC HL
|
INC HL
|
||||||
.no_inc_hl:
|
.no_inc_hl: ; POP AF
|
||||||
POP AF
|
; DEC A
|
||||||
DEC A
|
; JR NZ,.read_dir_loop
|
||||||
JR NZ,.read_dir_loop
|
POP BC
|
||||||
; [ ] fat32
|
DJNZ .read_dir_loop
|
||||||
|
; fat32
|
||||||
|
EXX
|
||||||
|
POP HL ; ®¬¥à ª« áâ¥à
|
||||||
|
EXX
|
||||||
POP HL ; ®¬¥à ª« áâ¥à
|
POP HL ; ®¬¥à ª« áâ¥à
|
||||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||||
JR NC,.RMD17 ; ¥ ª®¥æ 楯®çª¨
|
EXX
|
||||||
.delete:
|
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||||
POP IX
|
EXX
|
||||||
|
JR NC,.read_dir_big_loop ; ¥ ª®¥æ 楯®çª¨
|
||||||
|
;
|
||||||
|
.delete: POP IX
|
||||||
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||||
.RMD15: POP IX
|
;
|
||||||
|
.RMD15: POP HL
|
||||||
|
POP HL
|
||||||
|
POP HL
|
||||||
POP HL
|
POP HL
|
||||||
POP AF
|
|
||||||
POP HL
|
POP HL
|
||||||
JR .delete
|
JR .delete
|
||||||
;
|
;
|
||||||
.error: POP IX
|
.error: POP HL
|
||||||
|
POP HL
|
||||||
|
POP HL
|
||||||
|
POP HL
|
||||||
POP HL
|
POP HL
|
||||||
POP AF
|
|
||||||
POP HL
|
POP HL
|
||||||
POP IX
|
|
||||||
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -30,31 +30,32 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
|||||||
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
|
.WOV4: POP BC
|
||||||
PUSH BC
|
PUSH BC
|
||||||
SRL B
|
SRL B
|
||||||
@ -62,8 +63,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
|||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH DE
|
PUSH DE
|
||||||
PUSH BC
|
PUSH BC
|
||||||
.R_POINT+2:
|
.R_POINT+2: LD IX,0
|
||||||
LD IX,0
|
|
||||||
CALL BLOK_WRITE
|
CALL BLOK_WRITE
|
||||||
POP BC
|
POP BC
|
||||||
JR C,.ERR3
|
JR C,.ERR3
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -446,6 +446,3 @@ CHECK_NAME:
|
|||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
;=======================================================================
|
;=======================================================================
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
956
|
949
|
||||||
Loading…
Reference in New Issue
Block a user