SHELL: new command "INFO"& Show FS in DIR.

CORE: Some fixes with F_First
This commit is contained in:
Anatoliy Belyanskiy 2024-06-25 04:59:02 +10:00
parent 7bda57266b
commit 4cebd03a1a
12 changed files with 418 additions and 303 deletions

View File

@ -13,34 +13,32 @@
;‚ë室­ë¥ §­ ç¥­¨ï:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
////////////////////////////////////////////////////////////////////////
F_FIRST:
LD (.TMP),A
LD (.DTABUF),DE
LD A,B
LD (.FNDMODE),A
PUSH HL
;!TEST Current Dir ;[x] 15/10/23
; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
CALL DIR_PATH_CHECK
RET C
;
.old_EXE:
POP HL
CALL GETWORD
;CALL LOADDIR
RET C
CALL MASK
RET C
LD A,(.TMP)
CALL SEARCH.Custom
RET C
LD HL,MASKARE
F_FIRST_FN: CALL F_FIRST.INIT_VARS
PUSH HL
;!TEST Current Dir ;[x] 15/10/23
; [ ] 10/06/24
IF OLD_DSS_FOR_OLD_EXE
LD A,(EXE_VERSION)
OR A
JR Z,.old_EXE
ENDIF
;
CALL DIR_PATH_CHECK
RET C
;
.old_EXE: POP HL
JR F_FIRST.begin
;
F_FIRST: CALL .INIT_VARS
.begin: CALL GETWORD
;CALL LOADDIR
RET C
CALL MASK
RET C
LD A,(.TMP)
CALL SEARCH.Custom
RET C
LD HL,MASKARE
.DTABUF+1:
LD DE,0
LD BC,11 ;!HARDCODE
@ -78,7 +76,13 @@ F_FIRST:
;
CALL GetName
JR .exit
;
.INIT_VARS:
LD (.TMP),A
LD (.DTABUF),DE
LD A,B
LD (.FNDMODE),A
RET
////////////////////////////////////////////////////////////////////////
;
;

View File

@ -247,8 +247,10 @@ FAT_STRING: DB 'FAT12'
GET_LABEL: PUSH DE
LD HL,.LABEL_MASK ; "\*.*" ¨¬ï ¬¥âª¨
LD A,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬ 
LD BC,Dss.F_First.FATname ; f_first, ä®à¬ â 11
RST ToDSS
LD B,high Dss.F_First.FATname
CALL F_FIRST
;LD BC,Dss.F_First.FATname ; f_first, ä®à¬ â 11
;RST ToDSS
POP DE
LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
RET C

View File

@ -335,16 +335,16 @@ GO_ZERO EQU #0000
;FUNCTION ADDRESS ARRAY
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 CREATE.NEW, 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.B, 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
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 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
; 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 CREATE.NEW, 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_FN,low F_NEXT, low MKDIR.B, 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
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 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
IFN SHORT_RSTx10_TABLE
@ -363,15 +363,15 @@ ADRST10: ;DS 512 ;,0
;[ ] R09
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 CREATE.NEW,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.B,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
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 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 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 CREATE.NEW,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_FN,high F_NEXT, high MKDIR.B,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
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 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
IFN SHORT_RSTx10_TABLE

View File

@ -1 +1 @@
992
993

View File

