diff --git a/DSS/API/MkDir.asm b/DSS/API/MkDir.asm index c0ddc0d..de6133b 100644 --- a/DSS/API/MkDir.asm +++ b/DSS/API/MkDir.asm @@ -131,25 +131,14 @@ MKDIR: LD A,(DIRPAGE.buffer) CP "." JR Z,.copy_dir_record - ; fat32 - LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) - CP FAT_TYPE.x32 - JR NZ,.fat16_root_dir - ; fat 32 - EX DE,HL - LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L) - LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),HL - LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H) - LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),HL - EX DE,HL - JR .set_rec ; -.fat16_root_dir:; fat 12/16 ;LD IX,HANDBUF XOR A LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A -.set_rec: LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ячейка атрибутов файла + LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),A + LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1),A + LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ячейка атрибутов файла .copy_dir_record: EX DE,HL LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21 diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 3329914..6453629 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -427,7 +427,14 @@ CLEAR_ZONE.size EQU _sBuffers DISPLAY "EXEBUFF ", /H, CORE_BUFFERS.EXEBUFF DISPLAY "Size ", /H, CORE_BUFFERS.XSTACK - CORE_BUFFERS.EXEBUFF DISPLAY "--- --- --- --- --- --- --- ---" - + + EXPORT CORE_BUFFERS.BUFFERSplace + EXPORT CORE_BUFFERS.FM_BUF + EXPORT CORE_BUFFERS.FatBuffer + EXPORT CORE_BUFFERS.EXEBUFF + EXPORT CORE_BUFFERS.XSTACK + EXPORT CORE_BUFFERS.BUFFER + EXPORT CORE_BUFFERS.SECBUF /* ;R11 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index 55c64cd..04663f3 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -323,7 +323,7 @@ FINDDIR: RET ;----------------------------------------------------------------------; -CHECK_ZERO_CLUSTER: +CHECK_ROOT_CLUSTER: EX DE,HL LD HL,(CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L) ;R005 LD A,L @@ -334,22 +334,25 @@ CHECK_ZERO_CLUSTER: EX DE,HL RET - - ;----------------------------------------------------------------------; ; вход: HL - имя директории ; [x] fat32 ;!TEST +; !FIXIT ловится двойное обращение при открытии корня диска, например OPENDIR: LD IY,CORE_BUFFERS.FM_BUF LD A,(HL) OR A JR NZ,.SUBDIR .REROOT: ; fat32 - EX DE,HL - LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L) - LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL - LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H) - LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL - EX DE,HL + ; EX DE,HL + ; LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L) + ; LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL + ; LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H) + ; LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL + ; EX DE,HL + LD DE,0 + LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),DE + LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),DE + CALL LOADDIR ; CF=0 LD HL,WorkDirectory @@ -362,7 +365,7 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF .SUBDIR: CP "." JR NZ,.SUBDIR2 ; fat32 - CALL CHECK_ZERO_CLUSTER + CALL CHECK_ROOT_CLUSTER JR NZ,.no_root ;R005 ; "cd ." or "cd .." ;R005 @@ -397,46 +400,29 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF LD HL,#4000 ;!HARDCODE LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.F_SIZE),HL ;EX DE,HL - JP LOADDIR -;----------------------------------------------------------------------; - - -;----------------------------------------------------------------------; + ;JP LOADDIR +;--------------; ; Прочитать список каталога ; [x] fat32 ;!TEST LOADDIR: ;!TODO optimize - ; XOR A ; FILE MANIPULATOR = 0 - ; LD H,A - ; LD L,A - ; LD IX,0 - ; LD B,A ; от начала файла - ; CALL MOVE_FP - ; ; - ; SET_PAGE_X DIRPAGE - ; AND A - ; PUSH AF - ; ;!TEST no ldir - ; ; очистить кеш каталога - ; ; LD HL,#C000 - ; ; LD DE,#C001 - ; ; LD BC,#3FFF - ; ; LD (HL),L - ; ; LDIR - ; ; - ; LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; номер диска - ; LD (IY+_sFM.DRIVE),A ; сохр. в дескриптор - ; ; номер первого кластера - ; ; [x] fat32 - ; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) - ; XOR 32 - ; JR Z,.read_dir - ; ;!FIXIT переделать на работу без IY - ; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) - ; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) CALL LOAD_SAVE_DIR_PREPARE PUSH AF EX AF,AF' - JR Z,.LoadRootDir + JR NZ,.read_dir + LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) + CP FAT_TYPE.x32 + JR NZ,.LoadRootDir + ; fat32 + LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L) + LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL + LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H) + LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL + ; CALL .read_dir + ; LD HL,0 + ; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL + ; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL + ; RET + ; .read_dir: LD HL,DIRPAGE.buffer ; куда LD DE,#4000 ; сколько XOR A ; дескриптор @@ -477,14 +463,12 @@ LOAD_SAVE_DIR_PREPARE: ; LD A,(CORE_BUFFERS.FatBuffer.DRIVE) LD (IY+_sFM.DRIVE),A - ; [x] fat32 - LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) - CP FAT_TYPE.x32 - 1 - JR NC,.exit ;!FIXIT переделать на работу без IY LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) -.exit: EX AF,AF' + OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H) + OR (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1) + EX AF,AF' RET ;!TODO FAT procedures @@ -493,30 +477,20 @@ LOAD_SAVE_DIR_PREPARE: ; вход: iy=структура дескриптора ; [x] fat32 ;!TEST SAVEDIR: ;!TODO optimize - ; XOR A ; FILE MANIPULATOR = 0 - ; LD H,A - ; LD L,A - ; LD IX,0 - ; LD B,A ; от начала файла - ; CALL MOVE_FP - ; ; - ; SET_PAGE_X DIRPAGE - ; AND A - ; PUSH AF - ; ; - ; LD A,(CORE_BUFFERS.FatBuffer.DRIVE) - ; LD (IY+_sFM.DRIVE),A - ; ; [x] fat32 - ; LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) - ; XOR 32 - ; JR Z,.save_dir - ; ;!FIXIT переделать на работу без IY - ; LD A,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) - ; OR (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) CALL LOAD_SAVE_DIR_PREPARE PUSH AF EX AF,AF' - JR Z,.SaveRootDir + JR NZ,.save_dir + ; + LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) + CP FAT_TYPE.x32 + JR NZ,.SaveRootDir + ; fat32 + LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_L) + LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL + LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H) + LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H),HL + ; .save_dir: LD HL,DIRPAGE.buffer ; размер списка каталога size_cash_directory ;!FIXIT если она нужна, то проверить на баги (например, размер дирректории меньше при открытии и больше после правок) @@ -591,7 +565,7 @@ WRT_HND: SET_PAGE_X DIRPAGE ADD HL,BC AND A SBC HL,DE - JR NC,SAVEDIR + JP NC,SAVEDIR LD HL,(SAVEDIR.DIRSIZE) LD BC,(CORE_BUFFERS.FatBuffer.BytesPerCluster) ADD HL,BC @@ -627,7 +601,7 @@ RD_BPB: LD C,SLOT3 JP C,DOS_X_Error.Not_ready ; LD DE,#AA55 ; сигнатура ;R05 - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07 + LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.MBR_SIGNATURE) ;R08 ;R07 ;R05 AND A SBC HL,DE @@ -639,22 +613,18 @@ RD_BPB: LD C,SLOT3 ; LD BC,_sBOOT_SECTOR_PARAMS_FAT32 ; size ; LDIR ; - LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE) + LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.DRIVE_TYPE) CP #F0 JP C,DOS_X_Error.UnknownBPB ; ;!TODO проверить по метке раздела, что это FAT, потом определять какой FAT ; - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BytesPerSector) + LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BytesPerSector) LD (CORE_BUFFERS.FatBuffer.BytesPerSector),HL - LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerCluster) + LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerCluster) LD (CORE_BUFFERS.FatBuffer.SectorsPerCluster),A - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER) - LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER),HL - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER+2) - LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER+2),HL ; calc. first sector FAT - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) + LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RESERVED_SECTORS) ; ; LD E,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN) ;Hidden sec ; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1) @@ -669,25 +639,23 @@ RD_BPB: LD C,SLOT3 LD C,A LD (CORE_BUFFERS.FatBuffer.FAT1_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32 LD (CORE_BUFFERS.FatBuffer.FAT2_SEC_H),BC ; high word first sector FAT #1 ; [ ] fat32 - LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),BC ; [ ] fat32 - LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),BC ; [ ] fat32 - LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables - LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC ; [ ] fat32 reset variables + ;LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),BC ; [ ] fat32 reset variables + ;LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC ; [ ] fat32 reset variables LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A ; [ ] fat32 ; ; - LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerFAT16) + LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT16) LD A,E OR D JR NZ,.skip_high ; - LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32+4) + LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT32 + 2) LD A,C LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A - LD DE,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS_FAT32.SectorsPerFAT32) + LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerFAT32) .skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE ; - LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs) ; amount FATs + LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.Number_of_FATs) ; amount FATs CP 1 JR Z,.one_FAT DEC A @@ -724,8 +692,13 @@ RD_BPB: LD C,SLOT3 ENDIF ; EX DE,HL - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.FilesInRootDIR) ; 0 for fat32 - DEC HL ; [ ]fat32 + LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FilesInRootDIR) ; 0 for fat32 + ; [ ]fat32 ;!TEST + LD A,H + OR L + JR Z,.skip_loop2 + ; + DEC HL XOR A ;NEXTAD2 .loop2: INC A @@ -733,7 +706,7 @@ RD_BPB: LD C,SLOT3 SBC HL,BC JR NC,.loop2 ; - EX DE,HL +.skip_loop2: EX DE,HL LD C,A ; A - sectors in DIR LD B,0 LD (CORE_BUFFERS.FatBuffer.DirSizeInSectors),A @@ -819,14 +792,14 @@ RD_BPB: LD C,SLOT3 ; LD (CORE_BUFFERS.FatBuffer.S_X_H),HL //////////////////////////////////////////////////////////////////////// ; [ ] fat32 - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.SectorsPerDrive) + LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.SectorsPerDrive) LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L) LD A,H OR L JP NZ,.HDDSMAL ; - LD HL,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_L) - LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.BPB_BIG_TOTAL_SECTORS_H) + LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_L) + LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H) PUSH BC ; Total Sectors high PUSH HL ; Total Sectors low AND A @@ -841,18 +814,20 @@ RD_BPB: LD C,SLOT3 PUSH HL ; Total Sectors low SBC HL,DE ; -.HDDBIG: LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) - SCF -.loop7: RRA - JR C,.loop7_exit - RR B - RR C - RR H - RR L - JP .loop7 +.HDDBIG: CALL ClusterToSector +; LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) +; SCF +; .loop7: RRA +; JR C,.loop7_exit +; RR B +; RR C +; RR H +; RR L +; JP .loop7 ; .loop7_exit: INC HL LD (CORE_BUFFERS.FatBuffer.MaxClusterLow),HL + LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),BC ; XOR A LD H,A @@ -866,7 +841,7 @@ RD_BPB: LD C,SLOT3 LD HL,(CORE_BUFFERS.FatBuffer.SectorsPerFAT_L) ; DE:HL = SectorsPerFAT ; - LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.Number_of_FATs) + LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.Number_of_FATs) LD B,A DEC A JR Z,.loop_mul_end @@ -884,7 +859,7 @@ RD_BPB: LD C,SLOT3 JR NC,.no_inc_DE INC DE .no_inc_DE: ; .RESERVED_SECTORS + .DirSizeInSectors + .Number_of_FATs * .SectorsPerFAT - LD BC,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.RESERVED_SECTORS) + LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RESERVED_SECTORS) ADD HL,BC JR NC,.no_inc_de INC DE @@ -917,32 +892,54 @@ RD_BPB: LD C,SLOT3 JR C,.its_FAT32 ; ; It's FAT16 - LD A,FAT_TYPE.x16 LD HL,#FFFF + LD A,FAT_TYPE.x16 +.Set_SN: EXX + LD HL,0 + LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL + LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),HL + LD HL,CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT.LABEL + EXX + LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT.SERIAL_NUMBER) + LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT.SERIAL_NUMBER+2) JR .BPB_FAT ; .its_FAT12: LD HL,#0FFF LD A,FAT_TYPE.x12 - JR .BPB_FAT + JR .Set_SN ; -.its_FAT32: LD A,FAT_TYPE.x32 +.its_FAT32: EXX + LD HL,CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.LABEL + EXX + ; + LD HL,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RootDirStartCluster) + LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_L),HL + LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.RootDirStartCluster+2) + LD (CORE_BUFFERS.FatBuffer.RootDirStartCluster_H),BC + CALL ClusterToSector + LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_L),HL + LD (CORE_BUFFERS.FatBuffer.RootDirFirstSector_H),BC + ; + LD A,FAT_TYPE.x32 LD HL,#0FFF LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_H),HL - LD (CORE_BUFFERS.FatBuffer.MaxClusterHigh),HL ; [ ] fat32 ;!FIXIT LD H,L + LD DE,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.SERIAL_NUMBER) + LD BC,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.FAT32.SERIAL_NUMBER+2) ; .BPB_FAT: LD (CORE_BUFFERS.FatBuffer.FAT_TYPE),A LD (CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L),HL + LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER),DE + LD (CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER+2),BC + EXX + LD DE,CORE_BUFFERS.FatBuffer.BPB_LABEL + LD BC,11 ;!HARDCODE + LDIR ; SET_PAGE_X FATPAGE PUSH AF - ; [ ] fat32 - ; XOR A - ; HL = 0 - ; EX DE,HL - ; LD DE,0 CALL READ_FAT_TABLE POP AF @@ -951,7 +948,7 @@ RD_BPB: LD C,SLOT3 XOR A RET ;!TODO detect fat type by clusters! -.IBM_DOS: LD A,(CORE_BUFFERS.SECBUF + _sBOOT_SECTOR_PARAMS.DRIVE_TYPE) +.IBM_DOS: LD A,(CORE_BUFFERS.SECBUF + BOOT_SECTOR.DRIVE_TYPE) CP #F0 JR C,DOS_X_Error.UnknownBPB ; ID ram-диска - #FA @@ -963,7 +960,25 @@ RD_BPB: LD C,SLOT3 LD A,'6' LD H,L JP .BPB_FAT - ; +; + +; --> BC:HL - Cluster +; <-- BC:HL - Sector +ClusterToSector: + LD A,B + AND #0F + LD B,A + LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) + SCF +.loop: RRA + RET C + RR B + RR C + RR H + RR L + JP .loop +; + DOS_X_Error: .UnknownBPB: LD A,DSS_Error.sys.UNKNOWN_FORMAT SCF diff --git a/DSS/FS/FAT/FAT_X.asm b/DSS/FS/FAT/FAT_X.asm index 9430351..8ed5544 100644 --- a/DSS/FS/FAT/FAT_X.asm +++ b/DSS/FS/FAT/FAT_X.asm @@ -240,6 +240,7 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER POP BC LD A,B OUT (SLOT3),A + POP HL RET ; diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index 269188b..97e7db7 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -1146,13 +1146,6 @@ KBD_Receiver_Overrun: ; reg 0 - error reset .reset_errors: LD A,%0011'0000 OUT (Z84.SIO.Ch_A.Ctrl),A - ;!TEST SIO INT - ; reg 0 - return from int - IF KEYBOARD_INT_ENABLED - LD A,%0011'1000 - OUT (Z84.SIO.Ch_A.Ctrl),A - ENDIF - ; ;!TODO при детекте переполнения буфера проца снять клавиши из порта #FE спектрума ; XOR A diff --git a/DSS/Media_drivers/ide-drv.asm b/DSS/Media_drivers/ide-drv.asm index bdbb111..82fcd6b 100644 --- a/DSS/Media_drivers/ide-drv.asm +++ b/DSS/Media_drivers/ide-drv.asm @@ -523,10 +523,10 @@ DEFINE_PARTITIONS: .EASYDOS: .MEDIDOS: .HIGHDOS: - LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0) - LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1) - LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2) - LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3) + LD E,(IY + BOOT_SECTOR.Partition.Start_LBA + 0) + LD D,(IY + BOOT_SECTOR.Partition.Start_LBA + 1) + LD L,(IY + BOOT_SECTOR.Partition.Start_LBA + 2) + LD H,(IY + BOOT_SECTOR.Partition.Start_LBA + 3) LD IX,(CURRENT_SECTOR_L) ADD IX,DE LD DE,(CURRENT_SECTOR_H) @@ -539,10 +539,10 @@ DEFINE_PARTITIONS: LD (IX + LOGDRV.SECTOR_OFFSET + 1),D LD (IX + LOGDRV.SECTOR_OFFSET + 2),L LD (IX + LOGDRV.SECTOR_OFFSET + 3),H - LD E,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 0) - LD D,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 1) - LD L,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 2) - LD H,(IY + _sMBR_PARTITION_RECORD.Size_LBA + 3) + LD E,(IY + BOOT_SECTOR.Partition.Size_LBA + 0) + LD D,(IY + BOOT_SECTOR.Partition.Size_LBA + 1) + LD L,(IY + BOOT_SECTOR.Partition.Size_LBA + 2) + LD H,(IY + BOOT_SECTOR.Partition.Size_LBA + 3) ;SIZE DISK LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D diff --git a/DSS/Structures.inc b/DSS/Structures.inc index ff95c4c..ee7e17f 100644 --- a/DSS/Structures.inc +++ b/DSS/Structures.inc @@ -37,20 +37,20 @@ ; .DATE: WORD #0000 ;+ #18 +24 DATE ; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32 ; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE -.FS_REC: _sFAT_DIRECTORY_RECORD +.FS_REC _sFAT_DIRECTORY_RECORD ; from Core -.F_POSITION: DWORD #00000000 ;+ #20 +32 FILE POSITION (FP) -.DIR_CLUSTER_L: WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW -.DIR_CLUSTER_H: WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32 -.HANDLE: WORD #0000 ;+ #28 +40 HANDLE NUMBER -.DRIVE: BYTE #00 ;+ #2A +42 DRIVE OR CURRENT -.ACCESS_MODE: BYTE #00 ;+ #2B +43 ACCESS MODE -.TASK_NUM: BYTE #00 ;+ #2C +44 TASK +.F_POSITION DWORD #00000000 ;+ #20 +32 FILE POSITION (FP) +.DIR_CLUSTER_L WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW +.DIR_CLUSTER_H WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32 +.HANDLE WORD #0000 ;+ #28 +40 HANDLE NUMBER +.DRIVE BYTE #00 ;+ #2A +42 DRIVE OR CURRENT +.ACCESS_MODE BYTE #00 ;+ #2B +43 ACCESS MODE +.TASK_NUM BYTE #00 ;+ #2C +44 TASK .OptimizedClusters BYTE #00 ;+ #2D +45 -.KnownCluster_L: WORD #0000 ;+ #2E +46 Младшее слово номера кластера для которого известно относительное смещение внутри файла -.KnownCluster_H: WORD #0000 ;+ #30 +48 Старшее слово номера кластера для которого известно относительное смещение внутри файла -.KnownOffset_L: WORD #0000 ;+ #32 +50 Младшее слово смещения (в кластерах) относительно начала файла для сохраненного номера кластера. -.KnownOffset_H: WORD #0000 ;+ #34 +52 Старшее слово смещения (в кластерах) относительно начала файла для сохраненного номера кластера. +.KnownCluster_L WORD #0000 ;+ #2E +46 Младшее слово номера кластера для которого известно относительное смещение внутри файла +.KnownCluster_H WORD #0000 ;+ #30 +48 Старшее слово номера кластера для которого известно относительное смещение внутри файла +.KnownOffset_L WORD #0000 ;+ #32 +50 Младшее слово смещения (в кластерах) относительно начала файла для сохраненного номера кластера. +.KnownOffset_H WORD #0000 ;+ #34 +52 Старшее слово смещения (в кластерах) относительно начала файла для сохраненного номера кластера. ENDS ;ACCESS MODE: A=0 чтение/запись ; A=1 чтение diff --git a/DSS/build.txt b/DSS/build.txt index 4d19020..3d3f955 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -950 \ No newline at end of file +973 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index 0e2bbfb..e9bcf54 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 0e2bbfb73ceb70a16b2ab2b5ee6cbc6bd5005bf7 +Subproject commit e9bcf54a516df972207fc032925d2dfb74c39a89