diff --git a/BOOT/DSSBOOT.ASM b/BOOT/DSSBOOT.ASM index 06cc957..b28f810 100644 --- a/BOOT/DSSBOOT.ASM +++ b/BOOT/DSSBOOT.ASM @@ -25,7 +25,7 @@ ORG_ADDRESS EQU #8000 LOAD_SECTORS EQU SECTORS_OF_LOADER.AFTER_BPB LOADER_IN_BPB: -.MAX_SIZE EQU 300 +.MAX_SIZE EQU _sBOOT_SECTOR.PARTITION_TABLE - _sBOOT_SECTOR_PARAMS_FAT32 ;------------------------------------------------------------------------------ DISP ORG_ADDRESS @@ -863,6 +863,64 @@ LOAD_CORE: LD (READMEM),DE ; +; +; HL:DE / A => DE:BC, H=0, L - остаток +; DIV_for_SPC: +; LD C,A +; DEC A +; JR Z,.DIV_exit +; ; +; AND E +; LD B,A ; остаток +; LD A,C +; RRCA +; ; +; .DIV_loop: SRL H +; RR L +; RR D +; RR E +; RRCA +; JP NC,.DIV_loop +; LD A,B +; .DIV_exit: LD B,D +; LD C,E +; EX DE,HL +; LD H,0 +; LD L,A +; RET + + +//// //// //// //// //// //// //// //// //// + //// //// //// //// //// //// //// //// //// + DISPLAY "SECTORS 1..3 DATA ENDS:\t",/H,$,". Size: ",/D,$-ORG_ADDRESS," b. Free: ",/D,512*3-($-ORG_ADDRESS)," b." +ZERO_SECTOR_OF_BPB: +.physical EQU $$$ +//// //// //// //// //// //// //// //// //// + //// //// //// //// //// //// //// //// //// + + +;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT +; in: HL - Cache block +; out: C:HL - logical number +; B = 0 +GET_SECTOR_OF_FAT: + LD A,(FatBuffer.FAT_TYPE) + LD B,FAT_CACHE.Degree_32 ;!FIXIT сделать через переменную + XOR FAT_TYPE.x32 + JR Z,.next + LD B,FAT_CACHE.Degree ;!FIXIT сделать через переменную + XOR A +.next: LD C,A + ; +.loop: ADD HL,HL ;x2 + ADC A,C + DJNZ .loop + ; + LD C,A + RET + ; + + ;вход: HL - номер кластера ;выход: HL - адрес нужной ячейки в странице FATPAGE ; CF - чётный/нечётный адрес кластера @@ -979,63 +1037,7 @@ READ_FAT_TABLE: PUSH HL OUT (SLOT3),A POP HL RET - ; -;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT -; in: HL - Cache block -; out: C:HL - logical number -; B = 0 -GET_SECTOR_OF_FAT: - LD A,(FatBuffer.FAT_TYPE) - LD B,FAT_CACHE.Degree_32 ;!FIXIT сделать через переменную - XOR FAT_TYPE.x32 - JR Z,.next - LD B,FAT_CACHE.Degree ;!FIXIT сделать через переменную - XOR A -.next: LD C,A - ; -.loop: ADD HL,HL ;x2 - ADC A,C - DJNZ .loop - ; - LD C,A - RET - ; - -; -; HL:DE / A => DE:BC, H=0, L - остаток -; DIV_for_SPC: -; LD C,A -; DEC A -; JR Z,.DIV_exit -; ; -; AND E -; LD B,A ; остаток -; LD A,C -; RRCA -; ; -; .DIV_loop: SRL H -; RR L -; RR D -; RR E -; RRCA -; JP NC,.DIV_loop -; LD A,B -; .DIV_exit: LD B,D -; LD C,E -; EX DE,HL -; LD H,0 -; LD L,A -; RET - - -//// //// //// //// //// //// //// //// //// - //// //// //// //// //// //// //// //// //// - DISPLAY "SECTORS 1..3 DATA ENDS: ",/H,$,". Size: ",/D,$-ORG_ADDRESS," b. Free: ",/D,512*3-($-ORG_ADDRESS)," b." -ZERO_SECTOR_OF_BPB: -.physical EQU $$$ -//// //// //// //// //// //// //// //// //// - //// //// //// //// //// //// //// //// //// ;вход: HL':HL - номер кластера ;выход: HL - адрес нужной ячейки в странице FATPAGE GET_FAT32_CELL: ; двигаем влево HL':H @@ -1181,9 +1183,6 @@ READ_FROM_FAT: PUSH HL //// //// //// //// //// //// //// //// //// //// //// //// //// //// //// //// //// //// DISPLAY "SECTORS 0 DATA ENDS:\t\t",/H,$,". Size: ",/D,$-ZERO_SECTOR_OF_BPB," b. Free: ",/D,LOADER_IN_BPB.MAX_SIZE-($-ZERO_SECTOR_OF_BPB)," b." - DISPLAY "_sBOOT_SECTOR.BOOT_CODE ", /H, _sBOOT_SECTOR.BOOT_CODE - DISPLAY "_sBOOT_SECTOR.PARTITION_TABLE ", /H, _sBOOT_SECTOR.PARTITION_TABLE - DISPLAY "_sBOOT_SECTOR.MBR_SIGNATURE ", /H, _sBOOT_SECTOR.MBR_SIGNATURE ZERO_SECTOR_OF_BPB_END: ZERO_SECTOR_OF_BPB.Size EQU ZERO_SECTOR_OF_BPB_END - ZERO_SECTOR_OF_BPB //// //// //// //// //// //// //// //// //// diff --git a/DSS/API/Create.asm b/DSS/API/Create.asm index 88bfdea..85cdc5d 100644 --- a/DSS/API/Create.asm +++ b/DSS/API/Create.asm @@ -3,7 +3,7 @@ ; A - File attribute ; OUTPUT: A - FM //////////////////////////////////////////////////////////////////////// -CREATE: ;!TEST Current Dir ;[x] 15/10/23 +CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN: PUSH HL LD C,A PUSH BC diff --git a/DSS/API/Execute.ASM b/DSS/API/Execute.ASM index 7fe4321..a6bc6fe 100644 --- a/DSS/API/Execute.ASM +++ b/DSS/API/Execute.ASM @@ -562,6 +562,9 @@ LEAVE: LD A,B LD (EXSTACK),SP LD SP,HL ; + ;!TEST + EI + ; EX DE,HL LD A,(ErrorLevel) ;R12 @@ -573,9 +576,6 @@ LEAVE: LD A,B JP (HL) ; .norm_exit: AND A - ;!TEST - EI - ; JP (HL) ;///////////////////////////////////////////////////////////////////// diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index 3a075e5..2e7ad33 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -158,10 +158,10 @@ SEARCH: OR A JR Z,.error_file_not_found CP #E5 ;!HARDCODE #E5 - запись в директории свободна, так как файл/директория были удалены - JR Z,.next_record_DE + JR Z,.next_record LD A,(IX+FAT_DIRECTORY_RECORD.ATTRIBUT) AND C - JR NZ,.next_record_DE + JR NZ,.next_record LD HL,MASKARE LD D,XH LD E,XL @@ -200,7 +200,6 @@ SEARCH: RET .next_record: LD DE,FAT_DIRECTORY_RECORD -.next_record_DE: ;!TEST 9/11/23 record index ; EXX ; INC DE diff --git a/Shared_Includes b/Shared_Includes index 314ff5d..378f3fd 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 314ff5dbefe8d537655601dde8236957e4ed39a7 +Subproject commit 378f3fdd49601390b3aacfe51e45c6fceba25022