SAVEDIR, LOADDIR, OPENDIR

This commit is contained in:
Anatoliy Belyanskiy 2024-04-04 02:12:55 +10:00
parent b515b2429f
commit 53dbf83712
5 changed files with 551 additions and 523 deletions

View File

@ -1,11 +1,11 @@
; HL - ADDRESS ; HL - BUFFER ADDRESS
; DE - SIZE ; DE - BLOCK SIZE
; A - FM ; A - FM
READ: LD (.R_POINT),HL READ: LD (.R_POINT),HL
LD (.S_POINT),HL LD (.S_POINT),HL
CALL SET_FM CALL SET_FM
RET C RET C
CALL TSTSIZE CALL .TEST_SIZE
; ;
LD A,D LD A,D
OR E OR E
@ -15,16 +15,15 @@ READ: LD (.R_POINT),HL
LD A,(IY+_sFM.DRIVE) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
JP C,.ERR_1 JP C,.ERR_1
;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;<3B> áçñâ ᬥ饭¨ï ¢ ᥪâ®à å ;!HARDCODE sectro size
LD H,0 ;!HARDCODE max file size = 8 gb LD H,0 ;!HARDCODE max file size = 8 gb
LD L,(IY+_sFM.F_POSITION+3)
LD D,(IY+_sFM.F_POSITION+2)
LD E,(IY+_sFM.F_POSITION+1) LD E,(IY+_sFM.F_POSITION+1)
LD D,(IY+_sFM.F_POSITION+2)
LD L,(IY+_sFM.F_POSITION+3)
LD A,E LD A,E
AND #01 AND #01
LD B,A LD B,A
LD C,(IY+_sFM.F_POSITION) LD C,(IY+_sFM.F_POSITION)
;OR A
RR L RR L
RR D RR D
RR E RR E
@ -93,7 +92,7 @@ READ: LD (.R_POINT),HL
LD HL,0 LD HL,0
CALL MOVE_FP.F_current CALL MOVE_FP.F_current
POP DE POP DE
.NOREAD: .NOREAD: ;
.COD+1: LD A,0 .COD+1: LD A,0
OR A OR A
RET RET
@ -144,16 +143,14 @@ READ: LD (.R_POINT),HL
LD (.R_POINT),DE LD (.R_POINT),DE
EXX EXX
JP .ROV4 JP .ROV4
;
.ERR_3: POP HL .ERR_3: POP HL
.ERR_2: POP HL .ERR_2: POP HL
.ERR_1: POP BC .ERR_1: POP BC
SCF SCF
RET RET
;
.TEST_SIZE: XOR A
TSTSIZE:
XOR A
LD (READ.COD),A LD (READ.COD),A
LD L,(IY+_sFM.F_POSITION) ;FP LOW LD L,(IY+_sFM.F_POSITION) ;FP LOW
LD H,(IY+_sFM.F_POSITION+1) LD H,(IY+_sFM.F_POSITION+1)
@ -168,8 +165,7 @@ TSTSIZE:
INC HL INC HL
;ADC HL,DE ;ADC HL,DE
; ;
.no_inc_hl: .no_inc_hl: EXX ;HL':HL - NEW FP
EXX ;HL':HL - NEW FP
; ;
LD C,(IY+_sFM.FS_REC.F_SIZE) LD C,(IY+_sFM.FS_REC.F_SIZE)
LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW LD B,(IY+_sFM.FS_REC.F_SIZE+1) ;SIZE LOW

View File

