DSS: +new options for Dss.DskInfo. SHELL: keys for cmd_dir in progress...

This commit is contained in:
Anatoliy Belyanskiy 2023-11-24 05:20:54 +10:00
parent 55e6b9b07d
commit 1533b89738
18 changed files with 572 additions and 502 deletions

View File

@ -1460,7 +1460,7 @@ SEARCH:
CPL CPL
LD C,A LD C,A
LD IX,DIRPAGE.buffer LD IX,DIRPAGE.buffer
;TEST 9/11/23 ;!TEST 9/11/23
; EXX ; EXX
; LD DE,0 ; LD DE,0
; EXX ; EXX

View File

@ -1 +1 @@
620 621

View File

@ -307,7 +307,7 @@ A8286: ex af,af'
ld hl,BATLIST ; ª®¬ ­¤ë "pause","rem" + dos-ª®¬ ­¤ë ld hl,BATLIST ; ª®¬ ­¤ë "pause","rem" + dos-ª®¬ ­¤ë
; de=struct_input_line+5, c=¤«¨­  áâப¨ (¡¥§ ª®­æ. ¯à®¡¥«®¢) ; de=struct_input_line+5, c=¤«¨­  áâப¨ (¡¥§ ª®­æ. ¯à®¡¥«®¢)
; ¢ë¯®«­. ª®¬ ­¤ã ¨«¨ § ¯ãáâ¨âì ä ©« ; ¢ë¯®«­. ª®¬ ­¤ã ¨«¨ § ¯ãáâ¨âì ä ©«
jp COMP004 jp COMP005.start

View File

@ -67,7 +67,7 @@ cmd_dt1:ld c,Dss.SysTime
pop ix pop ix
pop hl pop hl
call A8964 call A8964
ld de,2 ; 身丰花 "Current date: %1" ld de,MAIN_MSG.DATE ; 身丰花 "Current date: %1"
jp MESSAGE ; ¢ë¢¥á⨠áâபã jp MESSAGE ; ¢ë¢¥á⨠áâபã
@ -148,5 +148,5 @@ cmd_tm1:ld c,Dss.SysTime
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
xor a xor a
ld (hl),a ; ¢ ª®­¥æ áâப¨ ld (hl),a ; ¢ ª®­¥æ áâப¨
ld de,3 ; 身丰花 "Current time: %1" ld de,MAIN_MSG.TIME ; 身丰花 "Current time: %1"
jp MESSAGE ; ¢ë¢¥á⨠áâபã jp MESSAGE ; ¢ë¢¥á⨠áâபã

View File

