Продолжаем по чайной ложке

This commit is contained in:
Tolik 2026-01-04 20:32:22 +10:00
parent 53d3408ec0
commit 3c8e693290
2 changed files with 76 additions and 67 deletions

View File

@ -468,43 +468,36 @@ FINDDIR: SET_PAGE_X DIRPAGE
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
âãâ ¤®¤¥« âì
; ‚室: IY - 㪠§ â¥«ì ­  ­ ç «® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à  ; ‚室: IY - 㪠§ â¥«ì ­  ­ ç «® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
CHECK_ROOT_CLUSTER: CHECK_ROOT_CLUSTER:
;EX DE,HL LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
; LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L) CP FAT_TYPE.x32
; LD A,L JR NZ,CHECK_FIRST_CLUSTER
; 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 HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL LD BC,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
SBC HL,BC
RET NZ
;
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H) LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL LD BC,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
SBC HL,BC
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; SET_FAT_ROOT_DIR_CLUSTER:
; EX DE,HL
; 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
; EX DE,HL
; RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; ¢å®¤: IY - 㪠§ â¥«ì ­  ­ ç «® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à  ; ¢å®¤: IY - 㪠§ â¥«ì ­  ­ ç «® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
; ¢ë室: HL':HL - first cluster ; ¢ë室: HL':HL - first cluster
@ -531,11 +524,12 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
OR A OR A
JR NZ,.SUBDIR JR NZ,.SUBDIR
; ;
âãâ ¤®¤¥« âì .REROOT: EX DE,HL
.REROOT: CALL SET_FAT_ROOT_DIR_CLUSTER LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
;LD DE,0 ; ¯à¨§­ ª root dir ; !FIXIT ; [ ] CDFS - ¡à âì ¯¥à¢ë© ª« áâ¥à ¨§ ¯¥à¥¬¥­­®© LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),DE LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),DE LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
EX DE,HL
.reroot: CALL LOADDIR ; [ ] big dir .reroot: CALL LOADDIR ; [ ] big dir
; CF=0 ; CF=0
LD HL,CORE_BUFFERS.WorkDirectory LD HL,CORE_BUFFERS.WorkDirectory
@ -561,7 +555,7 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
LD A,(HL) LD A,(HL)
OR A OR A
DEC HL DEC HL
JR Z,.REROOT JR Z,.reroot
; ;
.no_root: EXX .no_root: EXX
LD HL,CORE_BUFFERS.MASKARE LD HL,CORE_BUFFERS.MASKARE
@ -601,19 +595,20 @@ LOADDIR: ;!TODO optimize
.Custom: CALL LOAD_SAVE_DIR_PREPARE .Custom: CALL LOAD_SAVE_DIR_PREPARE
.next: PUSH AF .next: PUSH AF
EX AF,AF' EX AF,AF'
JR NZ,.read_dir ; root dir or not ;JR NZ,.read_dir ; root dir or not
; root dir ; root dir
LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE) ;LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
CP FAT_TYPE.x32 ;CP FAT_TYPE.x32
JR NZ,.LoadRootDir JR Z,.LoadRootDir
CALL LOAD_SAVE_DIR_PREPARE.CalcDirSize
; fat32 ; fat32
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L) ; LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL ; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H) ; LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL ; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
;LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) ; !FIXIT ¢ëç¨â뢠âì ¯®«­®áâìî ª â «®£ ; ;LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) ; !FIXIT ¢ëç¨â뢠âì ¯®«­®áâìî ª â «®£
LD HL,DIRPAGE.size ; à §¬¥à ¤¨à¥ªâ®à¨¨ ;!HARDCODE ; LD HL,DIRPAGE.size ; à §¬¥à ¤¨à¥ªâ®à¨¨ ;!HARDCODE
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL ; LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
; ;
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤  .read_dir: LD HL,DIRPAGE.buffer ; ªã¤ 
LD DE,DIRPAGE.size ; ᪮«ìª® LD DE,DIRPAGE.size ; ᪮«ìª®
@ -629,7 +624,7 @@ LOADDIR: ;!TODO optimize
.LoadRootDir: LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H);!TODO ¢®§¬®¦­®, 墠â¨â LD HL,0 .LoadRootDir: LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H);!TODO ¢®§¬®¦­®, 墠â¨â LD HL,0
LD IX,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_L); ­®¬¥à «®£. ᥪâ®à  LD IX,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_L); ­®¬¥à «®£. ᥪâ®à 
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors) LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£  LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£  ; [ ] sector size 512
CP B CP B
JR NC,.RTD1 JR NC,.RTD1
; ;
@ -657,6 +652,8 @@ LOADDIR: ;!TODO optimize
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ‚室: ; ‚室:
; HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜ ; HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
; ‚ë室: A - ‘âà ­¨æ , ª®â®à ï ¡ë«  ¢ SLOT3 ¤® ¢ë§®¢ 
; ZF' - RootDir FAT12-16
LOAD_SAVE_DIR_PREPARE: LOAD_SAVE_DIR_PREPARE:
; [ ] ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜ ; [ ] ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
; [ ] ‚ë室: HLIX - ᬥ饭¨¥ ¢ ä ©«¥ ª â «®£  ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢ ; [ ] ‚ë室: HLIX - ᬥ饭¨¥ ¢ ä ©«¥ ª â «®£  ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
@ -693,12 +690,12 @@ LOAD_SAVE_DIR_PREPARE:
LD (CORE_BUFFERS.FM_BUF.DRIVE),A LD (CORE_BUFFERS.FM_BUF.DRIVE),A
;;;;;;;; ;;;;;;;;
XOR A XOR A
LD D,#40 ;LD D,#40
LD E,A ;LD E,A
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L) LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
EXX EXX
LD D,A ;LD D,A
LD E,A ;LD E,A
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H) LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
OR H OR H
OR L OR L
@ -706,13 +703,13 @@ LOAD_SAVE_DIR_PREPARE:
OR H OR H
OR L OR L
;;;;;;;; ;;;;;;;;
PUSH AF ;PUSH AF
CALL NZ,.CalcDirSize ;CALL NZ,.CalcDirSize
; ;
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),DE ; LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),DE
EXX ; EXX
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE ; LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE
POP AF ;POP AF
EX AF,AF' EX AF,AF'
POP AF POP AF
RET RET
@ -783,6 +780,9 @@ LOAD_SAVE_DIR_PREPARE:
RR C RR C
JR NC,.loop2 JR NC,.loop2
; <-- DE*BC*A = DE':DE ; <-- DE*BC*A = DE':DE
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),DE
EXX
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE
RET RET
/* 4 3 2 1 /* 4 3 2 1
@ -860,6 +860,12 @@ WRITE_DIR_HANDLE:
POP DE POP DE
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
ASSERT 0 "TODO!"
;!TODO
; .DIRSIZE ¯®¬¥è ¥â ¥á«¨ ¢ ªíè ¡ã¤¥â ¤à㣠ï áâà ­¨æ ?
; LOAD_SAVE_DIR_PREPARE ¢®§¬®¦­® ­¥ ­ã¦¥­, ­ã¦­® ⮫쪮 ãáâ ­®¢¨âì ¯à ¢¨«ì­®¥ ᬥ饭¨¥ ¢ FM
; Œ®¦¥â ¢®®¡é¥ ¯¥à¥¤¥« âì ¥ñ ¯®¤ à ¡®âã á Š<>˜
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª. ; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à  ; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
; [ ] big dir ¯®«ãç âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£® ; [ ] big dir ¯®«ãç âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
@ -867,16 +873,17 @@ SAVEDIR: ;!TODO optimize
CALL LOAD_SAVE_DIR_PREPARE CALL LOAD_SAVE_DIR_PREPARE
PUSH AF PUSH AF
EX AF,AF' EX AF,AF'
JR NZ,.save_dir ;JR NZ,.save_dir
JR Z,.SaveRootDir
; ;
LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE) ;LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
CP FAT_TYPE.x32 ;CP FAT_TYPE.x32
JR NZ,.SaveRootDir ;JR NZ,.SaveRootDir
; fat32 ; fat32
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L) ;LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL ;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H) ;LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL ;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
; ;
.save_dir: LD HL,DIRPAGE.buffer .save_dir: LD HL,DIRPAGE.buffer
; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory ; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory
@ -1038,13 +1045,14 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
.filesRoot: DEC HL .filesRoot: DEC HL
XOR A XOR A
;NEXTAD2 ;NEXTAD2
; FilesInRootDIR / FilesPerSector = sectors in RootDir
.loop2: INC A .loop2: INC A
JP Z,RD_BPB.UnknownBPB JP Z,RD_BPB.UnknownBPB
SBC HL,BC SBC HL,BC
JR NC,.loop2 JR NC,.loop2
; ;
.skip_loop2: EX DE,HL .skip_loop2: EX DE,HL
LD C,A ; A - sectors in DIR LD C,A ; A - sectors in RootDir
LD B,0 LD B,0
LD (CORE_BUFFERS.FS_Buffer.DirSizeInSectors),A LD (CORE_BUFFERS.FS_Buffer.DirSizeInSectors),A
@ -1202,6 +1210,7 @@ FAT_BPB: LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.DRIVE_TYPE)
LD HL,#FFFF LD HL,#FFFF
LD A,FAT_TYPE.x16 LD A,FAT_TYPE.x16
.set_vars: EXX .set_vars: EXX
;!TODO áç¨â âì âãâ à §¬¥à root-¤¨à¥ªâ®à¨¨ ¢ ¡ ©â å ¨ åà ­¨âì ¢ FS_Buffer?
LD HL,0 LD HL,0
LD (CORE_BUFFERS.FS_Buffer.END_CHAIN_CLUSTER_H),HL LD (CORE_BUFFERS.FS_Buffer.END_CHAIN_CLUSTER_H),HL
LD (CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L),HL LD (CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L),HL

View File

@ -1 +1 @@
4 5