From bb5748091c4298b8d9a4912ae7358eb46839b5fb Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 16 Apr 2024 03:14:08 +1000 Subject: [PATCH] fat32: 90% --- DSS/API/Create.asm | 8 +++++--- DSS/API/diskINF.asm | 8 ++++++++ DSS/FS/FAT/FAT_X.asm | 15 +++++++++------ DSS/build.txt | 2 +- SHELL/Commands/DIR.ASM | 32 ++++++++++++++++++++++---------- SHELL/build.txt | 2 +- Shared_Includes | 2 +- 7 files changed, 47 insertions(+), 22 deletions(-) diff --git a/DSS/API/Create.asm b/DSS/API/Create.asm index c4b1b21..f3c4ed3 100644 --- a/DSS/API/Create.asm +++ b/DSS/API/Create.asm @@ -54,20 +54,22 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ; ; ;no_file_found -.DO: LD HL,MASKARE +.DO: ; _sFAT_DIRECTORY_RECORD.NAME + .EXT + LD HL,MASKARE LD DE,HANDBUF LD BC,11 LDIR EX DE,HL .TMP+1: LD A,0 + ; _sFAT_DIRECTORY_RECORD.ATTRIBUT LD (HL),A INC HL LD BC,#0A00 ;!HARDCODE - ; + ; .RESERVED_NT .. .FIRST_CLUSTER_H .loop1: LD (HL),C INC HL DJNZ .loop1 - ;AaRR + ; .TIME .. .DATE CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD ; LD BC,#0600 diff --git a/DSS/API/diskINF.asm b/DSS/API/diskINF.asm index 9852d60..c4f79b9 100644 --- a/DSS/API/diskINF.asm +++ b/DSS/API/diskINF.asm @@ -156,6 +156,8 @@ DISKINF: LD C,B EXX LD H,A LD L,A + LD B,A + LD C,A EXX LD B,A LD C,A @@ -181,6 +183,12 @@ DISKINF: LD C,B INC BC EXX .skip: INC HL + LD A,L + OR H + JR NZ,.loop_free_space + EXX + INC HL + EXX JR .loop_free_space ; ; [ ] 22/11/23 подфункция с доп.инфой diff --git a/DSS/FS/FAT/FAT_X.asm b/DSS/FS/FAT/FAT_X.asm index 8ed5544..5ebdb27 100644 --- a/DSS/FS/FAT/FAT_X.asm +++ b/DSS/FS/FAT/FAT_X.asm @@ -241,6 +241,7 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER LD A,B OUT (SLOT3),A POP HL + LD A,0 RET ; @@ -339,17 +340,19 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ; CALL GET_FAT32_CELL EXX POP HL ; старшее слово номера кластера в который записать + POP DE + PUSH DE ; старший номер кластера который вписать EXX - POP DE ; старший номер кластера который вписать - POP BC ; младший номер кластера который вписать + POP BC ; старший номер кластера который вписать + POP DE ; младший номер кластера который вписать ; сохр. в кеше FAT-а номер кластера - LD (HL),C - INC HL - LD (HL),B - INC HL LD (HL),E INC HL LD (HL),D + INC HL + LD (HL),C + INC HL + LD (HL),B JR .exit ;;;;;;;;; diff --git a/DSS/build.txt b/DSS/build.txt index 3d3f955..0ebf2af 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -973 \ No newline at end of file +951 \ No newline at end of file diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index 1c85b0f..c6d83a5 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -531,15 +531,27 @@ read_disk_info: ;PUSH DE ; свободных кластеров PUSH BC ; размер сектора в байтах EX AF,AF' - LD C,A ; A - размер кластера в секторах - CALL Mult16X8 - ; A:HL = DE*A + ; !TEST fat 32 + ;LD C,A ; A - размер кластера в секторах + ;CALL Mult16X8 + ; A:HL = DE*A + LD B,0 + LD C,A + EXX + PUSH DE + EXX + POP HL + ; HL:DE * BC свободные_кластеры * размер_кластера_в_секторах + CALL Mult32 + ; HL:DE = свободные_секторы ; - EX DE,HL - LD H,0 - LD L,A + ; EX DE,HL + ; LD H,0 + ; LD L,A POP BC CALL Mult32 + ; HL:DE = свободное место ;!FIXIT ограничено 4 гигами + ; LD (free_space+2),HL EX DE,HL LD (free_space),HL @@ -773,8 +785,8 @@ Size2Char: /////////////////////////////////////////////////////////////////////////////////////// ;----------------------------------------------------------------------; ;Процедура умножения (16*8bit) -;На вход: DE*C -;На выход:A+HL-результат +;На вход: DE * C +;На выход:A:HL = результат Mult16X8: SUB A LD L,A @@ -798,8 +810,8 @@ Mlt16x8: ;----------------------------------------------------------------------; ;----------------------------------------------------------------------; ;Процедура умножения (32bit) -;На вход: HL+DE*BC -;На выход:HL+DE-результат +;На вход: HL:DE * BC +;На выход:HL:DE = результат Mult32: PUSH IX LD IX,#0000 diff --git a/SHELL/build.txt b/SHELL/build.txt index 75af06e..272a458 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -315 \ No newline at end of file +316 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index e9bcf54..17acd88 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit e9bcf54a516df972207fc032925d2dfb74c39a89 +Subproject commit 17acd882094d59946a9cd430a03e736e36fea49b