Login

Subversion Repositories NedoOS

Rev

Rev 1210 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

        DEVICE ZXSPECTRUM128
        include "../_sdk/sys_h.asm"

;1992, IskraSOFT corp. ╨б╨Я╨▒, ╨а╨╛╤Б╤Б╨╕╤П
;LL0000=0;$-#a7
;LL5db2=$-#f5
;LL5da8=$-#ff
;LL0010=0x10;$-#97
;LL5fc1=$-#e6
;LL5dc9=$-#de
;LL5ddf=$-#c8
;LL6091=$-#16
LL0005=5;$-#a2
;LL609c=$-#0b
LL000f=0x0f;$-#98
;LL6169=$-#3e
;LL0300=0x300;$-#a7
SCRHGT=24

NEDOOS=1

MAXCMDSZ=COMMANDLINE_sz-1-4-4 ;not counting terminator (-4 for "cmd ")


        org PROGSTART
begin
;0x5da4=23972
       if NEDOOS
        ld sp,0xc000
        ld e,3
        OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
        ld a,(user_scr0_high) ;ok
        SETPG4000 ;TODO ╤Г╨▒╤А╨░╤В╤М ╨┤╨╗╤П textmode

        call keepdir

        ld hl,COMMANDLINE
        call skipword
        call skipspaces
        ld (par1addr),hl
        call skipword
       push hl
        call skipspaces
        ld (par2addr),hl
       pop hl
        ld (hl),0
       endif
        call domenu;LL5dbd
       if NEDOOS
        jr c,failquit ;CY=error
       else
        ret c ;CY=error
       endif
okquit;LL5da8
       if NEDOOS
        ld hl,0
        QUIT
failquit
        ld hl,-1
        QUIT
       else
        xor a
        ld a,#f4
        ret
       endif

LL5dac
;hl=╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕
        call LL5db2 ;run (p_com+exebat)
       if NEDOOS
        jr c,failquit ;CY=error
       else
        ret c ;CY=error
       endif
        jr okquit;LL5da8

LL5db2
;run (p_com+exebat)
;hl=╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕
       if NEDOOS
;cmd <hl>
       push hl
        call findCR
        dec hl
        ld (hl),0
;run "cmd <command to run>"
        OS_SETSYSDRV
       pop hl ;ld hl,cmdbuf
        call loadandrun ;nz=error, e=id
        jp nz,failquit
        jp okquit
       else
        xor a
        ld b,#01 ;???
        ld c,#48 ;72(48):run    - = p_com(#49) + exebat(#44). (╨Т╤Л╤Е╨╛╨┤ ╤Б╨╝. exebat). ╨Я╨╡╤А╨╡╨┤╨░╤О╤В╤Б╤П ╤А╨╡╨│╨╕╤Б╤В╤А╤Л IX,B.
;73(49):p_com  - ╨Ч╨░╨┐╨╛╨╗╨╜╨╕╤В╤М  ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣  ╨▒╤Г╤Д╨╡╤А ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. HL = ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║╨╕, ╨╛╨║╨░╨╜╤З╨╕╨▓╨░╤О╤Й╨╡╨╣╤Б╤П ╨║╨╛╨┤╨╛╨╝ 13. ╨Я╤А╨╕ ╨┤╨╗╨╕╨╜╨╡ ╤Б╤В╤А╨╛╨║╨╕ ╨▒╨╛╨╗╨╡╨╡ 128 ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨╛╤И╨╕╨▒╨║╤Г (╤Д╨╗╨░╨│ C)
;68(44):exebat - ╨Ч╨░╨┐╤Г╤Б╨║  ╤Д╨░╨╣╨╗╨░ ╨┐╨╛ ╨┐╤Г╤В╨╕ ╨╕ ╨╕╨╝╨╡╨╜╨╕ ╤Д╨░╨╣╨╗╨░, ╨╜╨░╤Е╨╛╨┤╤П╤Й╨╡╨│╨╛╤Б╤П ╨▓╨╛ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╡╨╝ ╨▒╤Г╤Д╨╡╤А╨╡ ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. ╨Т╤Е╨╛╨┤: A=0:  ╤Б╤В╨░╨╜╨┤╨░╤А╤В╤А╨░╤П  ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨░  ╤В╨╕╨┐╨░ ╤Д╨░╨╣╨╗╨░, ╤В.╨╡. ╨╛╨▒╤А╨░╤Й╨╡╨╜╨╕╨╡ ╨║ ╤Д╨░╨╣╨╗╤Г S:extent.txt, A>0: DE = ╨░╨┤╤А╨╡╤Б ╨▒╤Г╤Д╨╡╤А╨░  ╤Б  ╨┐╤Г╤В╨╡╨╝  ╨╕  ╨╕╨╝╨╡╨╜╨╡╨╝  ╤В╨╡╨║╤Б╤В╨╛╨▓╨╛╨│╨╛ ╤Д╨░╨╣╨╗╨░. ╨Т╤Л╤Е╨╛╨┤: CARRY SET - ╤Б╨╡╤А╤М╨╡╨╖╨╜╨░╤П ╨╛╤И╨╕╨▒╨║╨░, ╨╕╨╜╨░╤З╨╡: Z - O.K.,  NZ  -  ╨║╨░╨║╨░╤П-╨╜╨╕╨▒╤Г╨┤╤М ╨┤╨╛╤Б╨░╨┤╨╜╨░╤П ╨╝╨╡╨╗╨╛╤З╤М
        rst #10
        ret c ;CY=error
        ld c,#41 ;65(41):fmrst  - ╨Т╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤В ╨┐╨╡╤А╨▓╨╛╨╜╨░╤З╨░╨╗╤М╨╜╨╛╨╡ ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╤Б╤А╨╡╨┤╤Л. (╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛, ╨║╨░╤В╨░╨╗╨╛╨│ ╨╕ ╤Д╨░╨╣╨╗, ╨╖╨░╨┐╨╛╨╝╨╕╨╜╨░╨╡╨╝╤Л╨╡ ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╨░╨╝╨╕ ╤А╨░╨▒╨╛╤В╨░╤О╤Й╨╕╨╝╨╕ ╤Б ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╛╨╣). ╨Т╤Л╤Е╨╛╨┤: ╤Б ╨╛╨▒╤А. ╨╛╤И╨╕╨▒╨╛╨║, ╨╕╨╜╨░╤З╨╡ ╤Б╨╛╤Е╤А╨░╨╜╤П╨╡╤В AF.
        rst #10
       endif
        ret

domenu;LL5dbd
        ld a,#01
        ld (LL5fc1),a ;1=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М exe, 0=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г?
       if NEDOOS
;╨╛╤В╨║╤А╤Л╨▓╨░╨╡╨╝ ╨╗╨╕╨▒╨╛ ╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А (╨╡╤Б╨╗╨╕ ╨╛╨╜ .mnu), ╨╗╨╕╨▒╨╛ SYSPATH/╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А (╨╡╤Б╨╗╨╕ ╨╛╨╜ .mnu), ╨╗╨╕╨▒╨╛ SYSPATH/mainmenu
       ld hl,(par1addr)
       xor a
       ld c,0xff
       cpir
       ld de,tdotmnuz+5
       ld b,5
checkdotmnu0
       dec hl
       dec de
       ld a,(de)
       cp (hl)
       jr nz,checkdotmnu_nomnu
       djnz checkdotmnu0
        ld de,(par1addr)
        OS_OPENHANDLE
        or a
        jr z,_LL5ddf
        OS_SETSYSDRV
        ld de,(par1addr)
        OS_OPENHANDLE
        or a
        jr z,_LL5ddf
checkdotmnu_nomnu
        OS_SETSYSDRV
        ld de,mainmenufilename;LL6091
        OS_OPENHANDLE
        or a
        scf
        ret nz ;error (CY)
       ld hl,(par1addr)
       ld (par2addr),hl
_LL5ddf
        ld a,b
        ld (curhandle),a
       else
;╨╛╤В╨║╤А╤Л╨▓╨░╨╡╨╝ ╨╗╨╕╨▒╨╛ ╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А, ╨╗╨╕╨▒╨╛ mainmenu, ╨╗╨╕╨▒╨╛ mainmenupath/mainmenu
        ld c,#40;64(40):oparm  - ╨Ю╤В╨║╤А╤Л╨▓╨░╨╡╤В  ╤Д╨░╨╣╨╗-╨┐╨░╤А╨░╨╝╨╡╤В╤А.  ╨Я╤Г╤В╤М  ╨║ ╤Д╨░╨╣╨╗╤Г  (╨┐╨╛╨╗╨╜╤Л╨╣ ╨╕╨╗╨╕ ╨╛╤В ╤В╨╡╨║╤Г╤Й╨╡╨│╨╛ ╨║╨░╤В╨░╨╗╨╛╨│╨░) ╨╗╨╡╨╢╨╕╤В ╨▓ ╨▒╤Г╤Д╨╡╤А╨╡ ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣  ╤Б╤В╤А╨╛╨║╨╕  ╨▓╨╝╨╡╤Б╤В╨╡ ╤Б ╨╕╨╝╨╡╨╜╨╡╨╝ ╤Д╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨╡╨│╨╛ ╨╝╨░╤Б╨║╨╛╨╣.
        rst #10
        jr c,_LL5dc9 ;error
        jr z,_LL5ddf ;file opened
