доделать OPENDIR

This commit is contained in:
Tolik Trek 2026-01-04 08:02:59 +10:00
parent cfb3543373
commit 53d3408ec0
20 changed files with 286 additions and 188 deletions

View File

@ -27,6 +27,8 @@ MAX_SECTORS_PER_PAGE EQU #20 ;
LOAD_SECTORS EQU SECTORS_OF_LOADER.AFTER_BPB
LOADER_IN_BPB:
.MAX_SIZE EQU _sBOOT_SECTOR.PARTITION_TABLE - _sBOOT_SECTOR_PARAMS_FAT32
FATPAGE:
.cache EQU #C000
;------------------------------------------------------------------------------
DISP ORG_ADDRESS

View File

@ -10,7 +10,7 @@
; INPUT: HL - "C:\DIR\DIR\DIR_NAME[\]",0
////////////////////////////////////////////////////////////////////////
CHDIR_FN:
;!TEST Current Dir ;[x] 15/10/23
; Current Dir 15/10/23
;
PUSH HL
CALL DIR_PATH_CHECK
@ -32,5 +32,5 @@ CHDIR: CALL SetPath_GetName ;
LD A,(HL)
OR A
RET Z
JP OPENDIR
JP OPENDIR ; !FIXIT ¢®§¬®¦­®, çâ® ¨§¡ëâ®ç­® ¯®á«¥ SetPath_GetName
;

View File

@ -1,24 +0,0 @@
////////////////////////////////////////////////////////////////////////
;
;
////////////////////////////////////////////////////////////////////////
CHDISK_FN: CALL CHDISK
RET C
PUSH AF
CALL DIR_PATH_CHANGE.FullCurrent
POP AF
RET
CHDISK: ;[x] ¡®«¥¥ ª®à४⭠ï ᬥ­  ¤¨áª 
CALL OPENDSK
;
;R010
RET C
LD HL,CORE_BUFFERS.WorkDirectory
LD (HL),0
PUSH AF
CALL OPENDIR
POP BC
RET C
LD A,B
RET
;

View File

@ -1,4 +1,3 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
;‚室­ë¥ §­ ç¥­¨ï:
; C - #12
@ -28,14 +27,14 @@ CLOSE_FN: LD (.TMP),A
LD D,(IY+_sFM.DIR_CLUSTER_H+1)
PUSH DE
;
; [x] 15/11/2023 -bug with bad clusters ;!TEST
; 15/11/2023 -bug with bad clusters
LD A,(IY+_sFM.DRIVE)
CALL OPENDSK
JR C,.error
;
XOR A
CALL SET_FM
; [x] fat32
; fat32
POP DE
LD (IY+_sFM.DIR_CLUSTER_H),E
LD (IY+_sFM.DIR_CLUSTER_H+1),D
@ -45,11 +44,13 @@ CLOSE_FN: LD (.TMP),A
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
; 15/11/2023 -bug with bad clusters
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),E
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),D
;
CALL LOADDIR ; [ ] big dir
LD L,(IY+_sFM.HANDLE)
LD H,(IY+_sFM.HANDLE+1)
CALL LOADDIR.Custom ; [ ] big dir
; [ ] big dir
;!TODO ®â¬®â âì ªíè ¤® ­ã¦­®£® record index?
;

View File

@ -3,7 +3,7 @@
; A - File attribute
; OUTPUT: A - FM
////////////////////////////////////////////////////////////////////////
CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
CREATE: ; Current Dir 15/10/23 ;CREATE_FN:
PUSH HL
LD C,A
;
@ -31,7 +31,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
;
; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00
; OUTPUT: A - FM
.NEW: ;!TEST Current Dir ;[x] 15/10/23
.NEW: ; Current Dir 15/10/23
PUSH HL
LD C,A
;
@ -97,7 +97,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
LD (.PATH0),HL
CALL SetPath_GetName
RET C
; [x] 26/06/2024 {64 kb cluster}
; 26/06/2024 {64 kb cluster}
CALL CHECK_64kb_CLUSTER
RET C
;

View File