@ -493,34 +493,35 @@ EVALSTR: ld a,(hl)
; !! <09>¥ ¤¥« âì ®¤­ã ª®¬ ­¤ã > 256 ᨬ¢®«®¢)) !!
;
; BAT-ª®¬ ­¤ë (­¥ ®â¤¥«ïâì ®â ¤®á-ª®¬ ­¤)
BATLIST: DZ 'PAUSE' : DW cmd_pause ;CPAUSE
DZ 'REM' : DW cmd_rem ;CREM
DZ 'EXIT' : DW cmd_break ;break
BATLIST: DZ 'PAUSE' : DW cmd_pause
DZ 'REM' : DW cmd_rem
DZ 'EXIT' : DW cmd_break
;
; DSS-ª®¬ ­¤ë
CMDLIST: DZ 'CD' : DW cmd_chdir ;CCHDIR
DZ 'DIR' : DW cmd_dir ;DIR
DZ 'ECHO' : DW cmd_echo ;CECHO
CMDLIST: DZ 'CD' : DW cmd_chdir
DZ 'DIR' : DW cmd_dir
DZ 'ECHO' : DW cmd_echo
DZ 'ECHO.' : DW cmd_echoLN
DZ 'PATH' : DW cmd_path ;CPATH
DZ 'MD' : DW cmd_mkdir ;CMKDIR
DZ 'REN' : DW cmd_rename ;CRENAM
DZ 'DEL' : DW cmd_del ;CDELET
DZ 'RD' : DW cmd_rmdir ;CRMDIR
DZ 'SET' : DW cmd_set ;CSET
DZ 'TIME' : DW cmd_time ;CTIME
DZ 'DATE' : DW cmd_date ;CDATE
DZ 'VER' : DW cmd_version ;VERS
DZ 'CLS' : DW cmd_cls ;CLS
DZ 'CHDIR' : DW cmd_chdir ;CCHDIR
DZ 'MKDIR' : DW cmd_mkdir ;CMKDIR
DZ 'RENAME' : DW cmd_rename ;CRENAM
DZ 'ERASE' : DW cmd_del ;CDELET
DZ 'RMDIR' : DW cmd_rmdir ;CRMDIR
DZ 'HELP' : DW cmd_help ;HELP
DZ 'VERSION' : DW cmd_version ;VERS
DZ 'EXIT' : DW cmd_exit ;CEXIT
DZ 'REBOOT' : DW cmd_reboot ;REBOOT
DZ 'PATH' : DW cmd_path
DZ 'MD' : DW cmd_mkdir
DZ 'REN' : DW cmd_rename
DZ 'DEL' : DW cmd_del
DZ 'RD' : DW cmd_rmdir
DZ 'INFO' : DW cmd_info
DZ 'SET' : DW cmd_set
DZ 'TIME' : DW cmd_time
DZ 'DATE' : DW cmd_date
DZ 'VER' : DW cmd_version
DZ 'CLS' : DW cmd_cls
DZ 'CHDIR' : DW cmd_chdir
DZ 'MKDIR' : DW cmd_mkdir
DZ 'RENAME' : DW cmd_rename
DZ 'ERASE' : DW cmd_del
DZ 'RMDIR' : DW cmd_rmdir
DZ 'HELP' : DW cmd_help
DZ 'VERSION' : DW cmd_version
DZ 'EXIT' : DW cmd_exit
DZ 'REBOOT' : DW cmd_reboot
DB #00

View File

