This commit is contained in:
Tolik 2025-11-17 19:30:36 +10:00
parent 0a649252ab
commit 7d98613cb5
7 changed files with 156 additions and 7 deletions

View File

@ -82,6 +82,7 @@ CLOSE_FN: LD (.TMP),A
LDIR LDIR
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
CALL SAVEDIR CALL SAVEDIR
.NOTMODF: LD A,(.TMP) .NOTMODF: LD A,(.TMP)
JP RES_FM JP RES_FM

View File

@ -79,7 +79,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN:
.loop2: LD (HL),C .loop2: LD (HL),C
INC HL INC HL
DJNZ .loop2 DJNZ .loop2
; ; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
CALL WRT_HND CALL WRT_HND
RET C RET C
;CALL SAVEDIR ;CALL SAVEDIR

View File

@ -100,7 +100,7 @@ MKDIR:
.loop2: LD (HL),C .loop2: LD (HL),C
INC HL INC HL
DJNZ .loop2 DJNZ .loop2
; ; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ )
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª ;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ;

View File

@ -81,5 +81,6 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
; ;
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
JP SAVEDIR JP SAVEDIR
; ; ; ; ; ;

View File

@ -596,7 +596,7 @@ LOADDIR: ;!TODO optimize
;!TODO FAT procedures ;!TODO FAT procedures
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
/*
LOAD_SAVE_DIR_PREPARE: LOAD_SAVE_DIR_PREPARE:
;!TODO optimize ;!TODO optimize
XOR A ; FILE MANIPULATOR = 0 XOR A ; FILE MANIPULATOR = 0
@ -659,11 +659,19 @@ LOAD_SAVE_DIR_PREPARE:
EX DE,HL EX DE,HL
EXX EXX
JR NC,.loop JR NC,.loop
;
; DE - à §¬¥à ¤¨à¥ªâ®à¨¨ ¢ ª« áâ¥à å ; 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 A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector) LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector)
;
; DE':DE - ª®«-¢® ª« áâ¥à®¢ ; DE':DE - ª®«-¢® ª« áâ¥à®¢
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å ; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å ; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
@ -702,6 +710,133 @@ LOAD_SAVE_DIR_PREPARE:
JR NC,.loop2 JR NC,.loop2
; <-- DE*BC*A = DE':DE ; <-- DE*BC*A = DE':DE
RET RET
*/
; ‚室:
; ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
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
PUSH AF
;
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
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 ç⮡ ¯®«ãç¨âì ­®¬¥à ¡«®ª 
*/
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) de ix iy ; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ ) de ix iy
@ -760,12 +895,14 @@ WRT_HND:
.SAVEDIR: EXX .SAVEDIR: EXX
PUSH DE PUSH DE
EXX EXX
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
CALL SAVEDIR CALL SAVEDIR
POP DE POP DE
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª. ; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à  ; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
; [ ] big dir ¯®«ãç âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
SAVEDIR: ;!TODO optimize SAVEDIR: ;!TODO optimize
CALL LOAD_SAVE_DIR_PREPARE CALL LOAD_SAVE_DIR_PREPARE
PUSH AF PUSH AF
@ -1368,6 +1505,7 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ¥á«¨ à §¬¥à ä ©«  ­¥ ­®«ì ; ¥á«¨ à §¬¥à ä ©«  ­¥ ­®«ì
.loop: ;EX DE,HL ; hl=­®¬¥à ª« áâ¥à  .loop: ;EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
@ -1395,6 +1533,7 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
;EX DE,HL ;EX DE,HL
JP NC,.loop JP NC,.loop
CALL WRITE_FAT_TABLE CALL WRITE_FAT_TABLE
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; “áâ ­®¢¨âì ¯¥à¢ë¬ ¨§¢¥áâ­ë¬ ª« áâ¥à®¬ ¤«ï ¯®¨áª  ᢮¡®¤­®£®. ; “áâ ­®¢¨âì ¯¥à¢ë¬ ¨§¢¥áâ­ë¬ ª« áâ¥à®¬ ¤«ï ¯®¨áª  ᢮¡®¤­®£®.

View File

@ -80,7 +80,7 @@
; ;
STRUCT _sFS_Buffer STRUCT _sFS_Buffer
.DRIVE: BYTE #FF .DRIVE: BYTE #FF
.FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; fat32 .FAT_TYPE: BYTE #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit)
.CacheBlock: WORD #0000 .CacheBlock: WORD #0000
.CacheUpdated: BYTE #00 .CacheUpdated: BYTE #00
;.SectorsPerBank: BYTE #00 ;.SectorsPerBank: BYTE #00
@ -106,11 +106,13 @@
.BytesPerSector: WORD #0000 .BytesPerSector: WORD #0000
.SectorsPerCluster: BYTE #00 .SectorsPerCluster: BYTE #00
.FSINFO_Sector: WORD #01 .FSINFO_Sector: WORD #01
.BPB_SERIAL_NUMBER: DWORD 0 .BPB_SERIAL_NUMBER: DWORD #00000000
.BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS .BPB_LABEL: BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
.UPD_FSINFO: BYTE 0 .UPD_FSINFO: BYTE 0
.FREE_CLUSTERS_COUNT_L: WORD #FFFF .FREE_CLUSTERS_COUNT_L: WORD #FFFF
.FREE_CLUSTERS_COUNT_H: WORD #FFFF .FREE_CLUSTERS_COUNT_H: WORD #FFFF
.DIR_BLOCK BYTE #00 ; ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ § £à㦥­ ¢ ªíè ¤¨à¥ªâ®à¨© DIRPAGE
.DIR_BLOCK_CHANGES DWORD #00000000 ; ª ª¨¥ ¨§ ªã᪮¢ ¢ ¡«®ª¥ ªíè DIRPAGE ¨§¬¥­¨«¨áì ¤® á®åà ­¥­¨ï
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥ ;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“)
;.READ_PG: BYTE #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï))) ;.READ_PG: BYTE #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))

6
DSS/ToDo.txt Normal file
View File

@ -0,0 +1,6 @@
<EFBFBD>® ¯®«­ë¬ ¤¨à¥ªâ®à¨ï¬.
;[ ] <20>¥à¥¬¥­­ ï DIR_BLOCK ¯®ª §ë¢ îé ï ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ ¢ ªíè.
;[ ] <20>¥à¥¬¥­­ ï DIR_BLOCK_CHANGED ¯®ª §ë¢ îé ï ª ª®© ¨§ ªã᪮¢ ¢ ¡«®ª¥ ªíè ¨§¬¥­¨«áï ¤® á®åà ­¥­¨ï. Š ª ¢ FAT.
;[ ] <20>à®æ¥¤ãàë ¬¥­ïî騥 ¤ ­­ë¥ ¢ ªíè ¤¨à¥ªâ®à¨¨ ¤®«¦­ë ¬¥­ïâì DIR_BLOCK_CHANGED.
;[ ] <20>¥à¥¤ ¢ âì ¢ LOADDIR ­ã¦­ë© ¡«®ª ¤«ï § £à㧪¨ ¢ ªíè (¨«¨ ­®¬¥à ­ã¦­®© § ¯¨á¨ ª â «®£ ).
;[ ] LOAD_SAVE_DIR_PREPARE ¯®å®¤ã, ¯¥à¥¤¥« âì ª å¥à ¬ ¢¬¥á⥠á LOADDIR ¨ SAVEDIR