@ -1,31 +1,22 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ?
////////////////////////////////////////////////////////////////////////
DEL_FN: ;Current Dir ;[x] 15/10/23
DEL_FN: ; Current Dir 15/10/23
PUSH HL
CALL DIR_PATH_CHECK
POP HL
RET C
;
CALL SetPath_GetName ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
; [x] 26/06/2024 {64 kb cluster}
CALL CHECK_64kb_CLUSTER
RET C
;
CALL MASK
CALL SetPath_GetName ; â¥áâ ­  ¤®¯ãáâ. ¨¬ï ¨ ­ áâà. ­  ¤¨áª
RET C
; [x] 26/06/2024 {64 kb cluster}
CALL CHECK_64kb_CLUSTER
RET C
;
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
CALL MASK
RET C
;
CALL CHECK_NAME
RET Z
;
CALL LOADDIR ; [ ] big dir

View File

@ -350,18 +350,17 @@ _TST_PROC: CALL GETMEM
LD DE,RAMMAP
LD A,H
AND #C0
;!TEST
CP #80
JR Z,FR8000
JR NC,FRC000
;
FR4000: LD A,(DE)
JR Z,.from_8000
JR NC,.from_C000
; from_4000
LD A,(DE)
OUT (SLOT1),A
INC DE
FR8000: LD A,(DE)
.from_8000: LD A,(DE)
OUT (SLOT2),A
INC DE
FRC000: LD A,(DE)
.from_C000: LD A,(DE)
OUT (SLOT3),A
;CALL M_PSP
;
@ -388,11 +387,9 @@ _TST_PROC_2:
EX DE,HL
LD XH,D
LD XL,E
;LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
LD DE,RETFAR ;  ¤à¥á ¯/¯ "­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à®æ¥áá "
PUSH DE
;PUSH HL
;!TEST Current Dir ;[x] 15/10/23
; Current Dir 15/10/23
PUSH IX
LD HL,CORE_BUFFERS.CurrentPath
LD A,(CORE_BUFFERS.EXEBUFF.VERSION)
@ -711,12 +708,12 @@ FINDPATH:
POP AF
RET
.MAKE_PATH_ARRAY:
LD HL,ENVPAGE.PATH_PNT_ARRAY-1 ;R04 -1
LD HL,ENVPAGE.PATH_PNT_ARRAY-1
LD DE,ENVPAGE.ENVTEMP-1
LD B,#00
.NEXTAR:
LD (HL),C ;R04
INC HL ;R04
LD (HL),C
INC HL
XOR A
LD (DE),A
LD C,A
@ -725,8 +722,6 @@ FINDPATH:
INC HL
LD (HL),D
INC HL
;R04 LD (HL),C
;R04 INC HL
INC B
.NEXTRT:
LD A,(DE)
@ -747,8 +742,8 @@ FINDPATH:
JR Z,.NEXTRT
OR A
JR NZ,.NEXTCH
LD (HL),C ;R04
INC HL ;R04
LD (HL),C
INC HL
LD (HL),A
INC HL
LD (HL),A

View File

@ -15,7 +15,7 @@
////////////////////////////////////////////////////////////////////////
F_FIRST_FN: CALL F_FIRST.INIT_VARS
PUSH HL
;!TEST Current Dir ;[x] 15/10/23
; Current Dir 15/10/23
CALL DIR_PATH_CHECK
POP HL
RET C

View File

@ -1,4 +1,3 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”γ­<CEB3>ζ¨ο #1B. ‘®§¤ ­¨¥ <20> β «®£ .
;

View File

@ -1,4 +1,3 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #11. Žâªàë⨥ ä ©« .
;
@ -12,7 +11,7 @@
; ¢ë室: CF=0, A - ¤¥áªà¨¯â®à ä ©« .
; CF=1, A - ª®¤ ®è¨¡ª¨.
////////////////////////////////////////////////////////////////////////
OPEN_FN: ;!TEST Current Dir ;[x] 15/10/23
OPEN_FN: ; Current Dir 15/10/23
;AND #7F ; ACCESS_MODE bit7 - ¤«ï ¢­ãâ७­¥£® ¨á¯®«ì§®¢ ­¨ï))) ;!TODO
LD (.TMP),A
PUSH HL

View File