@ -79,6 +79,7 @@ FM_FIND: CP FMCOUNT+1
; A=0 ; A=0
OR (IY) ;+00 NAME OR (IY) ;+00 NAME
RET RET
;
.error: XOR A .error: XOR A
LD A,DSS_Error.sys.INVALID_HANDLE LD A,DSS_Error.sys.INVALID_HANDLE
RET RET
@ -145,35 +146,20 @@ GET_FM: LD IY,0
; HL:IX - OFFSET POINTER ; HL:IX - OFFSET POINTER
; A - FILE MANIPULATOR ; A - FILE MANIPULATOR
MOVE_FP: MOVE_FP: CALL SET_FM
CALL SET_FM
RET C RET C
INC B INC B
DEC B DJNZ .B_1
JR Z,.F_start
DEC B
JR Z,.F_current
DEC B
JR Z,.B_end
LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
;from Start File ;from Start File
.F_start:
; B=0 ; B=0
LD C,B .F_start: LD C,B
LD D,B LD D,B
LD E,B LD E,B
JP .DO JP .DO
;from End File ;
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE) .B_1: DJNZ .B_2
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
JP .DO
;from Current Position ;from Current Position
.F_current: .F_current: LD C,(IY+_sFM.F_POSITION)
LD C,(IY+_sFM.F_POSITION)
LD B,(IY+_sFM.F_POSITION+1) LD B,(IY+_sFM.F_POSITION+1)
LD E,(IY+_sFM.F_POSITION+2) LD E,(IY+_sFM.F_POSITION+2)
LD D,(IY+_sFM.F_POSITION+3) LD D,(IY+_sFM.F_POSITION+3)
@ -187,6 +173,21 @@ MOVE_FP:
LD (IY+_sFM.F_POSITION+3),H LD (IY+_sFM.F_POSITION+3),H
XOR A XOR A
RET RET
;
.B_2: DJNZ .error
;from End File
.B_end: LD C,(IY + _sFM.FS_REC.F_SIZE)
LD B,(IY + _sFM.FS_REC.F_SIZE+1)
LD E,(IY + _sFM.FS_REC.F_SIZE+2)
LD D,(IY + _sFM.FS_REC.F_SIZE+3)
JP .DO
; B > 2
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
;;;;;;;;;
;FP COMPARE ;FP COMPARE
; CY - FILE POINTER > SIZE ; CY - FILE POINTER > SIZE

View File

@ -63,28 +63,23 @@
; DJNZ .GETN6 ; DJNZ .GETN6
; RET ; RET
;---------------;---------------;--------------- ;---------------;---------------;---------------
GetName: GetName: LD BC,#08FF ;!HARDCODE ¤«¨­  ¨¬¥­¨ + áçñâ稪
LD BC,#08FF ;!HARDCODE ¤«¨­  ¨¬¥­¨ + áçñâ稪
LD A,' ' LD A,' '
.loop: CP (HL) .loop: CP (HL)
JR Z,.skip JR Z,.skip
LDI LDI
DJNZ .loop DJNZ .loop
;;;;
JP .extension JP .extension
;;;; ;
.skip: LD C,B .skip: LD C,B
LD B,0 LD B,0
; CF=0 ; CF=0
ADC HL,BC ADC HL,BC
;;;; .extension: CP (HL)
.extension:
CP (HL)
LD A,"." LD A,"."
JR NZ,.copy_extension JR NZ,.copy_ext
XOR A XOR A
.copy_extension: .copy_ext: LD (DE),A
LD (DE),A
INC DE INC DE
RET Z ;no copy extension RET Z ;no copy extension
; copy extension ; copy extension
@ -100,13 +95,11 @@ GetName:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ’¥áâ ­  ¤®¯ãá⨬®¥ ¨¬ï ¨ ­ áâநâìáï ­  ¤¨áª. ; ’¥áâ ­  ¤®¯ãá⨬®¥ ¨¬ï ¨ ­ áâநâìáï ­  ¤¨áª.
; ¢å®¤: hl=áâப  ¨¬¥­¨ ; ¢å®¤: hl=áâப  ¨¬¥­¨
; ¢ë室: (TMPNAME) ; ¢ë室: (TMPNAME)
GETWORD: GETWORD: ; !TEST
; !TEST
INC HL INC HL
LD A,(HL) LD A,(HL)
DEC HL DEC HL
@ -138,10 +131,8 @@ GETWORD:
RET NZ RET NZ
INC HL INC HL
; ;
.dir_loop: .dir_loop: LD DE,TMPNAME
LD DE,TMPNAME
LD BC,#0DFF LD BC,#0DFF
;
.loop: LD A,(HL) .loop: LD A,(HL)
INC HL INC HL
CP '\' ; CP '\' ;
@ -164,8 +155,7 @@ GETWORD:
LD (TMPNAME),A LD (TMPNAME),A
RET RET
; ;
.DIR_NAME: .DIR_NAME: XOR A
XOR A
LD (DE),A LD (DE),A
PUSH HL PUSH HL
LD HL,TMPNAME LD HL,TMPNAME
@ -191,6 +181,7 @@ GETWORD:
; JR .loop ; JR .loop
; ;
; <20>ãä¥à ¨¬¥­¨ 8.3 ä®à¬ â  ; <20>ãä¥à ¨¬¥­¨ 8.3 ä®à¬ â 
TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬ TMPNAME: DZ ' ' ; 12 ¯à®¡¥«®¢ ¨ 0 ;!FIXIT ª ¡ãä¥à ¬
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -262,89 +253,6 @@ OPENDSK:;!TEST DRV.Open
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
OPENDIR:;[x] some optimizations
;XOR A
;CALL SET_FM
LD IY,CORE_BUFFERS.FM_BUF
;
LD A,(HL)
OR A
JR NZ,.SUBDIR
.REROOT1:
LD DE,0
;[x] some optimizations
; LD (IY+_sFM.FIRST_CLUSTER_L),E
; LD (IY+_sFM.FIRST_CLUSTER_L+1),D
; [ ] fat32
EX DE,HL
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
EX DE,HL
;
CALL LOADDIR
LD HL,WorkDirectory
LD (HL),'\'
INC HL
LD (HL),#00
; CF=0
;AND A
RET
.SUBDIR:
CP "."
JR NZ,.SUBDIR2
;!TEST ;[x] some optimizations
;LD A,(IY+_sFM.FIRST_CLUSTER_L) ;R005
; [ ] fat32
LD A,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
;
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) ;R005
JR NZ,.SUDI1 ;R005
INC HL ;R005
LD A,(HL) ;R005
OR A ;R005
DEC HL ;R005
JR Z,.REROOT1 ;R005
.SUDI1: EXX
LD HL,MASKARE
LD DE,MASKARE+1
LD BC,10 ;!HARDCODE
LD (HL),' '
LDIR
EXX
LD DE,MASKARE
.loop: LDI
LD A,(HL)
OR A
JR NZ,.loop
JR .SUBDIR3
.SUBDIR2:
CALL MASK.name
RET C
.SUBDIR3:
CALL FINDDIR
RET C
;!TEST ;[x] some optimizations
;LD (IY+_sFM.FIRST_CLUSTER_L),E
;LD (IY+_sFM.FIRST_CLUSTER_L+1),D
;LD DE,#4000 ;!HARDCODE
;LD (IY+_sFM.F_SIZE),E
;LD (IY+_sFM.F_SIZE+1),D
EX DE,HL
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL ; [ ] fat32
LD HL,#4000 ;!HARDCODE
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
EX DE,HL
;
JP LOADDIR
; CF=0
;AND A
;RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â ; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
; ¢å®¤: hl = 8.3 ¨¬ï ; ¢å®¤: hl = 8.3 ¨¬ï
@ -528,7 +436,6 @@ DIR_PATH_CHECK: LD A,(HL)
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
CHECK_NAME: CHECK_NAME:
LD HL,MASKARE LD HL,MASKARE