_LL5dc9 ld hl,mainmenufilename;LL6091
        ld c,#25;37(25):fopen  - ╨Я╨╛╨╕╤Б╨║ ╨╕ ╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Д╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨║╨░╤В╨░╨╗╨╛╨│╨░ ╨┐╨╛ ╨╕╨╝╨╡╨╜╨╕ ╨╕ ╤В╨╕╨┐╤Г. HL - ╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П (╨╕╨╝╤П, ╤В╨╕╨┐). (╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В╤Б╤П, ╤В.╨╡. ╨╡╨│╨╛  ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М (19 ╨▒╨░╨╣╤В) ╤Б╤З╨╕╤В╤Л╨▓╨░╤О╤В╤Б╤П ╨▓ ╤Б╨╕╤Б. ╨╛╨▒╨╗╨░╤Б╤В╤М ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╨║╨░╤В╨░╨╗╨╛╨│╨░. ╨Т╤Л╤Е╨╛╨┤: ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨╛╨║  ╨╜╨╡╤В:   ╨╕ ╨╡╤Б╨╗╨╕  BIT5=0, ╤В╨╛ ╤Д╨░╨╣╨╗ ╨╛╤В╨║╤А╤Л╤В, ╨▓ A - ╤А╨╡╨│╨╕╤Б╤В╤А ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╤П ╤Д╨░╨╣╨╗╨░ (FSTAT), ╨▓ HL' - ╨░╨┤╤А╨╡╤Б 32-╨▒╨░╨╣╤В╨╛╨▓╨╛╨│╨╛ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ (FNAME) ╨╡╤Б╨╗╨╕ BIT5=1, ╤В╨╛ ╤Д╤Г╨╜╨║╤Ж╨╕╤П FOPEN ╨╛╤В╨║╤А╤Л╨╗╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣ ╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│
        rst #10
        jr nc,_LL5ddf ;file opened
        ld hl,mainmenupath;LL6088
        ld c,#42;66(42):comstr - ╨а╨░╨╖╨▒╨╕╤А╨░╨╡╤В╤Б╤П ╤Б ╤Г╨║╨░╨╖╨░╨╜╨╜╤Л╨╝ ╨┐╤Г╤В╨╡╨╝ ╨╕ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В ╨┤╨░╨╜╨╜╨╛╨╡ ╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛ ╨╕ ╨║╨░╤В╨░╨╗╨╛╨│ (╤Д╨░╨╣╨╗ ╨╜╨╡ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В!) ╨╕╨╗╨╕ ╤Б╨╜╨╕╨╝╨░╨╡╤В  ╨║╨╗╤О╤З.  ╨Т╤Е╨╛╨┤: HL = ╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. ╨Т╤Л╤Е╨╛╨┤: ╤Д╨╗╨░╨│ C: ╨╛╤И╨╕╨▒╨║╨░ ╨▓╨▓╨╛╨┤╨░/╨▓╤Л╨▓╨╛╨┤╨░ (╨▓╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤В╤Б╤П ╨┐╤А╨╡╨╢╨╜╤П╤П ╤Б╤А╨╡╨┤╨░); NC,Z:  A=0: HL'= 11-╨▒╨░╨╣╤В╨╛╨▓╤Л╨╣ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М/╤И╨░╨▒╨╗╨╛╨╜ ╤Д╨░╨╣╨╗╨░ (╨╡╤Б╨╗╨╕ ╨╕╨╝╤П/╨╝╨░╤Б╨║╨░ ╤Д╨░╨╣╨╗╨░ ╨╜╨╡ ╤Г╨║╨░╨╖╨░╨╜╨╛ ╨┐╨╛╤Б╨╗╨╡ ╨┐╤Г╤В╨╕, ╤В╨╛ ╤И╨░╨▒╨╗╨╛╨╜ ╨╕╨╖ #FF); A>0: HL'= ╨░╨┤╤А╨╡╤Б ╤Б╨╕╨╝╨▓╨╛╨╗╨░ "/" (╨╛╨▒╨╜╨░╤А╤Г╨╢╨╡╨╜ ╨║╨╗╤О╤З), A=╨┐╨╡╤А╨▓╤Л╨╣ ╤Б╨╕╨╝╨▓╨╛╨╗ ╨┐╨╛╤Б╨╗╨╡ ╨║╨╗╤О╤З╨░. NC,NZ:  ╨╕╨╗╨╕  ╨┐╤Г╤В╨╕  ╨╜╨╡╤В,  ╨╕╨╗╨╕  ╨║╨╗╤О╤З╨░ ╨╜╨╡╤В (╨┐╤Г╤Б╤В╨░╤П ╤Б╤В╤А╨╛╨║╨░), ╨╕╨╗╨╕ ╤Б╨╕╨╜╤В╨░╨║╤Б╨╕╤З╨╡╤Б╨║╨░╤П ╨╛╤И╨╕╨▒╨║╨░ ╨▓ ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╡.
        rst #10
        ret c ;error
        ld hl,mainmenufilename;LL6091
        ld c,#25;37(25):fopen  - ╨Я╨╛╨╕╤Б╨║ ╨╕ ╨╛╤В╨║╤А╤Л╤В╨╕╨╡ ╤Д╨░╨╣╨╗╨░ ╨╕╨╗╨╕ ╨║╨░╤В╨░╨╗╨╛╨│╨░ ╨┐╨╛ ╨╕╨╝╨╡╨╜╨╕ ╨╕ ╤В╨╕╨┐╤Г. HL - ╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П (╨╕╨╝╤П, ╤В╨╕╨┐). (╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│ ╨╛╤В╨║╤А╤Л╨▓╨░╨╡╤В╤Б╤П, ╤В.╨╡. ╨╡╨│╨╛  ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М (19 ╨▒╨░╨╣╤В) ╤Б╤З╨╕╤В╤Л╨▓╨░╤О╤В╤Б╤П ╨▓ ╤Б╨╕╤Б. ╨╛╨▒╨╗╨░╤Б╤В╤М ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╨║╨░╤В╨░╨╗╨╛╨│╨░. ╨Т╤Л╤Е╨╛╨┤: ╨╡╤Б╨╗╨╕ ╨╛╤И╨╕╨▒╨╛╨║  ╨╜╨╡╤В:   ╨╕ ╨╡╤Б╨╗╨╕  BIT5=0, ╤В╨╛ ╤Д╨░╨╣╨╗ ╨╛╤В╨║╤А╤Л╤В, ╨▓ A - ╤А╨╡╨│╨╕╤Б╤В╤А ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╤П ╤Д╨░╨╣╨╗╨░ (FSTAT), ╨▓ HL' - ╨░╨┤╤А╨╡╤Б 32-╨▒╨░╨╣╤В╨╛╨▓╨╛╨│╨╛ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ (FNAME) ╨╡╤Б╨╗╨╕ BIT5=1, ╤В╨╛ ╤Д╤Г╨╜╨║╤Ж╨╕╤П FOPEN ╨╛╤В╨║╤А╤Л╨╗╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣ ╨┐╨╛╨┤╨║╨░╤В╨░╨╗╨╛╨│
        rst #10
        ret c ;error
_LL5ddf
       endif