@ -146,14 +146,11 @@ READ: LD (.R_POINT),HL
ADD HL,DE
;
EXX
;LD DE,0 ;!TEST
LD L,(IY+_sFM.F_POSITION+2) ;FP HIGH
LD H,(IY+_sFM.F_POSITION+3)
;!TEST
JR NC,.no_inc_hl
INC HL
;ADC HL,DE
JR NC,.no_inc_hl
;
INC HL
.no_inc_hl: EXX ;HL':HL - NEW FP
;
LD C,(IY+_sFM.FS_REC.F_SIZE)

View File

@ -9,7 +9,7 @@
; INPUT: HL - "old_name.ext",#00 without simbols * ?
; DE - "new_name.ext",#00 without simbols * ?
////////////////////////////////////////////////////////////////////////
RENAME: ;!TEST Current Dir ;[x] 15/10/23
RENAME: ; Current Dir 15/10/23
PUSH HL
PUSH DE
CALL DIR_PATH_CHECK.forceCheck
@ -30,19 +30,12 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
CALL MASK.name
POP DE
RET C
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
CALL CHECK_NAME
RET Z
;
PUSH DE
CALL LOADDIR ; [ ] big dir ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
;LD A,#33
LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "old_name.ext" ¢ ᯨ᪥ ¤¨áª 
POP HL
@ -50,16 +43,10 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
;LD DE,MASKARE
CALL MASK.name
RET C
;!TEST optimization
;LD HL,MASKARE
;LD BC,11
;LD A,"?"
;CPIR
;LD A,DSS_Error.sys.INVALID_NAME
;SCF
CALL CHECK_NAME
;
CALL CHECK_NAME
RET Z
;
PUSH IX
LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "new_name.ext" ¢ ᯨ᪥ ¤¨áª 
@ -67,7 +54,7 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
LD A,DSS_Error.sys.FILE_EXISTS
CCF
RET C
;
SET_PAGE_X DIRPAGE
EX AF,AF'
;

View File

@ -1,4 +1,3 @@
; [x] fat32 ;!TEST
////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1C. “¤ «¥­¨¥ ª â «®£ .
; Œ®¦­® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
@ -8,7 +7,7 @@
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
RMDIR: ;!TEST Current Dir ;[x] 15/10/23
RMDIR: ; Current Dir 15/10/23
PUSH HL
CALL DIR_PATH_CHECK
POP HL

View File

@ -209,7 +209,7 @@ OPENDSK: ;!TEST DRV.Open
;----------------------------------------------------------------------;
;!TEST Current Dir ;[x] 15/10/23
;! Current Dir 15/10/23
DIR_PATH_CHANGE:
.FullCurrent: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
ADD 'A'

View File

