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 ; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
F_FIRST: F_FIRST_FN: CALL F_FIRST.INIT_VARS
LD (.TMP),A PUSH HL
LD (.DTABUF),DE ;!TEST Current Dir ;[x] 15/10/23
LD A,B ; [ ] 10/06/24
LD (.FNDMODE),A IF OLD_DSS_FOR_OLD_EXE
PUSH HL LD A,(EXE_VERSION)
;!TEST Current Dir ;[x] 15/10/23 OR A
; [ ] 10/06/24 JR Z,.old_EXE
IF OLD_DSS_FOR_OLD_EXE ENDIF
LD A,(EXE_VERSION) ;
OR A CALL DIR_PATH_CHECK
JR Z,.old_EXE RET C
ENDIF ;
; .old_EXE: POP HL
CALL DIR_PATH_CHECK JR F_FIRST.begin
RET C ;
; F_FIRST: CALL .INIT_VARS
.old_EXE: .begin: CALL GETWORD
POP HL ;CALL LOADDIR
CALL GETWORD RET C
;CALL LOADDIR CALL MASK
RET C RET C
CALL MASK LD A,(.TMP)
RET C CALL SEARCH.Custom
LD A,(.TMP) RET C
CALL SEARCH.Custom LD HL,MASKARE
RET C
LD HL,MASKARE
.DTABUF+1: .DTABUF+1:
LD DE,0 LD DE,0
LD BC,11 ;!HARDCODE LD BC,11 ;!HARDCODE
@ -78,7 +76,13 @@ F_FIRST:
; ;
CALL GetName CALL GetName
JR .exit 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 GET_LABEL: PUSH DE
LD HL,.LABEL_MASK ; "\*.*" ¨¬ï ¬¥âª¨ LD HL,.LABEL_MASK ; "\*.*" ¨¬ï ¬¥âª¨
LD A,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬  LD A,FAT_ATTR.VOLUME_ID ;  âਡãâ ¬¥âª¨ ⮬ 
LD BC,Dss.F_First.FATname ; f_first, ä®à¬ â 11 LD B,high Dss.F_First.FATname
RST ToDSS CALL F_FIRST
;LD BC,Dss.F_First.FATname ; f_first, ä®à¬ â 11
;RST ToDSS
POP DE POP DE
LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL
RET C RET C

View File

@ -335,16 +335,16 @@ GO_ZERO EQU #0000
;FUNCTION ADDRESS ARRAY ;FUNCTION ADDRESS ARRAY
ADRST10: ;DS 512 ;,0 ADRST10: ;DS 512 ;,0
;...............................................[LOW ADDRESS ]: ;...............................................[LOW ADDRESS ]:
; 0 1 2 3 4 5 6 7 8 9 DEC HEX ; 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 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 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 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 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 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 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 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 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 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 DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT ; 9 5A..5F
IFN SHORT_RSTx10_TABLE IFN SHORT_RSTx10_TABLE
@ -363,15 +363,15 @@ ADRST10: ;DS 512 ;,0
;[ ] R09 ;[ ] R09
ENDIF ENDIF
;...............................................[HIGH ADDRESS]: ;...............................................[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 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 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 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 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 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 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 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 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 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 DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT
IFN SHORT_RSTx10_TABLE IFN SHORT_RSTx10_TABLE

View File

@ -1 +1 @@
992 993

View File

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

View File

@ -106,8 +106,13 @@ cmd_dir: push de
.SkipMask: LD C,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª .SkipMask: LD C,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª
RST ToDSS RST ToDSS
CALL read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª  CALL read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª 
JR NC,.NeXt
;
CALL print_err_message
SCF
RET
; ;
CALL Print_Header .NeXt: CALL Print_Header
; [ ] 01/10/23 ; [ ] 01/10/23
ld hl,Buffers.work.free ; ¨¬ï ä ©«  ld hl,Buffers.work.free ; ¨¬ï ä ©« 
ld de,Buffers.work.buffer1 ; 80 ¡ãä¥à ld de,Buffers.work.buffer1 ; 80 ¡ãä¥à
@ -566,9 +571,6 @@ S_LOW: WORD 0
S_MED: WORD 0 S_MED: WORD 0
S_HIGH: BYTE 0 S_HIGH: BYTE 0
dir_number: WORD 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_low: WORD 0
full_space_medium: WORD 0 full_space_medium: WORD 0
@ -589,207 +591,12 @@ SIZE_BUFFER: db " " ;
.bytes equ SIZE_BUFFER - $ .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 '\' ; SlashMaskFname: db '\' ;
; ¬ áª  ä ©«®¢ ; ¬ áª  ä ©«®¢
mask_fname: db "*.*",0 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 - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬) cmd_dir_options:; [x] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
DB 'f' : DW cmd_dir_freeSpace DB 'f' : DW cmd_dir_freeSpace
DB 'p' : DW cmd_dir_pause 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_ .HELP EQU .HELP_
.CALCULATING EQU .CALC_ .CALCULATING EQU .CALC_
.CRLF EQU .CRLF_ .CRLF EQU .CRLF_
.INFO_1 EQU .INFO_1_
.INFO_2 EQU .INFO_2_
; ;
!txtCounter DEFL 0 !txtCounter DEFL 0
; ; ­¥ ᤢ¨£ âì____ ; ; ­¥ ᤢ¨£ âì____
@ -32,7 +34,7 @@ MAIN_MSG:
; 1 2 3 4 5 6 7 ; 1 2 3 4 5 6 7
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789; ; 01234567890123456789012345678901234567890123456789012345678901234567890123456789;
stN .DIR_1_ : db "Volume in drive %1 %6 %7\r\n" 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" DZ "\r\nDirectory of %3\r\n\n"
stN .VERS_ : DZ "Estex DSS version %1. Shell version %2.\r\n" ;R13 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 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_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 .DIR_3_ : DZ "%4 %5 %3 %1 %2 \r\n" ;DATE TIME SIZE FILENAME EXT
stN .HELP_ : db "COMMANDS:\r\n" stN .HELP_ : db "COMMANDS:\r\n"
db "DIR REN | RENAME PATH HELP \r\n" db "CLS INFO REN = RENAME PATH HELP \r\n"
db "CD | CHDIR DEL | ERASE SET VER | VERSION \r\n" db "CD = CHDIR DEL = ERASE SET VER = VERSION \r\n"
db "MD | MKDIR TIME ECHO EXIT \r\n" db "MD = MKDIR TIME ECHO EXIT \r\n"
DZ "RD | RMDIR DATE CLS REBOOT \r\n\n" DZ "RD = RMDIR DATE REBOOT DIR [path] [/p /f] \r\n\n"
stN .CALC_ : DZ "Calculating free space...\r" 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 ; ;R11
db 0 db 0
DZ "Unknown command" DZ "Unknown command"