;file opened
       if NEDOOS
        ld a,(curhandle)
        ld b,a
        OS_GETFILESIZE ;b=handle, out: dehl=file size
        ld a,d
        or e
        scf
        ret nz ;error (CY)
        ex de,hl
       else
        ld c,#35;53(35):bkfcb  - ╨Т╨╛╨╖╨▓╤А╨░╤В ╨░╨┤╤А╨╡╤Б╨░ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ HL'(=FNAME)
        rst #10
        exx
        push hl
        pop ix
        ld e,(ix+#0e)
        ld d,(ix+#0f)
       endif
;de=filesz
       if NEDOOS
       ld hl,menutext+128;LL623a
       add hl,de
       ret c ;error (no free mem)
       ex de,hl
       ld de,menutext;LL623a
;de=menutext, hl=filesz
       push de
       push hl
        ld a,(curhandle)
        ld b,a
       push bc
        OS_READHANDLE
       pop bc
        OS_CLOSEHANDLE
       pop hl
       pop de
        or a
        scf
        ret nz ;error (CY)
       else
        ld ix,menutext;LL623a
        push ix
        pop hl
        add hl,de ;hl=menutext+filesz?
        inc hl
        ld c,#10;16(10):g_cnfg - ╨Т╨╛╨╖╨▓╤А╨░╤В ╨▓╨╡╨║╤В╨╛╤А╨░ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕ ╤П╨┤╤А╨░. HL'- ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕ ╤П╨┤╤А╨░, ╨Р - ╨╜╨╛╨╝e╤А ╨║╨░╨╜╨░╨╗╨░ ╤Б╨╕╤Б╤В╨╡╨╝╨╜╨╛╨│╨╛ ╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨░
        rst #10
        push hl
        exx
        ld bc,LL0005
        add hl,bc ;hl=╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╨╕ ╤П╨┤╤А╨░+5
        ld e,(hl)
        inc hl
        ld d,(hl) ;free mem???
        exd   ;hl=free mem???
        pop de
        xor a
        sbc hl,de
        ld a,#82
        ret c ;no free mem???
        exx
;ix=menutext, de=filesz
        xor a
        ld h,a
        ld l,a
        ld c,#29 ;41(29):rpart  - ╨з╤В╨╡╨╜╨╕╨╡ ╤З╨░╤Б╤В╨╕ ╤Д╨░╨╣╨╗╨░. A,HL - ╤Г╨║╨░╨╖╨░╤В╨╡╨╗╤М, IX - ╨░╨┤╤А╨╡╤Б ╨▓ ╨┐╨░╨╝╤П╤В╨╕, DE - ╨┤╨╗╨╕╨╜╨░ ╨▓ ╨▒╨░╨╣╤В╨░╤Е.
        rst #10
        ret c ;error
        push ix
        pop hl
       endif
;hl=menutext
;de=filesz
        add hl,de ;hl=menutext+filesz
        ld (hl),#0d
        inc hl
        ld (hl),#03 ;╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░
       if !NEDOOS
        ld c,#41 ;65(41):fmrst  - ╨Т╨╛╤Б╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╤В ╨┐╨╡╤А╨▓╨╛╨╜╨░╤З╨░╨╗╤М╨╜╨╛╨╡ ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╤Б╤А╨╡╨┤╤Л. (╤Г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛, ╨║╨░╤В╨░╨╗╨╛╨│ ╨╕ ╤Д╨░╨╣╨╗, ╨╖╨░╨┐╨╛╨╝╨╕╨╜╨░╨╡╨╝╤Л╨╡ ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╨░╨╝╨╕ ╤А╨░╨▒╨╛╤В╨░╤О╤Й╨╕╨╝╨╕ ╤Б ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╛╨╣). ╨Т╤Л╤Е╨╛╨┤: ╤Б ╨╛╨▒╤А. ╨╛╤И╨╕╨▒╨╛╨║, ╨╕╨╜╨░╤З╨╡ ╤Б╨╛╤Е╤А╨░╨╜╤П╨╡╤В AF
        rst #10
        ret c ;error
       endif
;file loaded
        ld e,'H';#48 ;H - ╤Б╤В╤А╨╛╨║╨╕ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        jr z,_LL5e2a ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        ld a,#01
        ld (hintspresent),a;(LL6226),a
_LL5e2a ld e,'K';#4b ;K - ╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ (╨╛╨┤╨╜╨░ ╨▓ ╤В╨╡╨║╤Б╤В╨╡) ;╨╜╨░╨┐╤А╨╕╨╝╨╡╤А: K/A1/K40/J5/C160/O21
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        call nz,interpret_keys_hl;LL5fc9 ;╨╕╨╜╤В╨╡╤А╨┐╤А╨╡╤В╨╕╤А╤Г╨╡╨╝ ╨║╨╗╤О╤З╨╕
;╨╕╤Й╨╡╨╝ ╤Б╨░╨╝╤Г╤О ╤И╨╕╤А╨╛╨║╤Г╤О ╤Б╤В╤А╨╛╨║╤Г ╤В╨╕╨┐╨░ 'A' (menuwid) ╨╕ ╨▓╤Л╤Б╨╛╤В╤Г ╨╛╨║╨╜╨░ (menuhgt):
        ld e,'A';#41
        ld d,#01
_LL5e36 call LL609e ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        jr z,_LL5e49 ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        inc d
        ld c,a
        ld a,(menuwid);(LL6232)
        cp c
        jr nc,_LL5e44
        ld a,c
_LL5e44 ld (menuwid),a;(LL6232),a
        jr _LL5e36
_LL5e49 inc d
        ld a,d
        cp #02
        ret z ;╨▓ ╨╝╨╡╨╜╤О ╨╜╨╡╤В ╨╜╨╕ ╨╛╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕
        cp SCRHGT-3;21;#15
        jr c,_LL5e54
        ld a,SCRHGT-4;20;#14
_LL5e54 ld (menuhgt),a;(LL622d),a
;╨╡╤Й╤С ╤А╨░╨╖ ╨╕╤Й╨╡╨╝ ╨▓╤Л╤Б╨╛╤В╤Г ╨╛╨║╨╜╨░???
        ld e,'A';#41
        ld d,#01
_LL5e5b call LL609e ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ret z ;╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        inc d
        dec hl
        ld a,e
        cp (hl)
        jr nz,_LL5e5b
        ld a,d
        cp SCRHGT-5;19;#13
        ret nc
;╨╕╤Й╨╡╨╝ menuwid_chrs, menux ;TODO fix for textmode
        ld a,(menuwid);(LL6232)
        ld c,#21
        dec a
        cp c
        jr c,_LL5e73
        ld a,c
_LL5e73 ld (menuwid),a;(LL6232),a
        ld b,a
        add a,a
        add a,b ;*3
        srl a
        srl a ;*3/4
        inc a
        inc a
        inc a ;*3/4 +3
        srl a
        add a,a ;╤З╤С╤В╨╜╨╛╨╡
        ld (menuwid_chrs),a;(LL622e),a
        ld b,a
        ld a,(menux);(LL622b)
        cp #ff
        jr nz,_LL5e96
        ld a,#20
        sub b
        srl a
        ld (menux),a;(LL622b),a
_LL5e96 sla a
        sla a
        ld b,#01
        ld c,#03
        inc a
_LL5e9f cp c
        jr c,_LL5ea6
        sub c
        inc b
        jr _LL5e9f
_LL5ea6 ld a,b ;???
        ld a,(menuwid);(LL6232)
        and #07
        cp #04
        jr z,LL5eb8
        cp #05
        jr z,LL5eb8
        cp #07
        jr nz,LL5eb9
LL5eb8  inc b
LL5eb9  ld a,b
        ld (LL6231),a ;??? NU
;TODO fix for textmode:
        ld a,(hintx);(LL621d)
        sla a
        sla a
        ld b,#00
        ld c,#03
        inc a
_LL5ec9 cp c
        jr c,_LL5ed0
        sub c
        inc b
        jr _LL5ec9
_LL5ed0 ld a,b
        inc a
        inc a
        ld (LL6223),a ;??? NU
;
        ld a,(menuy);(LL622c)
        cp #ff
        jr nz,_LL5ee9
        ld a,(menuhgt);(LL622d)
        ld b,a
        ld a,SCRHGT;#18
        sub b
        srl a
        ld (menuy),a;(LL622c),a
_LL5ee9
;TODO fix for textmode:
        ld a,(hintwid);(LL6224)
        srl a
        srl a
        ld b,a
        set 7,b
        ld c,#03
        xor a
LL5ef6  add a,c
        dec b
        bit 7,b
        jr nz,LL5ef6
        inc a
        inc a
        ld (LL6220),a ;hintwid_chrs?
;
        ld a,(action);(LL6087)
        ld b,a
        bit 0,a ;1 = ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б ╤В╨╡╨╜╤М╤О
        jr z,_LL5f11
        ld a,(shadowcolor);(LL6230)
        res 7,a
        ld (shadowcolor),a;(LL6230),a
_LL5f11 xor a ;╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣
        bit 2,b ;4 = ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б 2-╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣
        jr z,_LL5f18
        ld a,#02 ;╨╛╨║╨╜╨╛ ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣
_LL5f18
        ld ix,MENU;LL622b
       if NEDOOS
        call sR_WT
       else
        ld c,#61 ;97(61):wt    - ╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░. ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
        rst #10
       endif
        ld a,(action);(LL6087)
        and #0a
        ld (action),a;(LL6087),a
        ld a,(flags);(LL6235)
        and #14
        ld (flags),a;(LL6235),a
        ld a,(action);(LL6087)
        bit 3,a ;8 = ╨╜╨╡ ╨▓╤Л╨┐╨╛╨╗╨╜╤П╤В╤М ╤Б╤В╤А╨╛╨║╤Г ╨а
        jr nz,_LL5f43
        ld e,'P';#50 ;P - ╤Б╤В╤А╨╛╨║╨░ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╤Е ╨║╨╛╨╝╨░╨╜╨┤ (╨╛╨┤╨╜╨░ ╨▓ ╤В╨╡╨║╤Б╤В╨╡)
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        ld ix,MENU;LL622b
        call nz,LL5db2 ;run (p_com+exebat)
        ret c ;error
_LL5f43 ld a,(flags);(LL6235)
        and #1f
        ld (flags),a;(LL6235),a
        ld ix,MENU;LL622b
        call cycleinmenu;LL60ca
        jr c,LL5fc2 ;╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╤Б╤В╤А╨╛╨║╤Г 'T'
        call LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld e,'Z';#5a ;Z - ╤Б╤В╤А╨╛╨║╨░ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╤Е ╨║╨╛╨╝╨░╨╜╨┤
        call LL60a1 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        call nz,LL5db2 ;run (p_com+exebat)
        ret c
        ld a,(flags);(LL6235)
        res 5,a
        ld (flags),a;(LL6235),a
        ld a,(action);(LL6087)
        bit 1,a ;2 = ╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╤Б╨╛╨╛╤В╨▓╨╡╤В╤Б╤В╤Г╤О╤Й╤Г╤О ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Г╤О ╤Б╤В╤А╨╛╨║╤Г Z ╨╕ ╨▓╨╡╤А╨╜╤Г╤В╤М╤Б╤П ╤Б╨╜╨╛╨▓╨░ ╨▓ ╨╝╨╡╨╜╤О
        jr nz,_LL5f43 ;???
        call LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld e,'C';#43 ;C ╨╕╨╗╨╕ c - ╤Б╤В╤А╨╛╨║╨╕ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Л╤Е ╤Б╤В╤А╨╛╨║ (C - ╤Б╤В╨░╨╜╨┤╨░╤А╤В╨╜╤Л╨╣ ╨▓╤Л╨╖╨╛╨▓, ╤Б - ╨▓╤Л╨╖╨╛╨▓ ╤Б╤В╤А╨╛╨║╨╕ ╤З╨╡╤А╨╡╨╖ SHELL ( ╨┤╨╗╤П ╨▒╨╛╨╗╤М╤И╨╕╤Е ╨┐╤А╨╛╨│╤А╨░╨╝╨╝ ( ╨╜╨░╨┐╤А╨╕╨╝╨╡╤А ╤А╨╡╨┤╨░╨║╤В╨╛╤А╨░, ╤В.╨╡. ╨┤╨╗╤П ╨┐╤А╨╛╨│╤А╨░╨╝╨╝ ╤Г ╨║╨╛╤В╨╛╤А╤Л╤Е ╨░╨┤╤А╨╡╤Б ╨╖╨░╨│╤А╤Г╨╖╨║╨╕ ╨╝╨╡╨╜╤М╤И╨╡ 25000) ╨╕ ╨┐╨░╨║╨╡╤В╨╛╨▓)
        call LL60a1 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ret z ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        push af
        dec hl
        ld a,'c';#63
        inc hl
        cp (hl)
        jr nz,_LL5f84
        xor a
        ld (LL5fc1),a ;0=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г?
_LL5f84 pop af
LL5f85  ret z
        ld a,'*';#2a ;╨┐╨╛╨┤╤Б╤В╨░╨▓╨╗╤П╤В╤М ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╨║╨╛╨╜╤Ж╨╡ ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕ (╨╜╨╡ ╨┤╨╛╨║╤Г╨╝╨╡╨╜╤В╨╕╤А╨╛╨▓╨░╨╜╨╛!!!)
        cp (hl)
        jr nz,LL5fa5
;╨▒╨╡╤А╤С╨╝ ╤Д╨░╨╣╨╗ ╨┐╨╛╨┤ ╨║╤Г╤А╤Б╨╛╤А╨╛╨╝
       if NEDOOS
;╨▒╤А╨░╤В╤М ╨╕╨╖ ╨▓╤В╨╛╤А╨╛╨│╨╛ ╨┐╨░╤А╨░╨╝╨╡╤В╤А╨░ ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕: menu.com menu.mnu filename.ext
        ld de,(par2addr)
       else
        ld c,#8a ;138(8A):g_curs - ╨Т╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨┐╨░╤А╨░╨╝╨╡╤В╤А╤Л ╨┐╨░╨╜╨╡╨╗╤М╨╜╨╛╨│╨╛ ╨║╤Г╤А╤Б╨╛╤А╨░. ╨Т╤Л╤Е╨╛╨┤: A=E'= ╨╜╨╛╨╝╨╡╤А ╤Д╨░╨╣╨╗╨░, D'= ╨┐╨╛╨╖╨╕╤Ж╨╕╤П Y ╨▓ ╨╛╨║╨╜╨╡ (=H ╨┤╨╗╤П wtpos), B' - ╨╜╨╛╨╝╨╡╤А ╤В╨╡╨║╤Г╤Й╨╡╨╣ ╨┐╨░╨╜╨╡╨╗╨╕ (0 - ╨╗╨╡╨▓╨░╤П, 1 - ╨┐╤А╨░╨▓╨░╤П), HL' - ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨╛╨║╨╜╨░ ╨┐╨░╨╜╨╡╨╗╨╕
        rst #10
        ld e,a
        ld c,#27 ;39(27):gname  - ╨Т╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М  ╤Д╨░╨╣╨╗╨░, ╨╜╨╡  ╨╛╤В╨║╤А╤Л╨▓╨░╤П ╨╡╨│╨╛  ╨╜╨░ ╨▓╤Е╨╛╨┤╨╡ ╨▓ ╤А╨╡╨│.╨Х - ╨╜╨╛╨╝╨╡╤А ╤Д╨░╨╣╨╗╨░. ╨Т╤Л╤Е╨╛╨┤: ╨╡╤Б╨╗╨╕ O.K., ╤В╨╛ HL' - ╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        rst #10
        ret c
       endif
        push hl ;╨░╨┤╤А╨╡╤Б '*'?
        call findCR;LL61a1
        dec hl
        ld (hl),#20 ;╨▓╨╝╨╡╤Б╤В╨╛ CR
        inc hl
       if NEDOOS
        ex de,hl
        call strcopy
       else
        exx
        push hl ;╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        exx
        pop de ;╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        exd  ;hl=╨░╨┤╤А╨╡╤Б ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤П ╤Д╨░╨╣╨╗╨░ ╨▓ ╤Н╨╗╨╡╨║╤В╤А╨╛╨╜╨╜╨╛╨╝ ╨┤╨╕╤Б╨║╨╡
        ld c,#4f ;79(4F):convr  - ╨Я╤А╨╡╨╛╨▒╤А╨░╨╖╤Г╨╡╤В  11-╨▒╨░╨╣╤В╨╛╨▓╤Л╨╣ ╨╛╨┐╨╕╤Б╨░╤В╨╡╨╗╤М  ╨╕╨╝╨╡╨╜╨╕ ╨╕ ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╤П ╤Д╨░╨╣╨╗╨░ (╨▓ HL), ╨▓ 13-╨▒╨░╨╣╤В╨╛╨▓╨╛╨╡ ╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░ ╤Б ╤А╨░╤Б╤И╨╕╤А╨╡╨╜╨╕╨╡╨╝ ╤З╨╡╤А╨╡╨╖ ╤В╨╛╤З╨║╤Г ╨╕ ╤Б "13" ╨▓ ╨║╨╛╨╜╤Ж╨╡ (╨▓ DE). ╨Э╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ DE' - ╨░╨┤╤А╨╡╤Б #0D
        rst #10
       endif
        pop hl ;╨░╨┤╤А╨╡╤Б '*'?
        inc hl ;hl=╨░╨┤╤А╨╡╤Б ╨║╨╛╨╝╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ "command bla-bla filename.ext"
LL5fa5  pop bc
       if NEDOOS
       jp LL5dac ;run (p_com+exebat),okquit
       else
        ld a,(LL5fc1)
        or a
        jp nz,LL5dac ;run (p_com+exebat),okquit
;╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г?
        ld c,#49 ;73(49):p_com  - ╨Ч╨░╨┐╨╛╨╗╨╜╨╕╤В╤М  ╨▓╨╜╤Г╤В╤А╨╡╨╜╨╜╨╕╨╣  ╨▒╤Г╤Д╨╡╤А ╨║╨╛╨╝╨░╨╜╨┤╨╜╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕. HL = ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║╨╕, ╨╛╨║╨░╨╜╤З╨╕╨▓╨░╤О╤Й╨╡╨╣╤Б╤П ╨║╨╛╨┤╨╛╨╝ 13. ╨Я╤А╨╕ ╨┤╨╗╨╕╨╜╨╡ ╤Б╤В╤А╨╛╨║╨╕ ╨▒╨╛╨╗╨╡╨╡ 128 ╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В ╨╛╤И╨╕╨▒╨║╤Г (╤Д╨╗╨░╨│ C).
        rst #10
        xor a
        ld c,#93 ;147(93):shexe  - ╨Т╤Л╤Е╨╛╨┤ ╨▓ ╨╛╨▒╨╛╨╗╨╛╤З╨║╤Г ╤Б ╨╖╨░╨┐╤Г╤Б╨║╨╛╨╝ RST exebat(#44) ╤Б A=0
        rst #10
       endif

LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld a,(cursory);(LL6234)
        ld d,a
        ld e,'A';#41
        call LL609e ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        dec hl
        ld d,#01
        ret ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛

LL5fc1  nop   ;0=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М bat ╨╕╨╗╨╕ ╨▒╨╛╨╗╤М╤И╤Г╤О ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Г, 1=╨╜╨░╨┤╨╛ ╨▓╤Л╨╖╨▓╨░╤В╤М exe?

LL5fc2  ld e,'T';#54 ;C/c,T - ╤Б╤В╤А╨╛╨║╨╕ ╨┤╨╗╤П ╨▓╤Л╨╖╨╛╨▓╨░ ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Л╤Е ╤Б╤В╤А╨╛╨║ (T - ╨┤╨╛╨╗╨╢╨╜╨░ ╤Б╤В╨╛╤П╤В╤М ╨║╨╛╨╝╨░╨╜╨┤╨╜╨░╤П ╤Б╤В╤А╨╛╨║╨░, ╨▓╤Л╨╖╤Л╨▓╨░╨╡╨╝╨░╤П ╨┐╤А╨╕ ╨╛╤В╨║╨░╨╖╨╡ (SS + A)
        call LL609c ;╨┐╨╛╨╕╤Б╨║ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨▓ menutext?
        jr LL5f85 ;╤В╨░╨╝ ret z ╨╕ ╨┐╤А╨╛╨▓╨╡╤А╨║╨░ ╨╜╨░ '*'...

interpret_keys_hl;LL5fc9
;hl=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21
        ld a,'/';#2f
        cp (hl)
        ret nz
        inc hl
        ld b,(hl)
        push bc ;b=╤В╨╕╨┐ ╨║╨╗╤О╤З╨░
        inc hl
        push hl ;hl=╨╜╨░╤З╨░╨╗╨╛ ╤З╨╕╤Б╨╗╨░ ╨▓ ╨║╨╗╤О╤З╨╡
        xor a
        ld b,a
LL5fd4  ld a,#20
        cp (hl)
        jr z,_LL5fe7
        ld a,'/';#2f
        cp (hl)
        jr z,_LL5fe7
        ld a,#0d
        cp (hl)
        jr z,_LL5fe7
        inc hl
        inc b
        jr LL5fd4
_LL5fe7 pop de ;de=╨╜╨░╤З╨░╨╗╨╛ ╤З╨╕╤Б╨╗╨░ ╨▓ ╨║╨╗╤О╤З╨╡
        push hl ;hl=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21 - ╨┐╨╛╤Б╨╗╨╡ ╤З╨╕╤Б╨╗╨░
        exd   ;hl=╨╜╨░╤З╨░╨╗╨╛ ╤З╨╕╤Б╨╗╨░ ╨▓ ╨║╨╗╤О╤З╨╡
        ld a,b ;╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░
        ld b,#00
       if NEDOOS
        call sa_d
       else
        ld c,#7d ;125(7D):a_d   - ╨┐╤А╨╡╨╛╨▒╤А╨░╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╤В╤А╨╛╨║╨╕ ASCII-╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓ 4-╨▒╨░╨╣╤В╨╛╨▓╨╛╨╡ ╤З╨╕╤Б╨╗╨╛. ╨Т╨╡╨┤╤Г╤Й╨╕╨╡ ╨┐╤А╨╛╨▒╨╡╨╗╤Л ╨╕╨│╨╜╨╛╤А╨╕╤А╤Г╤О╤В╤Б╤П. HL - ╨░╨┤╤А╨╡╤Б  ASCII - ╨▒╤Г╤Д╨╡╤А╨░, ╨Р - ╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░ ( ╨╡╤Б╨╗╨╕ ╨Р=0, ╤В╨╛ ╨┤╨╛ ╨║╨╛╨┤╨░ 13 ), ╨Т - ╨╛╤Б╨╜╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╨╕╤Б╤В╨╡╨╝╤Л ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О (╨╜╨╡ ╨▒╨╛╨╗╨╡╨╡ 16, B=0 ╨┐╨╛╨╜╨╕╨╝╨░╨╡╤В╤Б╤П ╨║╨░╨║ 10). ╨б╨╕╤Б╤В╨╡╨╝╨░ ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨╝╨╛╨╢╨╡╤В ╤В╨░╨║╨╢╨╡ ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╤В╤М╤Б╤П ╨┐╨╛ ╨┐╨╡╤А╨▓╨╛╨╝╤Г ╤Б╨╕╨╝╨▓╨╛╨╗╤Г ╨▒╤Г╤Д╨╡╤А╨░: #,h,H - 16; .,d - 10; o,O - 8; %,b,B - 2. ╨Т╤Л╤Е╨╛╨┤: 32-╤А╨░╨╖╤А╤П╨┤╨╜╨╛╨╡ ╤З╨╕╤Б╨╗╨╛ ╨▓ DE'HL'. BC' - ╨┐╤А╨╛╨┤╨╛╨╗╨╢╨╡╨╜╨╕╨╡ ASCII-╨▒╤Г╤Д╨╡╤А╨░. ╨Т╨╛╨╖╨╝╨╛╨╢╨╜╤Л╨╡ ╨╛╤И╨╕╨▒╨║╨╕ (╤Д╨╗╨░╨│ C): ╨╜╨╡╤Ж╨╕╤Д╤А╨╛╨▓╨╛╨╣ ╤Б╨╕╨╝╨▓╨╛╨╗ (A=0), ╨┐╨╡╤А╨╡╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ (A=1)
        rst #10
       endif
        exx
        ld b,l ;result
        pop de ;de=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21
        ld hl,LL5ffd
        pop af ;a=╤В╨╕╨┐ ╨║╨╗╤О╤З╨░
       if NEDOOS
        call sanaly
       else
        ld c,#7e ;126(7E):analys - ╨Я╨╡╤А╨╡╨┤╨░╤З╨░ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╡ ╨┐╨╛ ╨░╨┤╤А╨╡╤Б╤Г ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л. HL - a╨┤╤А╨╡╤Б ╤В╨░╨▒╨╗╨╕╤Ж╤Л, ╨Р - ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л. ╨в╨░╨▒╨╗╨╕╤Ж╨░ ╤Б╨╛╤Б╤В╨╛╨╕╤В ╨╕╨╖  ╨╖╨░╨┐╨╕╤Б╨╡╨╣ ╨┐╨╛ 3 ╨▒╨░╨╣╤В╨░: 0(1) ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л, 1(2) ╨░╨┤╤А╨╡╤Б ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╤Л. ╨Т ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨╣ ╨╖╨░╨┐╨╕╤Б╨╕ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╗╨╡╨╢╨░╤В╤М ╨▒╨░╨╣╤В #FF ╨╕ ╨░╨┤╤А╨╡╤Б ╨╛╤В╤А╨░╨▒╨╛╤В╨║╨╕ ╤Б╨╕╤В╤Г╨░╤Ж╨╕╨╕ "╨║╨╛╨┤ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜"
        rst #10 ;(╨▓ de'hl' ╨╝╤Л ╨┐╨╡╤А╨╡╨┤╨░╨╗╨╕ ╤З╨╕╤Б╨╗╨╛╨▓╨╛╨╣ ╨┐╨░╤А╨░╨╝╨╡╤В╤А ╨┤╨╗╤П ╤Н╤В╨╛╨│╨╛ ╨║╨╗╤О╤З╨░)
       endif
        exd
;hl=╤Б╤В╤А╨╛╨║╨░ ╨║╨╗╤О╤З╨╡╨╣ ╤В╨╕╨┐╨░ /A1/K40/J5/C160/O21
        jr interpret_keys_hl;LL5fc9 ;╨┐╤А╨╛╨┤╨╛╨╗╨╢╨░╨╡╨╝ ╤А╨░╨╖╨▒╨╛╤А ╨║╨╗╤О╤З╨╡╨╣

;    C╨┐╨╕╤Б╨╛╨║ ╨║╨╗╤О╤З╨╡╨╣:
; ╨Р - ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П : 0 - ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╡╨╕╤О;
;          1 - ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б ╤В╨╡╨╜╤М╤О;
;          2 - ╨▓╤Л╨┐╨╛╨╗╨╜╨╕╤В╤М ╤Б╨╛╨╛╤В╨▓╨╡╤В╤Б╤В╤Г╤О╤Й╤Г╤О
;            ╨║╨╛╨╝╨░╨╜╨┤╨╜╤Г╤О ╤Б╤В╤А╨╛╨║╤Г Z ╨╕
;            ╨▓╨╡╤А╨╜╤Г╤В╤М╤Б╤П ╤Б╨╜╨╛╨▓╨░ ╨▓ ╨╝╨╡╨╜╤О;
;          4 - ╨╛╨║╨╜╨╛ ╨╝╨╡╨╜╤О ╤Б 2-╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣;
;          8 - ╨╜╨╡ ╨▓╤Л╨┐╨╛╨╗╨╜╤П╤В╤М ╤Б╤В╤А╨╛╨║╤Г ╨а;
;         xx - ╤Б╤Г╨╝╨╝╨░╤А╨╜╨╛╨╡ ╨┤╨╡╨╣╤Б╤В╨▓╨╕╨╡,
;             ╨╜╨░╨┐╤А╨╕╨╝╨╡╤А : 1+4=5 xx=5 .
; B - ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П :16 - ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О;
;               4 - ╨║╨╛╤А╨╛╤В╨║╨╕╨╣ ╨║╤Г╤А╤Б╨╛╤А;
;               16- ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨░ ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕;
;               xx - ╤Б╤Г╨╝╨╝╨░╤А╨╜╨╛╨╡ ╨┤╨╡╨╣╤Б╤В╨▓╨╕╨╡.
; E - ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ x ╨╝╨╡╨╜╤О
;     (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О ╤Ж╨╡╨╜╤В╤А╨╛╨▓╨║╨░ ╨┐╨╛ X);
; D - ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╨░ Y ╨╝╨╡╨╜╤О
;     (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О ╤Ж╨╡╨╜╤В╤А╨╛╨▓╨║╨░ ╨┐╨╛ Y);
; F - ╨┐╨╛╨╗╨╛╨╢╨╡╨╜╨╕╨╡ ╨║╤Г╤А╤Б╨╛╤А╨░ ╨▓ ╨╝╨╡╨╜╤О
;    (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О ╨▓ ╨┐╨╡╤А╨▓╨╛╨╣ ╤Б╤В╤А╨╛╨║╨╡ ╨╝╨╡╨╜╤О);
; J - ╤Ж╨▓╨╡╤В ╨║╤Г╤А╤Б╨╛╤А╨░ ╨╝╨╡╨╜╤О
;      (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О %00111001 );
; T - ╤Ж╨▓╨╡╤В ╤В╨╡╨╜╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 0 );
; K - ╤Ж╨▓╨╡╤В ╨╝╨╡╨╜╤О (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О %00001111);
; O - ╤Ж╨▓╨╡╤В ╨║╤Г╤А╤Б╨╛╤А╨░ ╨┐╤А╨╕ ╨▓╤Л╤Е╨╛╨┤╨╡ ╨╕╨╖ ╨╝╨╡╨╜╤О
;          (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О %00100000 );
; G - Y ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 0  );
; I - ╤Ж╨▓╨╡╤В ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕
;     (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О  %00001111 );
; H - X ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 0 );
; N - ╨▓╤Л╤Б╨╛╤В╨░ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 1 );
; C - ╨┤╨╗╨╕╨╜╨░ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╕ (╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О 32 ).

