dir.asm: pause scrolling, full info key '/f'

This commit is contained in:
Anatoliy Belyanskiy 2023-11-25 08:26:45 +10:00
parent 1533b89738
commit ce4125e4c6
4 changed files with 240 additions and 58 deletions

View File

@ -26,33 +26,56 @@ cmd_dir:
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª 
;
pop de
ld a,#ff
ld (.key_p),a
ld hl,0
ld (D88DC),hl
ld (D88DE),hl
ld (D88E0),hl
ld (dir_number),hl
ex de,hl
ld a,(hl)
or a
jr nz,1F ; § ¤ ­  ¬ áª  ¨¬¥­
ld hl,mask_fname ; "*.*"
;ld de,T9186 ; ¡ãä¥à
1: ld de,work_buffer1 ; 80
ld de,work_buffer1 ; 80
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;
ld a,(work_buffer1)
or a
jr nz,1F ; § ¤ ­  ¬ áª  ¨¬¥­
;
ld hl,mask_fname ; "*.*"
ld de,work_buffer1
call copy_string
; [ ] 1/10/23
ld hl,work_buffer1 ; ¨¬ï ä ©« 
1: ld hl,work_buffer1 ; ¨¬ï ä ©« 
ld de,work_buffer1 ; 80 ¡ãä¥à
ld a,#37 ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11)
RST ToDSS
JR C,.dir_empty ;R14
CALL .Print_Header
;
LD A,32-5 ; ª®«¨ç¥á⢮ áâப ¤® ®¦¨¤ ­¨ï ª« ¢¨è¨ (á ¢ëç¥â®¬ § £®«®¢ª ) ;!HARDCODE
PUSH AF
; 横« ¢ë¢®¤  ᯨ᪠ ä ©«®¢/¯ ¯®ª
.loop: ld hl,work_buffer1 ; 80
ld de,33
add hl,de
.loop: POP AF
.key_p+1: and #ff
dec a
jr nz,.skip_wait
ld de,MAIN_MSG.PAUSE
call MESSAGE ; ¢ë¢¥á⨠áâபã
ld c,Dss.WaitKey
rst ToDSS
ld a,32-1
.skip_wait:
PUSH AF
;
ld hl,work_buffer1+33 ; 80
;push af
;ld de,33
;add hl,de
call A88E2
;
ld ix,work_buffer1 ; 80
ld a,(ix+32) ;  âਡãâ ⥪. § ¯¨á¨
and FAT_ATTR.DIRECTORY ; ¯ ¯ª  ?
@ -109,53 +132,61 @@ cmd_dir:
ld c,Dss.F_Next ; ¯®¨áª á«¥¤.
RST ToDSS
jr nc,.loop ; ­ § ¤ ¢ 横«, ¥á«¨ ­¥ ª®­¥æ ᯨ᪠
pop af ; «¨è­¥¥
; „¥áïâ¨ç­ë© ¢ë¢®¤
.print: ld hl,(D88DC)
ld ix,PRM1 ; ¡ãä¥à
call A8964
;
ld hl,(D88DE) ; ¬«. à §àï¤
exx
ld hl,(D88E0) ; áâ. à §àï¤
exx
call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
ld hl,T8B37 ; "0"
ld a,(hl)
cp " "
jr nz,.not_zero
ld a,"0"
ld (hl),a
.not_zero:
ld de,T8B46 ; "0 000 000 000"
ld hl,T8B2E ; "0000000000"
ld a,(hl)
ldi
cp " "
jr z,$+4
ld a,"," ; à §¤. à §à冷¢
ld (de),a
inc de
ldi
ldi
ld a,(hl)
ldi
cp " "
jr z,$+4
ld a,"," ; à §¤. à §à冷¢
ld (de),a
inc de
ldi
ldi
ld a,(hl)
ldi
cp " "
jr z,$+4
ld a,"," ; à §¤. à §à冷¢
ld (de),a
inc de
ldi
ldi
ldi
;
;;;;;;;;;;;;;
; call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
; ld hl,T8B37 ; "0"
; ld a,(hl)
; cp " "
; jr nz,.not_zero
; ld a,"0"
; ld (hl),a
; .not_zero:
; ld de,T8B46 ; "0 000 000 000"
; ld hl,T8B2E ; "0000000000"
; ld a,(hl)
; ldi
; cp " "
; jr z,1F
; ld a,"," ; à §¤. à §à冷¢
; 1: ld (de),a
; inc de
; ldi
; ldi
; ld a,(hl)
; ldi
; cp " "
; jr z,1F
; ld a,"," ; à §¤. à §à冷¢
; 1: ld (de),a
; inc de
; ldi
; ldi
; ld a,(hl)
; ldi
; cp " "
; jr z,1F
; ld a,"," ; à §¤. à §à冷¢
; 1: ld (de),a
; inc de
; ldi
; ldi
; ldi
; ret
CALL Size2Char
;;;;;;;;;;;;;
;
; [ ] ¢ë¢®¤ ª®«¨ç¥á⢠ ¯ ¯®ª
; [ ] ¢ë¢®¤ ®¡é¥£® ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ 
ld hl,T8B46 ; "0 000 000 000"
@ -173,6 +204,24 @@ cmd_dir:
;xor a
;ld (de),a
;
;
LD A,(read_disk_info.full)
OR A
ld hl,has_not_full_info
JR Z,.skip_full_space
;
ld hl,(free_space) ; ¬«. à §àï¤
exx
ld hl,(free_space+2) ; áâ. à §àï¤
exx
CALL Size2Char
ld hl,T8B46 ; "0 000 000 000"
;
.skip_full_space:
ld de,PRM4 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
;
;
ld de,MAIN_MSG.DIR_2 ; ¨­¤¥ªá " %1 file(s) %2 bytes"
jp MESSAGE ; ¢ë¢¥á⨠áâபã
@ -197,7 +246,7 @@ cmd_dir:
ld de,MAIN_MSG.DIR_1 ; ¨­¤¥ªá "Volume in drive %1..." ;!HARDCODE ­®¬¥à áâப¨ MSG0
JP MESSAGE ; ¢ë¢¥á⨠áâபã
;
;
; <20>®¤£®â®¢¨âì áâபã ᯨ᪠ ä ©«®¢/¯ ¯®ª
A88E2: ld bc,8
@ -440,6 +489,7 @@ D88DC: dw 0
D88DE: dw 0
D88E0: dw 0
dir_number: dw 0
free_space: dword 0
;
T8B2E: db "000000000"
@ -461,7 +511,31 @@ read_disk_info:
; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; Œ¥âª  ¤¨áª  ¢ BPB
EX AF,AF'
LD A,(.full)
OR A
JR Z,.no_full_space_option
;
; (DE*A)*BC
;PUSH HL ; ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
;PUSH DE ; ᢮¡®¤­ëå ª« áâ¥à®¢
PUSH BC ; à §¬¥à ᥪâ®à  ¢ ¡ ©â å
EX AF,AF'
LD C,A ; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
CALL Mult16X8
; A:HL = DE*A
;
EX DE,HL
LD H,0
LD L,A
POP BC
CALL Mult32
LD (free_space+2),HL
EX DE,HL
LD (free_space),HL
;
;
.no_full_space_option:
; parse
LD D,0
LD HL,work_buffer
@ -602,11 +676,13 @@ volume_string_no:
db "has no label",0
volume_string_yes:
db "has label",0
has_not_full_info:
db ' (?)',0
;
cmd_dir_options:
; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
DB 'f' : DW cmd_dir_freeSpace
;DB 'p' : DW cmd_dir_pause
.Size EQU ($-cmd_dir_options)/3
.paramLength equ 3
;
@ -636,3 +712,104 @@ cmd_dir_freeSpace:
POP DE
jp cmd_dir.parse
;
; cmd_dir_pause:
; xor a
; ld (cmd_dir.key_p),a
; jp cmd_dir.parse
///////////////////////////////////////////////////////////////////////////////////////
Size2Char:
call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
ld hl,T8B37 ; "0"
ld a,(hl)
cp " "
jr nz,.not_zero
ld a,"0"
ld (hl),a
.not_zero:
ld de,T8B46 ; "0 000 000 000"
ld hl,T8B2E ; "0000000000"
ld a,(hl)
ldi
cp " "
jr z,1F
ld a,"," ; à §¤. à §à冷¢
1: ld (de),a
inc de
ldi
ldi
ld a,(hl)
ldi
cp " "
jr z,1F
ld a,"," ; à §¤. à §à冷¢
1: ld (de),a
inc de
ldi
ldi
ld a,(hl)
ldi
cp " "
jr z,1F
ld a,"," ; à §¤. à §à冷¢
1: ld (de),a
inc de
ldi
ldi
ldi
ret
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
;----------------------------------------------------------------------;
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (16*8bit)
;<3B>  ¢å®¤: DE*C
;<3B>  ¢ë室:A+HL-१ã«ìâ â
Mult16X8:
SUB A
LD L,A
LD H,A
CP C
RET Z
OR D
OR E
RET Z
LD A,C
LD C,#00
LD B,#08
Mlt16x8:
ADD HL,HL
RLA
JR NC,1F
ADD HL,DE
ADC A,C
1: DJNZ Mlt16x8
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;<3B>à®æ¥¤ãà  ã¬­®¦¥­¨ï (32bit)
;<3B>  ¢å®¤: HL+DE*BC
;<3B>  ¢ë室:HL+DE-१ã«ìâ â
Mult32:
PUSH IX
LD IX,#0000
LD A,#20
EX DE,HL
mul32b:
ADD IX,IX
ADC HL,HL
RL E
RL D
JR NC,noadd1
ADD IX,BC
JR NC,noadd1
INC HL
noadd1:
DEC A
JR NZ,mul32b
LD E,LX
LD D,HX
POP IX
RET
;----------------------------------------------------------------------;
///////////////////////////////////////////////////////////////////////////////////////