@ -5,17 +5,32 @@
;/////////////////////////////////////////////////// ;///////////////////////////////////////////////////
cmd_dir: cmd_dir:
push de push de
ld c,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª ;;;; [ ] ¯®¤¤¥à¦ª  ¯ à ¬¥â஢
; § ­ã«ï¥¬ ¢á¥ ¯ à ¬¥âàë ­  áâ àâ¥
xor a
ld (read_disk_info.full),a
; ¢ë¯®«­ï¥¬/­ áâà ¨¢ ¥¬ ¢á¥ ­ ©¤¥­­ë¥ ¯ à ¬¥âàë ¢ áâப¥
ld hl,cmd_dir_options
LD C,256-3 ;!HARDCODE ¤«¨­  áâப¨ á ª®¬ ­¤®©
.parse: call RUN_OPTION
jr nc,.skip
jp (hl)
;
.skip: ld c,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª
RST ToDSS RST ToDSS
ADD A,"A" ADD A,"A"
ld (root_path),a ; ­®¬¥à ¤¨áª  ld (root_path),a ; ­®¬¥à ¤¨áª 
SUB "A" SUB "A"
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª  call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª 
;
pop de pop de
ld hl,0 ld hl,0
ld (D88DC),hl ld (D88DC),hl
ld (D88DE),hl ld (D88DE),hl
ld (D88E0),hl ld (D88E0),hl
ld (dir_number),hl
ex de,hl ex de,hl
ld a,(hl) ld a,(hl)
or a or a
@ -26,41 +41,51 @@ cmd_dir:
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨ ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS RST ToDSS
; [ ] 1/10/23 ; [ ] 1/10/23
;
;ld hl,T9186 ; ¨¬ï ä ©« 
;ld de,T9186 ; ¡ãä¥à
ld hl,work_buffer1 ; ¨¬ï ä ©«  ld hl,work_buffer1 ; ¨¬ï ä ©« 
ld de,work_buffer1 ; 80 ¡ãä¥à ld de,work_buffer1 ; 80 ¡ãä¥à
ld a,#37 ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ ) ld a,#37 ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11) ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11)
RST ToDSS RST ToDSS
;R14 JR C,.dir_empty ;R14
;jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï DSS_Error.sys.FILE_NOT_FOUND CALL .Print_Header
JR NC,.not_empty
CP DSS_Error.sys.FILE_NOT_FOUND
JP NZ,print_err_message
SCF
JP .Print_Header
.not_empty:
CALL .Print_Header
;
; 横« ¢ë¢®¤  ᯨ᪠ ä ©«®¢/¯ ¯®ª ; 横« ¢ë¢®¤  ᯨ᪠ ä ©«®¢/¯ ¯®ª
.loop: ;ld hl,T9186 ; à ¡. ¡ãä¥à .loop: ld hl,work_buffer1 ; 80
ld hl,work_buffer1 ; 80
ld de,33 ld de,33
add hl,de add hl,de
call A88E2 call A88E2
;ld ix,T9186
ld ix,work_buffer1 ; 80 ld ix,work_buffer1 ; 80
ld a,(ix+32) ;  âਡãâ ⥪. § ¯¨á¨ ld a,(ix+32) ;  âਡãâ ⥪. § ¯¨á¨
and FAT_ATTR.DIRECTORY ; ¯ ¯ª  ? and FAT_ATTR.DIRECTORY ; ¯ ¯ª  ?
jr z,.calc_size ; ­¥â jr z,.calc_size ; ­¥â
; áç¨â ¥¬ ¯ ¯ª¨
; ­¥ áç¨â ¥¬ ¯ ¯ª®© á«ã¦¥¡­ë¥ "." ¨ ".."
ld d,(ix+33)
ld e,(ix+34)
ld hl,-('..')
add hl,de
ld a,h
or l
jr z,.next
ld hl,-('. ')
add hl,de
ld a,h
or l
jr z,.next
; 㢥«¨ç¨¢ ¥¬ áçñâ稪 ¯ ¯®ª ; 㢥«¨ç¨¢ ¥¬ áçñâ稪 ¯ ¯®ª
ld hl,(dir_number) ld hl,(dir_number)
inc hl inc hl
ld (dir_number),hl ld (dir_number),hl
jr .next jr .next
;;R14
.dir_empty:
push af
CALL .Print_Header
pop af
CALL print_err_message
jr .print
;;R14
; ¯à¨¡ ¢¨âì à §¬¥à ⥪. ä ©«  ; ¯à¨¡ ¢¨âì à §¬¥à ⥪. ä ©« 
.calc_size: .calc_size:
ld hl,(D88DC) ld hl,(D88DC)
@ -131,17 +156,27 @@ cmd_dir:
ldi ldi
ldi ldi
ldi ldi
­¥¤®¤¥« ­® ; [ ] ¢ë¢®¤ ª®«¨ç¥á⢠ ¯ ¯®ª
; [ ] ¢ë¢®¤ ®¡é¥£® ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ 
ld hl,T8B46 ; "0 000 000 000" ld hl,T8B46 ; "0 000 000 000"
ld de,PRM2 ; ªã¤  ld de,PRM2 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢. call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
ld de,9 ; ¨­¤¥ªá " %1 file(s) %2 bytes" ;
;!TEST
;ld hl,(dir_number)
;ld de,PRM3
;call hex2dec_ascii_16bit.n10000
; „¥áïâ¨ç­ë© ¢ë¢®¤
ld hl,(dir_number)
ld ix,PRM3 ; ¡ãä¥à
call A8964
;xor a
;ld (de),a
;
ld de,MAIN_MSG.DIR_2 ; ¨­¤¥ªá " %1 file(s) %2 bytes"
jp MESSAGE ; ¢ë¢¥á⨠áâபã jp MESSAGE ; ¢ë¢¥á⨠áâபã
;R14
.Print_Header: .Print_Header:
PUSH AF
;
; %1 ; %1
ld a,(screen_path) ; ¤¨áª ld a,(screen_path) ; ¤¨áª
ld hl,PRM1 ld hl,PRM1
@ -154,27 +189,16 @@ cmd_dir:
ld hl,serial_string ; áâப  á¥à¨©­®£® ­®¬¥à  ¤¨áª  ld hl,serial_string ; áâப  á¥à¨©­®£® ­®¬¥à  ¤¨áª 
ld de,PRM2 ; ªã¤  ld de,PRM2 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬) call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; ; %3
;R14 ld hl,screen_path
POP AF
ld hl,screen_path
JR NC,.not_empty_2
;
ld a,(screen_path)
LD (.str),A
ld hl,.str ; íªà ­. ¯ãâì
; %3
.not_empty_2:
;
ld de,PRM3 ; 16 ¡ãä¥à ld de,PRM3 ; 16 ¡ãä¥à
CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬) CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; ;
ld de,0 ; ¨­¤¥ªá "Volume in drive %1 has no label..." ;!HARDCODE ­®¬¥à áâப¨ MSG0 ld de,MAIN_MSG.DIR_1 ; ¨­¤¥ªá "Volume in drive %1..." ;!HARDCODE ­®¬¥à áâப¨ MSG0
JP MESSAGE ; ¢ë¢¥á⨠áâபã JP MESSAGE ; ¢ë¢¥á⨠áâபã
.str: DZ 'X:\ is empty' ;R14 ;!FIXIT
; ;
; <20>®¤£®â®¢¨âì áâபã ᯨ᪠ ä ©«®¢/¯ ¯®ª ; <20>®¤£®â®¢¨âì áâபã ᯨ᪠ ä ©«®¢/¯ ¯®ª
A88E2: ld bc,8 A88E2: ld bc,8
ld de,PRM1 ; ¡ãä¥à ld de,PRM1 ; ¡ãä¥à
@ -186,12 +210,11 @@ A88E2: ld bc,8
ldi ldi
ldi ldi
ld (de),a ld (de),a
;ld ix,T9186
ld ix,work_buffer1 ld ix,work_buffer1
call A89A4 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©«  ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>) call A89A4 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©«  ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
call A89FA ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨ call A89FA ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
call A8A19 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨ call A8A19 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
ld de,10 ; ¨­¤¥ªá "%1 %2 %3 %4 %5" ld de,MAIN_MSG.DIR_3 ; ¨­¤¥ªá "%1 %2 %3 %4 %5"
jp MESSAGE ; ¢ë¢®¤ áâப¨ jp MESSAGE ; ¢ë¢®¤ áâப¨
@ -326,7 +349,7 @@ A8A7E: ld c,2Fh
inc hl inc hl
ret ret
;!TODO ¯¥à¥â é¨âì ¢ procedures/math.asm
; „¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤ ; „¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
A8A8F: ld ix,T8B2E ; "0000000000" A8A8F: ld ix,T8B2E ; "0000000000"
exx exx
@ -413,9 +436,10 @@ A8B16: inc a
ret ret
; ;
D88DC: dw 0 D88DC: dw 0
D88DE: dw 0 D88DE: dw 0
D88E0: dw 0 D88E0: dw 0
dir_number: dw 0
; ;
T8B2E: db "000000000" T8B2E: db "000000000"
@ -425,12 +449,14 @@ T8B46: db "0 000 000 000",0
db 0 db 0
; ;
;!FIXIT ¯¥à¥­¥á⨠¢ DSS - FN #04: GET_BPB ; [ ] ⥯¥àì ­¥ «¥§¥â ­ ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ­®¢ë© ¯ à ¬¥âà ä㭪樨 DskInfo
; ¯à®ç¨â âì BPB ¤¨áª  ; ¨­ ï «®£¨ª  ¯®«ã祭¨ï ¬¥âª¨ ⮬  - á­ ç «  ¨é¥âáï ¢ ª®à­¥¢®© ¤¨à¥ªâ®à¨¨,
; ¥á«¨ â ¬ ­¥â, â® ¡¥àñâáï ¨§ BPB
read_disk_info: read_disk_info:
OR #80 OR #80
LD HL,work_buffer LD HL,work_buffer
LD BC,Dss.DskInfo .full+1: LD B,0
LD C,Dss.DskInfo
RST ToDSS RST ToDSS
; ” ©«®¢ ï á¨á⥬  ; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª  ; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
@ -558,32 +584,6 @@ unknown_serial:
; ;
; ‚뢮¤ 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
; ¬ áª  ä ©«®¢ ; ¬ áª  ä ©«®¢
mask_fname: mask_fname:
db "*.*",0 db "*.*",0
@ -598,7 +598,41 @@ serial_string:
.Size equ $-serial_string .Size equ $-serial_string
db 0 ; § ªà뢠誠 db 0 ; § ªà뢠誠
volume_string_no: ;!FIXIT ᤥ« âì ç¥à¥§ PRM volume_string_no:
db "has no label",0 db "has no label",0
volume_string_yes: volume_string_yes:
db "has label",0 db "has label",0
;
cmd_dir_options:
; [ ] ¯ à ¬¥âà /F - ¢ë¢®¤ ª®«¨ç¥á⢠ ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥ (â®à¬®§¨â, ¯®í⮬㠯 à ¬¥â஬)
DB 'f' : DW cmd_dir_freeSpace
.Size EQU ($-cmd_dir_options)/3
.paramLength equ 3
;
;
cmd_dir_freeSpace:
PUSH DE
PUSH BC
; § â¨à ¥¬ ­ ©¤¥­ë© ª«îç
ld A,'/'
ex de,hl
ld bc,4
CPDR
inc hl
ld (hl),' '
inc hl
ld (hl),' '
; áâ ¢¨¬ ®¯æ¨î ¤«ï API DSS DskInfo
ld a,1
ld (read_disk_info.full),a
; ¢ë¢®¤¨¬ áâப㠮 à áçñ⥠᢮¡®¤­®£® ¬¥áâ  â ª, ç⮡ ®­  § âñà« áì
LD DE,MAIN_MSG.CALCULATING
CALL MESSAGE
; ¢®§¢à é ¥¬áï ¢ 横«
POP BC
POP DE
jp cmd_dir.parse
;