LL5ffd  DB 'A';#41
        dw setkey_action;LL6041
        db 'B';#42
        dw setkey_flags;LL6046
        db 'C';#43
        dw setkey_hintwid;LL604b
        DB 'D';#44
        dw setkey_menuy;LL6050
        db 'E';#45
        dw setkey_menux;LL6055
        db 'F';#46
        dw setkey_cursory;LL605a
        db 'G';#47
        dw setkey_hinty;LL605f
        db 'H';#48
        dw setkey_hintx;LL6064
        DB 'I';#49
        dw setkey_hintcolor;LL6069
        db 'J';#4a
        dw setkey_cursorcolor;LL606e
        db 'K';#4b
        dw setkey_menucolor;LL6073
         db 'L';#4c
         dw LL6078
         db 'M';#4d
         dw LL607d
        db 'N';#4e
        dw setkey_hinthgt;LL6082
        db 'O';#4f
        dw setkey_exitcursorcolor;LL603c
        db 'T';#54
        dw setkey_shadowcolor;LL6030
        DB #ff
        dw reter;LL6045

setkey_shadowcolor;LL6030
        ld a,b
        and #07
        ld b,a
        add a,a
        add a,a
        add a,a
        or b
        ld (shadowcolor),a;(LL6230),a
        ret