@ -106,8 +106,13 @@ cmd_dir: push de
.SkipMask: LD C,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª
RST ToDSS
CALL read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª 
JR NC,.NeXt
;
CALL print_err_message
SCF
RET
;
CALL Print_Header
.NeXt: CALL Print_Header
; [ ] 01/10/23
ld hl,Buffers.work.free ; ¨¬ï ä ©« 
ld de,Buffers.work.buffer1 ; 80 ¡ãä¥à
@ -566,9 +571,6 @@ S_LOW: WORD 0
S_MED: WORD 0
S_HIGH: BYTE 0
dir_number: WORD 0
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
@ -589,207 +591,12 @@ SIZE_BUFFER: db " " ;
.bytes equ SIZE_BUFFER - $
;
; [x] ⥯¥àì ­¥ «¥§¥â ­ ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ­®¢ë© ¯ à ¬¥âà ä㭪樨 DskInfo
; ¨­ ï «®£¨ª  ¯®«ã祭¨ï ¬¥âª¨ ⮬  - á­ ç «  ¨é¥âáï ¢ ª®à­¥¢®© ¤¨à¥ªâ®à¨¨,
; ¥á«¨ â ¬ ­¥â, â® ¡¥àñâáï ¨§ BPB
read_disk_info: OR #80
LD HL,Buffers.work.buffer
.full+1: LD B,0
LD C,Dss.DskInfo
RST ToDSS
; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; Œ¥âª  ¤¨áª  ¢ BPB
;
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE':DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; max sector (LBA28) #0FFF'FFFF
;
EX AF,AF'
LD A,D
AND E
EXX
AND D
AND E
EXX
INC A
LD (.full),A
EX AF,AF'
;
; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE
EXX
LD BC,0
EXX
SRL B
RR C
RRCA
JR C,.loop2
;
.loop1: SLA L
RL H
EXX
RL L
RL H
RL B
EXX
;
SLA E
RL D
EXX
RL E
RL D
RL C
EXX
;
RRCA
JP NC,.loop1
;
.loop2: SLA L
RL H
EXX
RL L
RL H
RL B
EXX
;
SLA E
RL D
EXX
RL E
RL D
RL C
EXX
;
SRL B
RR C
JP NC,.loop2
; <-- B':HL'HL, C':DE':DE
EXX
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
LD D,0
LD HL,Buffers.work.buffer
; âãâ ¢ HL ¤«¨­  ¯®«ï "” ©«®¢ ï á¨á⥬ "
LD E,(HL)
ADD HL,DE
INC HL
; ¤«¨­  ¯®«ï "‘¥à¨©­ë© ­®¬¥à ¤¨áª "
LD A,(HL)
LD E,A
ADD HL,DE
INC HL
PUSH HL ; 㪠§ â¥«ì ­  ¤«¨­ã ¯®«ï "Œ¥âª  ¤¨áª "
CP 4 ;!HARDCODE ¤«¨­  ¯®«ï á¥à¨©­®£® ­®¬¥à 
JR NZ,unknown_serial
DEC HL
; áâ à襥 á«®¢® á¥à¨©­¨ª 
LD D,(HL)
DEC HL
LD E,(HL)
DEC HL
PUSH HL
EX DE,HL
ld de,serial_string ; xxxx-xxxx
call hex16
POP HL
;
ld a,"-"
ld (de),a
INC DE
; ¬« ¤è¥¥ á«®¢® á¥à¨©­¨ª 
LD A,(HL)
DEC HL
LD L,(HL)
LD H,A
call hex16
;
.get_label: ; âãâ ¢ HL ¤«¨­  ¯®«ï "Œ¥âª  ¤¨áª "
POP HL
LD A,(HL)
INC HL
AND A
jr z,.no_volume_label ; ¤ 
PUSH HL
LD B,A
LD A,' '
;
.loop: CP (HL)
JR NZ,.good_label
INC HL
DJNZ .loop
POP HL ; á­¨¬ ¥¬ «¨è­¥¥
; ­¥â ¬¥âª¨
.no_volume_label:; %6
ld hl,volume_string_no ; áâப 
ld de,Buffers.bat_params.PRM6; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
XOR A
LD (Buffers.bat_params.PRM7),A
ret
.good_label: POP HL
PUSH HL ; ⮫ª ¥¬ «¨è­¥¥
; ¥áâì ¬¥âª 
volume_label: POP DE ; á­¨¬ ¥¬ «¨è­¥¥
; %7
ld de,Buffers.bat_params.PRM7
ld bc,11 ;!HARDCODE ¤«¨­  ¬¥âª¨
ldir
xor a
ld (de),a
; %6
ld hl,volume_string_yes ; áâப 
ld de,Buffers.bat_params.PRM6; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
ret
;
; ¥á«¨ ­¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©­ë© ­®¬¥à ¤¨áª  ¨«¨ ä®à¬ â ­¥¨§¢¥á⥭
unknown_serial: ; á¥à¨©­ë© ­®¬¥à ¤¨áª  - ­¥¨§¢¥á⥭ ;!HARDCODE ­¨¦¥
LD HL,serial_string
LD A,'?'
LD B,serial_string.Size
.loop: LD (HL),A
INC HL
DJNZ .loop
LD HL,serial_string+4
LD (HL),'-'
;POP HL ; «¨è­¥¥
JP read_disk_info.get_label
;
;---------------;
SlashMaskFname: db '\' ;
; ¬ áª  ä ©«®¢
mask_fname: db "*.*",0
;---------------;
; ª®à¥­ì ¤¨áª 
;root_path: db 'X:\',0
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
serial_string: db "xxxx-xxxx"
.Size equ $-serial_string
db 0 ; § ªà뢠誠
volume_string_no:
db "has no label",0
volume_string_yes:
db "has label",0
; has_not_full_info:
; db ' (?)',0
;
cmd_dir_options:; [x] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
DB 'f' : DW cmd_dir_freeSpace
DB 'p' : DW cmd_dir_pause

75
SHELL/Commands/INFO.ASM Normal file
View File