View File

@ -38,7 +38,7 @@ A862E: ld a,(echo_mode) ; 䫠
call FMESAGE ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã call FMESAGE ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã
ld de,PRM1 ; ªã¤  ( à£ã¬¥­â %1) ld de,PRM1 ; ªã¤  ( à£ã¬¥­â %1)
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢. call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
ld de,6 ; 身丰花 "Echo is %1" ld de,MAIN_MSG.ECHO ; 身丰花 "Echo is %1"
jp MESSAGE jp MESSAGE
; ;
A864B: ld (echo_mode),a ; ä« £ echo-०¨¬  A864B: ld (echo_mode),a ; ä« £ echo-०¨¬ 

View File

@ -4,5 +4,5 @@
; ;
;/////////////////////////////////////////////////// ;///////////////////////////////////////////////////
cmd_help: cmd_help:
ld de,11 ; 身丰花 "COMMANDS: ..." ld de,MAIN_MSG.HELP ; 身丰花 "COMMANDS: ..."
jp MESSAGE jp MESSAGE

View File

@ -4,8 +4,8 @@
; ;
;/////////////////////////////////////////////////// ;///////////////////////////////////////////////////
cmd_pause: cmd_pause:
ld de,4 ; 身丰花 "Press any key to continue ..." ld de,MAIN_MSG.PAUSE ; 身丰花 "Press any key to continue ..."
call MESSAGE ; ¢ë¢®¤ áâப¨ call MESSAGE ; ¢ë¢®¤ áâப¨
ld c,Dss.WaitKey ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨ ld c,Dss.WaitKey ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
RST ToDSS JP ToDSS
ret ;ret

View File

@ -16,46 +16,9 @@ cmd_version:
LD DE,PRM2 LD DE,PRM2
CALL .Set_Ver_to_PRM ; set Shell version CALL .Set_Ver_to_PRM ; set Shell version
;R13 ;R13
LD DE,VERSMSG LD DE,MAIN_MSG.VERSION
JP MESSAGE JP MESSAGE
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
.num_ver:
.num_mod:
ld ix,.tmp1__
res 7,(ix+0)
jr .decim
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
.num_build:
ld ix,.tmp1__
res 7,(ix+0)
ld bc,100 ; 100
call .num16
.decim: ld bc,10 ; 10
call .num16
ld a,l
add a,"0"
jr .num16_exit
.tmp1__: BYTE 0
.num16: ld a,'0'-1
and a
inc a
sbc hl,bc
jr nc,$-3
add hl,bc
cp "0"
jr z,$+6
set 7,(ix+0)
bit 7,(ix+0)
ret z
.num16_exit:
ld (de),a ; á®åà. ¢ ¡ãä¥à¥
inc de
ret
;
; ‚室: ; ‚室:
; L - ­®¬¥à ¢¥àᨨ (0..9) ; L - ­®¬¥à ¢¥àᨨ (0..9)
; H - ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99) ; H - ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99)
@ -65,20 +28,20 @@ cmd_version:
PUSH BC PUSH BC
PUSH HL PUSH HL
LD H,0 LD H,0
CALL .num_ver ;decim2 ­®¬¥à ¢¥àᨨ (0..9) CALL hex2dec_ascii_16bit.n10 ;decim2 ­®¬¥à ¢¥àᨨ (0..9)
LD A,'.' LD A,'.'
LD (DE),A LD (DE),A
INC DE INC DE
POP HL POP HL
LD L,H LD L,H
LD H,0 LD H,0
CALL .num_mod ;decim2 ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99) CALL hex2dec_ascii_16bit.n10 ;decim2 ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99)
POP HL POP HL
LD A,'.' LD A,'.'
LD (DE),A LD (DE),A
INC DE INC DE
CALL .num_build ;decim3 ­®¬¥à ¡¨«¤  (0..999) CALL hex2dec_ascii_16bit.n100 ;decim3 ­®¬¥à ¡¨«¤  (0..999)
XOR A XOR A
LD (DE),A LD (DE),A
RET RET
; ;

View File