setkey_exitcursorcolor;LL603c
        ld a,b
        ld (exitcursorcolor),a;(LL6239),a
        ret
setkey_action;LL6041
        ld a,b
        ld (action),a;(LL6087),a
reter;LL6045
        ret
setkey_flags;LL6046
        ld a,b
        ld (flags),a;(LL6235),a
        ret
setkey_hintwid;LL604b
        ld a,b
        ld (hintwid),a;(LL6224),a
        ret
setkey_menuy;LL6050
        ld a,b
        ld (menuy),a;(LL622c),a
        ret
setkey_menux;LL6055
        ld a,b
        ld (menux),a;(LL622b),a
        ret
setkey_cursory;LL605a
        ld a,b
        ld (cursory),a;(LL6234),a
        ret
setkey_hinty;LL605f
        ld a,b
        ld (hinty),a;(LL621e),a
        ret
setkey_hintx;LL6064
        ld a,b
        ld (hintx),a;(LL621d),a
        ret
setkey_hintcolor;LL6069
        ld a,b
        ld (hintcolor),a;(LL6221),a
        ret
setkey_cursorcolor;LL606e
        ld a,b
        ld (cursorcolor),a;(LL6233),a
        ret
setkey_menucolor;LL6073
        ld a,b
        ld (menucolor),a;(LL622f),a
        ret