@ -0,0 +1,75 @@
;[ ] 24/06/2024
cmd_info: LD DE,MAIN_MSG.INFO_1 ; 身丰花 "Drive Label Serial number Size"
CALL ECHO_MESSAGE
;
LD HL,.Collect_Msg
LD C,Dss.PChars
RST ToDSS
;
LD A,":"
LD (Buffers.bat_params.PRM9+1),A
XOR A
LD (Buffers.bat_params.PRM9+2),A ; Drive "X:",0
LD (read_disk_info.full),A
;
LD C,Dss.CurDisk
RST ToDSS
LD B,C
LD C,-1
;
.loop: INC C
PUSH BC
LD A,C
ADD "A"
LD (Buffers.bat_params.PRM9),A
LD A,C
CALL read_disk_info
JR C,.next_drv
; %7 - Volume label
; serial_string - Volume serial number string
; full_space_high \
; full_space_medium - Partition size
; full_space_low /
;
LD HL,.Collect_Msg
LD C,Dss.PChars
RST ToDSS
;
LD HL,serial_string
LD DE,Buffers.bat_params.PRM4 ; Volume serial number string
CALL ncopy_string
; full capacity
ld a,(full_space_high)
ld hl,(full_space_medium) ; 摵. <20>抉鴾
exx
ld hl,(full_space_low) ; 洮. <20>抉鴾
CALL PRN_DISK_SIZE
; %5..6 - Full size
;
; 銈酮罱兒恥<E58592>言 PRM5
LD HL,Buffers.bat_params.PRM5 - 1
LD DE,Buffers.bat_params.PRM5
.clear_spaces: INC HL
LD A,(HL)
CP " "
JR Z,.clear_spaces
AND A
CALL NZ,copy_string
;
.print_info_2: LD DE,MAIN_MSG.INFO_2 ; 身丰花 "Drive Label Serial number Size"
CALL ECHO_MESSAGE
;
.next_drv: POP BC
DJNZ .loop
RET
;
.Collect_Msg: DZ "Please wait, information is being collected...\r"
/*
0 1 2 3 4 5 6 7
01234567890123456789012345678901234567890123456789012345678901234567890123456789;
Drive File System Label Serial number Size in bytes
C: FAT32 NO NAME xxxx-xxxx 147,102,629,888.
D: FAT16 SP_SYS xxxx-xxxx 147,102,629,888.
;
*/

View File

@ -22,6 +22,8 @@ MAIN_MSG:
.HELP EQU .HELP_
.CALCULATING EQU .CALC_
.CRLF EQU .CRLF_
.INFO_1 EQU .INFO_1_
.INFO_2 EQU .INFO_2_
;
!txtCounter DEFL 0
; ; ­¥ ᤢ¨£ âì____
@ -32,7 +34,7 @@ MAIN_MSG:
; 1 2 3 4 5 6 7
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789;
stN .DIR_1_ : db "Volume in drive %1 %6 %7\r\n"
db "Volume Serial Number is %2\r\n"
db "Volume Serial Number is %2, file sistem is %8\r\n"
DZ "\r\nDirectory of %3\r\n\n"
stN .VERS_ : DZ "Estex DSS version %1. Shell version %2.\r\n" ;R13
stN .DATE_ : DZ "Current date: %1, %2\r\n" ; [x] ¢ë¢®¤ ¤­ï ­¥¤¥«¨ 26/01/2023
@ -48,11 +50,13 @@ MAIN_MSG:
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"
db "CD | CHDIR DEL | ERASE SET VER | VERSION \r\n"
db "MD | MKDIR TIME ECHO EXIT \r\n"
DZ "RD | RMDIR DATE CLS REBOOT \r\n\n"
db "CLS INFO REN = RENAME PATH HELP \r\n"
db "CD = CHDIR DEL = ERASE SET VER = VERSION \r\n"
db "MD = MKDIR TIME ECHO EXIT \r\n"
DZ "RD = RMDIR DATE REBOOT DIR [path] [/p /f] \r\n\n"
stN .CALC_ : DZ "Calculating free space...\r"
stN .INFO_1_ : DZ "\r\nDrive File System Label Serial number Size in bytes\r\n"
stN .INFO_2_ : DZ " %9 \r\t %8\r\t\t\t %7\r\t\t\t\t\t %4\r\t\t\t\t\t\t\t %5.\r\n"
; ;R11
db 0
DZ "Unknown command"

View File

