//////////////////////////////////////////////////////////////////////// ; Функция #11. Открытие файла. ; ; вход: HL - указатель на имя файла ; A - режим доступа: ; A=0 чтение/запись ; A=1 чтение ; A=2 запись ; ;!TODO A=3 запись без лишних сохранений кэша FAT ; ;!TODO A=4 записать кэш FAT ; выход: CF=0, A - дескриптор файла. ; CF=1, A - код ошибки. //////////////////////////////////////////////////////////////////////// OPEN_FN: ; Current Dir 15/10/23 ;AND #7F ; ACCESS_MODE bit7 - для внутреннего использования))) ;!TODO LD (.TMP),A PUSH HL CALL DIR_PATH_CHECK.forceCheck POP HL RET C ;!FIXIT сделать как в mkdir или rmdir? ;R008 ; ;.start: ; CALL SetPath_GetName RET C CALL MASK RET C .FILE: CALL SEARCH.File ; enter point from EXEC, CREATE RET C ; ; IX - смещение на запись в SLOT3 DIRPAGE.buffer .FM: ; enter point from ATTRIB PUSH DE ; сохраняем указатель на запись в каталоге FS (получен из SEARCH) CALL GET_FM POP DE RET C ; LD A,C ; дескриптор файла EX AF,AF' LD (IY+_sFM.HANDLE),E LD (IY+_sFM.HANDLE+1),D LD D,XH LD E,XL LD (IY+_sFM.OffsetInDirCache),E LD (IY+_sFM.OffsetInDirCache+1),D LD D,YH LD E,YL LD HL,CORE_BUFFERS.HANDBUF LD BC,CORE_BUFFERS.HANDBUF.SIZE LDIR .TMP+1: LD A,0 LD (IY+_sFM.ACCESS_MODE),A PUSH IY POP HL LD DE,_sFM.F_POSITION ADD HL,DE ; Зануляем ; _sFM.F_POSITION ; _sFM.F_POSITION + 1 ; _sFM.F_POSITION + 2 ; _sFM.F_POSITION + 3 LD BC,#0400 ; B - счетчик .loopZ0: LD (HL),C INC HL DJNZ .loopZ0 ; EX DE,HL LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L LDI ; _sFM.DIR_CLUSTER_L LDI ; _sFM.DIR_CLUSTER_L + 1 LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H LDI ; _sFM.DIR_CLUSTER_H LDI ; _sFM.DIR_CLUSTER_H + 1 EX DE,HL ; INC HL INC HL LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) LD (HL),A ; _sFM.DRIVE INC HL INC HL LD A,(TASK) LD (HL),A ; _sFM.TASK_NUM INC HL ; Зануляем ; _sFM.OptimizedClusters ; _sFM.KnownCluster_L ; _sFM.KnownCluster_L + 1 ; _sFM.KnownCluster_H ; _sFM.KnownCluster_H + 1 ; _sFM.KnownOffset_L ; _sFM.KnownOffset_L + 1 ; _sFM.KnownOffset_H ; _sFM.KnownOffset_H + 1 LD BC,#0900 ; B - счетчик .loopZ1: LD (HL),C INC HL DJNZ .loopZ1 ; EX AF,AF' AND A RET