LL6078
        ld a,b
        ld (LL6236),a
        ret
LL607d
        ld a,b
        ld (LL6225),a
        ret
setkey_hinthgt;LL6082
        ld a,b
        ld (hinthgt),a;(LL621f),a
        ret

action;LL6087
        DB #00

       if NEDOOS
;mainmenupath;LL6088
        ;db "menu",0
       else
mainmenupath;LL6088
        ;db #53,#3a,#53,#48,#45,#4c,#4c
        ;DB #5c,#0d,#6d,#65,#6e,#75,#20,#20
        ;DB #20,#20,#74,#78,#74
        db "S:SHELL",'\\',13
       endif
mainmenufilename;LL6091
       if NEDOOS
        db "menu/menu.mnu",0
        ;db "menu/resident.mnu",0
       else
        db "menu    txt"
       endif

LL609c
;e=╤В╨╕╨┐ ╤Б╤В╤А╨╛╨║╨╕
        ld d,#01 ;db 0x16,0x01
LL609e  ld hl,menutext;LL623a ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
LL60a1  jp LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
;z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?

LL60a4 ;╨┐╨╡╤А╨╡╨┐╨╡╤З╨░╤В╨║╨░ ╨╛╨║╨╜╨░?
        ld a,(ix+MENU_flags);#0a)
        bit 5,a
        ret nz
        set 5,a
        ld (ix+MENU_flags),a;(ix+#0a),a
        ld a,(ix+MENU_flags);#0a)
        call LL6153 ;goto next menu
        ld b,a
        ld a,(hintspresent);LL6226)
        or a
        jr z,LL60c7 ;no hints ;goto next menu
        ld a,(flags);(LL6235)
        bit 4,a ;16 = ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨░ ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕
        jr nz,_LL60c4
        xor a
_LL60c4
       if NEDOOS
        call sR_WT
       else
        ld c,#61 ;97(61):wt    - ╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░. ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
        rst #10
       endif
LL60c7  jp LL6153 ;goto next menu

cycleinmenu;LL60ca
        call LL6165 ;╨┐╨╡╤З╨░╤В╤М ╤В╨╡╨║╤Б╤В╨░ ╨▓ ╨╛╨║╨╜╨╡
        call LL6115
        call LL60a4 ;╨┐╨╡╤А╨╡╨┐╨╡╤З╨░╤В╨║╨░ ╨╛╨║╨╜╨░?
        call LL613d
       if NEDOOS
       push ix
        OS_GETKEY
       pop ix
       else
        ld c,#07 ;7(07):ttyin  - ╨Т╨▓╨╛╨┤ ╤Б╨╕╨╝╨▓╨╛╨╗╨░. ╨Т╤Л╤Е╨╛╨┤: A - ╨║╨╛╨┤ ╨╜╨░╨╢╨░╤В╨╛╨╣ ╨║╨╗╨░╨▓╨╕╤И╨╕
        rst #10
       endif
        push af
        ld b,(ix+MENU_menucolor);#04)
        call printcursor;LL612d
        pop af
        ld hl,tkeyhandlers;LL60eb
       if NEDOOS
        call sanaly
       else
         ld c,#7e ;126(7E):analys - ╨Я╨╡╤А╨╡╨┤╨░╤З╨░ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╡ ╨┐╨╛ ╨░╨┤╤А╨╡╤Б╤Г ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л. HL - a╨┤╤А╨╡╤Б ╤В╨░╨▒╨╗╨╕╤Ж╤Л, ╨Р - ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л. ╨в╨░╨▒╨╗╨╕╤Ж╨░ ╤Б╨╛╤Б╤В╨╛╨╕╤В ╨╕╨╖  ╨╖╨░╨┐╨╕╤Б╨╡╨╣ ╨┐╨╛ 3 ╨▒╨░╨╣╤В╨░: 0(1) ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л, 1(2) ╨░╨┤╤А╨╡╤Б ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╤Л. ╨Т ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨╣ ╨╖╨░╨┐╨╕╤Б╨╕ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╗╨╡╨╢╨░╤В╤М ╨▒╨░╨╣╤В #FF ╨╕ ╨░╨┤╤А╨╡╤Б ╨╛╤В╤А╨░╨▒╨╛╤В╨║╨╕ ╤Б╨╕╤В╤Г╨░╤Ж╨╕╨╕ "╨║╨╛╨┤ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜"
         rst #10
       endif
         ret nz
         ret c
        jr cycleinmenu;LL60ca

tkeyhandlers;LL60eb
        DB #0d
        dw handle_enter;LL61a8
        db key_left;#09
        dw handle_left;LL61bb
        db key_up;#0b
        dw handle_up;LL61d3
        db key_down;#0a
        dw handle_down;LL61fc
        db key_right;#08
        dw handle_right;LL61c9
        db 'q';#71
        dw handle_up;LL61d3
        db 'a';#61
        dw handle_down;LL61fc
        db 'p';#70
        dw handle_right;LL61c9
        DB 'o';#6f
        dw handle_left;LL61bb
        db key_end;'A';#41
        dw handle_end;LL61d9
        db key_home;'Q';#51
        dw handle_home;LL6205
        DB key_esc;#10
        dw xorascf;LL6112
        db #ff
        dw xora;LL61f6 ;xor a:ret

xorascf;LL6112
        xor a
        scf
        ret

LL6115
        ld d,(ix+MENU_cursory);#09)
        ld e,'A';#41
        call LL615d ;hl=ix+15
        call LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
        jp z,LL61f8 ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error? ;handle_down+jp LL6115
        dec hl
        ld a,(hl)
        cp 'a';#61
        jp z,LL61f8 ;handle_down+jp LL6115 ;'a' = ╤Б╤В╤А╨╛╨║╨╕ ╨╝╨╡╨╜╤О, ╨┐╨╛ ╨║╨╛╤В╨╛╤А╤Л╨╝ ╨╜╨╡ ╤Е╨╛╨┤╨╕╤В ╨║╤Г╤А╤Б╨╛╤А
        ld b,(ix+MENU_cursorcolor);#08)
;b=color
printcursor;LL612d
        ld a,(flags);(LL6235)
        bit 2,a ;4 = ╨║╨╛╤А╨╛╤В╨║╨╕╨╣ ╨║╤Г╤А╤Б╨╛╤А
        ld a,(ix+MENU_cursory);#09)
       if NEDOOS
        jr z,_LL6138
        call sAWTC
        jr _LL6138q
_LL6138
        call sAWT
_LL6138q
       else
        ld c,#63 ;99(63):awt   - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, c ╤А╨░╨╝╨║╨╛╨╣. ╨Т╤Е╨╛╨┤: IX = ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨╛╨║╨╜╨░, A = ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, ╨║╨╛╤В╨╛╤А╤Г╤О ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╨┐╨╛╨┤╤Б╨▓╨╡╤В╨╕╤В╤М (╨╜╤Г╨╝╨╡╤А╨░╤Ж╨╕╤П ╨╛╤В 1), B = ╤Ж╨▓╨╡╤В
        jr z,_LL6138
        ld c,#64 ;100(64):awtc  - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, ╨╜╨╡ ╨╖╨░╤В╤А╨░╨│╨╕╨▓╨░╤П ╤А╨░╨╝╨║╤Г, IX=╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, A=╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, B=╤Ж╨▓╨╡╤В
_LL6138 ;ld a,(ix+MENU_cursory);#09)
        rst #10
       endif
        ret