@ -1,27 +1,26 @@
;----------------------------------------------------------------------;
; ‚뢮¤ HL ¢ hex-ä®à¬ â¥
; de=¡ãä¥à
; hl=ç¨á«®
hex16: ld a,h
call hex8
ld a,l
; ¢ë¢®¤ "a"
hex8: push af
rrca
rrca
rrca
rrca
call .num
pop af
;
.num: and %0000'1111
add a,#90
daa
adc a,#40
daa
ld (de),a
inc de
ret
; de=¡ãä¥à
hex16_to_str: ld a,h
call hex8_to_str
ld a,l
hex8_to_str: push af
rrca
rrca
rrca
rrca
call .num
pop af
;
.num: and %0000'1111
add a,#90
daa
adc a,#40
daa
ld (de),a
inc de
ret
;----------------------------------------------------------------------;

221
SHELL/Procedures/shared.asm Normal file
View File

@ -0,0 +1,221 @@
;----------------------------------------------------------------------;
; [x] ⥯¥àì ­¥ «¥§¥â ­ ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ­®¢ë© ¯ à ¬¥âà ä㭪樨 DskInfo
; ¨­ ï «®£¨ª  ¯®«ã祭¨ï ¬¥âª¨ ⮬  - á­ ç «  ¨é¥âáï ¢ ª®à­¥¢®© ¤¨à¥ªâ®à¨¨,
; ¥á«¨ â ¬ ­¥â, â® ¡¥àñâáï ¨§ BPB
; ‚室: ¢ëáâ ¢¨âì ¯¥à¥¬¥­­ãî read_disk_info.full:
; 0 - ­¥ áç¨â âì ᢮¡®¤­®¥ ¬¥áâ®, !0 - áç¨â âì
; ‚ë室:
; %7 - Volume label
; serial_string - Volume serial number string
; full_space_high \
; full_space_medium - Partition size
; full_space_low /
; %6 - "has no label" or "has label"
;
read_disk_info: OR #80
LD HL,Buffers.work.buffer
.full+1: LD B,0
LD C,Dss.DskInfo
RST ToDSS
RET C
; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; Œ¥âª  ¤¨áª  ¢ BPB
; ”¨§¨ç¥áª¨© ­®¬¥à ¤¨áª , ­®¬¥à à §¤¥« 
;
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE':DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; max sector (LBA28) #0FFF'FFFF
;
EX AF,AF'
LD A,D
AND E
EXX
AND D
AND E
EXX
INC A
LD (.full),A
;
AND H
EX AF,AF'
;
; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE
EXX
LD BC,0
EXX
SRL B
RR C
RRCA
JR C,.loop2
;
.loop1: SLA L
RL H
EXX
RL L
RL H
RL B
EXX
;
SLA E
RL D
EXX
RL E
RL D
RL C
EXX
;
RRCA
JR NC,.loop1
;
.loop2: SLA L
RL H
EXX
RL L
RL H
RL B
EXX
;
SLA E
RL D
EXX
RL E
RL D
RL C
EXX
;
SRL B
RR C
JR NC,.loop2
; <-- B':HL'HL, C':DE':DE
EXX
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
; copy FS type
LD HL,Buffers.work.buffer
LD DE,Buffers.bat_params.PRM8; ªã¤ 
LD B,0
LD C,(HL) ; âãâ ¢ HL ¤«¨­  ¯®«ï "” ©«®¢ ï á¨á⥬ "
INC HL
LDIR
EX DE,HL
LD (HL),0
EX DE,HL
;
LD D,0
; ; âãâ ¢ HL ¤«¨­  ¯®«ï "” ©«®¢ ï á¨á⥬ "
; LD E,(HL)
; ADD HL,DE
; INC HL
; ¤«¨­  ¯®«ï "‘¥à¨©­ë© ­®¬¥à ¤¨áª "
LD A,(HL)
LD E,A
ADD HL,DE
INC HL
PUSH HL ; 㪠§ â¥«ì ­  ¤«¨­ã ¯®«ï "Œ¥âª  ¤¨áª "
CP 4 ;!HARDCODE ¤«¨­  ¯®«ï á¥à¨©­®£® ­®¬¥à 
JR NZ,.unknown_serial
DEC HL
; áâ à襥 á«®¢® á¥à¨©­¨ª 
LD D,(HL)
DEC HL
LD E,(HL)
DEC HL
PUSH HL
EX DE,HL
LD DE,serial_string ; xxxx-xxxx
CALL hex16_to_str
POP HL
;
LD A,"-"
LD (DE),A
INC DE
; ¬« ¤è¥¥ á«®¢® á¥à¨©­¨ª 
LD A,(HL)
DEC HL
LD L,(HL)
LD H,A
CALL hex16_to_str
;
.get_label: ; âãâ ¢ HL ¤«¨­  ¯®«ï "Œ¥âª  ¤¨áª "
POP HL
LD A,(HL)
INC HL
AND A
JR Z,.no_volume_label ; ¤ 
PUSH HL
LD B,A
LD A,' '
;
.loop: CP (HL)
JR NZ,.good_label
INC HL
DJNZ .loop
POP HL ; á­¨¬ ¥¬ «¨è­¥¥
; ­¥â ¬¥âª¨
.no_volume_label:; %6
LD HL,volume_string_no ; áâப 
LD DE,Buffers.bat_params.PRM6; ªã¤ 
CALL ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
XOR A
LD (Buffers.bat_params.PRM7),A
RET
;
.good_label: POP HL
PUSH HL ; ⮫ª ¥¬ «¨è­¥¥
; ¥áâì ¬¥âª 
.volume_label: POP DE ; á­¨¬ ¥¬ «¨è­¥¥
; %7
LD DE,Buffers.bat_params.PRM7
LD BC,11 ;!HARDCODE ¤«¨­  ¬¥âª¨
LDIR
XOR A
LD (DE),A
; %6
LD HL,volume_string_yes ; áâப 
LD DE,Buffers.bat_params.PRM6; ªã¤ 
XOR A
JP ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
;
; ¥á«¨ ­¥ 㤠«®áì ¯à®ç¨â âì á¥à¨©­ë© ­®¬¥à ¤¨áª  ¨«¨ ä®à¬ â ­¥¨§¢¥á⥭
.unknown_serial: ; á¥à¨©­ë© ­®¬¥à ¤¨áª  - ­¥¨§¢¥á⥭ ;!HARDCODE ­¨¦¥
LD HL,serial_string
LD A,'?'
LD B,serial_string.Size
.loop3: LD (HL),A
INC HL
DJNZ .loop3
LD HL,serial_string+4
LD (HL),'-'
JR read_disk_info.get_label
;
///////////////////////////////////////////////////////////////////////
free_space_low: WORD 0
free_space_medium: WORD 0
free_space_high: BYTE 0
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
serial_string: db "xxxx-xxxx"
.Size equ $-serial_string
db 0 ; § ªà뢠誠
;
volume_string_no: db "has no label",0
;
volume_string_yes: db "has label",0
;
; has_not_full_info: db ' (?)',0
///////////////////////////////////////////////////////////////////////
;----------------------------------------------------------------------;

