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

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

View File

@ -1 +1 @@
4
5