LL613d  call LL5fb4 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А cursory ╨▓ ╤В╨╡╨║╤Б╤В╨╡ menutext? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld e,'H';#48 ;H - ╨┤╨╛╨╗╨╢╨╡╨╜ ╤Б╤В╨╛╤П╤В╤М ╤В╨╡╨║╤Б╤В ,╨║╨╛╤В╨╛╤А╤Л╨╣ ╨┐╨╛╤П╨▓╨╗╤П╨╡╤В╤Б╤П ╨▓ c╤В╤А╨╛╨║╨╡ ╨┐╨╛╨┤╤Б╨║╨░╨╖╨║╨╡
        call LL60a1 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ e ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl? ;out: z="(hl)==#03" (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ret z ;z=╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜╨╛
        call LL6153 ;goto next menu
        ld b,#01
        ld a,(ix+MENU_menuhgt);#02)
        srl a ;???
       if NEDOOS
        call sLWT
       else
        ld c,#65 ;101(65):lwt   - ╨а╨░╤Б╨┐╨╡╤З╨░╤В╨║╨░ ╨╖╨░╨┤╨░╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╤В╤А╨╛╨║ ╨▓ ╨╛╨║╨╜╨╡; A - ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ (╨╜╨░╤З╨░╨╗╨░), IX - ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, HL - ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║ ╤В╨╡╨║╤Б╤В╨░ ╨┤╨╗╤П ╨┐╨╡╤З╨░╤В╨╕, B - ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╤В╤А╨╛╨║, ╨║╨╛╤В╨╛╤А╨╛╨╡ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╤А╨░╤Б╨┐╨╡╤З╨░╤В╨░╤В╤М
        rst #10
       endif
;goto next menu
LL6153
        ld e,(ix+MENU_nextmenuaddr);#0c)
        ld d,(ix+MENU_nextmenuaddr+1);#0d)
        push de
        pop ix
        ret

LL615d ;hl=ix+15
        push ix
        pop hl
        ld bc,LL000f
        add hl,bc
        ret

;╨┐╨╡╤З╨░╤В╤М ╤В╨╡╨║╤Б╤В╨░ ╨▓ ╨╛╨║╨╜╨╡
LL6165
        ld d,#01
        ld e,'A';#41
LL6169  call LL615d ;hl=ix+15
        call LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
        ret z ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        ld a,d
        ld b,#01
       if NEDOOS
       push de
        call sLWT
       pop de
       else
        ld c,#65 ;101(65):lwt   - ╨а╨░╤Б╨┐╨╡╤З╨░╤В╨║╨░ ╨╖╨░╨┤╨░╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╤В╤А╨╛╨║ ╨▓ ╨╛╨║╨╜╨╡; A - ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ (╨╜╨░╤З╨░╨╗╨░), IX - ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, HL - ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║ ╤В╨╡╨║╤Б╤В╨░ ╨┤╨╗╤П ╨┐╨╡╤З╨░╤В╨╕, B - ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╤В╤А╨╛╨║, ╨║╨╛╤В╨╛╤А╨╛╨╡ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╤А╨░╤Б╨┐╨╡╤З╨░╤В╨░╤В╤М
        rst #10
       endif
        inc d
        jr LL6169

LL6179
;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
;hl=text
;d=y?
;e='A'?
;out: hl, z=error?
        push af
        ld b,#00
LL617c  pop af
        call LL6191
        ret z ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?) ╨╕╨╗╨╕ error?
        inc b
        push hl
        call findCR;LL61a1
        ld a,b
        cp d
        jr nz,LL617c
        pop hl
        inc hl
        ld a,#fe
        sub c
        or a ;z="╨▓ ╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨╡╨╣ ╤Б╤В╤А╨╛╨║╨╡ CR ╨╜╨░╨╣╨┤╨╡╨╜ ╨▓ ╨┐╨╡╤А╨▓╨╛╨╣ ╨╢╨╡ ╨┐╨╛╨╖╨╕╤Ж╨╕╨╕ (╨┐╤А╨╡╨┤╤Л╨┤╤Г╤Й╨░╤П ╤Б╤В╤А╨╛╨║╨░ ╨┐╤Г╤Б╤В╨░╤П)"???
        ret

;e=?
LL6191  ld a,(hl)
        cp #03
        ret z ;╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?
        res 5,a
        cp e
        jr z,LL619f ;╤Б╤В╤А╨╛╨║╨░ ╨╜╤Г╨╢╨╜╨╛╨│╨╛ ╤В╨╕╨┐╨░
        call findCR;LL61a1
        jr LL6191
LL619f  or a
        ret

findCR;LL61a1
        ld c,#ff
        ld a,#0d
        cpir
        ret

handle_enter;LL61a8
        ld a,#01
        or a
LL61ab  push af
        ld a,(ix+MENU_flags);#0a)
        bit 0,a
        jr nz,_LL61b9
        ld b,(ix+MENU_exitcursorcolor);#0e)
        call printcursor;LL612d
_LL61b9 pop af
        ret

handle_left;LL61bb
        ld a,(ix+MENU_flags);#0a)
        bit 3,a
        ret z
        set 6,a