View File

@ -381,7 +381,7 @@ ncopy_string:
ldi
ret po
or a
jr nz,$-5 ;!FIXIT $
jr nz,.start
ret
; ‘ª®¯¨à. áâபã (á ­ã«¥¬)
@ -532,6 +532,7 @@ T8C24: db "OFF",0
include 'messages/main_txt.asm' ; á®®¡é¥­¨ï
include 'procedures/parsers.asm' ; ä㭪樨 ¯à®ç¥á뢠­¨ï ¨ ¢ë¡®à 
include 'procedures/math.asm' ; ä㭪樨 ¬ â¥¬ â¨ç¥áª¨¥
include 'procedures/shared.asm' ; ä㭪樨 à §­ë¥
;
include 'Commands/exit.asm' ; ¢ë室 ¢ த¨â. ¯à®æ¥áá
include 'Commands/break.asm' ; ¢ë室 ¨§ ¯ àá¥à  bat
@ -541,6 +542,7 @@ T8C24: db "OFF",0
include 'Commands/cls.asm' ; ®ç¨á⪠ íªà ­ 
include 'Commands/date.asm' ; ¢ë¢®¤ ¨«¨ ãáâ ­®¢ª  ¤ âë/¢à¥¬¥­¨
include 'Commands/dir.asm' ; ¢ë¢®¤ ᯨ᪠ ¤¨à¥ªâ®à¨¨
include 'Commands/info.asm' ; ¢ë¢®¤ ¨­ä®à¬ æ¨¨ ® ¤¨áª å
include 'Commands/chdir.asm' ; ᬥ­  ⥪. ª â «®£ 
include 'Commands/mkdir.asm' ; á®§¤ ­¨¥ ª â «®£ 
include 'Commands/rmdir.asm' ; 㤠«¥­¨¥ ª â «®£ 

View File

@ -1 +1 @@
408
425