View File

@ -170,6 +170,8 @@ SEARCH:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; FIND "MASKAREA" IN DIRECTORY ; FIND "MASKAREA" IN DIRECTORY
; [ ] fat32
; ¢ë室: IY:DE - cluster number
FINDDIR: FINDDIR:
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
; ;
@ -238,6 +240,7 @@ FINDDIR:
LD A,DSS_Error.sys.PATH_NOT_FOUND LD A,DSS_Error.sys.PATH_NOT_FOUND
SCF SCF
RET RET
;
.ADDSPEC: .ADDSPEC:
LD HL,WorkDirectory+1 LD HL,WorkDirectory+1
LD BC,WorkDirectory.DEPTH-1 LD BC,WorkDirectory.DEPTH-1
@ -290,6 +293,10 @@ FINDDIR:
; ; JP IT_DIR ; ; 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
LD YL,E
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1) LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
POP AF POP AF
@ -316,38 +323,121 @@ FINDDIR:
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
CHECK_ZERO_CLUSTER:
EX DE,HL
LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005
LD A,L
OR H
LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H)
OR L
OR H
EX DE,HL
RET
;----------------------------------------------------------------------;
; ¢å®¤: HL - ¨¬ï ¤¨à¥ªâ®à¨¨
; [x] fat32
OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
LD A,(HL)
OR A
JR NZ,.SUBDIR
.REROOT: ; fat32
EX DE,HL
LD HL,(FatBuffer.RootDirStartCluster_L)
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL
LD HL,(FatBuffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL
EX DE,HL
CALL LOADDIR
; CF=0
LD HL,WorkDirectory
LD (HL),'\'
INC HL
LD (HL),#00
;AND A
RET
;
.SUBDIR: CP "."
JR NZ,.SUBDIR2
; fat32
CALL CHECK_ZERO_CLUSTER
JR NZ,.no_root ;R005
; "cd ." or "cd .."
;R005
INC HL
LD A,(HL)
OR A
DEC HL
JR Z,.REROOT
;
.no_root: EXX
LD HL,MASKARE
LD DE,MASKARE+1
LD BC,10 ;!HARDCODE
LD (HL),' '
LDIR
EXX
LD DE,MASKARE
.loop: LDI
LD A,(HL)
OR A
JR NZ,.loop
JR .SUBDIR3
;
.SUBDIR2: CALL MASK.name
RET C
; fat32
.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 HL,#4000 ;!HARDCODE
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL
;EX DE,HL
JP LOADDIR
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; <20>à®ç¨â âì ᯨ᮪ ª â «®£  ; <20>à®ç¨â âì ᯨ᮪ ª â «®£ 
LOADDIR: ; [x] fat32 ;!TEST
XOR A LOADDIR: ;!TODO optimize
LD H,A ; XOR A ; FILE MANIPULATOR = 0
LD L,A ; LD H,A
LD IX,0 ; LD L,A
LD B,A ; ®â ­ ç «  ä ©«  ; LD IX,0
CALL MOVE_FP ; LD B,A ; ®â ­ ç «  ä ©« 
; CALL MOVE_FP
SET_PAGE_X DIRPAGE ; ;
AND A ; SET_PAGE_X DIRPAGE
; AND A
; PUSH AF
; ;!TEST no ldir
; ; ®ç¨áâ¨âì ª¥è ª â «®£ 
; ; LD HL,#C000
; ; LD DE,#C001
; ; LD BC,#3FFF
; ; LD (HL),L
; ; LDIR
; ;
; LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
; LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
; ; ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
; ; [x] fat32
; LD A,(FatBuffer.FAT_TYPE)
; XOR 32
; JR Z,.read_dir
; ;!FIXIT ¯¥à¥¤¥« âì ­  à ¡®âã ¡¥§ IY
; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
CALL LOAD_SAVE_DIR_PREPARE
PUSH AF PUSH AF
;!TEST no ldir EX AF,AF'
; ®ç¨áâ¨âì ª¥è ª â «®£  JR Z,.LoadRootDir
; LD HL,#C000 .read_dir: LD HL,DIRPAGE.buffer ; ªã¤ 
; LD DE,#C001
; LD BC,#3FFF
; LD (HL),L
; LDIR
;
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD (IY+_sFM.DRIVE),A ; á®åà. ¢ ¤¥áªà¨¯â®à
; ­®¬¥à ¯¥à¢®£® ª« áâ¥à 
; [ ] fat32
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
JP Z,.LoadRootDir
;
LD HL,DIRPAGE.buffer ; ªã¤ 
LD DE,#4000 ; ᪮«ìª® LD DE,#4000 ; ᪮«ìª®
XOR A ; ¤¥áªà¨¯â®à XOR A ; ¤¥áªà¨¯â®à
CALL READ ; ç⥭¨¥ ¨§ ä ©«  CALL READ ; ç⥭¨¥ ¨§ ä ©« 
@ -355,8 +445,8 @@ LOADDIR:
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
RET RET
.LoadRootDir: ;
LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤ .LoadRootDir: LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
LD IX,(FatBuffer.RootDirFirstSector_L) ; ­®¬¥à «®£. ᥪâ®à  LD IX,(FatBuffer.RootDirFirstSector_L) ; ­®¬¥à «®£. ᥪâ®à 
LD A,(FatBuffer.DirSizeInSectors) LD A,(FatBuffer.DirSizeInSectors)
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£  LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£ 
@ -372,11 +462,94 @@ LOADDIR:
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
LOAD_SAVE_DIR_PREPARE:
;!TODO optimize
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
EX AF,AF'
;
LD A,(FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A
; [x] fat32
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32 - 1
JR NC,.exit
;!FIXIT ¯¥à¥¤¥« âì ­  à ¡®âã ¡¥§ IY
LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
.exit: EX AF,AF'
RET
;!TODO FAT procedures
;----------------------------------------------------------------------;
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
; [x] fat32 ;!TEST
SAVEDIR: ;!TODO optimize
; 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,(FatBuffer.DRIVE)
; LD (IY+_sFM.DRIVE),A
; ; [x] fat32
; LD A,(FatBuffer.FAT_TYPE)
; XOR 32
; JR Z,.save_dir
; ;!FIXIT ¯¥à¥¤¥« âì ­  à ¡®âã ¡¥§ IY
; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
CALL LOAD_SAVE_DIR_PREPARE
PUSH AF
EX AF,AF'
JR Z,.SaveRootDir
.save_dir: LD HL,DIRPAGE.buffer
; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory
;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
; ª®£¤  ¡ã¤¥â ç⥭¨¥ ªã᪠¬¨ ª â «®£  ¢ ªíè, âãâ ¥éñ áçñâ稪 ¯à¨ªàãâ¨âì
.DIRSIZE+1: LD DE,0
XOR A
CALL WRITE
POP AF
OUT (SLOT3),A
RET
;
.SaveRootDir: LD HL,(FatBuffer.RootDirFirstSector_H)
LD IX,(FatBuffer.RootDirFirstSector_L)
LD A,(FatBuffer.DirSizeInSectors)
LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors
SUB B
JR NC,.RTD1S
ADD A,B
LD B,A
.RTD1S: LD A,(FatBuffer.DRIVE)
LD DE,DIRPAGE.buffer
LD C,Dss.DRV.Write
RST ToDSS.DRV
POP AF
OUT (SLOT3),A
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) ; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) de ix iy
; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ¢å®¤: (HANDBUF) - § ¯¨áì ª â «®£ 
WRT_HND: SET_PAGE_X DIRPAGE WRT_HND: SET_PAGE_X DIRPAGE
EX AF,AF' EX AF,AF'
; ;
@ -396,7 +569,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
JR Z,.WRT_HN2 JR Z,.WRT_HN2
;ADD IX,BC ;ADD IX,BC
ADD HL,BC ADD HL,BC
JR NC,.loop JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£  = áâà ­¨æ 
; ;
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
@ -427,59 +600,6 @@ WRT_HND: SET_PAGE_X DIRPAGE
JP SAVEDIR JP SAVEDIR
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;!TODO FAT procedures
;----------------------------------------------------------------------;
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
; [ ] fat32
SAVEDIR:
XOR A
LD HL,0
LD IX,0
LD B,0
CALL MOVE_FP
;
SET_PAGE_X DIRPAGE
PUSH AF
;
LD A,(FatBuffer.DRIVE)
LD (IY+_sFM.DRIVE),A
;[ ] fat32
LD D,(IY+_sFM.FS_REC.FIRST_CLUSTER_L)
LD E,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
LD A,D
OR E
JP Z,.SaveRootDir
LD HL,DIRPAGE.buffer
; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory
;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
.DIRSIZE+1:
LD DE,0
XOR A
CALL WRITE
POP AF
OUT (SLOT3),A
AND A
RET
.SaveRootDir:
LD HL,(FatBuffer.RootDirFirstSector_H)
LD IX,(FatBuffer.RootDirFirstSector_L)
LD A,(FatBuffer.DirSizeInSectors)
LD B,32 ;!HARDCODE sector size 512
SUB B
JR NC,.RTD1S
ADD A,B
LD B,A
.RTD1S: LD A,(FatBuffer.DRIVE)
LD DE,DIRPAGE.buffer
LD C,Dss.DRV.Write
RST ToDSS.DRV
POP AF
OUT (SLOT3),A
AND A
RET
;----------------------------------------------------------------------;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; ­¥ ¨á¯®«ì§ã¥âáï ; ­¥ ¨á¯®«ì§ã¥âáï
@ -490,7 +610,9 @@ SAVEDIR:
; OR A ; OR A
; RET Z ; RET Z
; ॣ. D - ­®¬¥à ¤¨áª  ; ॣ. D - ­®¬¥à ¤¨áª 
; [ ] fat32
RD_BPB: LD C,SLOT3 RD_BPB: LD C,SLOT3
IN B,(C) IN B,(C)
PUSH BC PUSH BC
@ -534,6 +656,8 @@ RD_BPB: LD C,SLOT3
LD E,A LD E,A
LD (FatBuffer.FAT1_SEC_H),DE ; high word first sector FAT #1 LD (FatBuffer.FAT1_SEC_H),DE ; high word first sector FAT #1
LD (FatBuffer.FAT2_SEC_H),DE ; high word first sector FAT #1 LD (FatBuffer.FAT2_SEC_H),DE ; high word first sector FAT #1
LD (FatBuffer.RootDirStartCluster_L),DE
LD (FatBuffer.RootDirStartCluster_H),DE
LD (FatBuffer.SectorsPerFAT_H),A LD (FatBuffer.SectorsPerFAT_H),A
; ;
; ;

View File

@ -1 +1 @@
953 956