@ -318,7 +318,6 @@ SEARCH:
;----------------------------------------------------------------------;
; FIND "MASKAREA" IN DIRECTORY
; [x] fat32 ;!TEST
; ¢ë室: IY:DE - cluster number
FINDDIR: SET_PAGE_X DIRPAGE
;
@ -467,30 +466,77 @@ FINDDIR: SET_PAGE_X DIRPAGE
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
âãâ ¤®¤¥« âì
; ‚室: IY - 㪠§ â¥«ì ­  ­ ç «® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
CHECK_ROOT_CLUSTER:
EX DE,HL
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L) ;R005
LD A,L
OR H
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
;EX DE,HL
; LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
; LD A,L
; OR H
; LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
; OR L
; OR H
;EX DE,HL
CALL CHECK_FIRST_CLUSTER
; RET NZ
; LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
; CP FAT_TYPE.x32
; CALL Z,SET_FAT_ROOT_DIR_CLUSTER
; ;
; XOR A
RET
;
; .fat32root: CALL SET_FAT32_ROOT_DIR_CLUSTER
; OR A
; RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
SET_FAT_ROOT_DIR_CLUSTER:
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
RET
;----------------------------------------------------------------------;
;-----------------------------------------------------------------------
; ¢å®¤: IY - 㪠§ â¥«ì ­  ­ ç «® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
; ¢ë室: HL':HL - first cluster
; ZF = 0 ¥á«¨ ¯¥à¢®£® ª« áâ¥à  ­¥â
CHECK_FIRST_CLUSTER:
EXX
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
LD A,L
OR H
EXX
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
OR L
OR H
EX DE,HL
RET
;-----------------------------------------------------------------------
;----------------------------------------------------------------------;
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
; [x] fat32 ;!TEST
OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
LD A,(HL)
OR A
JR NZ,.SUBDIR
;
.REROOT: LD DE,0 ; !FIXIT ; [ ] CDFS - ¡à âì ¯¥à¢ë© ª« áâ¥à ¨§ ¯¥à¥¬¥­­®©
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),DE
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),DE
CALL LOADDIR ; [ ] big dir
âãâ ¤®¤¥« âì
.REROOT: CALL SET_FAT_ROOT_DIR_CLUSTER
;LD DE,0 ; ¯à¨§­ ª root dir ; !FIXIT ; [ ] CDFS - ¡à âì ¯¥à¢ë© ª« áâ¥à ¨§ ¯¥à¥¬¥­­®©
;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),DE
;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),DE
.reroot: CALL LOADDIR ; [ ] big dir
; CF=0
LD HL,CORE_BUFFERS.WorkDirectory
LD (HL),'\'
@ -502,7 +548,12 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
.SUBDIR: CP "."
JR NZ,.SUBDIR2
; fat32
CALL CHECK_ROOT_CLUSTER
; !TEST 04/01/2026
EX DE,HL
CALL CHECK_ROOT_CLUSTER
;CALL CHECK_FIRST_CLUSTER
EX DE,HL
;
JR NZ,.no_root ;R005
; "cd ." or "cd .."
;R005
@ -546,7 +597,8 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
; <20>à®ç¨â âì ᯨ᮪ ª â «®£ 
; ¢å®¤ (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L), (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
LOADDIR: ;!TODO optimize
CALL LOAD_SAVE_DIR_PREPARE
LD HL,0
.Custom: CALL LOAD_SAVE_DIR_PREPARE
.next: PUSH AF
EX AF,AF'
JR NZ,.read_dir ; root dir or not
@ -582,8 +634,7 @@ LOADDIR: ;!TODO optimize
JR NC,.RTD1
;
LD B,A ; ç¨á«® ᥪâ®à®¢
.RTD1: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; ­®¬
¥à ¤¨áª 
.RTD1: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD DE,DIRPAGE.buffer ; ¡ãä¥à
LD C,Dss.DRV.Read ; ç⥭¨¥ ᥪâ®à®¢
RST ToDSS.DRV
@ -601,8 +652,7 @@ LOADDIR: ;!TODO optimize
ld
; ¤®¤¥« âì ¯¥à¥¤ çã ID § ¯¨á¨ ¤¨à¥ªâ®à¨¨ ¨ § £à㧪¨ ¯® ­¥© ­ã¦­®£® ªã᪠ ¢ ªíè
; [ ] ¤®¤¥« âì ¯¥à¥¤ çã ID § ¯¨á¨ ¤¨à¥ªâ®à¨¨ ¨ § £à㧪¨ ¯® ­¥© ­ã¦­®£® ªã᪠ ¢ ªíè
;!TODO FAT procedures
;----------------------------------------------------------------------;
; ‚室:
@ -613,27 +663,21 @@ LOAD_SAVE_DIR_PREPARE:
; HLIX = (HL*32) & #1FC000 ᬥ饭¨¥ ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
XOR A
LD XL,A
LD L,A
LD E,A
LD A,H
AND #0E
LD H,E
AND #FE
RRA
RR L
RR E
LD (CORE_BUFFERS.FS_Buffer.DIR_BLOCK),A
RRA
RR L
RR E
RRA
RR L
LD E,L
RR E
LD XH,E
LD L,A
; ;
;
; A = ­®¬¥à ¡«®ª  ªíè ¤¨à¥ªâ®à¨¨
RL E
RLA
RL E
RLA
LD (CORE_BUFFERS.FS_Buffer.DIR_BLOCK),A
;
XOR A ; FILE MANIPULATOR = 0
;LD H,A
;LD L,A
@ -648,11 +692,6 @@ LOAD_SAVE_DIR_PREPARE:
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
LD (CORE_BUFFERS.FM_BUF.DRIVE),A
;;;;;;;;
;LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H)
;OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
;
XOR A
LD D,#40
LD E,A
@ -755,9 +794,10 @@ LOAD_SAVE_DIR_PREPARE:
#1FFFE0 & #3FFF ¤à¥á ­ã¦­®© ¯®§¨æ¨¨ ¢ ªíè
(#1FFFE0 & #1FC000)<<2 ¤¢¨£ ¥¬ ¡ ©â 2 ¨ 3 ç⮡ ¯®«ãç¨âì ­®¬¥à ¡«®ª 
*/
;----------------------------------------------------------------------;
; [ ] big dir
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) de ix iy
; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
@ -1409,7 +1449,7 @@ FS_Buffer:
;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
DELETE_REC_FAT: SET_PAGE_X DIRPAGE
EX AF,AF'
CALL DELETE_LFN_RECORDS ; [x] 㤠«¥­¨¥ § ¯¨á¨ LFN
CALL DELETE_LFN_RECORDS ; [ ] big dir ; [x] 㤠«¥­¨¥ § ¯¨á¨ LFN
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©« 
; fat32
LD L,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
@ -1495,7 +1535,6 @@ SET_NEW_FREE_CLUSTER:
; RET
;
; [x] fat32 ;!TEST
; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢
; ¢ë室: HL - ¬« ¤è¨© ­®¬¥à ᢮¡®¤­®£® ª« áâ¥à 
; HL' - áâ à訩 ­®¬¥à ᢮¡®¤­®£® ª« áâ¥à 
@ -1590,7 +1629,6 @@ SET_NEW_FREE_CLUSTERS:
; ;
;
; [x] fat32 ;!TEST
; <20>ਪ९¨âì ª ¯®á«¥¤­¥¬ã ª« áâ¥àã æ¥¯®çª¨ ­®¢ë© ¯ãá⮩ ª« áâ¥à
; ‚室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
; ‚ë室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
@ -1625,7 +1663,7 @@ INC_FAT: PUSH HL ; ⥪
EXX
;
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE?
; 02/12/23 ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
;
EXX
@ -1639,10 +1677,9 @@ INC_FAT: PUSH HL ; ⥪
XOR A ; 㬥­ìè¨âì
CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
RET
;RX01
; [x] fat32 ;!TEST
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster
; hl' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
CHECK_CLUSTER_IS_SMALLER:
@ -1670,7 +1707,6 @@ CHECK_CLUSTER_IS_SMALLER:
;
;
;[x] fat32 ;!TEST
;------------------------------------------------------------------------------------------------
; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; ¢å®¤: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
@ -1802,8 +1838,6 @@ SET_FAT32_CACHE_BLOCK_CHANGED_REGION:
LD (CORE_BUFFERS.FS_Buffer.CacheUpdated),A
RET
;
; [x] fat32 ;!TEST
;
; !TODO optimize
; ¯à¨ § ¯¨á¨ ¢ ªíè §­ ç¥­¨ï ®â¬¥ç âì ç¥à¥§ OR ¢ ï祩ª¥ FS_Buffer.SectorOfCacheBlock
@ -1913,8 +1947,7 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FS_Buffer.END_CHAIN_CLUSTER_L) ;
POP DE
JR .exit
;
.FAT32: ; [x] fat32 ;!TEST
EXX
.FAT32: EXX
PUSH DE ; áâ à訩 ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
PUSH HL ; áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
EXX
@ -1942,7 +1975,6 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FS_Buffer.END_CHAIN_CLUSTER_L) ;
; [x] fat32 ;!TEST
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
; in: HL - Cache block
; out: C:HL - logical number
@ -1981,7 +2013,6 @@ GET_SECTOR_OF_FAT:
;;;;;;;;;
; [x] fat32 ;!TEST
;RE_FAT:
;RX01
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT- 
@ -2021,7 +2052,7 @@ READ_FAT_TABLE: PUSH HL
RET
; [x] fat32 ;!TEST
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
WRITE_FAT_TABLE:
SET_PAGE_X FATPAGE
@ -2228,9 +2259,9 @@ WRITE_FAT_TABLE:
POP DE
POP AF
RET
;-----------------------------------------------------------------------
;
;[x] fat32 ;!TEST
;¢å®¤: HL':HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
GET_FAT32_CELL: ; ¤¢¨£ ¥¬ ¢«¥¢® HL':H
@ -2344,8 +2375,6 @@ GET_FAT12_CELL: LD D,H
;-----------------------------------------------------------------------
;[x] fat32 ;!TEST
;CLUSTER_TO_SECTOR:
; in: HL':HL - CLUSTER
; out: HL:IX - SECTOR
@ -2394,7 +2423,6 @@ CLUSTER_TO_SECTOR:
////////////////////////////////////////////////////////////////////////
; [x] fat32 ;!TEST
; READ SECTORS OF FILE
; ¢å®¤: HL:DE - FP (in sectors)
; IY - FM
@ -2561,24 +2589,8 @@ BLOCK_READ: LD (READ.PointerOnBuffer),IX
RET
;-----------------------------------------------------------------------
; [x] fat32
; ¢å®¤: IY - FM
; ¢ë室: HL':HL - first cluster
; ZF = 0 ¥á«¨ ¯¥à¢®£® ª« áâ¥à  ­¥â
CHECK_FIRST_CLUSTER:
EXX
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
LD A,L
OR H
EXX
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
OR L
OR H
RET
; [x] fat32
;-----------------------------------------------------------------------
; WRITE SECTORS OF FILE
; ¢å®¤: HL:DE - FP (in sectors)
; IX - data in RAM
@ -2595,16 +2607,6 @@ BLOCK_WRITE: LD (READ.PointerOnBuffer),IX
PUSH BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
PUSH DE ; fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
;
; EXX
; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
; LD A,L
; OR H
; EXX
; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER
; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
; OR L
; OR H
CALL CHECK_FIRST_CLUSTER
JR NZ,.FindCluster
;