@ -1,303 +0,0 @@
;-------------------------------------------------
; ‚뢮¤ á®®¡é¥­¨ï ®è¨¡ª¨ ¯® ¨­¤¥ªáã
; ¢å®¤: a=­®¬¥à ®è¨¡ª¨
;-------------------------------------------------
print_err_message:
ld e,a
ld d,0
inc de
ld hl,ERR0 ; ¬ áᨢ áâப
ld bc,ERR0.Size ; à §¬¥à ¬ áᨢ 
call LCPIR ; ­ ©â¨ áâபã
call PRINTZ ; ä®à¬ â. ¢ë¢®¤ áâப¨
call newline
jp newline
; ‚뢮¤ áâப¨ ®è¨¡ª¨
;A850D:
invalid_param:
ld de,5 ; ¨­¤¥ªá "Invalid parametr"
jr MESSAGE
;-------------------------------------------------
; ‚뢮¤ á®®¡é¥­¨ï ®è¨¡ª¨ ¯® ¨­¤¥ªáã
; ¢å®¤: de=¨­¤¥ªá áâப¨
;-------------------------------------------------
MESSAGE:
call FMESAGE ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã
jp PRINTZ ; ä®à¬ â. ¢ë¢®¤ áâப¨
;jp A82CC ; ã§­ âì ¨ ãáâ. ¯®«®¦. ªãàá®à 
; <20> ©â¨ áâப㠯® ¨­¤¥ªáã
; ¢å®¤: de=¨­¤¥ªá áâப¨
; ¢ë室: hl=áâப 
FMESAGE: inc de
ld hl,MSG0 ; ­ ç «® ¬ áᨢ  áâப
ld bc,MSG0.Size ; à §¬¥à ¬ áᨢ 
LCPIR: xor a
cpir
ret po
ret nz
;R11
XOR A
CP (HL)
JR Z,.no_mess
;
dec de
ld a,d
or e
jr nz,LCPIR
ret
.no_mess: INC HL
RET
;[x] ¨á¯à ¢«¥­ ¡ £ á ¢ë室®¬ §  ¯à¥¤¥«ë ¡ãä¥à  PRM. —ãâì ®¯â¨¬¨§¨à®¢ ­ 
;----------------------------------------------------------------------;
; ”®à¬ â¨à®¢ ­­ë© ¢ë¢®¤ áâப¨ á ¯®¤áâ ­®¢ª®©  à£ã¬¥­â®¢ ¢¬¥áâ® %1-%9
; ¢å®¤: hl=¡ãä¥à áâப¨
;----------------------------------------------------------------------;
PRINTZ: ld a,(hl)
inc hl
or a
ret z
cp '%'
jr z,.check_PRM
.char: ld c,Dss.PutChar
RST ToDSS
jp PRINTZ
.bad_PRM:
ld a,'%'
jp .char
.check_PRM:
ld a,(hl)
cp '9'+1
jr nc,.bad_PRM
inc hl
sub '1'
push hl
;!TEST
;ld l,a
;ld h,0
;add hl,hl ;1+1=2
;add hl,hl ;2+2=4
;add hl,hl ;4+4=8
;add hl,hl ;8+8=16 à §¬¥à ®â¤¥«ì­®£® ¯®¤¡ãä¥à 
ADD A
ADD A
ADD A
ADD A
LD L,A
LD H,0
;
ld bc,PRM1 ; ¡ãä¥à
add hl,bc
ld c,Dss.PChars ; ¢ë¢®¤ áâப¨
RST ToDSS
pop hl
jp PRINTZ
;!FIXIT ¯¥à¥­¥á⨠ª ®¡é¨¬ ¡ãä¥à ¬ ª ª ã ¬¥­ï
; ¡ãä¥àë  à£ã¬¥­â®¢ ª®¬ ­¤­®© áâப¨
PRM1: BLOCK 16,0 ;  à£ã¬¥­â %1
PRM2: BLOCK 16,0 ;  à£ã¬¥­â %2
PRM3: BLOCK 16,0 ;  à£ã¬¥­â %3
PRM4: BLOCK 16,0 ;  à£ã¬¥­â %4
PRM5: BLOCK 16,0 ;  à£ã¬¥­â %5
PRM6: BLOCK 16,0 ;  à£ã¬¥­â %6
PRM7: BLOCK 16,0 ;  à£ã¬¥­â %7
PRM8: BLOCK 16,0 ;  à£ã¬¥­â %8
PRM9: BLOCK 16,0 ;  à£ã¬¥­â %9
;!TODO ­¥ § ¡ëâì § ¬¥­¨âì æ¨äàë ­  í⨠¬¥âª¨
DIR1MSG EQU 0
VERSMSG EQU 1
DATEMSG EQU 2
TIMEMSG EQU 3
PAUSMSG EQU 4
ILLGMSG EQU 5
ECHOMSG EQU 6
ON__MSG EQU 7
OFF_MSG EQU 8
DIR2MSG EQU 9
DIR3MSG EQU 10
HELPMSG EQU 11
MSG0: db 0
/* 0 */ db "Volume in drive %1 %4 %5",CR,LF
db "Volume Serial Number is %2",CR,LF
db CR,LF,"Directory of %3",CR,LF,LF,0
/* 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
/* 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) %4 bytes",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,0
;R11
DB 0
DZ "Unknown command"
;
.Size EQU $-MSG0
/*
MSG0: DB 0
DB "Volume in drive %1 has no label",CR,LF ; !FIXIT
DB "Volume Serial number is %2",CR,LF
DB "Directory of %3",CR,LF,CR,LF,0
DB "Estex DSS: Version %1",CR,LF,0 ;R02
DB "Current date: %1",CR,LF,0
DB "Current time: %1",CR,LF,0
DB "Press any key to continue . . .",CR,LF,0
DB "Invalid parametr",CR,LF,0
DB "Echo is %1",CR,LF,0
DB "on",0
DB "off",0
DB " %1 file(s) %2 bytes",CR,LF,CR,LF,0
; FILENAME EXT SIZE DATE TIME
DB "%1 %2 %3 %4 %5",CR,LF,0
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,0
;R11
BYTE 0
DZ "Unknown command"
;
.Size EQU $-MSG0
*/
;-----------------------------------------------------------------------
;!FIXIT äã­ªæ¨ï ¢ë§ë¢ îé ï ¢ë¢®¤ ®è¨¡ª¨ ¤¥« ¥â ¢ ­ ç «¥ 䨫ìâà ¯® ­®¬¥à ¬ ¨ ­¥áª®«ìª® ¯¥à¢ëå ®â訢 îâáï
ERR0: DB #00
DZ "Bad command or file name"
DZ "Invalid function" ; 01 - ­¥¢¥à­ë© ­®¬¥à ä㭪樨
DZ "Invalid drive number" ; 02 - ­¥¯à ¢¨«ì­ë© ­®¬¥à ãáâனá⢠
DZ "File not found" ; 03 - ä ©« ­¥ ®¡­ à㦥­
DZ "Path not found" ; 04 - ­¥¢¥à­ë© ¯ãâì
DZ "Invalid handle" ; 05 - ­¥áãé¥áâ¢ãî騩 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
DZ "Too many open files" ; 06 - ­¥â ᢮¡®¤­®£® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
DZ "File already exist" ; 07 - ä ©« áãé¥áâ¢ã¥â
DZ "File read only" ; 08 - ä ©« ⮫쪮 ¤«ï ç⥭¨ï
DZ "Root overflow" ; 09 - ¯¥à¥¯®«­¥­¨¥ ROOT (ª®à­¥¢®£® ª â «®£ )
DZ "No free space" ; 10 - ­¥â ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥
DZ "Directory not empty" ; 11 - ª â «®£ ­¥ ¯ãáâ
DZ "Can't delete current directory" ; 12 - ­¥ã¤ ç­ ï ¯®¯ë⪠ 㤠«¨âì ⥪ã騩 ª â «®£
DZ "Invalid media" ; 13 - ­¥¨§¢¥áâ­ë© ä®à¬ â
DZ "Unknown operation" ;R02 ; 14 - ­¥¢®§¬®¦­ ï ®¯¥à æ¨ï
DZ "Directory exist" ; 15 - ª â «®£ 㦥 ¥áâì
DZ "Invalid filename" ; 16 - ­¥¢¥à­®¥ ¨¬ï
DZ "Invalid EXE-file" ; 17 - ­¥¯à ¢¨«ì­ë© EXE-ä ©«
DZ "Not supported EXE-file" ; 18 - ­¥ ¯®¤¤¥à¦¨¢ ¥¬ ï ¢¥àá¨ï EXE-ä ©« 
DZ "Access denied" ; 19 - à¥áãàá ­¥ ¤®áâ㯥­
DZ "Not ready" ; 20 - ­¥â £®â®¢­®áâ¨
DZ "Seek error" ; 21 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
DZ "Sector not found" ; 22 - ᥪâ®à ­¥ ­ ©¤¥­
DZ "CRC error" ; 23 - ®è¨¡ª  CRC
DZ "Write protect" ; 24 - § é¨â  § ¯¨á¨
DZ "Read error" ; 25 - ®è¨¡ª  ç⥭¨ï
DZ "Write error" ; 26 - ®è¨¡ª  § ¯¨á¨
DZ "Drive failure" ; 27 - á¡®© ¤¨áª 
DZ "Extended error 28"
DZ "Extended error 29"
DZ "Not enough memory" ; 30 - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
DZ "Invalid memory block" ; 31 - ­¥áãé¥áâ¢ãî騩 ¡«®ª ¯ ¬ïâ¨
DZ "Extended error 32"
DZ "Maximum PATH size exceeded" ; 33 - ¯à¥¢ë襭 ¬ ªá¨¬ «ì­ë© à §¬¥à ¯¥à¥¬¥­­®©
DZ "Extended error 34"
DZ "Too many files in directory" ; 35 - ᫨誮¬ ¬­®£® ä ©«®¢ ¢ ¤¨à¥ªâ®à¨¨
DZ "Directory nesting too large or number of folders > 1023" ; 36 - ᫨誮¬ ¡®«ìè ï ¢«®¦¥­­®áâì ª â «®£®¢ ¨«¨ ª®«¨ç¥á⢮ ¯ ¯®ª > 1023
DZ "Operation aborted by user" ; 37 - ®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬
DZ "Common error" ; 38 - ®¡é ï ®è¨¡ª 
DZ "Unexpected application termination" ; 39 - unexpected application termination / ­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à¨«®¦¥­¨ï
DZ "40"
DZ "41"
DZ "42"
DZ "43"
DZ "44"
DZ "45"
DZ "46"
DZ "Wrong video mode" ; 48 - ­¥¯à ¢¨«ì­ë© ¢¨¤¥®à¥¦¨¬
DZ "48"
DZ "49"
DZ "50"
;R11
DB 0 ; ®£à ­¨ç¨â¥«ì, ç⮡ ¯à¨ ®è¨¡ª¥ ¡®«ìè¥, 祬 ¥áâì á®®¡é¥­¨© ¢ë¤ ¢ «®áì ®¡é¥¥:
DZ "Unknown error"
;
.Size EQU $-ERR0
;-----------------------------------------------------------------------
/*
; ‘®®¡é¥­¨ï ®è¨¡®ª „Ž‘
ERR0: db 0
db "Bad command or file name",0 ;0
db "Invalid function",0 ;1
db "Invalid drive number",0 ;2
db "File not found",0 ;3
db "Path not found",0 ;4
db "Invalid handle",0 ;5
db "Too many open files",0 ;6
db "File already exist",0 ;7
db "File read only",0 ;8
db "Root overflow",0 ;9
db "No free space",0 ;10
db "Directory not empty",0 ;11
db "Can't delete current directory",0 ;12
db "Invalid media",0 ;13
db "Unknown operation",0 ;14
db "Directory exist",0 ;15
db "Invalid filename",0 ;16
db "Invalid EXE-file",0 ;17
db "Not supported EXE-file",0 ;18
db "Access denied",0 ;19
db "Not ready",0 ;20
db "Seek error",0 ;21
db "Sector not found",0 ;22
db "CRC error",0 ;23
db "Write protect",0 ;24
db "Read error",0 ;25
db "Write error",0 ;26
db "Drive failure",0 ;27
db "Extended error 28",0 ;28
db "Extended error 29",0 ;29
db "Not enough memory",0 ;30
db "Invalid memory block",0 ;31
db "Extended error 32",0 ;32
db "Extended error 33",0 ;33
db "Extended error 34",0 ;34
db "Too many files in directory",0 ;35 ᯨ᮪ ä ©«®¢
db "36",0 ;36 (᫨誮¬ ¡®«ìè ï ¢«®¦. ¯ ¯®ª ¨«¨ >= 1024 ¯ ¯®ª)
db "User abort",0 ;37 User abort (®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬)
db "38",0 ;38
db "39",0 ;39
db "40",0 ;40
db "41",0 ;41
db "42",0 ;42
db "43",0 ;43
db "44",0 ;44
db "45",0 ;45
db "46",0 ;46
db "47",0 ;47
db "48",0 ;48
db "49",0 ;49
db "50",0 ;50
.Size EQU $-ERR0
*/

