mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
fat32 - 80% (но это не точно)
This commit is contained in:
parent
53dbf83712
commit
ada25b0fe1
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
;
|
||||
@ -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
|
||||
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=®¬¥à ª« áâ¥à
|
||||
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 ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
;
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
;
|
||||
|
||||
@ -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
|
||||
;
|
||||
.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
|
||||
.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 ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
;
|
||||
; á®§¤ ñ¬ á«ã¦¥¡ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ®¬ ª â «®£¥
|
||||
; Š€’€‹Žƒ "."
|
||||
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
|
||||
;
|
||||
143
DSS/API/Open.asm
143
DSS/API/Open.asm
@ -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
|
||||
;
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
;
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
;
|
||||
@ -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
|
||||
|
||||
@ -94,7 +94,6 @@ SET_FM: CALL FM_FIND
|
||||
XOR A ;LD A,DSS_Error.sys.NO_ERROR
|
||||
; CF = 0
|
||||
RET
|
||||
|
||||
|
||||
|
||||
RES_FM: CALL FM_FIND
|
||||
|
||||
@ -446,6 +446,3 @@ CHECK_NAME:
|
||||
SCF
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
;=======================================================================
|
||||
|
||||
@ -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
|
||||
;
|
||||
|
||||
;
|
||||
|
||||
@ -1 +1 @@
|
||||
956
|
||||
949
|
||||
Loading…
Reference in New Issue
Block a user