Estex-DSS/SHELL/SHELL.ASM

602 lines
15 KiB
NASM
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; <20>®á«¥¤­ïï । ªæ¨ï: 22.10.2006
;
; - ˆá¯à ¢«¥­ ä¨à¬. ¡ £, ¯à¨ ª®â®à®¬ áâப  ¢ bat-ä ©«¥, ¤«¨­­¥¥ è¨à¨­ë
; íªà ­ , ®¡à¥§ « áì ¯® è¨à¨­¥ íªà ­  ¨ ®áâ â®ª áâப¨ ­¥ ¢ë¢®¤¨«áï.
; - ˆá¯à ¢«¥­ ä¨à¬. ¡ £, ¯à¨ ª®â®à®¬ ¢ ª®¬ ­¤¥ "dir" áâப  ¢ë¢®¤¨¬®£®
; ¯ã⨠¨¬¥«  ¬ ªá. 15 ᨬ¢®«®¢.
; - <20>®ä¨ªá¥­® ­¥¢¥à­®¥ ¨§¬¥­¥­¨¥ ¤¨áª /¯ã⨠¯®á«¥ ®è¨¡®ª ¢ë¯®«­¥­¨ï ª®¬ ­¤.
; - „®¡ ¢«¥­  ª®¬ ­¤  "ECHO." ¤«ï ¢áâ ¢ª¨ ¯ãá⮩ áâப¨.
; - Š®¬ ­¤  DIR ¢ë¢®¤¨â ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª®¢.
;
;
; SYSTEM.EXE /S /P
;
; /P Primary command processor
; /S Secondary command processor
; /C Execute batch file
;=====================================================================[]
;Rev. Date Name Description
;---------------------------------------------------------------------[]
;R14 22-09-2023 BAO ˆá¯à ¢«¥­ ¡ £ "File not found" ¢ ª®¬ ­¤¥ DIR ­  ¯ãá⮬ à §¤¥«¥
;R13 03-08-2023 BAO „®¡ ¢«¥­ ¢ë¢®¤ ­®¬¥à  ¢¥àᨨ Š®­á®«¨ ¤«ï ª®¬ ­¤ë VERSION
;R12 23-07-2023 BAO „®¡ ¢«¥­  ª®¬ ­¤  REBOOT - ¯¥à¥§ £à㧪  á ¯®«­®© ®ç¨á⪮© ¯ ¬ïâ¨
;R11 20-07-2023 BAO <09>®¯à ¢«¥­  äã­ªæ¨ï LCPIR ¤«ï ª®à४⭮£® ¢ë¡®à  á®®¡é¥­¨ï ®¡ ®è¨¡ª¥ ¯à¨ ­®¬¥à¥ ®è¨¡ª¨ > § £®â®¢«¥­­ëå á®®¡é¥­¨©
;R10 16-05-2023 BAO TE•T MODE AND TEXT ARE RESTORED AFTER RETURNING FROM THE APP
;R08 21-02-2003 DNS FIX BUG IN BAT-PARSER, IT SPLIT STRINGS WHEN LINE BEGAN AT #xx00 OFFSET
;R07 14-12-2002 DNS PARSING BATCH LINE
;R06 12-12-2002 DNS ADD %0, %1, %2 ...
;R05 11-12-2002 DNS IMPLEMENTED %VAR%
;R04 11-12-2002 DNS ADD 'EVALSTRING' ROUTINE
;R03 11-12-2002 DNS NEW VERSION
;R02 19-11-2002 DNS CORRECT SOME ERROR MESSAGES
;R01 19-11-2002 DNS ADD ENVIRONMENT %VARIABLE% IN ECHO
;=====================================================================[]
DEFINE SHELL_COMPILATION 1
DEFINE App_EXE_Version 1
includelua 'Shared_includes/lua/Functions.lua'
include 'shared_includes/constants/bios_equ.inc'
include 'shared_includes/constants/dss_equ.inc'
include 'SHELL/version.inc'
include 'shared_includes/structures/FileSystem.inc'
include 'SHELL/structures.inc'
;
; Program EQU section
;---------------------------------------------------------------------[]
CR EQU 13
LF EQU 10
true EQU 1
false EQU 0
Loader_length EQU 0
code_addr EQU shell
program_start EQU shell
stack_point EQU #C000
stack_size EQU #100
org_addr EQU #8000 + CLP_Buffer
;---------------------------------------------------------------------[]
;
;work_buffer1 equ entry - (256+128) ; 2-© à ¡. ¡ãä¥à ; 128 bytes
;work_buffer2 equ entry - 256 ; 3-© à ¡. ¡ãä¥à ; 256 bytes
; org 7F00h
; db "EX" ; exe ID
; db 45h ; exe ⨯
; db 0 ; exe ¢¥àá¨ï
; dw 512 ; 512, ¬«. ᬥé. ª®¤ 
; dw 0 ; áâ. ᬥé. ª®¤ 
; dw 0 ; end-beg, ¯¥à¢¨ç­ë© § £àã§ç¨ª
; dw 0,0,0 ; १¥à¢
; dw entry ;  ¤à¥á § £à㧪¨ ª®¤ 
; dw shell ;  ¤à¥á ¯¥à¥¤ ç¨ ã¯à ¢«¥­¨ï
; dw #BFFE ;  ¤à¥á á⥪ 
; ds 490 ; १¥à¢
; ‚¥àá¨ï/Œ®¤¨ä¨ª æ¨ï/<2F>¨«¤ 襫« 
;entry: db "0.01.003" ;!FIXIT ¯¥à¥­¥á⨠¢ ª®­¥æ
INCLUDE 'Shared_Includes/constants/EXE_Header.z80'
ORG org_addr
;==============================================================
; ’®çª  ¢å®¤  ¢ ˜¥««
;==============================================================
shell: ld hl,Buffers
ld de,Buffers+1
ld (hl),0
ld bc,Struc_Buffers-1
ldir
;
ld hl,":A"
ld (Buffers.screen_path),hl
ld a,max_len_comline
ld (Buffers.input_line),a
;
; á®åà. ã஢¥­ì ⥪. 襫« 
ld a,(ix-1)
ld (cmd_exit.TASKX),a
push ix
call Get_Path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
pop hl ; hl=ix
;
; ’¥áâ ­  ®¯æ¨¨ § ¯ã᪠ á ¬®£® 襫« 
call GET_CMD
ld a,(RUNMODE) ; ¡¨â-ä« £¨ ®¯æ¨©
bit 7,a ; "P" 7-© ¡¨â (¨¤¥â ¢ë§®¢ ¨§ boot-§ £àã§ç¨ª )
jr nz,FPRIMAR
bit 5,a ; "S" 5-© ¡¨â (§ ¯ã᪠2-© ª®¯¨¨ 襫« )
;jp nz,option_s
jr nz,run_shell
bit 4,a ; "C" 4-© ¡¨â (¢ë¯®«­¨âì bat-ä ©«)
jr nz,option_c
bit 6,a ; 6-© ¡¨â (¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë)
jr z,back_to_parent_process
; ¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë
call CMDMODE ; (batch.asm) ¢ë¯®«­. ª®¬ ­¤ã ¨«¨ § ¯ãáâ¨âì ä ©«
; ^^^^^^^
;!TODO ¢«®¦¥­­ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â­® ¢ ¢ë§ë¢ î騩 bat
call Get_Path ; ã§­ âì ¨ á®åà. ⥪. ¤¨áª ¨ ¯ãâì
;
; ‚¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá
back_to_parent_process:
; [x] 11/12/23 ¢«®¦¥­­ë¥ bat
and a
.saveA: LD B,0
JR NC,.exit
LD B,A
.exit: ld c,Dss.Exit
;ld bc,0*256 + Dss.Exit
;
JP ToDSS
;---------------------------------------------------------------
; ޝæ¨ï "S". ‡ ¯ã᪠2-© ª®¯¨¨ 襫« . <20>¥§ ®âà ¡®âª¨ AUTOEXEC.BAT.
; Œ®¦­® ¢ë©â¨ ¯® EXIT.
;---------------------------------------------------------------
; option_s:
; call cmd_version ; ¢¥àá¨ï „Ž‘
; jr run_shell
;---------------------------------------------------------------
; ޝæ¨ï "C". ‚믮«­¨âì BAT-ä ©«.
; <20>®á«¥ ¢ë¯®«­¥­¨ï ä ©« , ¢®§¢à é ¥âáï ¢ த¨â¥«ì᪨© ¯à®æ¥áá.
;---------------------------------------------------------------
option_c:
;ld hl,T96AE ; ¨¬ï bat-ä ©« , 256 ¡ãä¥à (inline.asm)
;ld hl,Buffers.work.buffer+256;;
ld hl,Buffers.input_line.Path ; ¨¬ï bat-ä ©« 
call BATCH ; ®¡à ¡®âª  bat-ä ©«  (batch.asm)
;!TODO ¢«®¦¥­­ë¥ bat. ¯¥à¥¤ ¢ âì ®è¨¡ªã ®¡à â­® ¢ ¢ë§ë¢ î騩 bat
jr back_to_parent_process.saveA ; ¢¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá
;---------------------------------------------------------------
; ޝæ¨ï "P". ‡ ¯ã᪠ª®¯¨¨ 襫« . ®âà ¡®âª®© AUTOEXEC.BAT.
; ­¥© ¨¤¥â ¢ë§®¢ 襫«  ¨§ boot-§ £àã§ç¨ª .
; Œ®¦­® ¢ë©â¨ ¯® EXIT, ­® ­¥ ¨§ § ¯ã饭­®£® boot-§ £àã§ç¨ª®¬.
;---------------------------------------------------------------
FPRIMAR:
halt
ld c,Dss.CTRLKey ; ã§­ âì á®áâ. ª« ¢ë ¢ ¤ ­­ë© ¬®¬¥­â
RST ToDSS
ld hl,autoexec_fname ; ¨¬ï ä ©«  "system.bat"
ld a,b
and #C0 ; ­ ¦ âë Shift-ë ?
call z,BATCH ; ­¥â, ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
;==============================================================
; ‡ ¯ã᪠ª®¯¨¨ 襫« 
;==============================================================
run_shell:
call newline
run_shell_loop:
;call A82CC ; ã§­ âì ¨ ãáâ. ¯®«®¦. ªãàá®à 
; ¢ë¢¥á⨠⥪.á¨áâ. ¯ãâì ¨ ¢®©â¨ ¢ áâபã । ªâ¨à®¢ ­¨ï
call Get_Path ; ã§­ âì ¨ á®åà. ⥪. ¤¨áª ¨ ¯ãâì
run_shell_loop1:
call input_line
call newline ; ­  ­®¢ãî áâபã
ld a,(Buffers.input_line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
or a
jr z,run_shell_loop1 ; ¯ãáâ ï
; <20> àᨭ£ ¨ ¢ë¯®«­¥­¨¥ ª®¬ ­¤
call COMP
jr run_shell_loop ; ­ § ¤ ¢ 横«
; ’¥áâ ®¯æ¨© 襫« 
; ¢å®¤: hl= ¤à¥á ª®¬-áâப¨
GET_CMD:
ld e,(hl) ; ¤«¨­  áâப¨
inc hl
ld d,0
ex de,hl ; hl=¤«¨­  áâப¨, de=áâப 
add hl,de
; ã¡à âì ª®­æ¥¢ë¥ ¯à®¡¥«ë
.loop1: dec hl
ld a,(hl)
cp " "
jr z,.loop1
inc hl
ld (hl),0 ; ¢ ª®­¥æ ª®¬-áâப¨
.NEXTPRM:
ex de,hl ; hl=⥪.  ¤à¥á ¢ áâப¥
.SKIPSP:
ld a,(hl)
inc hl
cp " "
ret c
jr z,.SKIPSP
dec hl
cp '/' ; ®¯æ¨ï
jr nz,.PROCESS
ld de,Buffers.work.buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
ld c,Dss.GSwitch ; ¢ë¤¥«. ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
push af
ex de,hl
ld hl,Buffers.work.buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
inc hl
call set_option_flag ; ãáâ. ¡¨âë ä« £®¢
pop af
jr nc,.NEXTPRM
ret
; ãáâ. ¡¨â-ä« £
.PROCESS:
ld a,(RUNMODE)
set 6,a ; 6-© ¡¨â (¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë) ;!HARDCODE
ld (RUNMODE),a
; ᪮¯¨à. ¯ à ¬¥âà ¨§ ª®¬-áâப¨
; ¢ ¡ãä¥à áâப¨ । ªâ¨à®¢ ­¨ï
;copy_to_input_line:
ld iy,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
push hl
call clear_inpline ; ®¡­ã«¨âì áâàãªâãàã "input line"
pop de ; de=墮áâ áâப¨
.loop: ld hl,Buffers.input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy + Input_Line.Left_Shift)
add a,l
ld l,a
jr nc,1F
inc h
1: inc hl
inc hl
inc hl
inc hl
inc hl
ld a,(de) ; ᨬ¢®« ¨§ áâப¨
ld (hl),a
or a
ret z ; ª®­¥æ áâப¨
inc (iy + Input_Line.Symbols_Num) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
inc (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr nz,2F
; ªãàá®à §  ¯à ¢ë¬ ªà ¥¬ ¯®«ï ¢¢®¤ 
inc (iy + Input_Line.Left_Shift) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy + Input_Line.Cur_X) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
2: ld a,(de) ; ᨬ¢®« ¨§ áâப¨
inc de ; ¯à®¤¢. ¯®â®ª
cp " "
jr nc,.loop
ret
; ’¥áâ ­  ®¯æ¨¨ 襫«  ¨ ãáâ. ¡¨â-ä« £®¢
; ¢å®¤: hl=áâப  ®¯æ¨©
set_option_flag:
ld a,(RUNMODE) ; ï祩ª  ¡¨â-ä« £®¢
ld c,a
ld a,(hl)
call COMPARE.cmp_AZ
.setopt1: cp "P" ; § ¯ã᪠襫«  á ®âà ¡. autoexec.bat
jr nz,.setopt2
set 7,c
jr .setopt4
;
.setopt2: cp "S" ; § ¯ã᪠2-© ª®¯¨¨ 襫«  (¡¥§ ®âà ¡. autoexec.bat)
jr nz,.setopt3
set 5,c
jr .setopt4
;
.setopt3: cp "C" ; ¢ë¯®«­. bat-ä ©« ¨ ¢¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá
ret nz
set 4,c
.setopt4: ld a,c
ld (RUNMODE),a
ret
; ‘®åà ­¨âì ⥪. ¤¨áª ¨ ¯ãâì
;GETPATH:
Get_Path:
; ã§­ âì ⥪. ª â «®£
ld hl,Buffers.sys_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.CurDir
RST ToDSS
.disk: ; ã§­ âì ⥪. ¤¨áª
ld c,Dss.CurDisk
RST ToDSS
add a,"A"
ld (Buffers.screen_path),a ; 33 áâப  íªà ­­®£® ¯ãâ¨
ret
; ‚®ááâ ­®¢¨âì ⥪. ¤¨áª ¨ ¯ãâì (¯®á«¥ ®è¨¡ª¨)
IFUSED restore_disk_path
ASSERT restore_path
restore_disk_path:
; ãáâ. ⥪. ¤¨áª
ld a,(Buffers.screen_path) ; 33 áâப  íªà ­­®£® ¯ãâ¨
sub "A"
ld c,Dss.ChDisk
RST ToDSS
ENDIF
IFUSED restore_path
restore_path:
; ãáâ. ⥪. ª â «®£
ld hl,Buffers.sys_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir
JP ToDSS
ret
ENDIF
;
newline: push hl
ld hl,MAIN_MSG.TABLE+1 ; "CR,LF,0"
ld c,Dss.PChars
rst ToDSS
pop hl
ret
; ‘à ¢­¥­¨¥ áâப (€­£«¨©áª¨©)
; in: de=string1
; hl=string2
; b=¤«¨­  áâப¨
COMPARE: ld a,(de)
call .cmp_AZ
.next: cp (hl)
ret nz
inc hl
inc de
djnz COMPARE
ret
;
.cmp_AZ: cp "a"
ret c
cp "z"+1
ret nc
and %0101'1111 ; a..z -> A..Z
ret
; ‘ª®¯¨à. áâபã (á ­ã«¥¬), ¬ ªá. 15 ᨬ¢®«®¢
; (hl) -> (de)
ncopy_string:
ld bc,15 ; ¬ ªá. ¤«¨­  áâப¨
.start: ld a,(hl)
ldi
ret po
or a
jr nz,.start
ret
; ‘ª®¯¨à. áâபã (á ­ã«¥¬)
; (hl) -> (de)
copy_string:
ld a,(hl)
ldi
or a
jr nz,copy_string
ret
; „¥áïâ¨ç­ë© ¢ë¢®¤ ¢ ¡ãä¥à
; ¢å®¤: a=ç¨á«®
; hl=¡ãä¥à
PUTB: ld c,2Fh
.loop: inc c
sub 10
jr nc,.loop
add a,10
add a,"0"
push af
ld a,c
ld (hl),a
inc hl
pop af
ld (hl),a
inc hl
ret
STR2DEC:
ld hl,0
.loop: ld a,(de)
inc de
or a
ret z
cp "." ; à §¤¥«. ¤ âë
ret z
cp "-" ; à §¤¥«. ¤ âë
ret z
cp ":" ; à §¤¥«. ¢à¥¬¥­¨
ret z
ld b,h
ld c,l
add hl,hl
add hl,hl
add hl,bc
add hl,hl
call .ATODEC
ret c
add a,l
ld l,a
jr nc,.loop
inc h
jr .loop
.ATODEC:; char -> int
cp "0"
ret c
cp "9"+1
ccf
ret c
sub "0"
ret
;!FIXIT ¥áâì ¤ã¡« hex2dec_ascii_16bit
PDIGIT: ld de,10000
ld a,#C8 ; ret z
ld (.RET_Z),a
call .DIG
ld de,1000
call .DIG
ld de,100
call .DIG
ld de,10
call .DIG
ld a,l
add a,"0"
;!TEST ¯®ª  ­¥ âॡã¥âáï ¯¥à¥¤ ¢ âì á«¥¤ãî騩 IX ¤ «ìè¥
;ld (ix+0),a
;inc ix
;ld (ix+0),0
LD (IX+0),A
LD (IX+1),0
;
ret
.DIG: xor a
.loop: inc a
sbc hl,de
jr nc,.loop
add hl,de
dec a
.RET_Z: ret z
add a,"0"
ld (ix+0),a
inc ix
xor a ; nop
ld (.RET_Z),a
ret
Restore_Screen:
PUSH AF
LD C,Dss.GetVMod
RST ToDSS
CP #80
JR C,.exit
LD BC,1 * 256 + Dss.SetVMod
LD A,Dss.SetVMod.txt80x32
RST ToDSS
.exit: POP AF
RET
; 梥â íªà ­  襫« 
color_screen:
db 07h
; ˆ¬ï ä ©«  "autoexec.bat"
autoexec_fname:
db "system.bat",0
; ¡¨â-ä« £¨ ®¯æ¨© á ¬®£® 襫« 
RUNMODE: db 0
; ¡ãä¥à à áè. ä ©«  á ®£à ­¨ç¨â¥«¥¬ 0
EXTBF: BLOCK 4,0
BATBF: db "BAT" ; à áè. bat-ä ©« 
T8C21: db "ON",0
T8C24: db "OFF",0
include 'edline.asm' ; áâப  । ªâ¨à®¢ ­¨ï
include 'batch.asm' ; ¯ àᨭ£ bat-ä ©«®¢
include 'exec.asm' ; ¢ë¯®«­. ¢¢¥¤. ª®¬ ­¤ á ª®­á®«¨
include 'procedures/print.asm' ; ä㭪樨 ¢ë¢®¤  á®®¡é¥­¨©
include '../Shared_includes/constants/dss_errors.z80' ; á®®¡é¥­¨ï ®¡ ®è¨¡ª å
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
include 'Commands/goto.asm' ; GOTO - jump to a label in a bat
include 'Commands/if.asm' ; IF - conditional command
include 'Commands/pause.asm' ; ¯ ã§ 
include 'Commands/rem.asm' ; ª®¬¬¥­â à¨©
include 'Commands/ver.asm' ; ¢ë¢®¤ ¢¥àᨨ „Ž‘
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' ; 㤠«¥­¨¥ ª â «®£ 
include 'Commands/del.asm' ; 㤠«¥­¨¥ ä ©« 
include 'Commands/ren.asm' ; ¯¥à¥¨¬¥­®¢ ­¨¥ ä ©«  ¨«¨ ª â «®£ 
include 'Commands/echo.asm' ; íå®-०¨¬
include 'Commands/help.asm' ; ¢ë¢®¤ íªà ­  ¯®¬®é¨
include 'Commands/path.asm' ; § ¤ âì á¨áâ. ¯ãâì
include 'Commands/set.asm' ; § ¤ âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
include 'Commands/reboot.asm' ; á®äâ à¥á¥â
;
DISPLAY "bat_params: ",/H,Buffers.bat_params, ". Size: ",/H, BAT_PARAMS, " End: ",/H, Buffers.bat_params + BAT_PARAMS - 1
DISPLAY "screen_path: ",/H,Buffers.screen_path, ". Size: ",/H, 2 + max_screen_path + 1, " End: ",/H, Buffers.screen_path + (2 + max_screen_path + 1) - 1
DISPLAY "sys_path: ",/H,Buffers.sys_path, ". Size: ",/H, 256, " End: ",/H, Buffers.sys_path + 255
DISPLAY "input_line: ",/H,Buffers.input_line, ". Size: ",/H, Input_Line, " End: ",/H, Buffers.input_line + Input_Line - 1
DISPLAY "history: ",/H,Buffers.history, ". Size: ",/H, history_size, " End: ",/H, Buffers.history + history_size - 1
DISPLAY "work: ",/H,Buffers.work, ". Size: ",/H, Work, " End: ",/H, Buffers.work + Work - 1
DISPLAY "Empty space for buffers from ",/H,$
DISPLAY "Free space from ",/H,$ + Struc_Buffers
assert ($ + Struc_Buffers) < (stack_point - stack_size), "Buffers can leack to stack!"
Buffers Struc_Buffers = $
; 5 0
; íªà ­­ë© ¯ãâì
;screen_path:
; db "A:"
; BLOCK max_screen_path+1,0 ; 32+1
; 6 0
; á¨á⥬­ë© ¯ãâì
; system_path:
; BLOCK 256,0 ;!HARDCODE
; 7 0
; ‘âàãªâãà  áâப¨ ¢¢®¤  ~input line~
; struct_input_line:
; db max_len_comline ;+0 254 ¬ ªá. ç¨á«® ¢¢®¤. ᨬ¢®«®¢
; db 0 ;+1 ä« £ ReadyString
; db 0 ;+2 X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
; db 0 ;+3 X ᬥé. áâப¨ §  «¥¢ë© ªà © (¢ ᨬ¢®« å)
; db 0 ;+4 ç¨á«® ¢¢¥¤¥­­ëå ᨬ¢®«®¢
; BLOCK max_len_comline+1,0 ;+5 áâப  ¢¢®¤ 
; 8 0
; <20>ãä¥à ¨áâ®à¨¨
; history_buff:
; BLOCK history_size,0 ; 256
; 9 0
; <20> ¡®ç¨© ¡ãä¥à
; work_buffer:
; BLOCK 512,0
; work_buffer1 equ $ ; 2-© à ¡. ¡ãä¥à ; 128 bytes
; work_buffer2 equ work_buffer1+128 ; 3-© à ¡. ¡ãä¥à ; 256 bytes
;