diff --git a/DSS/API/Execute.ASM b/DSS/API/Execute.ASM index 171da66..2060854 100644 --- a/DSS/API/Execute.ASM +++ b/DSS/API/Execute.ASM @@ -581,7 +581,7 @@ LEAVE: LD A,B ; вход: нет ; выход: A - код завершения ;///////////////////////////////////////////////////////////////////// -WAIT: LD A,(ErrorLevel) +GET_ERR: LD A,(ErrorLevel) AND A RET ;///////////////////////////////////////////////////////////////////// diff --git a/DSS/API/Find.asm b/DSS/API/Find.asm index 0ae8afc..b600da9 100644 --- a/DSS/API/Find.asm +++ b/DSS/API/Find.asm @@ -48,7 +48,7 @@ F_FIRST: LD HL,HANDBUF+12 ;!HARDCODE LD BC,HANDBUF.SIZE-12 ;????? метку вместо числа? LDIR - LD A,(HANDBUF+11) + LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT) LD (DE),A INC DE LD HL,HANDBUF @@ -58,16 +58,18 @@ F_FIRST: JR NZ,.FIND_M2 LD BC,11 ;!HARDCODE LDIR - LD A,F_NEXT.NO_NEXT.NO +.exit: LD A,F_NEXT.NO_NEXT.NO LD (F_NEXT.NO_NEXT),A XOR A RET .FIND_M2: + ;!TODO LFN + ;CP 2 + ;CALL NC,GetName_LFN + ;CALL C,GetName + ; CALL GetName - LD A,F_NEXT.NO_NEXT.NO - LD (F_NEXT.NO_NEXT),A - XOR A - RET + JR .exit //////////////////////////////////////////////////////////////////////// ; diff --git a/DSS/API/diskINF.asm b/DSS/API/diskINF.asm index 033b221..c86db8a 100644 --- a/DSS/API/diskINF.asm +++ b/DSS/API/diskINF.asm @@ -76,7 +76,7 @@ DISKINF: LD C,B .next_prm: LD HL,CORE_BUFFERS.FatBuffer.BPB_SERIAL_NUMBER LD C,4 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_SERIAL_NUMBER CALL .mCOPY_LOOP - ; + ; !FIXIT если метка в BPB "NO NAME" или пробелы, то проверять метку в корневом каталоге. LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL LD C,11 ;!HARDCODE _sBOOT_SECTOR_PARAMS.BPB_LABEL CALL .mCOPY_LOOP diff --git a/DSS/DOS_Proc.asm b/DSS/DOS_Proc.asm index 7da3511..49a4799 100644 --- a/DSS/DOS_Proc.asm +++ b/DSS/DOS_Proc.asm @@ -52,6 +52,7 @@ ; DJNZ .GETN6 ; RET ;---------------;---------------;--------------- +;!TODO LFN GetName: LD BC,#08FF ;!HARDCODE длина имени + счётчик LD A,' ' .loop: CP (HL) diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 4cfc2b3..f92c6ec 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -317,7 +317,7 @@ ADRST10: ;DS 512 ;,0 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 DB low ECHOKEY, low CTRLKEY, low NOPS, low K_CLEAR, low K_SETUP, low TESTKEY, low SETWIN, low SETWIN1, low SETWIN2, low SETWIN3 ; 5 32..3B - DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low WAIT, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45 + DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low GET_ERR, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45 DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59 DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT ; 9 5A..5F @@ -344,7 +344,7 @@ ADRST10: ;DS 512 ;,0 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 DB high ECHOKEY, high CTRLKEY, high NOPS, high K_CLEAR,high K_SETUP,high TESTKEY,high SETWIN, high SETWIN1,high SETWIN2, high SETWIN3 - DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high WAIT, high GSWITCH,high DOSNAME, high EX_PATH + DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high GET_ERR,high GSWITCH,high DOSNAME, high EX_PATH DB high ENVIRON, high APPINFO, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS DB high SETVMOD, high GETVMOD, high LOCATE, high CURSOR, high SELPAGE,high SCROLL, high CLEAR, high RDCHAR, high WRCHAR, high WINCOPY DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index 10001ba..51214f3 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -519,6 +519,8 @@ LOADDIR: ;!TODO optimize LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL LD HL,(CORE_BUFFERS.FatBuffer.RootDirStartCluster_H) LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL + LD HL,#4000 ;!HARDCODE размер директории + LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL ; .read_dir: LD HL,DIRPAGE.buffer ; куда LD DE,#4000 ; сколько diff --git a/DSS/FS/FAT/FAT_X.asm b/DSS/FS/FAT/FAT_X.asm index 5c601cd..e3460c2 100644 --- a/DSS/FS/FAT/FAT_X.asm +++ b/DSS/FS/FAT/FAT_X.asm @@ -647,7 +647,7 @@ WRITE_FAT_TABLE: ;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT CALL GET_SECTOR_OF_FAT ; B=0, C:HL - смещение в секторах внутри таблицы FAT на начало блока - LD (.save_offset_HL),HL + LD (.pop_offset_HL),HL LD DE,FAT_CACHE.Sectors_32 LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE) CP FAT_TYPE.x32 diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index 0698da2..18535e4 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -554,11 +554,11 @@ KEYSCAN: LD IX,KEYFLAG ; SBC HL,DE ; CALL Z,RST_X ; - ; [x] опасная хрень - LD HL,BREAK_PROCESS_CODE - AND A - SBC HL,DE - CALL Z,Break_Process + ;; [ ] опасная хрень + ;LD HL,BREAK_PROCESS_CODE + ;AND A + ;SBC HL,DE + ;CALL Z,Break_Process ; LD BC,(KEYFLAG) CALL PUTSYM @@ -1154,12 +1154,13 @@ KBD_Receiver_Overrun: LD (KEY_FLG),A ;LD (UNCODE),A RET - ; [x] опасная хрень -Break_Process: LD A,(TASK) - XOR 2 ; 2 - task of primary shell - RET Z - LD B,DSS_Error.sys.USER_ABORT - JP LEAVE + ; + ; [ ] опасная хрень +; Break_Process: LD A,(TASK) +; XOR 2 ; 2 - task of primary shell +; RET Z +; LD B,DSS_Error.sys.USER_ABORT +; JP LEAVE ; ` ; 0 diff --git a/DSS/Structures.inc b/DSS/Structures.inc index 34f8616..4a2ef37 100644 --- a/DSS/Structures.inc +++ b/DSS/Structures.inc @@ -52,6 +52,7 @@ .KnownOffset_L WORD #0000 ;+ #32 +50 Младшее слово смещения (в кластерах) относительно начала файла для сохраненного номера кластера. .KnownOffset_H WORD #0000 ;+ #34 +52 Старшее слово смещения (в кластерах) относительно начала файла для сохраненного номера кластера. ENDS + ;ACCESS MODE: A=0 чтение/запись ; A=1 чтение ; A=2 запись diff --git a/DSS/build.txt b/DSS/build.txt index ad12b97..9a32da2 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -983 \ No newline at end of file +984 \ No newline at end of file diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index ac3c70e..ae5f3f8 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -289,13 +289,7 @@ PRNSIZE: ld a,(ix+32) ld h,(ix+FAT_DIRECTORY_RECORD.F_SIZE+3) exx push ix - call MAKE_LN_32 ; десятичный 32-х разрядный вывод - ld hl,L32BIT_.end - ld a,(hl) - cp " " - jr nz,.not_zero - ld a,"0" - ld (hl),a + call MAKE_LN ; десятичный 32-х разрядный вывод .not_zero: ld de,SIZE_BUFFER.low ; "0 000 000 000" ld hl,L32BIT_ ; "0000000000" ldi @@ -403,33 +397,12 @@ toNumber: ld c,#2F ld (hl),a inc hl ret +; ;!TODO перетащить в procedures/math.asm ; Десятичный 32-х разрядный вывод ; HL':HL - число для перевода ; !FIXIT можно объеденить с PDIGIT -MAKE_LN_32: CALL MAKE_LN - ld hl,L32BIT_ ; "0000000000" - JR MAKE_LN_Clean -; десятичный 40-а разрядный вывод -MAKE_LN_40: CALL MAKE_LN.skip_1 - ld hl,L40BIT_ ; "0000000000" - ; -MAKE_LN_Clean: ld de,#2030 ; " ","0" -.KILLZ: ld a,(hl) - cp e - jr nz,.KILLZ2 - ld (hl),d - inc hl - jr .KILLZ - ; -.KILLZ2: ld hl,L32BIT_.end ; "0" - ld a,(hl) - cp d - ret nz - ld (hl),e - ret -; десятичный 32-х разрядный вывод MAKE_LN: ld ix,L32BIT_ ; "0000000000" exx ld de,#3B9A @@ -491,7 +464,8 @@ MAKE_LN: ld ix,L32BIT_ ; "0000000000" inc ix ret ; -GET_DIG: xor a +GET_DIG: ld a,"0"-1 + AND A .loop: inc a sbc hl,de exx @@ -503,9 +477,16 @@ GET_DIG: xor a exx adc hl,de exx - dec a - add a,"0" - ld (ix+0),a + ;dec a + cp "0" + jr nz,.putChar + ld b,a + ld a,(ix-1) + cp " " + jr z,.putChar + ld a,b + ; +.putChar: ld (ix+0),a inc ix ret ; @@ -524,16 +505,18 @@ full_space_medium: WORD 0 full_space_high: BYTE 0 ; -L40BIT_ db "00" -L32BIT_: db "000000000" +; !TODO может обойтись одним буфером 00 вместо двух? +L40BIT: db " " ; маркер для ix-1 +.Str: db " " ; 00 +L32BIT_: db " " ; 000000000 .end: db "0" ; DIRIDD: db "