diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index 4edba5e..96333c2 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -172,33 +172,39 @@ cmd_dir: push de ;xor a ;ld (de),a ; - ; - ;LD A,(read_disk_info.full) - ;OR A - ;ld hl,has_not_full_info - ;JR Z,.skip_full_space - ; + ; full capacity + ld a,(full_space_high) + ld hl,(full_space_medium) ; ст. разряд + exx + ld hl,(full_space_low) ; мл. разряд + CALL PRN_DISK_SIZE + ; ; ld de,MAIN_MSG.DIR_2 ; индекс " %1 file(s), %2 bytes, %3 Dir(s)" CALL MESSAGE ; вывести строку ; ld a,(read_disk_info.full) and a - ld de,MAIN_MSG.CRLF - jp z,MESSAGE + ;ld de,MAIN_MSG.CRLF + ;jp z,MESSAGE + RET Z ; + ; free space ld a,(free_space_high) ld hl,(free_space_medium) ; ст. разряд exx ld hl,(free_space_low) ; мл. разряд - ;exx - call PRINT_5BYTES - ld hl,SIZE_BUFFER.high ; "000 000 000 000" - ld de,PRM1 ; and PRM2 ; куда - ld bc,SIZE_BUFFER.bytes - call ncopy_string.start ; скопир. строку (с нулем), макс. SIZE_BUFFER.bytes симв. + ; + CALL PRN_DISK_SIZE + ; ld de,MAIN_MSG.DIR_4 ; индекс " %6 bytes free" jp MESSAGE ; +PRN_DISK_SIZE: call PRINT_5BYTES + ld hl,SIZE_BUFFER.high ; "000 000 000 000" + ld de,PRM5 ; and PRM6 ; куда + ld bc,SIZE_BUFFER.bytes + jp ncopy_string.start ; скопир. строку (с нулем), макс. SIZE_BUFFER.bytes симв. + ; Print_Header: ; %1 ld hl,PRM1 ld a,'"' @@ -283,7 +289,7 @@ PRNSIZE: ld a,(ix+32) ld h,(ix+FAT_DIRECTORY_RECORD.F_SIZE+3) exx push ix - call MAKE_LN ; десятичный 32-х разрядный вывод + call MAKE_LN_32 ; десятичный 32-х разрядный вывод ld hl,L32BIT_.end ld a,(hl) cp " " @@ -402,6 +408,28 @@ toNumber: ld c,#2F ; Десятичный 32-х разрядный вывод ; HL':HL - число для перевода ; !FIXIT можно объеденить с PDIGIT +MAKE_LN_32: CALL MAKE_LN + ld hl,L32BIT_ ; "0000000000" + JR MAKE_LN_Clean + ; +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 + MAKE_LN: ld ix,L32BIT_ ; "0000000000" exx ld de,#3B9A @@ -461,22 +489,8 @@ MAKE_LN: ld ix,L32BIT_ ; "0000000000" add a,"0" ld (ix+0),a inc ix - ld hl,L32BIT_ ; "0000000000" - 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 - + ; GET_DIG: xor a .loop: inc a sbc hl,de @@ -505,6 +519,10 @@ free_space_low: WORD 0 free_space_medium: WORD 0 free_space_high: BYTE 0 ; +full_space_low: WORD 0 +full_space_medium: WORD 0 +full_space_high: BYTE 0 +; L40BIT_ db "00" L32BIT_: db "000000000" @@ -544,7 +562,7 @@ read_disk_info: OR #80 AND E EXX INC A - JR Z,.no_full_space_option + ;JR Z,.no_full_space_option LD (.full),A ; ; ; LD A,(.full) @@ -605,8 +623,13 @@ read_disk_info: OR #80 LD A,C LD (free_space_high),A LD (free_space_medium),DE + ; + LD A,B + LD (full_space_high),A + LD (full_space_medium),HL EXX LD (free_space_low),DE + LD (full_space_low),HL ; .no_full_space_option: ; parse @@ -831,27 +854,38 @@ PRINT_5BYTES: ld ix,L40BIT_ ; "00" ; ; DE':DE = 100,000,000 ; HL':HL ещё нужны - PUSH HL - LD HL,L40BIT_ - LD B,2 ;!HARDCODE 2 знака -.loop: LD A,(HL) - CP "0" - jr nz,.not_zero - LD (HL)," " -.not_zero: INC HL - DJNZ .loop - POP HL - CALL MAKE_LN.skip_1 - JR PRINT_DWORD.skip_LN + ; PUSH HL + ; LD HL,L40BIT_ +; LD B,3 ;!HARDCODE 2 знака +; .loop: LD A,(HL) +; CP "1" +; jr nc,.exit_clean +; LD (HL)," " +; INC HL +; DJNZ .loop +;.exit_clean: POP HL + CALL MAKE_LN_40 + ;JR PRINT_DWORD.skip_LN ; -PRINT_DWORD: call MAKE_LN ; десятичный 32-х разрядный вывод +;PRINT_DWORD: call MAKE_LN ; десятичный 32-х разрядный вывод .skip_LN: ld hl,L32BIT_.end ; "0" ld a,(hl) cp " " jr nz,.not_zero ld a,"0" ld (hl),a -.not_zero: ld de,SIZE_BUFFER.high ; "0 000 000 000" + +.not_zero: +; ld hl,SIZE_BUFFER.high ; "0 000 000 000" +; ld b,SIZE_BUFFER.bytes - 1 +; .clean_loop: ld a,(hl) +; cp "1" +; jr nc,.exit_clean +; ld (hl)," " +; inc hl +; djnz .clean_loop + ; +.exit_clean: ld de,SIZE_BUFFER.high ; "0 000 000 000" ld hl,L40BIT_ ; "0000000000" ldi ldi diff --git a/SHELL/Messages/main_txt.asm b/SHELL/Messages/main_txt.asm index c67f942..53d9244 100644 --- a/SHELL/Messages/main_txt.asm +++ b/SHELL/Messages/main_txt.asm @@ -43,13 +43,9 @@ MAIN_MSG: stN .ECHO_ : DZ "Echo is %1\r\n" stN .ON_ : DZ "on" stN .OFF_ : DZ "off" -; stN .DIR_2_ : db " %3 File(s) %1 byte(s)\r\n" -; DZ " %4 Dir(s) " -; stN .DIR_4_ : DZ "%1 bytes free\r\n" stN .DIR_2_ : db " %3 File(s)\r %1 byte(s)\r\n" - DZ " %4 Dir(s)" - stN .DIR_4_ : DZ "\r %1 bytes free\r\n" -; stN .DIR_3_ : DZ "%1 %2 %3 %4 - %5\r\n" ;FILENAME EXT SIZE DATE TIME + DZ " %4 Dir(s)\r %5 byte(s) capacity\r\n" + stN .DIR_4_ : DZ " Free space %5 byte(s)\r\n" stN .DIR_3_ : DZ "%4 %5 %3 %1 %2 \r\n" ;DATE TIME SIZE FILENAME EXT stN .HELP_ : db "COMMANDS:\r\n" db "DIR REN | RENAME PATH HELP \r\n" @@ -57,7 +53,7 @@ MAIN_MSG: db "MD | MKDIR TIME ECHO EXIT \r\n" DZ "RD | RMDIR DATE CLS REBOOT \r\n\n" stN .CALC_ : DZ "Calculating free space...\r" -; ;R11 +; ;R11 db 0 DZ "Unknown command" ; ; diff --git a/SHELL/build.txt b/SHELL/build.txt index 387c46f..bbce651 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -346 \ No newline at end of file +356 \ No newline at end of file