mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +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 - 㪠§ ⥫ì ç «® ä ©«®¢®£® ¬ ¨¯ã«ïâ®à
|
; ‚室: 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
|
||||||
;
|
;
|
||||||
@ -656,7 +651,9 @@ LOADDIR: ;!TODO optimize
|
|||||||
;!TODO FAT procedures
|
;!TODO FAT procedures
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
; ‚室:
|
; ‚室:
|
||||||
; 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
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
4
|
5
|
||||||
Loading…
Reference in New Issue
Block a user