View File

@ -6,6 +6,9 @@
cmd_pause:
ld de,MAIN_MSG.PAUSE ; ¨­¤¥ªá "Press any key to continue ..."
call MESSAGE ; ¢ë¢®¤ áâப¨
LD A,LF
LD C,Dss.PutChar
RST ToDSS
ld c,Dss.WaitKey ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
JP ToDSS
;ret

View File

@ -13,6 +13,7 @@ MAIN_MSG:
.DIR_3 EQU 10
.HELP EQU 11
.CALCULATING EQU 12
.CRLF EQU 13
.TABLE: db 0
/* 0 */ db "Volume in drive %1 %4 %5",CR,LF
@ -21,21 +22,22 @@ MAIN_MSG:
/* 1 */ db "Estex DSS version %1. Shell version %2.",CR,LF,0 ;R13
/* 2 */ db "Current date: %1",CR,LF,0
/* 3 */ db "Current time: %1",CR,LF,0
/* 4 */ db "Press any key to continue . . .",CR,LF,LF,0
/* 4 */ db "Press any key to continue . . .",CR,0
/* 5 */ db "Invalid parametr",CR,LF,0
/* 6 */ db "Echo is %1",CR,LF,0
/* 7 */ db "on",0
/* 8 */ db "off",0
/* 9 */ db " %1 File(s) %2 bytes",CR,LF
db " %3 Dir(s)",CR,LF,LF,0
; db " %3 Dir(s) %4 bytes free",CR,LF,LF,0
/* 10 */ db "%1 %2 %3 %4 - %5",CR,LF,0 ;FILENAME EXT SIZE DATE TIME
/* 9 */ db " %1 File(s) %2 bytes",CR,LF
db " %3 Dir(s) %4 bytes free",CR,LF,LF,0
; db " %3 Dir(s)",CR,LF,LF,0
/* 10 */ db "%1 %2 %3 %4 - %5",CR,LF,0 ;FILENAME EXT SIZE DATE TIME
/* 11 */ DB "COMMANDS:",CR,LF,CR,LF
DB "DIR REN | RENAME PATH HELP ",CR,LF
DB "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF
DB "MD | MKDIR TIME ECHO EXIT ",CR,LF
DB "RD | RMDIR DATE CLS REBOOT ",CR,LF,LF,0
/* 12 */ DB "Calculating free space...",CR,0
/* 13 */ DB CR,LF,0
;R11
DB 0
DZ "Unknown command"

View File

@ -1 +1 @@
175
201