View File

@ -37,8 +37,8 @@
; .CREATE_DATE_FAT32: WORD #0000 ;+ #10 +16 RESERVED
; .RESERVED_FAT32_1: WORD #0000 ;+ #12 +18 RESERVED
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
; .TIME: WORD #0000 ;+ #16 +22 TIME
; .DATE: WORD #0000 ;+ #18 +24 DATE
; .TIME: WORD #0000 ;+ #16 +22 TIME
; .DATE: WORD #0000 ;+ #18 +24 DATE
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
; from Core

View File

@ -1 +1 @@
3
4

View File

@ -69,6 +69,7 @@ MINIMUM_BIOS_VERSION EQU 3*256 + 06 ; version 3.06
;-----------------------------------------------[^^^^^^]
;-----------------------------------------------[«®£.­®¬¥à  áâà ­¨æ]
IFUSED DIRPAGE
DEFINE USING_MEMPAGES 4 ; à §¬¥à ¡«®ª  ¤®¯®«­¨â¥«ì­ëå áâà ­¨æ
; ªíè ᯨ᪠ ª â «®£ 
DIRPAGE EQU 0 + (low BANKTBL)
@ -85,6 +86,7 @@ ENVPAGE EQU TXTPAGE
DRVPAGE EQU 3 + (low BANKTBL)
;
COREPAGE EQU 4 + (low BANKTBL) ; ®­  ®â¤¥«ì­® ¨ ­¥ á ¡«®ª®¬ ¢ëè¥.
ENDIF
;-----------------------------------------------[^^^^^^^^^^^^^^^^^^]
DIRECTORY_PATH_LENGTH EQU 256 ; '\' + 255, 0

