diff --git a/DSS/DRV-MAIN.ASM b/DSS/DRV-MAIN.ASM index b409f05..a2c3262 100644 --- a/DSS/DRV-MAIN.ASM +++ b/DSS/DRV-MAIN.ASM @@ -290,10 +290,10 @@ RAMDTBL EQU LOGDRV + DRIVES_DRIVER.LOGDRV.Size MODULE OLD_TABLES ; ;--------------------------[shared.asm table]--------------------------; -DEVICE EQU @DRIVES_DRIVER.RAMDTBL + @DRIVES_DRIVER.RAMDTBL.Size -.TBL_Entry EQU @DRIVES_DRIVER.DEVICE.TBL_Entry -.Size: EQU @DRIVES_DRIVER.DEVICE.Size -.End EQU @DRIVES_DRIVER.DEVICE.End +DEVICE EQU DRIVES_DRIVER.RAMDTBL + DRIVES_DRIVER.RAMDTBL.Size +.TBL_Entry EQU DRIVES_DRIVER.DEVICE.TBL_Entry +.Size: EQU DRIVES_DRIVER.DEVICE.Size +.End EQU DRIVES_DRIVER.DEVICE.End ;----------------------------------------------------------------------; ; @@ -305,8 +305,8 @@ DEVICE EQU @DRIVES_DRIVER.RAMDTBL + @DRIVES_DRIVER.RAMDTBL.Size ;+09 FREE ;+15 LOGDRV EQU DEVICE + DEVICE.End -.TBL_Entry EQU @DRIVES_DRIVER.LOGDRV.TBL_Entry -.Size EQU @DRIVES_DRIVER.LOGDRV.Size +.TBL_Entry EQU DRIVES_DRIVER.LOGDRV.TBL_Entry +.Size EQU DRIVES_DRIVER.LOGDRV.Size ;----------------------------------------------------------------------; ; @@ -315,8 +315,8 @@ LOGDRV EQU DEVICE + DEVICE.End ; ТАБЛИЦА СООТВЕТСТВИЯ МЕЖДУ ФИЗИЧЕСКИМ НОМЕРОМ РАМДИСКА И ЕГО RAM-DISK ID ; Log Number: DB RAM_Drive_Log_Number, RAM_Drive_ID ;(BIOS 0-15), (Block ID for BIOS) RAMDTBL EQU LOGDRV + DRIVES_DRIVER.LOGDRV.Size -.TBL_Entry EQU @DRIVES_DRIVER.RAMDTBL.TBL_Entry -.Size EQU @DRIVES_DRIVER.RAMDTBL.Size +.TBL_Entry EQU DRIVES_DRIVER.RAMDTBL.TBL_Entry +.Size EQU DRIVES_DRIVER.RAMDTBL.Size ; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry ; DB #FF ; EDUP diff --git a/DSS/FS/FAT.asm b/DSS/FS/FAT.asm index 7bd8a5b..ff412e6 100644 --- a/DSS/FS/FAT.asm +++ b/DSS/FS/FAT.asm @@ -2293,74 +2293,6 @@ LOAD_NEXT_DIR_PART_TO_DIR_CACHE: -;----------------------------------------------------------------------; -; [ ] big dir ;!FIXIT начинать проход с начала директории всегда, чтоб не захламлять -; !FIXIT а точно ли в нулевом FM координаты нужной директории? -; скопировать запись в список диска (каталога) de ix iy -; и сбросить кеш каталога на диск -; вход: (HANDBUF) - запись каталога -; выход: DE - record index -WRITE_DIR_HANDLE: - SET_PAGE_X DIRPAGE - EX AF,AF' - LD IX,DIRPAGE.buffer ; IX - ;!TEST 9/11/23 record index - EXX - LD DE,0 - EXX - ; - LD DE,FAT_DIRECTORY_RECORD -.loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME); IX - OR A - JR Z,.WRT_HN2 - ; - CP #E5 - JR Z,.WRT_HN2 - ; - EXX - INC DE ; record index - EXX - ADD IX,DE ; IX, - JR NC,.loop ;!FIXIT количество записей каталога = страница - ; - EX AF,AF' - OUT (SLOT3),A - LD A,DSS_Error.sys.ROOT_OVERFLOW - SCF - RET - ; -.WRT_HN2: EX DE,HL - LD HL,CORE_BUFFERS.HANDBUF - LD BC,CORE_BUFFERS.HANDBUF.SIZE - LDIR - EX AF,AF' - OUT (SLOT3),A - ; проверяем, увеличился ли размер данных директории - LD HL,DIRPAGE.buffer - LD BC,(SAVEDIR.DirBlkSize) - DEC BC - ADD HL,BC - AND A - SBC HL,DE - JR NC,.SAVEDIR - ; - ; размер данных директории увеличился - LD HL,(SAVEDIR.DirBlkSize) - LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) - ADD HL,BC - LD (SAVEDIR.DirBlkSize),HL - AND A -.SAVEDIR: EXX - PUSH DE - EXX - ; [ ] big dir передавать откуда и сколько байтов изменилось в кэш, чтоб не писать на диск лишнего - CALL SAVEDIR - POP DE - RET -;----------------------------------------------------------------------; - - - ;----------------------------------------------------------------------; 20 28 ; FIND "MASKAREA" IN DIRECTORY ; выход: IY:DE - cluster number @@ -2892,43 +2824,67 @@ SAVEDIR: SCF ; ;----------------------------------------------------------------------; -; [ ] big dir +; [ ] big dir ;!FIXIT начинать проход с начала директории всегда, чтоб не захламлять +; !FIXIT а точно ли в нулевом FM координаты нужной директории? ; скопировать запись в список диска (каталога) de ix iy ; и сбросить кеш каталога на диск ; вход: (HANDBUF) - запись каталога ; выход: DE - record index WRITE_DIR_HANDLE: SET_PAGE_X DIRPAGE - EX AF,AF' - LD HL,DIRPAGE.buffer + ;EX AF,AF' + PUSH AF + LD IX,DIRPAGE.buffer ;!TEST 9/11/23 record index EXX LD DE,0 EXX ; - LD BC,FAT_DIRECTORY_RECORD -.loop: LD A,(HL) + LD DE,FAT_DIRECTORY_RECORD +.loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME) OR A - JR Z,.WRT_HN2 + JR Z,.WRITE_LAST_HANDLE ; CP #E5 - JR Z,.WRT_HN2 - ADD HL,BC + JR Z,.WRITE_HANDLE + ; + EXX + INC DE ; record index + EXX + ADD IX,DE JR NC,.loop ;!FIXIT количество записей каталога = страница ; - EX AF,AF' +.error: POP AF OUT (SLOT3),A LD A,DSS_Error.sys.ROOT_OVERFLOW SCF RET ; -.WRT_HN2: EX DE,HL +.WRITE_LAST_HANDLE: ;!FIXIT ставить ноль после новой HANDLE и потом писать директорию. Если не конец страницы или всей директории + EXX + INC DE ; record index + LD A,D + OR E + DEC DE + EXX + JR Z,.error ; максимальный номер записи в директории + ;!FIXIT CALL RET + CALL .WRITE_HANDLE + RET + ; +.WRITE_HANDLE: LD E,XL + LD D,XH LD HL,CORE_BUFFERS.HANDBUF LD BC,CORE_BUFFERS.HANDBUF.SIZE - LDIR - EX AF,AF' + LDIR + ; !FIXIT тут DE может переполниться и стать 0, тогда надо проверить + ; не конец ли это директории вообще, если конец, то надо + ; добавить одну запись с нулём в конец переместив указатель в FM + ; и записав 32 нуля + ; + POP AF OUT (SLOT3),A - ; проверяем, увеличился ли размер данных директории + ; !FIXIT проверить расчёт... проверяем, увеличился ли размер данных директории LD HL,DIRPAGE.buffer LD BC,(SAVEDIR.DirBlkSize) DEC BC @@ -2938,11 +2894,22 @@ WRITE_DIR_HANDLE: JR NC,.SAVEDIR ; ; размер данных директории увеличился - LD HL,(SAVEDIR.DirBlkSize) - LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) - ADD HL,BC + + + ;LD HL,(SAVEDIR.DirBlkSize) + ;LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) + ;ADD HL,BC + ;LD (SAVEDIR.DirBlkSize),HL + ;AND A + LD HL,DIRPAGE.buffer + EX DE,HL + SBC HL,DE + LD DE,FAT_DIRECTORY_RECORD + ADD HL,DE LD (SAVEDIR.DirBlkSize),HL - AND A + + + .SAVEDIR: EXX PUSH DE EXX diff --git a/DSS/drivers/media/ReScanDRV.ASM b/DSS/drivers/media/ReScanDRV.ASM index 6afa0cc..44a7525 100644 --- a/DSS/drivers/media/ReScanDRV.ASM +++ b/DSS/drivers/media/ReScanDRV.ASM @@ -329,9 +329,9 @@ RAM_DRV: HARD_DRV: LD L,B ; - ;LOGDRV_ENTRY_FIND @DRIVES_DRIVER.OLD_TABLES.LOGDRV - LD IY,@DRIVES_DRIVER.OLD_TABLES.LOGDRV - CALL GET_LOGDRV_ENTRY + ;LOGDRV_ENTRY_FIND DRIVES_DRIVER.OLD_TABLES.LOGDRV + LD IY,DRIVES_DRIVER.OLD_TABLES.LOGDRV + CALL DRIVES_DRIVER.GET_LOGDRV_ENTRY ; LD IX,DRIVES_DRIVER.LOGDRV LD DE,DRIVES_DRIVER.LOGDRV.TBL_Entry diff --git a/DSS/drivers/media/ata_atapi-drv.asm b/DSS/drivers/media/ata_atapi-drv.asm index 7193f0a..eecc0be 100644 --- a/DSS/drivers/media/ata_atapi-drv.asm +++ b/DSS/drivers/media/ata_atapi-drv.asm @@ -312,7 +312,7 @@ SelectDrive: PUSH DE LD A,BIOS.Error.UnknownDevice JR C,.error_pop ; - LOGDRV_ENTRY_FIND @DRIVES_DRIVER.LOGDRV + LOGDRV_ENTRY_FIND DRIVES_DRIVER.LOGDRV ; POP HL CALL .get_data @@ -345,8 +345,8 @@ SelectDrive: PUSH DE GetMoreParams: PUSH IX PUSH IY LD L,A - LD IY,@DRIVES_DRIVER.LOGDRV - CALL @GET_LOGDRV_ENTRY + LD IY,DRIVES_DRIVER.LOGDRV + CALL DRIVES_DRIVER.GET_LOGDRV_ENTRY LD H,(IY + DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 3) LD L,(IY + DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 2) LD D,(IY + DRIVES_DRIVER.LOGDRV.SECTOR_OFFSET + 1) @@ -442,8 +442,8 @@ GetParams: ;EX DE,HL PUSH IY ; ;LOGDRV_ENTRY_FIND @DRIVES_DRIVER.LOGDRV - LD IY,@DRIVES_DRIVER.LOGDRV - CALL GET_LOGDRV_ENTRY + LD IY,DRIVES_DRIVER.LOGDRV + CALL DRIVES_DRIVER.GET_LOGDRV_ENTRY ; LD A,(IY+DRIVES_DRIVER.LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/... PUSH IY @@ -503,7 +503,7 @@ GetParams: ;EX DE,HL EXX ;[ ] 04/01/2025 возвращение размера сектора EX AF,AF' - CALL CONVERT_SECTOR_SIZE + CALL DRIVES_DRIVER.CONVERT_SECTOR_SIZE ; ; SECTORS ON LOGICAL DISK LD E,(IY+DRIVES_DRIVER.LOGDRV.SIZE_IN_SECTORS+0) diff --git a/DSS/drivers/media/fdd-drv.asm b/DSS/drivers/media/fdd-drv.asm index 20488d8..c142f35 100644 --- a/DSS/drivers/media/fdd-drv.asm +++ b/DSS/drivers/media/fdd-drv.asm @@ -395,7 +395,7 @@ GenIOCTL: BIT 7,B ; H=0 LD C,H ;[x] 17.12.2023 загрузка с активного раздела, а не с первого EXX - CALL CONVERT_SECTOR_SIZE + CALL DRIVES_DRIVER.CONVERT_SECTOR_SIZE EXX LD B,A ;[ ] 25/04/2026 возвращение размера сектора EXX diff --git a/DSS/drivers/media/ram_disk-drv.asm b/DSS/drivers/media/ram_disk-drv.asm index 0152f74..9990205 100644 --- a/DSS/drivers/media/ram_disk-drv.asm +++ b/DSS/drivers/media/ram_disk-drv.asm @@ -474,7 +474,7 @@ GenIOCTL: BIT 7,B PUSH HL ;число головок, число секторов (на целиндр) PUSH DE ;количество цилиндров EXX - CALL CONVERT_SECTOR_SIZE + CALL DRIVES_DRIVER.CONVERT_SECTOR_SIZE POP HL ;количество цилиндров POP BC ;число секторов (на целиндр) LD D,0