View File

@ -1,27 +1,26 @@
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ‚뢮¤ HL ¢ hex-ä®à¬ â¥ ; ‚뢮¤ HL ¢ hex-ä®à¬ â¥
; de=¡ãä¥à
; hl=ç¨á«® ; hl=ç¨á«®
hex16: ld a,h ; de=¡ãä¥à
call hex8 hex16_to_str: ld a,h
ld a,l call hex8_to_str
; ¢ë¢®¤ "a" ld a,l
hex8: push af hex8_to_str: push af
rrca rrca
rrca rrca
rrca rrca
rrca rrca
call .num call .num
pop af pop af
; ;
.num: and %0000'1111 .num: and %0000'1111
add a,#90 add a,#90
daa daa
adc a,#40 adc a,#40
daa daa
ld (de),a ld (de),a
inc de inc de
ret 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 ldi
ret po ret po
or a or a
jr nz,$-5 ;!FIXIT $ jr nz,.start
ret ret
; ‘ª®¯¨à. áâபã (á ­ã«¥¬) ; ‘ª®¯¨à. áâபã (á ­ã«¥¬)
@ -532,6 +532,7 @@ T8C24: db "OFF",0
include 'messages/main_txt.asm' ; á®®¡é¥­¨ï include 'messages/main_txt.asm' ; á®®¡é¥­¨ï
include 'procedures/parsers.asm' ; ä㭪樨 ¯à®ç¥á뢠­¨ï ¨ ¢ë¡®à  include 'procedures/parsers.asm' ; ä㭪樨 ¯à®ç¥á뢠­¨ï ¨ ¢ë¡®à 
include 'procedures/math.asm' ; ä㭪樨 ¬ â¥¬ â¨ç¥áª¨¥ include 'procedures/math.asm' ; ä㭪樨 ¬ â¥¬ â¨ç¥áª¨¥
include 'procedures/shared.asm' ; ä㭪樨 à §­ë¥
; ;
include 'Commands/exit.asm' ; ¢ë室 ¢ த¨â. ¯à®æ¥áá include 'Commands/exit.asm' ; ¢ë室 ¢ த¨â. ¯à®æ¥áá
include 'Commands/break.asm' ; ¢ë室 ¨§ ¯ àá¥à  bat include 'Commands/break.asm' ; ¢ë室 ¨§ ¯ àá¥à  bat
@ -541,6 +542,7 @@ T8C24: db "OFF",0
include 'Commands/cls.asm' ; ®ç¨á⪠ íªà ­  include 'Commands/cls.asm' ; ®ç¨á⪠ íªà ­ 
include 'Commands/date.asm' ; ¢ë¢®¤ ¨«¨ ãáâ ­®¢ª  ¤ âë/¢à¥¬¥­¨ include 'Commands/date.asm' ; ¢ë¢®¤ ¨«¨ ãáâ ­®¢ª  ¤ âë/¢à¥¬¥­¨
include 'Commands/dir.asm' ; ¢ë¢®¤ ᯨ᪠ ¤¨à¥ªâ®à¨¨ include 'Commands/dir.asm' ; ¢ë¢®¤ ᯨ᪠ ¤¨à¥ªâ®à¨¨
include 'Commands/info.asm' ; ¢ë¢®¤ ¨­ä®à¬ æ¨¨ ® ¤¨áª å
include 'Commands/chdir.asm' ; ᬥ­  ⥪. ª â «®£  include 'Commands/chdir.asm' ; ᬥ­  ⥪. ª â «®£ 
include 'Commands/mkdir.asm' ; á®§¤ ­¨¥ ª â «®£  include 'Commands/mkdir.asm' ; á®§¤ ­¨¥ ª â «®£ 
include 'Commands/rmdir.asm' ; 㤠«¥­¨¥ ª â «®£  include 'Commands/rmdir.asm' ; 㤠«¥­¨¥ ª â «®£ 

View File

@ -1 +1 @@
408 425