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
@ -18,13 +18,8 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;
|
||||
;
|
||||
INC B
|
||||
DEC B
|
||||
JP Z,.READ
|
||||
DEC B
|
||||
JP Z,.WRITE_FN
|
||||
LD A,DSS_Error.sys.INVALID_FUNCTION
|
||||
SCF
|
||||
RET
|
||||
DJNZ .B_1
|
||||
; B = 0
|
||||
.READ: ;!TEST ;[x] 16/11/23 optimize get attribute
|
||||
;XOR A
|
||||
;
|
||||
@ -41,6 +36,11 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;
|
||||
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
|
||||
|
||||
@ -68,18 +68,8 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||
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
|
||||
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||
;
|
||||
LD BC,#0600
|
||||
;
|
||||
.loop2: LD (HL),C
|
||||
@ -89,13 +79,12 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||
CALL WRT_HND
|
||||
RET C
|
||||
;CALL SAVEDIR
|
||||
.PATH0+1:
|
||||
LD HL,0
|
||||
.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
|
||||
;
|
||||
.Prepare: ;AND #E7 ;R004 %76A00SHR = !FAT_ATTR ;!HARDCODE
|
||||
AND FAT_ATTR.NoDIRnoVolID
|
||||
LD (.TMP),A
|
||||
LD (.PATH0),HL
|
||||
@ -106,8 +95,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
||||
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
|
||||
.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
|
||||
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- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
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,15 +7,14 @@
|
||||
;
|
||||
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
MKDIR:
|
||||
;error
|
||||
MKDIR.DIR_EXISTS:
|
||||
LD A,DSS_Error.sys.DIR_EXISTS
|
||||
.DIR_EXISTS: LD A,DSS_Error.sys.DIR_EXISTS
|
||||
CCF
|
||||
RET
|
||||
|
||||
|
||||
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
PUSH HL
|
||||
;
|
||||
; Entry point ;!TEST Current Dir ;[x] 15/10/23
|
||||
.B: PUSH HL
|
||||
CALL DIR_PATH_CHECK
|
||||
POP HL
|
||||
RET C
|
||||
@ -46,7 +46,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;
|
||||
CALL G_CLUST
|
||||
RET C
|
||||
; [x] fat32
|
||||
; fat32
|
||||
PUSH HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||
EXX
|
||||
PUSH HL ; áâ à訩 ®¬¥à ᥪâ®à
|
||||
@ -69,28 +69,15 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
INC HL
|
||||
DJNZ .loop1
|
||||
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
|
||||
; [x] fat32 § ¯¨áì áâ à襣® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_H
|
||||
; 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
|
||||
;
|
||||
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||
; § ¯¨áì ¬« ¤è¥£® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_L
|
||||
POP BC ; áâ à訩 ®¬¥à ᥪâ®à
|
||||
POP DE ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||
@ -109,6 +96,9 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
;
|
||||
CALL WRT_HND ; ᪮¯¨à. ®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||||
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
;
|
||||
; á®§¤ ñ¬ á«ã¦¥¡ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ®¬ ª â «®£¥
|
||||
; Š€’€‹Žƒ "."
|
||||
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
|
||||
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
||||
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
|
||||
@ -120,32 +110,48 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
INC HL
|
||||
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||||
EX DE,HL
|
||||
LD BC,21
|
||||
LD BC,21 ; !HARDCODE
|
||||
LDIR
|
||||
; Š€’€‹Žƒ ".."
|
||||
EX DE,HL
|
||||
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£
|
||||
INC HL
|
||||
LD (HL),"."
|
||||
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
||||
.MKD03: INC HL
|
||||
.loop4: INC HL
|
||||
LD (HL),C
|
||||
DJNZ .MKD03
|
||||
DJNZ .loop4
|
||||
;
|
||||
INC HL
|
||||
SET_PAGE_X DIRPAGE
|
||||
PUSH AF
|
||||
;
|
||||
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; âਡãâë § ¯¨á¨
|
||||
;
|
||||
LD A,(DIRPAGE.buffer)
|
||||
CP "."
|
||||
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; âਡãâë § ¯¨á¨
|
||||
JP Z,.MKD04
|
||||
LD IX,HANDBUF
|
||||
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
|
||||
; [ ] 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 (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
|
||||
@ -181,11 +187,16 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
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
|
||||
LD BC,511 ;!HARDCODE
|
||||
LD (HL),0
|
||||
LDIR
|
||||
;
|
||||
.skip_clean: ;
|
||||
POP IX
|
||||
POP HL
|
||||
INC IX
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
; [x] fat32 ;!TEST
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; ”ãªæ¨ï #11. Žâªàë⨥ ä ©« .
|
||||
;
|
||||
@ -12,6 +13,7 @@
|
||||
; CF=1, A - ª®¤ ®è¨¡ª¨.
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
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
|
||||
@ -50,12 +52,12 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
|
||||
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
|
||||
LD (IY+_sFM.OptimizedClusters),A
|
||||
; [x] fat32
|
||||
; fat32
|
||||
LD (IY+_sFM.KnownCluster_H),A
|
||||
LD (IY+_sFM.KnownCluster_H+1),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 A,(FatBuffer.DRIVE)
|
||||
LD (IY+_sFM.DRIVE),A
|
||||
; [ ] fat32
|
||||
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_L
|
||||
; fat32
|
||||
LD HL,CORE_BUFFERS.FM_BUF+_sFM.FS_REC.FIRST_CLUSTER_H
|
||||
LD E,(HL)
|
||||
INC HL
|
||||
LD D,(HL)
|
||||
; [ ] fat32
|
||||
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 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. “¤ «¥¨¥ ª â «®£ .
|
||||
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
||||
@ -37,15 +38,25 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
CALL LOADDIR
|
||||
CALL SEARCH.Dir
|
||||
RET C
|
||||
; [ ] fat32
|
||||
; fat32
|
||||
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
|
||||
EXX
|
||||
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||||
PUSH IX
|
||||
.RMD17: PUSH HL
|
||||
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
|
||||
.read_dir_loop: ;PUSH AF
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
PUSH IX
|
||||
;
|
||||
@ -54,7 +65,8 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
IN A,(SLOT0)
|
||||
OUT (SLOT3),A
|
||||
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)
|
||||
RST ToDSS.DRV
|
||||
POP AF
|
||||
@ -77,8 +89,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
SBC HL,DE
|
||||
AND FAT_ATTR.VOLUME_ID
|
||||
JP Z,.error ;DIR NOT EMPTY
|
||||
.next_record:
|
||||
LD DE,#0020
|
||||
.next_record: LD DE,#0020
|
||||
ADD HL,DE
|
||||
DJNZ .check_dir_loop
|
||||
;
|
||||
@ -89,29 +100,39 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
OR XL
|
||||
JR NZ,.no_inc_hl
|
||||
INC HL
|
||||
.no_inc_hl:
|
||||
POP AF
|
||||
DEC A
|
||||
JR NZ,.read_dir_loop
|
||||
; [ ] fat32
|
||||
.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=®¬¥à á«¥¤. ª« áâ¥à
|
||||
JR NC,.RMD17 ; ¥ ª®¥æ 楯®çª¨
|
||||
.delete:
|
||||
POP IX
|
||||
EXX
|
||||
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||||
EXX
|
||||
JR NC,.read_dir_big_loop ; ¥ ª®¥æ 楯®çª¨
|
||||
;
|
||||
.delete: POP IX
|
||||
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
.RMD15: POP IX
|
||||
;
|
||||
.RMD15: POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP AF
|
||||
POP HL
|
||||
JR .delete
|
||||
;
|
||||
.error: POP IX
|
||||
.error: POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP AF
|
||||
POP HL
|
||||
POP IX
|
||||
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
|
||||
|
||||
@ -30,31 +30,32 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
||||
CALL SET_FM
|
||||
JR C,.ERR1
|
||||
LD A,(IY+_sFM.ACCESS_MODE)
|
||||
AND FAT_ATTR.READ_ONLY
|
||||
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
|
||||
;
|
||||
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
|
||||
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
|
||||
@ -62,8 +63,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
|
||||
PUSH HL
|
||||
PUSH DE
|
||||
PUSH BC
|
||||
.R_POINT+2:
|
||||
LD IX,0
|
||||
.R_POINT+2: LD IX,0
|
||||
CALL BLOK_WRITE
|
||||
POP BC
|
||||
JR C,.ERR3
|
||||
|
||||
@ -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
|
||||
|
||||
@ -96,7 +96,6 @@ SET_FM: CALL FM_FIND
|
||||
RET
|
||||
|
||||
|
||||
|
||||
RES_FM: CALL FM_FIND
|
||||
; error
|
||||
; LD A,DSS_Error.sys.INVALID_HANDLE
|
||||
|
||||
@ -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