mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
Продолжаем по чайной ложке
This commit is contained in:
parent
53d3408ec0
commit
3c8e693290
141
DSS/FS/FAT.asm
141
DSS/FS/FAT.asm
@ -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
|
||||
;
|
||||
@ -656,7 +651,9 @@ LOADDIR: ;!TODO optimize
|
||||
;!TODO FAT procedures
|
||||
;----------------------------------------------------------------------;
|
||||
; ‚室:
|
||||
; HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥ ¯®¯ áâì ¢ Š<>˜
|
||||
; 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
|
||||
|
||||
@ -1 +1 @@
|
||||
4
|
||||
5
|
||||
Loading…
Reference in New Issue
Block a user