View File

@ -1 +1 @@
527
531

View File

@ -375,3 +375,151 @@ SAVEDIR: ;!TODO optimize
RET
; [ ] ¤®¤¥« âì ¯¥à¥¤ çã ID § ¯¨á¨ ¤¨à¥ªâ®à¨¨ ¨ § £à㧪¨ ¯® ­¥© ­ã¦­®£® ªã᪠ ¢ ªíè
;!TODO FAT procedures
;----------------------------------------------------------------------;
; ‚室:
; HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
; ‚ë室: A - ‘âà ­¨æ , ª®â®à ï ¡ë«  ¢ SLOT3 ¤® ¢ë§®¢ 
; ZF' - RootDir
LOAD_SAVE_DIR_PREPARE:
; [ ] ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
; [ ] ‚ë室: HLIX - ᬥ饭¨¥ ¢ ä ©«¥ ª â «®£  ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
; HLIX = (HL*32) & #1FC000 ᬥ饭¨¥ ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
XOR A
LD XL,A
LD E,A
LD A,H
LD H,E
AND #FE
RRA
RR E
LD (CORE_BUFFERS.FS_Buffer.DIR_BLOCK),A
RRA
RR E
RRA
RR E
LD XH,E
LD L,A
; ;
;
XOR A ; FILE MANIPULATOR = 0
;LD H,A
;LD L,A
;LD IX,0
LD B,A ; ®â ­ ç «  ä ©« 
CALL MOVE_FP
SET_PAGE_X DIRPAGE
AND A
PUSH AF
;
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
LD (CORE_BUFFERS.FM_BUF.DRIVE),A
;;;;;;;;
XOR A
LD D,#40
LD E,A
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
EXX
LD D,A
LD E,A
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
OR H
OR L
EXX
OR H
OR L
;;;;;;;;
PUSH AF
CALL NZ,.CalcDirSize
;
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),DE
EXX
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE
POP AF
EX AF,AF'
POP AF
RET
;
.CalcDirSize: ; calc dir size in clusters
LD DE,0
;LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
;EXX
; LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
.loop: ; ;
;EXX
INC DE ; <20> ¤¥¥¬áï âãâ ­  â®, ç⮠ᯥæ¨ä¨ª æ¨ï ¢ë¯®«­ï¥âáï ¨ ¯¥à¥¯®«­¥­¨ï ­¥ ¡ã¤¥â
PUSH DE
CALL READ_FROM_FAT
EX DE,HL
POP DE
EXX
EX DE,HL
EXX
JR NC,.loop
;
; DE - à §¬¥à ¤¨à¥ªâ®à¨¨ ¢ ª« áâ¥à å
;!FIXIT ¬®¦­® ®¯â¨¬¨§­ãâì ª®«-¢® ᤢ¨£®¢
;0001 0000 0000 0000 max ª®«-¢® ª« áâ¥à®¢
; ¯à¨¬¥à
;0000 0000 0000 0111 Clusters
; 0100 0000 SectorsPerCluster
;0000 0010 0000 0000 BytesPerSector
; D' E' D E
;0000 0000 0000 0011 1000 0000 0000 0000
;
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector)
; DE':DE - ª®«-¢® ª« áâ¥à®¢
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; --> DE*BC*A = DE':DE ¤«ï ®â¢¥â  墠â¨â, ¯®å®¤ã, 4å ॣ¨áâ஢
EXX
LD DE,0
EXX
SRL B
RR C
RRCA
JR C,.loop2
;
.loop1: ;
SLA E
RL D
EXX
RL E
RL D
;RL C
EXX
;
RRCA
JR NC,.loop1
;
.loop2: ;
SLA E
RL D
EXX
RL E
RL D
;RL C
EXX
;
SRL B
RR C
JR NC,.loop2
; <-- DE*BC*A = DE':DE
RET
/* 4 3 2 1
#FFFF<<5 = #1FFFE0 = 0000 0000 0001 1111 1111 1111 1110 0000
#FFFF ­®¬¥à § ¯¨á¨
#1FFFE0 ᬥ饭¨¥ ­  § ¯¨áì ¢ ä ©«¥ ¤¨à¥ªâ®à¨¨
#1FFFE0 & #1FC000 ᬥ饭¨¥ ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
#1FFFE0 & #3FFF ¤à¥á ­ã¦­®© ¯®§¨æ¨¨ ¢ ªíè
(#1FFFE0 & #1FC000)<<2 ¤¢¨£ ¥¬ ¡ ©â 2 ¨ 3 ç⮡ ¯®«ãç¨âì ­®¬¥à ¡«®ª 
*/
;----------------------------------------------------------------------;