LL61c3  ld (ix+MENU_flags),a;(ix+#0a),a
        scf
        jr LL61ab

handle_right;LL61c9
        ld a,(ix+MENU_flags);#0a)
        bit 3,a
        ret z
        set 7,a
        jr LL61c3

handle_up;LL61d3
        ld a,(ix+MENU_cursory);#09)
        dec a
        jr nz,LL61de
handle_end;LL61d9
        ld a,(ix+MENU_menuhgt);#02)
        dec a
        dec a
LL61de  ld (ix+MENU_cursory),a;(ix+#09),a
        ld d,a
        ld e,'A';#41
        call LL615d ;hl=ix+15
        call LL6179 ;╨┐╨╛╨╕╤Б╨║ ╤Б╤В╤А╨╛╨║╨╕ ╤В╨╕╨┐╨░ 'A' ╨╜╨╛╨╝╨╡╤А d ╨▓ ╤В╨╡╨║╤Б╤В╨╡ hl?
        jr z,handle_up;LL61d3 ;(hl)=#03 (╨║╨╛╨╜╨╡╤Ж ╤В╨╡╨║╤Б╤В╨░?)
        dec hl
        ld a,(hl)
        cp 'a';#61
        jr z,handle_up;LL61d3 ;'a' = ╤Б╤В╤А╨╛╨║╨╕ ╨╝╨╡╨╜╤О, ╨┐╨╛ ╨║╨╛╤В╨╛╤А╤Л╨╝ ╨╜╨╡ ╤Е╨╛╨┤╨╕╤В ╨║╤Г╤А╤Б╨╛╤А
        ld a,d
LL61f3  ld (ix+MENU_cursory),a;(ix+#09),a
xora;LL61f6
        xor a
        ret

LL61f8  ld hl,LL6115
        push hl
handle_down;LL61fc
        ld a,(ix+MENU_cursory);#09)
_LL61ff inc a
        cp (ix+MENU_menuhgt);#02)
        jr nz,LL61f3
handle_home;LL6205
        xor a
        jr _LL61ff

        include "twind.asm" ;sR_WT
        include "wtro.asm"
        include "ttyp42.asm"
sATB42
        incbin "Font42_f.cod"

;╨╕╤Б╤Е╨╛╨┤╨╜╨╕╨║ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜, ╨┐╨╕╤И╨╡╨╝ ╨┐╨╛ ╨┤╨╛╨│╨░╨┤╨║╨╡
;126(7E):analys - ╨Я╨╡╤А╨╡╨┤╨░╤З╨░ ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╤П ╨┐╨╛╨┤╨┐╤А╨╛╨│╤А╨░╨╝╨╝╨╡ ╨┐╨╛ ╨░╨┤╤А╨╡╤Б╤Г ╨╕╨╖ ╤В╨░╨▒╨╗╨╕╤Ж╤Л. HL - a╨┤╤А╨╡╤Б ╤В╨░╨▒╨╗╨╕╤Ж╤Л, ╨Р - ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л. ╨в╨░╨▒╨╗╨╕╤Ж╨░ ╤Б╨╛╤Б╤В╨╛╨╕╤В ╨╕╨╖  ╨╖╨░╨┐╨╕╤Б╨╡╨╣ ╨┐╨╛ 3 ╨▒╨░╨╣╤В╨░: 0(1) ╨║╨╛╨┤ ╨║╨╛╨╝╨░╨╜╨┤╤Л, 1(2) ╨░╨┤╤А╨╡╤Б ╨┐╤А╨╛╤Ж╨╡╨┤╤Г╤А╤Л. ╨Т ╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╡╨╣ ╨╖╨░╨┐╨╕╤Б╨╕ ╨┤╨╛╨╗╨╢╨╡╨╜ ╨╗╨╡╨╢╨░╤В╤М ╨▒╨░╨╣╤В #FF ╨╕ ╨░╨┤╤А╨╡╤Б ╨╛╤В╤А╨░╨▒╨╛╤В╨║╨╕ ╤Б╨╕╤В╤Г╨░╤Ж╨╕╨╕ "╨║╨╛╨┤ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜" (╨▓╨╛╨╖╨▓╤А╨░╤Й╨░╨╡╤В NZ?)
sanaly
        inc (hl)
        jr z,sanaly_err
        dec (hl)
        cp (hl)
        jr z,sanaly_ok
        inc hl
        inc hl
        inc hl
        jr sanaly
sanaly_err
        dec (hl) ;NZ
sanaly_ok
        inc hl
        ld a,(hl)
        inc hl
        ld h,(hl)
        ld l,a
        jp (hl)

sPRCHR
;a=chr
;in,out: de'=print addr
        jp sTYP42
sPRAD
;out: de'=print addr
        jp sADR42

;╨╕╤Б╤Е╨╛╨┤╨╜╨╕╨║ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜, ╨┐╨╕╤И╨╡╨╝ ╨┐╨╛ ╨┤╨╛╨│╨░╨┤╨║╨╡
;125(7D):a_d   - ╨┐╤А╨╡╨╛╨▒╤А╨░╨╖╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╤В╤А╨╛╨║╨╕ ASCII-╤Б╨╕╨╝╨▓╨╛╨╗╨╛╨▓ ╨▓ 4-╨▒╨░╨╣╤В╨╛╨▓╨╛╨╡ ╤З╨╕╤Б╨╗╨╛. ╨Т╨╡╨┤╤Г╤Й╨╕╨╡ ╨┐╤А╨╛╨▒╨╡╨╗╤Л ╨╕╨│╨╜╨╛╤А╨╕╤А╤Г╤О╤В╤Б╤П. HL - ╨░╨┤╤А╨╡╤Б  ASCII - ╨▒╤Г╤Д╨╡╤А╨░, ╨Р - ╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░ ( ╨╡╤Б╨╗╨╕ ╨Р=0, ╤В╨╛ ╨┤╨╛ ╨║╨╛╨┤╨░ 13 ), ╨Т - ╨╛╤Б╨╜╨╛╨▓╨░╨╜╨╕╨╡ ╤Б╨╕╤Б╤В╨╡╨╝╤Л ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨┐╨╛ ╤Г╨╝╨╛╨╗╤З╨░╨╜╨╕╤О (╨╜╨╡ ╨▒╨╛╨╗╨╡╨╡ 16, B=0 ╨┐╨╛╨╜╨╕╨╝╨░╨╡╤В╤Б╤П ╨║╨░╨║ 10). ╨б╨╕╤Б╤В╨╡╨╝╨░ ╤Б╤З╨╕╤Б╨╗╨╡╨╜╨╕╤П ╨╝╨╛╨╢╨╡╤В ╤В╨░╨║╨╢╨╡ ╨╛╨┐╤А╨╡╨┤╨╡╨╗╤П╤В╤М╤Б╤П ╨┐╨╛ ╨┐╨╡╤А╨▓╨╛╨╝╤Г ╤Б╨╕╨╝╨▓╨╛╨╗╤Г ╨▒╤Г╤Д╨╡╤А╨░: #,h,H - 16; .,d - 10; o,O - 8; %,b,B - 2. ╨Т╤Л╤Е╨╛╨┤: 32-╤А╨░╨╖╤А╤П╨┤╨╜╨╛╨╡ ╤З╨╕╤Б╨╗╨╛ ╨▓ DE'HL'. BC' - ╨┐╤А╨╛╨┤╨╛╨╗╨╢╨╡╨╜╨╕╨╡ ASCII-╨▒╤Г╤Д╨╡╤А╨░. ╨Т╨╛╨╖╨╝╨╛╨╢╨╜╤Л╨╡ ╨╛╤И╨╕╨▒╨║╨╕ (╤Д╨╗╨░╨│ C): ╨╜╨╡╤Ж╨╕╤Д╤А╨╛╨▓╨╛╨╣ ╤Б╨╕╨╝╨▓╨╛╨╗ (A=0), ╨┐╨╡╤А╨╡╨┐╨╛╨╗╨╜╨╡╨╜╨╕╨╡ (A=1)
sa_d
;dec only
;no overflow
;no leading spaces
        exx
        ld hl,0
        ld d,h
        ld e,l
        exx
        ld b,a ;╨┤╨╗╨╕╨╜╨░ ╨▒╤Г╤Д╨╡╤А╨░
sa_d_loop
        ld a,(hl)
        inc hl
        sub '0'
        cp 10
        ccf
        jr c,sa_d_loopq
        exx
        call sa_d_mul10
        add a,l
        ld l,a
        ld a,h
        adc a,0
        ld h,a
        jr nc,$+3
        inc de
        exx
        djnz sa_d_loop
       or a ;ok
sa_d_loopq
       push hl
       exx
       pop bc
       exx
        ret

;de'hl'
sa_d_mul10
        ld b,h
        ld c,l
       push de
        add hl,hl
        rl e
        rl d ;*2
        add hl,hl
        rl e
        rl d ;*4
        add hl,bc
       ex de,hl
       pop bc
       adc hl,bc
       ex de,hl ;*5
        add hl,hl
        rl e
        rl d ;*10
        ret

skipword
;hl=string
;out: hl=terminator/space addr
getword0
        ld a,(hl)
        or a
        ret z
        cp ' '
        ret z
        inc hl
        jr getword0

skipspaces
;hl=string
;out: hl=after last space
        ld a,(hl)
        cp ' '
        ret nz
        inc hl
        jr skipspaces

strcopy
;hl->de
;out: hl,de after terminator
        xor a
strcopy0
        cp (hl)
        ldi
        jr nz,strcopy0
        ret

keepdir
        ld de,curdir
        OS_GETPATH
        ret
setolddir
        ld de,curdir
        OS_CHDIR
        ret

loadandrun
;hl=rest of command line
;out: nz=error, e=id
;load file in fcb from system current dir with parameters in tcmd, then set curpaneldir and run
        ld (loadandrun_restcmd),hl
        ld de,cmd_filename
        OS_OPENHANDLE
        or a
        ret nz ;error
        ld a,b
        ld (curhandle),a
        ld hl,nv_closehandle
        push hl
        ;set current drive and dir (will be copied into new app)
        call setolddir

        OS_NEWAPP
        or a
        ret nz ;error
;dehl=╨╜╨╛╨╝╨╡╤А╨░ ╤Б╤В╤А╨░╨╜╨╕╤Ж ╨▓ 0000,4000,8000,c000 ╨╜╨╛╨▓╨╛╨│╨╛ ╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤П, b=id, a=error
        push bc ;b=id
        ld a,d
        SETPGC000
        push de
        push hl
        ld hl,filenametext
        ld de,0xc000+COMMANDLINE
        ld bc,4
        ldir
loadandrun_restcmd=$+1
        ld hl,0
        call strcopy
        xor a
        ld (0xc000+COMMANDLINE+COMMANDLINE_sz-1),a
        pop hl
        pop de

        call readfile_pages_dehl

        pop de
        ld e,d ;e=id
;run "cmd <commandline>"
        push de
        OS_RUNAPP
        pop de
        xor a
        ret ;z

readfile_pages_dehl
        ld a,d
        SETPGC000
        ld a,0xc100/256
        call cmd_loadpage
        ret nz
        ld a,e
        call cmd_loadfullpage
        ret nz
        ld a,h
        call cmd_loadfullpage
        ret nz
        ld a,l
cmd_loadfullpage
        SETPGC000
        ld a,0xc000/256
cmd_loadpage
;out: a=error, bc=bytes read
;keeps hl,de
        push de
        push hl
        ld d,a
        xor a
        ld l,a
        ld e,a
        sub d
        ld h,a ;de=buffer, hl=size
        call readcurhandle
        ld b,h
        ld c,l
        pop hl
        pop de
        or a
        ret

readcurhandle
curhandle=$+1
        ld b,0
        OS_READHANDLE
        ret

nv_closehandle
;keep de and flags!!!
        push af
        push de
        ld a,(curhandle)
        ld b,a
        OS_CLOSEHANDLE
        pop de
        pop af
        ret

cmd_filename
        db "cmd.com",0
filenametext
        db "cmd "

tdotmnuz
        db ".mnu",0

curdir
        ds MAXPATH_sz

par1addr
        dw 0
par2addr
        dw 0
;curhandle
;        db 0

;???
        DB #55;'U'
        db "ABCDEFGHIJ";#41,#42,#43,#44,#45,#46,#47,#48,#49,#4a
        db "0123456789";#30,#31,#32,#33,#34,#35,#36,#37,#38,#39
HINTMENU
hintx;LL621d
        db #00
hinty;LL621e
        db #00
hinthgt;LL621f
        db #01
LL6220 ;hintwid_chrs?
        DB #20
hintcolor;LL6221
        db #0f,#ff
LL6223 ;hinthgt_chrs?
        db #01
hintwid;LL6224
        db #1e
LL6225
        db #00
hintspresent;LL6226
        db #00
        db #00
        DB #00
        dw MENU;#622b

MENU
menux;LL622b
        db #ff
menuy;LL622c
        db #ff
MENU_menuhgt=$-MENU;2
menuhgt;LL622d
        db #00
menuwid_chrs;LL622e
        db #00
MENU_menucolor=$-MENU;4
menucolor;LL622f
        db #0f
shadowcolor;LL6230
        DB #80
LL6231 ;menuhgt_chrs?
        db #00
;MENU_menuwid=$-MENU;7
menuwid;LL6232
        db #00
MENU_cursorcolor=$-MENU;8
cursorcolor;LL6233
        db #39
MENU_cursory=$-MENU;9
cursory;LL6234
        db #01
MENU_flags=$-MENU;10
flags;LL6235
;bit 0: ╨╜╨╡ ╨┐╨╡╤З╨░╤В╨░╤В╤М ╨║╤Г╤А╤Б╨╛╤А ╤Ж╨▓╨╡╤В╨╛╨╝ exitcursorcolor ╨┐╨╛ left, right, enter
;bit 3: enable left, right
;bit 5: LL60a4 already called (╨╛╨║╨╜╨╛ ╨╜╨░╨┐╨╡╤З╨░╤В╨░╨╜╨╛?)
;bit 6: left pressed
;bit 7: right pressed
        db #10
LL6236
        db #00 ;???
MENU_nextmenuaddr=$-MENU;12
        dw HINTMENU;#621d
MENU_exitcursorcolor=$-MENU;14
exitcursorcolor;LL6239
        db #20
;menu size = 15?

menutext;LL623a
end
        savebin "menu.com",begin,end-begin
        LABELSLIST "../../us/user.l"