Rev 1410 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
DEVICE ZXSPECTRUM128
include "../_sdk/sys_h.asm"
NEDOOS=1
PRSTDIO=1
;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
if PRSTDIO
SCRHGT=25
else
SCRHGT=24
endif
MAXCMDSZ=COMMANDLINE_sz-1-4-4 ;not counting terminator (-4 for "cmd ")
org PROGSTART
begin
;0x5da4=23972
if NEDOOS
ld sp,0xc000
if PRSTDIO
call initstdio
ld a,(stdiohgt)
;ld (scrhgt),a
else
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
endif
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
WAITPID
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
ld a,(menuwid);(LL6232)
if PRSTDIO
ld c,80-1
else
ld c,#21
endif
dec a
cp c
jr c,_LL5e73
ld a,c
_LL5e73 ld (menuwid),a;(LL6232),a
if PRSTDIO
add a,2
else
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 ;╤З╤С╤В╨╜╨╛╨╡
endif
ld (menuwid_chrs),a;(LL622e),a
ld b,a
ld a,(menux);(LL622b)
cp #ff
jr nz,_LL5e96
if PRSTDIO
ld a,80
else
ld a,#20
endif
sub b
srl a
ld (menux),a;(LL622b),a
_LL5e96
if PRSTDIO
inc a
else
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
endif
ld (menux_chrs),a
ld a,(hintx);(LL621d)
if PRSTDIO
inc a;add a,2
else
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
endif
ld (LL6223),a ;??? NU hinthgt_chrs?
;
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
ld a,(hintwid);(LL6224)
if PRSTDIO
add a,2
else
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
endif
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
if PRSTDIO
call prwin
else
call sR_WT ;╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░ (╨▒╨╡╨╖ ╤В╨╡╨║╤Б╤В╨░). ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
endif
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
if PRSTDIO
call prwin
else
call sR_WT ;╨Т╤Л╨▓╨╛╨┤ ╨╛╨║╨╜╨░ (╨▒╨╡╨╖ ╤В╨╡╨║╤Б╤В╨░). ╨Я╨╛╨┤╤Д╤Г╨╜╨║╤Ж╨╕╤П ╨▓ ╤А╨╡╨│. A: A=0 ╨╛╨║╨╜╨╛ ╤Б ╨╛╨┤╨╕╨╜╨░╤А╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, ╨Р=1 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, ╨Р=2 ╤Б ╨┤╨▓╨╛╨╣╨╜╨╛╨╣ ╤А╨░╨╝╨║╨╛╨╣, A=3..127 ╨▒╨╡╨╖ ╤А╨░╨╝╨║╨╕, A=128..255 ╤В╨╛╨╗╤М╨║╨╛ ╨┐╨╛╨┤╨║╤А╨░╤Б╨║╨░. IX= ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░
endif
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
if PRSTDIO
call yieldgetkeyloop;getkey
else
YIELDGETKEYLOOP;OS_GETKEY
endif
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
if PRSTDIO
push af
ld a,b
call setcolor_a ;keep ix
pop af
ld e,(ix+MENU_menux)
ld b,(ix+MENU_menuwid_chrs)
jr z,$+5
inc e ;╨║╨╛╤А╨╛╤В╨║╨╕╨╣ ╨║╤Г╤А╤Б╨╛╤А
dec b
dec b
push ix
push bc ;b=cursorwid
add a,(ix+MENU_menuy)
ld d,a
call setxy
call setcolor_invisible
ld a,' '
;printcursor_wid=$+1
pop bc ;ld b,0
;a=symbol
;b=count
call prNsymbol
call setcolor_visible
pop ix
else
jr z,_LL6138
call sAWTC ;100(64):awtc - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, ╨╜╨╡ ╨╖╨░╤В╤А╨░╨│╨╕╨▓╨░╤П ╤А╨░╨╝╨║╤Г, IX=╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, A=╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, B=╤Ж╨▓╨╡╤В
jr _LL6138q
_LL6138
call sAWT ;99(63):awt - ╨Я╨╛╨┤╨║╤А╨░╤И╨╕╨▓╨░╨╡╤В ╤Б╤В╤А╨╛╨║╤Г ╨▓╨╜╤Г╤В╤А╨╕ ╨╛╨║╨╜╨░, c ╤А╨░╨╝╨║╨╛╨╣. ╨Т╤Е╨╛╨┤: IX = ╨░╨┤╤А╨╡╤Б ╨▓╨╡╨║╤В╨╛╤А╨░ ╨╛╨║╨╜╨░, A = ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕, ╨║╨╛╤В╨╛╤А╤Г╤О ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╨┐╨╛╨┤╤Б╨▓╨╡╤В╨╕╤В╤М (╨╜╤Г╨╝╨╡╤А╨░╤Ж╨╕╤П ╨╛╤В 1), B = ╤Ж╨▓╨╡╤В
_LL6138q
endif
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
push af
push bc
push hl
call setmenucolor
pop hl
pop bc
pop af
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
push af
push bc
push hl
call setmenucolor
pop hl
pop bc
pop af
call sLWT ;101(65):lwt - ╨а╨░╤Б╨┐╨╡╤З╨░╤В╨║╨░ ╨╖╨░╨┤╨░╨╜╨╜╨╛╨│╨╛ ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨░ ╤Б╤В╤А╨╛╨║ ╨▓ ╨╛╨║╨╜╨╡; A - ╨╜╨╛╨╝╨╡╤А ╤Б╤В╤А╨╛╨║╨╕ (╨╜╨░╤З╨░╨╗╨░), IX - ╨▓╨╡╨║╤В╨╛╤А ╨╛╨║╨╜╨░, HL - ╨░╨┤╤А╨╡╤Б ╤Б╤В╤А╨╛╨║ ╤В╨╡╨║╤Б╤В╨░ ╨┤╨╗╤П ╨┐╨╡╤З╨░╤В╨╕, B - ╨║╨╛╨╗╨╕╤З╨╡╤Б╤В╨▓╨╛ ╤Б╤В╤А╨╛╨║, ╨║╨╛╤В╨╛╤А╨╛╨╡ ╨╜╨╡╨╛╨▒╤Е╨╛╨┤╨╕╨╝╨╛ ╤А╨░╤Б╨┐╨╡╤З╨░╤В╨░╤В╤М
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"
if !PRSTDIO
include "ttyp42.asm"
sATB42
incbin "Font42_f.cod"
endif
;╨╕╤Б╤Е╨╛╨┤╨╜╨╕╨║ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜, ╨┐╨╕╤И╨╡╨╝ ╨┐╨╛ ╨┤╨╛╨│╨░╨┤╨║╨╡
;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
if PRSTDIO
push bc
push de
push hl
push ix
call sendchar
pop ix
pop hl
pop de
pop bc
ret
else
jp sTYP42
endif
sPRAD
;b=y
;out: de'=print addr, does exx
if PRSTDIO
exx
push bc
push de
push hl
push ix
exx
ld d,b
ld e,c
call setxy
pop ix
pop hl
pop de
pop bc
ret
else
jp sADR42
endif
;╨╕╤Б╤Е╨╛╨┤╨╜╨╕╨║ ╨╜╨╡ ╨╜╨░╨╣╨┤╨╡╨╜, ╨┐╨╕╤И╨╡╨╝ ╨┐╨╛ ╨┤╨╛╨│╨░╨┤╨║╨╡
;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
if PRSTDIO
include "../_sdk/stdio.asm"
setmenucolor
ld a,(ix+4) ;menucolor
setcolor_a
ld e,a
rra
rra
rra
and 15
ld d,a ;paper
ld a,e
and 7
ld e,a ;ink
push ix
call setcolor ;in: D=paper0..7, E=ink0..15
pop ix
ret
prwin
call setmenucolor
ld e,(ix+MENU_menux) ;x
ld d,(ix+MENU_menuy) ;y
ld b,(ix+MENU_menuhgt) ;hgt
ld c,(ix+MENU_menuwid_chrs) ;wid
;de=yx
;bc=hgt,wid
;de=yx
;bc=hgt,wid
ld a,c
sub 2
ld (winbeginstroka_wid),a
ld (winmidstroka_wid),a
ld (winendstroka_wid),a
ld a,b
cp 2
jr c,prwin_notopline
ld hl,winbeginstroka
call prtableline
dec b
prwin_notopline
ld a,b
cp 2
jr c,prwin_nobottomline
push bc
push de
ld a,d
add a,b
ld d,a ;bottom y
ld hl,winendstroka
call prtableline
pop de
pop bc
dec b
inc d
prwin_nobottomline
winlineN_0
ld hl,winmidstroka
call prtableline
inc d
djnz winlineN_0
ret
prtableline
;hl=tableline data
;de=yx
;b=hgt
;keeps bc,de,ix
push bc
call nv_setxy ;keeps de,hl
prtableline0
ld a,(hl)
or a
jr z,prtablelineq
inc hl
ld b,(hl)
inc hl
call prNsymbol
jr prtableline0
prtablelineq
pop bc
ret
prNsymbol
;a=symbol
;b=count
push de
push hl
push ix
ld c,a
prNsymbol0
push bc
ld a,c
call sendchar
pop bc
djnz prNsymbol0
pop ix
pop hl
pop de
ret
nv_setxy
;de=yx (kept)
;keeps de,hl,ix
push de
push hl
push ix
call setxy
pop ix
pop hl
pop de
ret
winbeginstroka
db 0xc9;'╨И'
db 1
db 0xcd;'='
winbeginstroka_wid=$
db 12;wdtcolumn1
db 0xbb;'╤Ч'
db 1
db 0
winmidstroka
db 0xba;'╤Ц'
db 1
db ' '
winmidstroka_wid=$
db 12;wdtcolumn1
db 0xba;'╤Ц'
db 1
db 0
winendstroka
db 0xc8;'L'
db 1
db 0xcd;'='
winendstroka_wid=$
db 12;wdtcolumn1
db 0xbc;'-'
db 1
db 0
endif
cmd_filename
db "cmd.com",0
filenametext
db "cmd "
tdotmnuz
db ".mnu",0
curdir
ds MAXPATH_sz
par1addr
dw 0
par2addr
dw 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? ╨╕╨╖ (ix+5) ╤З╨╕╤В╨░╨╡╤В╤Б╤П ╨▓╤А╨╛╨┤╨╡ ╨░╤В╤А╨╕╨▒╤Г╤В shadowcolor
db #01
hintwid;LL6224
db #1e
LL6225
db #00
hintspresent;LL6226
db #00
db #00
DB #00
dw MENU;#622b
MENU
MENU_menux=$-MENU
menux;LL622b
db #ff
MENU_menuy=$-MENU
menuy;LL622c
db #ff
MENU_menuhgt=$-MENU;2
menuhgt;LL622d
db #00
MENU_menuwid_chrs=$-MENU
menuwid_chrs;LL622e
db #00
MENU_menucolor=$-MENU;4
menucolor;LL622f
db #0f
shadowcolor;LL6230
DB #80
menux_chrs;LL6231
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",1