View File

@ -9,11 +9,9 @@ D8374: dw 0
COMP: call EVALCMD ; (batch.asm) COMP: call EVALCMD ; (batch.asm)
ld hl,struct_input_line+5 ld hl,struct_input_line+5
dec hl dec hl
;ld hl,struct_input_line+4;;
ld c,(hl) ; ¤«¨­  áâப¨ ld c,(hl) ; ¤«¨­  áâப¨
ld b,0 ld b,0
inc hl ; struct_input_line+5 inc hl ; struct_input_line+5
;ld hl,work_buffer+256;;
.loop: ld a,(hl) .loop: ld a,(hl)
cp " " cp " "
jr nz,COMP01 jr nz,COMP01
@ -36,50 +34,11 @@ COMP01: ld d,h
COMP005: ex af,af' COMP005: ex af,af'
sub c sub c
ld c,a ld c,a
ld hl,CMDLIST ; ᯨ᮪ ª®¬ ­¤ „Ž‘-  ld hl,CMDLIST ; ᯨ᮪ ª®¬ ­¤ „Ž‘- 
; de=struct_input_line+5, c=¤«¨­  áâப¨ .start: call RUN_COMMAND
; ®â bat-®âà ¡®âª¨ jr nc,.skip ; NC ¥á«¨ ­¥ ­ ©¤¥­  ª®¬ ­¤ 
COMP004: push bc jp (hl)
push de .skip: ; <20>¥ ¤®á-ª®¬ ­¤ë. ’¥áâ ­  § ¤` ­¨¥ ¤¨áª  ¨ § ¯ã᪠䠩« 
COMP000: ld a,(de)
cp "a"
jr c,COMP001
cp "z"+1
jr nc,COMP001
and #5F ; a..z -> A..Z
COMP001: cp (hl)
jr nz,COMP002 ; ­¥ ¤®á-ª®¬ ­¤ë
inc hl
inc de
dec c
jr nz,COMP000
xor a
cp (hl)
jr nz,COMP002
pop bc
pop bc
ld a,(de)
cp " "
jr nz,NOSPC
inc de
NOSPC: inc hl
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
jp (hl) ; ­  á®®â¢. ®¡à ¡®â稪 ¤®á-ª®¬ ­¤ë
; <20>¥ ¤®á-ª®¬ ­¤ë. ’¥áâ ­  § ¤ ­¨¥ ¤¨áª  ¨ § ¯ã᪠䠩« 
COMP002: xor a
LD C,A
CPIR
inc hl
inc hl
pop de
pop bc
ld a,(hl)
or a
jr nz,COMP004 ; ­ § ¤ ¢ 横«, ¥é¥ ­¥ ¤®è«¨ ª®­æ  ᯨ᪠ ¤®á-ª®¬ ­¤
ld h,d ld h,d
ld l,e ld l,e
; hl=struct_input_line+5 ; hl=struct_input_line+5
@ -99,7 +58,7 @@ COMP002: xor a
cp "z"+1 cp "z"+1
jr nc,NOUP jr nc,NOUP
and #5F ; a..z -> A..Z and #5F ; a..z -> A..Z
;!!!!! âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥ ;!FIXIT âãâ ¢®ááâ ­ ¢«¨¢ ¥âáï ¤¨à¥ªâ®à¨ï ¨ ¬®£ãâ ¡ëâì £«îª¨ ­  ­®¢®¬ ï¤à¥
NOUP: sub "A" ; ­®¬¥à ¤¨áª  NOUP: sub "A" ; ­®¬¥à ¤¨áª 
ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª
RST ToDSS RST ToDSS
@ -241,4 +200,5 @@ RESTORE_ALL:
CALL Restore_Screen CALL Restore_Screen
;R10 ;R10
; ;
RET RET
;

60
SHELL/Messages/errors.asm Normal file
View File

@ -0,0 +1,60 @@
;-----------------------------------------------------------------------
;!FIXIT äã­ªæ¨ï ¢ë§ë¢ îé ï ¢ë¢®¤ ®è¨¡ª¨ ¤¥« ¥â ¢ ­ ç «¥ 䨫ìâà ¯® ­®¬¥à ¬ ¨ ­¥áª®«ìª® ¯¥à¢ëå ®â訢 îâáï
ERR0: DB #00
DZ "Bad command or file name"
DZ "Invalid function" ; 01 - ­¥¢¥à­ë© ­®¬¥à ä㭪樨
DZ "Invalid drive number" ; 02 - ­¥¯à ¢¨«ì­ë© ­®¬¥à ãáâனá⢠
DZ "File not found" ; 03 - ä ©« ­¥ ®¡­ à㦥­
DZ "Path not found" ; 04 - ­¥¢¥à­ë© ¯ãâì
DZ "Invalid handle" ; 05 - ­¥áãé¥áâ¢ãî騩 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
DZ "Too many open files" ; 06 - ­¥â ᢮¡®¤­®£® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
DZ "File already exist" ; 07 - ä ©« áãé¥áâ¢ã¥â
DZ "File read only" ; 08 - ä ©« ⮫쪮 ¤«ï ç⥭¨ï
DZ "Root overflow" ; 09 - ¯¥à¥¯®«­¥­¨¥ ROOT (ª®à­¥¢®£® ª â «®£ )
DZ "No free space" ; 10 - ­¥â ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥
DZ "Directory not empty" ; 11 - ª â «®£ ­¥ ¯ãáâ
DZ "Can't delete current directory" ; 12 - ­¥ã¤ ç­ ï ¯®¯ë⪠ 㤠«¨âì ⥪ã騩 ª â «®£
DZ "Invalid media" ; 13 - ­¥¨§¢¥áâ­ë© ä®à¬ â
DZ "Unknown operation" ;R02 ; 14 - ­¥¢®§¬®¦­ ï ®¯¥à æ¨ï
DZ "Directory exist" ; 15 - ª â «®£ 㦥 ¥áâì
DZ "Invalid filename" ; 16 - ­¥¢¥à­®¥ ¨¬ï
DZ "Invalid EXE-file" ; 17 - ­¥¯à ¢¨«ì­ë© EXE-ä ©«
DZ "Not supported EXE-file" ; 18 - ­¥ ¯®¤¤¥à¦¨¢ ¥¬ ï ¢¥àá¨ï EXE-ä ©« 
DZ "Access denied" ; 19 - à¥áãàá ­¥ ¤®áâ㯥­
DZ "Not ready" ; 20 - ­¥â £®â®¢­®áâ¨
DZ "Seek error" ; 21 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
DZ "Sector not found" ; 22 - ᥪâ®à ­¥ ­ ©¤¥­
DZ "CRC error" ; 23 - ®è¨¡ª  CRC
DZ "Write protect" ; 24 - § é¨â  § ¯¨á¨
DZ "Read error" ; 25 - ®è¨¡ª  ç⥭¨ï
DZ "Write error" ; 26 - ®è¨¡ª  § ¯¨á¨
DZ "Drive failure" ; 27 - á¡®© ¤¨áª 
DZ "Extended error 28"
DZ "Extended error 29"
DZ "Not enough memory" ; 30 - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
DZ "Invalid memory block" ; 31 - ­¥áãé¥áâ¢ãî騩 ¡«®ª ¯ ¬ïâ¨
DZ "Extended error 32"
DZ "Maximum PATH size exceeded" ; 33 - ¯à¥¢ë襭 ¬ ªá¨¬ «ì­ë© à §¬¥à ¯¥à¥¬¥­­®©
DZ "Extended error 34"
DZ "Too many files in directory" ; 35 - ᫨誮¬ ¬­®£® ä ©«®¢ ¢ ¤¨à¥ªâ®à¨¨
DZ "Directory nesting too large or number of folders > 1023" ; 36 - ᫨誮¬ ¡®«ìè ï ¢«®¦¥­­®áâì ª â «®£®¢ ¨«¨ ª®«¨ç¥á⢮ ¯ ¯®ª > 1023
DZ "Operation aborted by user" ; 37 - ®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬
DZ "Common error" ; 38 - ®¡é ï ®è¨¡ª 
DZ "Unexpected application termination" ; 39 - unexpected application termination / ­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à¨«®¦¥­¨ï
DZ "40"
DZ "41"
DZ "42"
DZ "43"
DZ "44"
DZ "45"
DZ "46"
DZ "Wrong video mode" ; 48 - ­¥¯à ¢¨«ì­ë© ¢¨¤¥®à¥¦¨¬
DZ "48"
DZ "49"
DZ "50"
;R11
DB 0 ; ®£à ­¨ç¨â¥«ì, ç⮡ ¯à¨ ®è¨¡ª¥ ¡®«ìè¥, 祬 ¥áâì á®®¡é¥­¨© ¢ë¤ ¢ «®áì ®¡é¥¥:
DZ "Unknown error"
;
.Size EQU $-ERR0
;-----------------------------------------------------------------------

44
SHELL/Messages/main.asm Normal file
View File

@ -0,0 +1,44 @@
;!TODO ­¥ § ¡ëâì § ¬¥­¨âì æ¨äàë ­  í⨠¬¥âª¨
MAIN_MSG:
.DIR_1 EQU 0
.VERSION EQU 1
.DATE EQU 2
.TIME EQU 3
.PAUSE EQU 4
.INVALID EQU 5
.ECHO EQU 6
.ON EQU 7
.OFF EQU 8
.DIR_2 EQU 9
.DIR_3 EQU 10
.HELP EQU 11
.CALCULATING EQU 12
.TABLE: db 0
/* 0 */ db "Volume in drive %1 %4 %5",CR,LF
db "Volume Serial Number is %2",CR,LF
db CR,LF,"Directory of %3",CR,LF,LF,0
/* 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
/* 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
/* 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
;R11
DB 0
DZ "Unknown command"
;
.TABLE.Size EQU $-.TABLE
;

118
SHELL/Procedures/Print.ASM Normal file
View File

@ -0,0 +1,118 @@
;-------------------------------------------------
; ‚뢮¤ á®®¡é¥­¨ï ®è¨¡ª¨ ¯® ¨­¤¥ªáã
; ¢å®¤: a=­®¬¥à ®è¨¡ª¨
;-------------------------------------------------
print_err_message:
ld e,a
ld d,0
inc de
ld hl,ERR0 ; ¬ áᨢ áâப
ld bc,ERR0.Size ; à §¬¥à ¬ áᨢ 
call LCPIR ; ­ ©â¨ áâபã
call PRINTZ ; ä®à¬ â. ¢ë¢®¤ áâப¨
call newline
jp newline
; ‚뢮¤ áâப¨ ®è¨¡ª¨
;A850D:
invalid_param:
ld de,MAIN_MSG.INVALID ; ¨­¤¥ªá "Invalid parametr"
jr MESSAGE
;-------------------------------------------------
; ‚뢮¤ á®®¡é¥­¨ï ®è¨¡ª¨ ¯® ¨­¤¥ªáã
; ¢å®¤: de=¨­¤¥ªá áâப¨
;-------------------------------------------------
MESSAGE:
call FMESAGE ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã
jp PRINTZ ; ä®à¬ â. ¢ë¢®¤ áâப¨
;jp A82CC ; ã§­ âì ¨ ãáâ. ¯®«®¦. ªãàá®à 
; <20> ©â¨ áâப㠯® ¨­¤¥ªáã
; ¢å®¤: de=¨­¤¥ªá áâப¨
; ¢ë室: hl=áâப 
FMESAGE: inc de
ld hl,MAIN_MSG.TABLE ; ­ ç «® ¬ áᨢ  áâப
ld bc,MAIN_MSG.TABLE.Size ; à §¬¥à ¬ áᨢ 
LCPIR: xor a
cpir
ret po
ret nz
;R11
XOR A
CP (HL)
JR Z,.no_mess
;
dec de
ld a,d
or e
jr nz,LCPIR
ret
.no_mess: INC HL
RET
;[x] ¨á¯à ¢«¥­ ¡ £ á ¢ë室®¬ §  ¯à¥¤¥«ë ¡ãä¥à  PRM. —ãâì ®¯â¨¬¨§¨à®¢ ­ 
;----------------------------------------------------------------------;
; ”®à¬ â¨à®¢ ­­ë© ¢ë¢®¤ áâப¨ á ¯®¤áâ ­®¢ª®©  à£ã¬¥­â®¢ ¢¬¥áâ® %1-%9
; ¢å®¤: hl=¡ãä¥à áâப¨
;----------------------------------------------------------------------;
PRINTZ: ld a,(hl)
inc hl
or a
ret z
cp '%'
jr z,.check_PRM
.char: ld c,Dss.PutChar
RST ToDSS
jp PRINTZ
.bad_PRM:
ld a,'%'
jp .char
.check_PRM:
ld a,(hl)
cp '9'+1
jr nc,.bad_PRM
inc hl
sub '1'
push hl
;!TEST
;ld l,a
;ld h,0
;add hl,hl ;1+1=2
;add hl,hl ;2+2=4
;add hl,hl ;4+4=8
;add hl,hl ;8+8=16 à §¬¥à ®â¤¥«ì­®£® ¯®¤¡ãä¥à 
ADD A
ADD A
ADD A
ADD A
LD L,A
LD H,0
;
ld bc,PRM1 ; ¡ãä¥à
add hl,bc
ld c,Dss.PChars ; ¢ë¢®¤ áâப¨
RST ToDSS
pop hl
jp PRINTZ
;!FIXIT ¯¥à¥­¥á⨠ª ®¡é¨¬ ¡ãä¥à ¬ ª ª ã ¬¥­ï
; ¡ãä¥àë  à£ã¬¥­â®¢ ª®¬ ­¤­®© áâப¨
PRM1: BLOCK 16,0 ;  à£ã¬¥­â %1
PRM2: BLOCK 16,0 ;  à£ã¬¥­â %2
PRM3: BLOCK 16,0 ;  à£ã¬¥­â %3
PRM4: BLOCK 16,0 ;  à£ã¬¥­â %4
PRM5: BLOCK 16,0 ;  à£ã¬¥­â %5
PRM6: BLOCK 16,0 ;  à£ã¬¥­â %6
PRM7: BLOCK 16,0 ;  à£ã¬¥­â %7
PRM8: BLOCK 16,0 ;  à£ã¬¥­â %8
PRM9: BLOCK 16,0 ;  à£ã¬¥­â %9
;

76
SHELL/Procedures/math.asm Normal file
View File

@ -0,0 +1,76 @@
;----------------------------------------------------------------------;
; ‚뢮¤ 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
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
;!FIXIT ¥áâì ¤ã¡«ì hex2dec_ascii_16bit
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
hex2dec_ascii_16bit:
.n10: ld ix,.tmp1
res 7,(ix+0)
jr .decim
;
.n10000: ld ix,.tmp1
res 7,(ix+0)
ld bc,100
call .num16
jr .skip1
;
.n1000: ld ix,.tmp1
res 7,(ix+0)
.skip1: ld bc,100
call .num16
jr .skip2
;
.n100: ld ix,.tmp1
res 7,(ix+0)
.skip2: ld bc,100
call .num16
;
.decim: ld bc,10
call .num16
ld a,l
add a,"0"
jr .num16_exit
;
.num16: ld a,'0'-1
and a
inc a
sbc hl,bc
jr nc,$-3
add hl,bc
cp "0"
jr z,$+6
set 7,(ix+0)
bit 7,(ix+0)
ret z
.num16_exit:
ld (de),a ; á®åà. ¢ ¡ãä¥à¥
inc de
ret
;
.tmp1: BYTE 0
;----------------------------------------------------------------------;

View File

@ -0,0 +1,113 @@
////////////////////////////////////////////////////////////////////////
; ‚室: hl - ᯨ᮪ ª®¬ ­¤ ä®à¬ â : "áâப ",0,cmd_addr
; de - áâப  á ª®¬ ­¤®©
; c - ¤«¨­  áâப¨
; ‚ë室: CF=1 - ¢ HL  ¤à¥á ª®¬ ­¤ë ­  ¨á¯®«­¥­¨¥
; CF=0 - ­¥â ®¯®§­ ­®© ª®¬ ­¤ë
RUN_COMMAND:
push bc
push de
;
.loop: ld a,(de)
cp "a"
jr c,.skip
cp "z"+1
jr nc,.skip
and %0101'1111 ; a..z -> A..Z
.skip: cp (hl)
jr nz,.not_cmd ; ­¥ ª®¬ ­¤ 
inc hl
inc de
dec c
jr nz,.loop
;
xor a
cp (hl)
jr nz,.not_cmd
pop bc
pop bc
ld a,(de)
cp " "
jr nz,.no_sp
inc de
.no_sp: inc hl
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
scf ; ¬ àª¥à ®¯®§­ ­®© ª®¬ ­¤ë
ret
;jp (hl) ; ­  á®®â¢. ®¡à ¡®â稪 ª®¬ ­¤ë
.not_cmd:
xor a
LD C,A
CPIR
inc hl
inc hl
pop de
pop bc
ld a,(hl)
or a
jr nz,RUN_COMMAND ; ­ § ¤ ¢ 横«, ¥é¥ ­¥ ¤®è«¨ ª®­æ  ᯨ᪠ ¤ª®¬ ­¤
ret
;
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
; ‚室: hl - ᯨ᮪ ª«î祩 ä®à¬ â : "áâப ",cmd_addr
; de - áâப  á ª®¬ ­¤®©
; c - ¤«¨­  áâப¨ á ª®¬ ­¤®©
; ‚ë室: CF=1 - ¢ HL  ¤à¥á ª«îç  ­  ¨á¯®«­¥­¨¥
; CF=0 - ­¥â ®¯®§­ ­®£® ª«îç 
RUN_OPTION:
.cont: EX DE,HL
LD B,C
.loop: LD A,(HL)
CP '/' ;
INC HL
JR Z,.got
AND A
RET Z
DJNZ .loop
; not found key
AND A
RET
;
.got: LD C,B
INC HL
LD A,(HL)
DEC C
CP ' '
JR Z,.good
AND A
JR NZ,RUN_OPTION.loop
LD C,1
;
.good: push hl
dec hl
ld b,cmd_dir_options.Size ;!HARDCODE
ex de,hl
ld a,(de)
OR %0010'0000
ld de,cmd_dir_options.paramLength ;!HARDCODE
;
.find: cp (hl)
jr z,.found
add hl,de
djnz .find
; not found
pop hl
jr RUN_OPTION
; found
.found: pop de
LD B,C
inc hl
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
scf ; ¬ àª¥à ®¯®§­ ­®© ®¯æ¨¨
ret
////////////////////////////////////////////////////////////////////////

View File

@ -443,9 +443,9 @@ A895A: cp "0"
sub "0" sub "0"
ret ret
;!FIXIT ¥áâì ¤ã¡«
A8964: ld de,10000 A8964: ld de,10000
ld a,0C8h ; ret z ld a,#C8 ; ret z
ld (D8996),a ld (D8996),a
call A898E call A898E
ld de,1000 ld de,1000
@ -521,28 +521,33 @@ T8C21: db "ON",0
T8C24: db "OFF",0 T8C24: db "OFF",0
include "edline.asm" ; áâப  । ªâ¨à®¢ ­¨ï include 'edline.asm' ; áâப  । ªâ¨à®¢ ­¨ï
include "batch.asm" ; ¯ àᨭ£ bat-ä ©«®¢ include 'batch.asm' ; ¯ àᨭ£ bat-ä ©«®¢
include "shell_exec.asm" ; ¢ë¯®«­. ¢¢¥¤. ª®¬ ­¤ á ª®­á®«¨ include 'exec.asm' ; ¢ë¯®«­. ¢¢¥¤. ª®¬ ­¤ á ª®­á®«¨
include "error.asm" ; ä㭪樨 ¢ë¢®¤  á®®¡é¥­¨© ®è¨¡®ª include 'procedures/print.asm' ; ä㭪樨 ¢ë¢®¤  á®®¡é¥­¨©
include 'messages/errors.asm' ; á®®¡é¥­¨ï ®¡ ®è¨¡ª å
include 'messages/main.asm' ; á®®¡é¥­¨ï
include 'procedures/parsers.asm' ; ä㭪樨 ¯à®ç¥á뢠­¨ï ¨ ¢ë¡®à 
include 'procedures/math.asm' ; ä㭪樨 ¬ â¥¬ â¨ç¥áª¨¥
; ;
include "Commands/exit.asm" ; ¢ë室 ¢ த¨â. ¯à®æ¥áá include 'Commands/exit.asm' ; ¢ë室 ¢ த¨â. ¯à®æ¥áá
include "Commands/pause.asm" ; ¯ ã§  include 'Commands/pause.asm' ; ¯ ã§ 
include "Commands/rem.asm" ; ª®¬¬¥­â à¨© include 'Commands/rem.asm' ; ª®¬¬¥­â à¨©
include "Commands/ver.asm" ; ¢ë¢®¤ ¢¥àᨨ „Ž‘ include 'Commands/ver.asm' ; ¢ë¢®¤ ¢¥àᨨ „Ž‘
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/chdir.asm" ; ᬥ­  ⥪. ª â «®£  include 'Commands/chdir.asm' ; ᬥ­  ⥪. ª â «®£ 
include "Commands/mkdir.asm" ; á®§¤ ­¨¥ ª â «®£  include 'Commands/mkdir.asm' ; á®§¤ ­¨¥ ª â «®£ 
include "Commands/rmdir.asm" ; 㤠«¥­¨¥ ª â «®£  include 'Commands/rmdir.asm' ; 㤠«¥­¨¥ ª â «®£ 
include "Commands/del.asm" ; 㤠«¥­¨¥ ä ©«  include 'Commands/del.asm' ; 㤠«¥­¨¥ ä ©« 
include "Commands/ren.asm" ; ¯¥à¥¨¬¥­®¢ ­¨¥ ä ©«  ¨«¨ ª â «®£  include 'Commands/ren.asm' ; ¯¥à¥¨¬¥­®¢ ­¨¥ ä ©«  ¨«¨ ª â «®£ 
include "Commands/echo.asm" ; íå®-०¨¬ include 'Commands/echo.asm' ; íå®-०¨¬
include "Commands/help.asm" ; ¢ë¢®¤ íªà ­  ¯®¬®é¨ include 'Commands/help.asm' ; ¢ë¢®¤ íªà ­  ¯®¬®é¨
include "Commands/path.asm" ; § ¤ âì á¨áâ. ¯ãâì include 'Commands/path.asm' ; § ¤ âì á¨áâ. ¯ãâì
include "Commands/set.asm" ; § ¤ âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï include 'Commands/set.asm' ; § ¤ âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
include "Commands/reboot.asm" ; á®äâ à¥á¥â include 'Commands/reboot.asm' ; á®äâ à¥á¥â
; ;
DISPLAY "Empty space for buffers from ",/H,$ DISPLAY "Empty space for buffers from ",/H,$
work_buffer1 equ $ ; 2-© à ¡. ¡ãä¥à ; 128 bytes work_buffer1 equ $ ; 2-© à ¡. ¡ãä¥à ; 128 bytes

View File

@ -1 +1 @@
127 175