From 997efb0d41a87133f39c574308f0869b50c991e2 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 27 Mar 2026 01:11:17 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- format/format.asm | 43 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index b9c54c9..e1233b2 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b9c54c9a1e027b35fba71efa26378a555cfd75db +Subproject commit e1233b24a06f9be0c80349b47ab34cfceacc2486 diff --git a/format/format.asm b/format/format.asm index 07490cd..6a95918 100755 --- a/format/format.asm +++ b/format/format.asm @@ -79,7 +79,8 @@ main: DI JR NZ,.next0 DEC HL .next0: DEC DE ;and correct it (-1) - LD (BPB.hide_sectors+2),HL ;!FIXIT чё происходит? + ;!FIXIT чё происходит? нет гарантии, что дос будет выдавать следующий сектор в следующих версиях + LD (BPB.hide_sectors+2),HL LD (BPB.hide_sectors),DE LD HL,buff PUSH HL @@ -854,7 +855,7 @@ CALCULATED_FAT_PARAMETERS: .Number_of_FATs: BYTE 2 ; predefined ; .FilesInRootDIR: WORD 0 ; FAT32 constant ; [ ] FAT ; [x] FAT32 .SectorsPerDrive: WORD 0 ; FAT32 constant ; [x] +- -.DRIVE_TYPE: WORD 0 ; ; +.DRIVE_TYPE: WORD 0 ; ; [x] +- .SectorsPerFAT16: WORD 0 ; FAT32 constant ; .HEADS WORD 0 ; .HIDDEN WORD 0 ; от начала MBR, extMBR ; @@ -892,14 +893,16 @@ CALCULATED_FAT_PARAMETERS: reserved_sectors = ( ((.HIDDEN + min_last_sector) & #0F)>0 ) * #10) - .HIDDEN ;;;;;;;;;;;;;;;;; */ -FORMAT_FAT32: + +//////////////////////////////////////////////////////////////////////// +FORMAT_FAT32: LD (.Save_SP),SP ; Определение параметров носителя и выбор FAT .STEP1: ; эта должна быть общей для заполнения геометрии диска LD A,VARIABLES.CurrentDrive LD BC,Dss.DRV.GenIOCTL.GetParams RST ToDSS.DRV - ; - ;!TODO CHECK ERROR + JR C,.ERROR + ;!TODO CHECK ERROR неподходящий диск ; EX AF,AF' AND #F0 @@ -930,8 +933,7 @@ FORMAT_FAT32: LD E,H LD D,A CALL AUTO_CHOOSE_FAT_PARAMS - ;!FIXIT - ; RET C + JR C,.ERROR ; LD A,C LD (CALCULATED_FAT_PARAMETERS.FAT_TYPE),A @@ -951,17 +953,40 @@ FORMAT_FAT32: ; на случай, если табличный кластер меньше сектора LD A,1 .BPS_OK: CALL C,DIV16_POWER2 - ;!FIXIT - ; RET C + JR C,.ERROR ; LD (CALCULATED_FAT_PARAMETERS.SectorsPerCluster),A + ; + CALL GET_DRIVE_TYPE + JR C,.ERROR + ; + LD A,B + LD (CALCULATED_FAT_PARAMETERS.DRIVE_TYPE),A +.ERROR: ; +.Save_SP+1: LD SP,0 + ;!TODO + ; + RET +//////////////////////////////////////////////////////////////////////// +;!TODO доделать для дискет +;;;;;;;; +GET_DRIVE_TYPE: LD A,(CALCULATED_FAT_PARAMETERS.BPB_PHISICAL_DRIVE_NUMBER) + CP DRIVE_CODES.SPRINTER.ATA + LD B,BOOT_SECTOR.Hard_Drive + RET Z + ; дискеты и когда-нибудь ATAPI + SCF + RET +;;;;;;;; + + ; -> DE - 4 и 5 байты размера раздела. ; должно быть установлено значение VOLUME_SIZE_BYTES.