diff --git a/DSS/API/Attribute.asm b/DSS/API/Attribute.asm index 18b2568..9a9a6e4 100644 --- a/DSS/API/Attribute.asm +++ b/DSS/API/Attribute.asm @@ -2,8 +2,8 @@ ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; A - ATTRIB ; B - MODE -; B = 0 GET ATTRIB -; B = 1 SET ATTRIB +; B = #00 GET ATTRIB +; B = #01 SET ATTRIB ; OUTPUT: A - ATTRIB //////////////////////////////////////////////////////////////////////// ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 @@ -21,7 +21,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 DEC B JP Z,.READ DEC B - JP Z,.WRITE + JP Z,.WRITE_FN LD A,DSS_Error.sys.INVALID_FUNCTION SCF RET @@ -41,6 +41,8 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 ; RET ; +.WRITE_FN: + AND FAT_ATTR.NoVolID ; [x] 2/12/23 временный фикс для volume ID .WRITE: PUSH AF XOR A ;!TEST ;[x] 16/11/23 optimize get attribute diff --git a/DSS/API/Create.asm b/DSS/API/Create.asm index d69d921..d0aa86e 100644 --- a/DSS/API/Create.asm +++ b/DSS/API/Create.asm @@ -2,6 +2,8 @@ ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; OUTPUT: A - FM //////////////////////////////////////////////////////////////////////// +CREATE_FN: + AND FAT_ATTR.NoVolID ; [x] 2/12/23 временный фикс для volume ID CREATE: ;!TEST Current Dir ;[x] 15/10/23 PUSH HL CALL DIR_PATH_CHECK @@ -14,6 +16,8 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT JR .DO ; +.NEW_FN: + AND FAT_ATTR.NoVolID ; [x] 2/12/23 временный фикс для volume ID .NEW: ;!TEST Current Dir ;[x] 15/10/23 PUSH HL CALL DIR_PATH_CHECK @@ -78,5 +82,5 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 JP MASK ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; OUTPUT: A - FM -CREAT_N EQU CREATE.NEW +CREAT_N EQU CREATE.NEW_FN ; \ No newline at end of file diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 4db215d..4a92460 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -378,7 +378,7 @@ ADRST10: ;DS 512 ;,0 ;...............................................[LOW ADDRESS ]: ; 0 1 2 3 4 5 6 7 8 9 DEC HEX DB low F_START, low CHNDISK_FN, low CURDISK_FN,low DISKINF, low NOPS, low NOPS, low NOPS, low NOPS, low SCANDRV, low BOOTDSK ; 0 00..09 - DB low CREATE, low CREAT_N, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13 + DB low CREATE_FN, low CREAT_N, low NOPS, low NOPS, low DEL_FN, low NOPS, low RENAME, low OPEN_FN, low CLOSE_FN, low READ ; 1 0A..13 DB low WRITE, low MOVE_FP, low ATTRIB, low GET_D_T, low PUT_D_T, low F_FIRST, low F_NEXT, low MKDIR, low RMDIR, low CHDIR_FN ; 2 14..1D DB low CURRDIR_FN,low NOPS, low NOPS, low SYSTIME, low SETTIME, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 3 1E..27 DB low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low WAITKEY, low SCANKEY ; 4 28..31 @@ -405,7 +405,7 @@ ADRST10: ;DS 512 ;,0 ENDIF ;...............................................[HIGH ADDRESS]: DB high F_START, high CHNDISK_FN,high CURDISK_FN,high DISKINF,high NOPS, high NOPS, high NOPS, high NOPS, high SCANDRV, high BOOTDSK - DB high CREATE, high CREAT_N, high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ + DB high CREATE_FN, high CREAT_N, high NOPS, high NOPS, high DEL_FN, high NOPS, high RENAME, high OPEN_FN,high CLOSE_FN,high READ DB high WRITE, high MOVE_FP, high ATTRIB, high GET_D_T,high PUT_D_T,high F_FIRST,high F_NEXT, high MKDIR, high RMDIR, high CHDIR_FN DB high CURRDIR_FN,high NOPS, high NOPS, high SYSTIME,high SETTIME,high NOPS, high NOPS, high NOPS, high NOPS, high NOPS DB high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high WAITKEY, high SCANKEY diff --git a/DSS/FS/FAT/FAT12_16.asm b/DSS/FS/FAT/FAT12_16.asm index 31cc955..8ecd30d 100644 --- a/DSS/FS/FAT/FAT12_16.asm +++ b/DSS/FS/FAT/FAT12_16.asm @@ -37,6 +37,7 @@ INC_FAT PUSH HL CALL G_CLUST POP DE RET C + ; PUSH HL PUSH HL EX DE,HL ; hl=номер кластера @@ -46,13 +47,17 @@ INC_FAT PUSH HL EX DE,HL POP DE ; номер кластера CALL W_T_FAT ; записать в кеш FAT-а номер кластера + ;!FIXIT <нет контроля ошибки> + ; + ; POP HL LD DE,(FatBuffer.ENDCLUS) ; номер кластера CALL W_T_FAT ; записать в кеш FAT-а номер кластера - CALL WR_FAT ; подкл. банку кеша FAT и записать его на диск + ;!TEST ;!TODO 2/12/23 [ ] баг с избыточной записью WR_FAT? + CALL WR_FAT ; подкл. банку кеша FAT и записать его на диск + ; AND A RET - ;RX01 ;----------------------------------------------------------- @@ -106,6 +111,7 @@ R_F_F16: LD D,(HL) POP AF OUT (SLOT3),A + ;!TODO #FFF7 - кластер с косякчными секторами LD HL,#FFEF ;!HARDCODE XOR A ; DssErr.sys.NO_ERROR SBC HL,DE ; проверка на служ. кластеры @@ -193,8 +199,10 @@ W_T_FAT: EXX PUSH HL PUSH AF - LD A,1 - LD (FatCache.Update),A + ; [x] 2/12/23 FAT не всегда мог записаться на HDD + ;LD A,1 + ;LD (FatCache.Update),A + ; LD A,(FatBuffer.FAT_TYP) CP "2" ; fat12 JR Z,W_T_F12 @@ -226,6 +234,10 @@ W_T_F16: POP AF ; восст. порт POP HL OUT (SLOT3),A + ; [x] 2/12/23 FAT не всегда мог записаться на HDD + LD A,1 + LD (FatCache.Update),A + ; XOR A RET ; @@ -274,6 +286,10 @@ W_T_F12: ;!FIXIT POP AF POP HL OUT (SLOT3),A + ; [x] 2/12/23 FAT не всегда мог записаться на HDD + LD A,1 + LD (FatCache.Update),A + ; AND A RET ; diff --git a/DSS/build.txt b/DSS/build.txt index e9769c1..c189136 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -759 \ No newline at end of file +769 \ No newline at end of file