;///////////////////////////////////////////////////////////////////// ; [ ] новая подфункция с битом 7 в рег. А ; Возвращает информацию об общем и свободном пространстве дискового ; устройства. ; ; вход: A - номер диска (0=A,1=B .. 25=Z. #FF-текущий) ; При A bit7 = 1: ; HL - буфер (256 байтов) для расширенных данных: ; B != 0 - считать свободное место ; ; ; размер поля - 1 байт ; Файловая система ; ; ; размер поля - 1 байт ; Серийный номер диска ; ; ; размер поля - 1 байт ; Метка диска ; ; ; размер поля - 1 байт ; Зарезервировано... ; ; ; A xor #80 - номер диска ; ; выход: A - размер кластера в секторах, если CF=0 ; HL - общее кол-во кластеров ; DE - свободных кластеров ; BC - размер сектора в байтах ; A - код ошибки, если CF=1 ;///////////////////////////////////////////////////////////////////// ; [ ] 22/11/23 подфункция с доп.инфой MACRO _mCOPY_LOOP LD C,A LD B,0 LD (DE),A INC DE LDIR ; .loop: ; LD (HL),A ; INC DE ; INC HL ; LD A,(DE) ; DJNZ .loop ENDM ; DISKINF:; [ ] 22/11/23 подфункция с доп.инфой LD C,B LD B,1 ; CP #80 JR C,.CustomDisk CP #FF JR Z,.CurrentDisk ; more info LD B,C PUSH HL AND %0111'1111 CALL .CustomDisk JR C,.error ; EX (SP),HL PUSH AF PUSH DE PUSH BC ;;;; ; EX DE,HL LD HL,CORE_BUFFERS.BootSector.ID_FAT LD A,8 ;!HARDCODE _sBOOT_SEC.ID_FAT.length _mCOPY_LOOP ; LD HL,CORE_BUFFERS.BootSector.BPB_SERIAL_NUMBER LD A,4 ;!HARDCODE _sBOOT_SEC.BPB_SERIAL_NUMBER _mCOPY_LOOP ; LD HL,CORE_BUFFERS.BootSector.BPB_LABEL LD A,11 ;!HARDCODE _sBOOT_SEC.BPB_LABEL _mCOPY_LOOP ; XOR A LD (DE),A ;;;; POP BC POP DE POP AF .error: POP HL RET ; ;CP #FF ; !FIXIT WorkDirectory ;!TEST Current Dir ;JR Z,CURRDS ;R06 .CurrentDisk: LD A,(CurrentPath) SUB 'A' LD HL,FatBuffer.DRIVE CP (HL) JR Z,.CheckFreeSpace ; .CustomDisk: PUSH BC CALL CHNDISK ;R06 POP BC RET C ;R06 ; .CheckFreeSpace: ; XOR A OR B CALL NZ,.CURRDS ; ; .FRESP2: LD D,B LD E,C LD HL,(FAT_Max_Cluster) DEC HL LD BC,(CORE_BUFFERS.BootSector.B_P_S) LD A,(CORE_BUFFERS.BootSector.S_P_C) AND A RET ; .CURRDS: LD HL,2 LD BC,0 .FRESP: PUSH BC CALL R_F_FAT POP BC CP DSS_Error.sys.DISK_FULL RET Z LD A,E OR D JR NZ,.SKIC INC BC .SKIC: INC HL JP .FRESP ;