?login_element?

Subversion Repositories NedoOS

Rev

Rev 1486 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4. MAXCMDSZ=COMMANDLINE_sz-1;127 ;не считая терминатора
  5. ;txtscrhgt=25
  6. txtscrwid=80
  7. CMDLINEY=24
  8.  
  9. _COLOR=0x0007;7
  10. _ERRORCOLOR=0x0009;0x42
  11.  
  12.         macro asmgetchar
  13.         ld a,(de)
  14.         endm
  15.        
  16.         macro asmnextchar
  17.         inc de
  18.         endm
  19.  
  20.        macro MATCH_NOEAT s1
  21.         cp s1
  22.         ret nz
  23.        endm
  24.        macro MATCH_NOGET s1
  25.         cp s1
  26.         ret nz
  27.         asmnextchar ;eat
  28.        endm
  29.        macro MATCH s1
  30.         MATCH_NOGET s1
  31.         asmgetchar
  32.        endm
  33.  
  34.        macro skipspaces
  35.         call asmskipspaces
  36.        endm
  37.  
  38.         org PROGSTART
  39. cmd_begin
  40.         ld sp,0x4000 ;не должен опускаться ниже 0x3b00! иначе возможна порча OS        
  41.         call initstdio
  42.  
  43.         OS_GETMAINPAGES
  44. ;dehl=номера страниц в 0000,4000,8000,c000
  45.         push hl
  46.         OS_DELPAGE
  47.         pop hl
  48.         push hl
  49.         ld e,h
  50.         OS_DELPAGE
  51.         pop hl
  52.         ld e,l
  53.         OS_DELPAGE
  54.        
  55. cmdmainloop
  56.         call editcmd
  57.         call prcrlf
  58.        
  59.         ld hl,cmdbuf
  60.         ld de,oldcmd
  61.         ld bc,MAXCMDSZ+1
  62.         ldir
  63.  
  64.         ld hl,xnumstack
  65.         ld (xnumstacktop),hl
  66.  
  67.         ld de,cmdbuf
  68.         asmgetchar
  69. ;TODO определить тип команды (присваивание, вызов, ветвление)
  70.         call matchexpr
  71.  
  72.         ld de,xnum1
  73.         call popxnum
  74.         ld hl,xnum1
  75.         ld de,xOP1
  76.         call mov10 ;без этого почему-то не работает
  77.         ld hl,xOP1 ;куда печатаем?
  78.          ld bc,xOP1 ;что печатаем?
  79.         call xtostr ;превращает число в строку
  80.        push hl
  81.         ;ld hl,strout-1
  82.         ld c,0
  83.         call prtext
  84.         call prcrlf
  85.        pop hl
  86.        ld de,cmdbuf
  87.        call strcopy
  88.         xor a
  89.         ;ld (cmdbuf),a
  90.         ld (curcmdscroll),a
  91.         jp cmdmainloop
  92.  
  93. cmd_exit
  94. lastresult=$+1
  95.        ld hl,0
  96.         QUIT
  97.  
  98. ;;;;;;;;;;;;;;;;;;
  99.        
  100. editcmd_up
  101.         xor a
  102.         ld (curcmdscroll),a
  103.         ld de,cmdbuf
  104.         ld hl,oldcmd
  105.         ld bc,MAXCMDSZ+1
  106.         ldir
  107.         ;jp editcmd
  108.  
  109. editcmd
  110.         ld hl,cmdbuf
  111.         call strlen
  112.         ld a,l
  113.         ld (curcmdx),a
  114. editcmd0
  115.         call fixscroll_prcmd
  116.         call cmdcalccurxy
  117.         SETX_;SETXY_
  118.         ;ld e,CURSORCOLOR;0x38
  119.         ;OS_PRATTR ;нарисовать курсор
  120.         call yieldgetkeyloop ;YIELDGETKEYLOOP
  121.          ;ld a,c ;keynolang
  122.         ;push af
  123.         ;call cmdcalccurxy
  124.         ;SETXY_
  125.         ;ld e,COLOR;7
  126.         ;OS_PRATTR ;стереть курсор
  127.         ;pop af
  128.         cp key_enter
  129.         ret z
  130.         cp key_up
  131.         jr z,editcmd_up
  132.          ld hl,editcmd0
  133.          push hl
  134.         ;ld hl,cmdbuf
  135.         cp key_backspace
  136.         jr z,editcmd_backspace
  137.         cp key_left
  138.         jr z,editcmd_left
  139.         cp key_right
  140.         jr z,editcmd_right
  141.         cp key_home
  142.         jr z,editcmd_home
  143.         cp key_end
  144.         jr z,editcmd_end
  145.         cp key_del
  146.         jr z,editcmd_del
  147.         cp 0x20
  148.         ret c ;jr c,editcmdok ;прочие системные кнопки не нужны
  149. ;type in
  150. editcmdtypein
  151.         ld e,a
  152.         ld hl,cmdbuf
  153.         call strlen ;hl=length
  154.         ld bc,MAXCMDSZ
  155.         or a
  156.         sbc hl,bc
  157.         ret nc ;jr nc,editcmdok ;некуда вводить
  158.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  159.         inc a
  160.         ld (curcmdx),a
  161.         jp strinsch ;e=ch
  162.        
  163. editcmd_backspace
  164.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  165.         or a
  166.         ret z ;jr z,editcmdok ;нечего удалять
  167.         dec a
  168.         ld (curcmdx),a
  169.         jp strdelch ;удаляет предыдущий символ
  170.      
  171. editcmd_del
  172.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  173.         inc hl
  174.         jp strdelch ;удаляет предыдущий символ
  175.      
  176. editcmd_left
  177.         ld a,(curcmdx)
  178.         or a
  179.         ret z ;jr z,editcmdok ;некуда влево
  180.         dec a
  181. editcmd_leftq
  182.         ld (curcmdx),a
  183.         ret
  184. editcmd_home
  185.         xor a
  186.         jr editcmd_leftq
  187. editcmd_end
  188.         ld hl,cmdbuf
  189.         call strlen ;hl=length
  190.         ld a,l
  191.         jr editcmd_leftq
  192.  
  193. editcmd_right
  194.         call cmdcalctextaddr ;hl=addr, a=curcmdx
  195.         inc (hl)
  196.         dec (hl)
  197.         ret z ;jr z,editcmdok ;некуда право, стоим на терминаторе
  198.         inc a
  199.         ld (curcmdx),a
  200.         ret
  201.  
  202. execcmd
  203. ;a=next char
  204. execcmd0
  205.         ld hl,commandslist ;list of internal commands
  206. strcpexec0
  207.         ld c,(hl)
  208.         inc hl
  209.         ld b,(hl)
  210.         inc hl
  211.        inc b
  212.         jr z,execcmderr
  213.        dec b
  214.        push af
  215.        push de
  216.         ld de,wordbuf
  217.         push hl
  218.         call strcp
  219.         pop hl
  220.         jr nz,strcpexec_fail
  221.        pop de
  222.        pop af
  223.        cp a ;z=no error
  224.         ld h,b
  225.         ld l,c
  226.         jp (hl) ;run internal command
  227. strcpexec_fail
  228.         ld b,-1 ;чтобы точно найти терминатор
  229.         xor a
  230.         cpir ;найдём обязательно
  231.        pop de
  232.        pop af
  233.         jr strcpexec0
  234.  
  235. execcmderr
  236.         or a
  237.         ret nz ;nz=error
  238.         cp 1
  239.         ret ;nz=error
  240.  
  241. ;;;;;;;;;;;;;;;;
  242.  
  243. matchexpr
  244. ;a=char (двигает курсор до первого символа, не годящегося для вычисления выражения, возвращает его в a)
  245. ;out: bc=result
  246.         call matchmulexpr
  247.         ret nz ;error
  248. matchexpr_loop
  249. ;TODO << >> || ^^ == != < > <= >=
  250.         cp '-'
  251.         jr z,matchexpr_minus
  252.         cp '+'
  253.         jr z,matchexpr_plus
  254.         ;cp '|'
  255.         ;jr z,matchexpr_or
  256.         ;cp '^'
  257.         ;jr z,matchexpr_xor
  258.         cp a
  259.         ret ;z=no error (end of expr)
  260. matchexpr_minus
  261.         call compilepushold
  262.         asmnextchar ;eat
  263.         asmgetchar
  264.         call matchmulexpr
  265.         ret nz ;error
  266.         call compilesuboldnew
  267.         jr matchexpr_loop
  268. matchexpr_plus
  269.         call compilepushold
  270.         asmnextchar ;eat
  271.         asmgetchar
  272.         call matchmulexpr
  273.         ret nz ;error
  274.         call compileaddnewold
  275.         jr matchexpr_loop
  276.  
  277. matchmulexpr
  278. ;a=char (двигает курсор до первого символа, не годящегося для вычисления выражения, возвращает его в a)
  279. ;out: bc=result
  280.         call matchval
  281.         ret nz ;error
  282. matchmulexpr_loop
  283. ;TODO &&
  284.         cp '*'
  285.         jr z,matchmulexpr_mul
  286.         cp '/'
  287.         jr z,matchmulexpr_div
  288.         ;cp '&'
  289.         ;jr z,matchmulexpr_and
  290.         cp a
  291.         ret ;z=no error (end of expr)
  292. matchmulexpr_mul
  293.         call compilepushold
  294.         asmnextchar ;eat
  295.         asmgetchar
  296.         call matchval
  297.         ret nz ;error
  298.         call compilemulnewold
  299.         jr matchmulexpr_loop
  300. matchmulexpr_div
  301.         call compilepushold
  302.         asmnextchar ;eat
  303.         asmgetchar
  304.         call matchval
  305.         ret nz ;error
  306.         call compiledivoldnew
  307.         jr matchmulexpr_loop
  308.  
  309. matchval_plus
  310.         asmnextchar ;eat
  311.         asmgetchar
  312. matchval
  313. ;nnn
  314. ;var ;TODO labels
  315. ;(expr)
  316. ;-val
  317. ;+val
  318.         cp '-'
  319.         jp z,matchval_minus
  320.         cp '('
  321.         jp z,matchval_bracket
  322.         cp '#'
  323.         jp z,matchval_hex
  324.         cp '+'
  325.         jp z,matchval_plus
  326.         cp '.'
  327.         jp z,matchdec
  328.         sub '0'
  329.         cp 10
  330.         jp nc,matchval_nodigit
  331.         add a,'0'
  332. matchdec
  333.         ld hl,wordbuf
  334. matchdec0
  335.         ld (hl),a
  336.         inc hl
  337.         asmnextchar
  338.         asmgetchar
  339.         cp '.'
  340.         jr z,matchdec0
  341.         cp '0'
  342.         jr c,matchdec0q
  343.         cp '0'+10
  344.         jr c,matchdec0
  345. matchdec0q
  346.         cp 'e'
  347.         jr nz,matchdecnoexp
  348.         ld (hl),a
  349.         inc hl
  350.         asmnextchar
  351.         asmgetchar
  352.         cp '-'
  353.         jr nz,matchdecnoexpminus
  354.        if 0
  355. ;либа не переваривает отрицательную экспоненту, поэтому делаем n*pow10(exp)
  356.         call matchdecnoexp
  357.         call matchval
  358.        push af
  359.        push de
  360.         ld de,xnum1
  361.         call popxnum
  362.         ld hl,xnum1
  363.         ld bc,xOP1
  364.         call xpow10
  365.         ld de,xnum1
  366.         call popxnum
  367.         ld hl,xOP1
  368.         ld de,xnum1
  369.         ld bc,xnum2
  370.         call xmul
  371.         ld hl,xnum2
  372.         call pushxnum
  373.        pop de
  374.        pop af
  375.         ld (hl),0
  376.         cp a ;z
  377.         ret
  378.        else
  379.         ld (hl),a
  380.         inc hl
  381.         asmnextchar
  382.         asmgetchar
  383.        endif
  384. matchdecnoexpminus
  385.         sub '0'
  386.         cp 10
  387.         jr nc,matchval_nodigit
  388.         add a,'0'
  389. matchdec1
  390.         ld (hl),a
  391.         inc hl
  392.         asmnextchar
  393.         asmgetchar
  394.         cp '0'
  395.         jr c,matchdec1q
  396.         cp '0'+10
  397.         jr c,matchdec1
  398. matchdec1q
  399. matchdecnoexp
  400.         ld (hl),0
  401.        push af
  402.        push de
  403.         ld hl,wordbuf
  404.         ld bc,xnum1
  405.         call strtox ;превращает строку в число
  406.         ld hl,xnum1
  407.         call pushxnum
  408.        pop de
  409.        pop af
  410.         cp a ;z
  411.         ret
  412. matchval_nodigit
  413.         add a,'0' ;как было (для следующих match)
  414.         ld hl,wordbuf
  415. matchword0
  416.         ld (hl),a
  417.         inc hl
  418.         asmnextchar
  419.         asmgetchar
  420.         cp 'a'
  421.         jr c,matchword0q
  422.         cp 'z'+1
  423.         jr c,matchword0
  424. matchword0q
  425.         ld (hl),0
  426.         jp execcmd
  427.  
  428. matchval_hex
  429.         asmnextchar ;eat
  430.         asmgetchar
  431.         ld bc,0
  432. matchval_hex0
  433.         sub '0'+10
  434.         cp -10
  435.         jr c,matchval_hex_nodigit
  436. matchval_hex_add
  437.         add a,10
  438.        dup 4
  439.         sla c
  440.         rl b
  441.        edup
  442.         or c
  443.         ld c,a
  444.         asmnextchar ;eat
  445.         asmgetchar
  446.         jr matchval_hex0
  447. matchval_hex_nodigit
  448.         sub 'a'-('0'+10)
  449.         cp 6
  450.         jr c,matchval_hex_add
  451.         sub 'A'-'a'
  452.         cp 6
  453.         jr c,matchval_hex_add
  454.         ;sub -'A' ;как было
  455.        call compilenum_bc
  456.         asmgetchar
  457.         cp a ;z
  458.         ret
  459.  
  460. matchval_minus
  461.         asmnextchar ;eat
  462.         asmgetchar
  463.         call matchval
  464.         ret nz
  465.        call compileneg
  466.         asmgetchar
  467.         cp a ;z
  468.         ret
  469.  
  470. matchval_bracket
  471.         asmnextchar ;eat
  472.         asmgetchar
  473.         call matchexpr
  474.         ret nz
  475.         MATCH ')'
  476.         ret
  477.  
  478. compilenum_bc
  479.        push af
  480.        push de
  481.         ld h,b
  482.         ld l,c
  483.         ld bc,xnum1
  484.         call i16tox ; Converts the 16-bit signed integer in HL to an extended precision float at BC ;TODO u64tox
  485.         ld hl,xnum1
  486.         call pushxnum
  487.        pop de
  488.        pop af
  489.         ret
  490.  
  491. compilepushold
  492.        push af
  493.        push de
  494.         ld de,xnum1
  495.         call popxnum
  496.         ld hl,xnum1
  497.         call pushxnum
  498.         ld hl,xnum1
  499.         call pushxnum
  500.        pop de
  501.        pop af
  502.         ret
  503.  
  504. compileaddnewold
  505.        push af
  506.        push de
  507.         ld de,xnum1
  508.         call popxnum
  509.         ld de,xnum2
  510.         call popxnum
  511.         ld hl,xnum2
  512.         ld de,xnum1
  513.         ld bc,xOP1
  514.         call xadd
  515.         ld hl,xOP1
  516.         call pushxnum
  517.        pop de
  518.        pop af
  519.         ret
  520.  
  521. compilesuboldnew
  522.        push af
  523.        push de
  524.         ld de,xnum1
  525.         call popxnum
  526.         ld de,xnum2
  527.         call popxnum
  528.         ld hl,xnum2
  529.         ld de,xnum1
  530.         ld bc,xOP1
  531.         call xsub
  532.         ld hl,xOP1
  533.         call pushxnum
  534.        pop de
  535.        pop af
  536.         ret
  537.  
  538. compilemulnewold
  539.        push af
  540.        push de
  541.         ld de,xnum1
  542.         call popxnum
  543.         ld de,xnum2
  544.         call popxnum
  545.         ld hl,xnum2
  546.         ld de,xnum1
  547.         ld bc,xOP1
  548.         call xmul
  549.         ld hl,xOP1
  550.         call pushxnum
  551.        pop de
  552.        pop af
  553.         ret
  554.  
  555. compiledivoldnew
  556.        push af
  557.        push de
  558.         ld de,xnum1
  559.         call popxnum
  560.         ld de,xnum2
  561.         call popxnum
  562.         ld hl,xnum2
  563.         ld de,xnum1
  564.         ld bc,xOP1
  565.         call xdiv
  566.         ld hl,xOP1
  567.         call pushxnum
  568.        pop de
  569.        pop af
  570.         ret
  571.  
  572. compileneg
  573.        push af
  574.        push de
  575.         ld de,xnum1
  576.         call popxnum
  577.         ld hl,xnum1
  578.         ld bc,xOP1
  579.         call xneg
  580.         ld hl,xOP1
  581.         call pushxnum
  582.        pop de
  583.        pop af
  584.         ret
  585.  
  586. cmd_e
  587.         ld hl,xconst_e
  588.         jr cmd_const
  589. cmd_pi
  590.         ld hl,xconst_pi
  591.         jr cmd_const
  592. cmd_const
  593.        push af
  594.        push de
  595.         call pushxnum
  596.        pop de
  597.        pop af
  598.         ret
  599.  
  600. cmd_sin
  601.         ld hl,xsin
  602.         jr cmd_onepar
  603. cmd_cos
  604.         ld hl,xcos
  605.         jr cmd_onepar
  606. cmd_tan
  607.         ld hl,xtan
  608.         jr cmd_onepar
  609. cmd_sinh
  610.         ld hl,xsinh
  611.         jr cmd_onepar
  612. cmd_cosh
  613.         ld hl,xcosh
  614.         jr cmd_onepar
  615. cmd_tanh
  616.         ld hl,xtanh
  617.         jr cmd_onepar
  618. cmd_asin
  619.         ld hl,xasin
  620.         jr cmd_onepar
  621. cmd_acos
  622.         ld hl,xacos
  623.         jr cmd_onepar
  624. cmd_atan
  625.         ld hl,xatan
  626.         jr cmd_onepar
  627. cmd_asinh
  628.         ld hl,xasinh
  629.         jr cmd_onepar
  630. cmd_acosh
  631.         ld hl,xacosh
  632.         jr cmd_onepar
  633. cmd_atanh
  634.         ld hl,xatanh
  635.         jr cmd_onepar
  636. cmd_abs
  637.         ld hl,xabs
  638.         jr cmd_onepar
  639. cmd_ln
  640.         ld hl,xln
  641.         jr cmd_onepar
  642. cmd_exp
  643.         ld hl,xexp
  644.         jr cmd_onepar
  645. cmd_sqrt
  646.         ld hl,xsqrt
  647.         jr cmd_onepar
  648.  
  649. cmd_onepar
  650. ;a=next char
  651. ;hl=xcmd
  652.        push hl
  653.         skipspaces
  654.         call matchval
  655.        pop hl
  656.         ld (cmd_onepar_xcmd),hl
  657.        push af
  658.        push de
  659.         ld de,xnum1
  660.         call popxnum
  661.         ld hl,xnum1
  662.         ld bc,xOP1
  663. cmd_onepar_xcmd=$+1
  664.         call xsqrt
  665.         ld hl,xOP1
  666.         call pushxnum
  667.        pop de
  668.        pop af
  669.         ret
  670.  
  671. ;out: nz (error) if eol ;остаётся на первом непробеле и его возвращает в a
  672. asmskipspaces_next
  673.         asmnextchar
  674.         asmgetchar
  675. asmskipspaces
  676.         cp 9 ;tab
  677.         jr z,asmskipspaces_next
  678.         cp ' '
  679.         jr z,asmskipspaces_next
  680.         ret c ;error (nz)
  681.         cp a ;z
  682.         ret
  683.  
  684. ;;;;;;;;;;;;;;
  685.  
  686. pushxnum
  687. ;hl=xnum to push
  688. xnumstacktop=$+1
  689.         ld de,xnumstack
  690.         ld bc,10
  691.         ldir
  692.         ld (xnumstacktop),de
  693.         ret
  694. popxnum
  695. ;de=xnum buf to pop
  696.         ld hl,(xnumstacktop)
  697.         ld bc,-10
  698.         add hl,bc
  699.         ld (xnumstacktop),hl
  700.         ld bc,10
  701.         ldir
  702.         ret
  703.  
  704. cmderror
  705.         push hl
  706.         ld de,_ERRORCOLOR
  707.         SETCOLOR_
  708.         pop hl
  709.         call prtext
  710.         ld de,_COLOR
  711.         SETCOLOR_
  712. prcrlf
  713.         ;ld a,0x0d
  714.         ;PRCHAR_
  715.         ;ld a,0x0a
  716.         ;PRCHAR_
  717.         ld hl,crlfbuf
  718.         ld de,2
  719.         jp cmdprNchars
  720. crlfbuf
  721.         db 0x0d,0x0a
  722.  
  723. commandslist
  724.         dw cmd_e
  725.         db "e",0
  726.         dw cmd_pi
  727.         db "pi",0
  728.         dw cmd_abs
  729.         db "abs",0
  730.         dw cmd_asin
  731.         db "asin",0
  732.         dw cmd_acos
  733.         db "acos",0
  734.         dw cmd_atan
  735.         db "atan",0
  736.         dw cmd_asinh
  737.         db "asinh",0
  738.         dw cmd_acosh
  739.         db "acosh",0
  740.         dw cmd_atanh
  741.         db "atanh",0
  742.         dw cmd_sin
  743.         db "sin",0
  744.         dw cmd_cos
  745.         db "cos",0
  746.         dw cmd_tan
  747.         db "tan",0
  748.         dw cmd_sinh
  749.         db "sinh",0
  750.         dw cmd_cosh
  751.         db "cosh",0
  752.         dw cmd_tanh
  753.         db "tanh",0
  754.         dw cmd_exp
  755.         db "exp",0
  756.         dw cmd_ln
  757.         db "ln",0
  758.         dw cmd_sqrt
  759.         db "sqrt",0
  760.        
  761.         dw -1 ;конец таблицы команд
  762.  
  763. tunknowncommand
  764.         db "Unknown command",0
  765.  
  766.  
  767.         include "str.asm"
  768.         include "cmdpr.asm"
  769.         include "../_sdk/stdio.asm"
  770.  
  771. xOP1; = 8000h
  772.         ds 182 ;162 for atan,182 for xlog
  773. xOP2 = xOP1+10
  774. xOP3 = xOP1+20
  775. xOP4 = xOP1+30
  776. xOP5 = xOP1+40
  777. seed0=80F8h
  778. seed1=80FCh
  779.  
  780. ; Defines
  781. ;#define addx(o1,o2,d) ld hl,o1 \ ld de,o2 \ ld bc,d \ call xadd
  782. ;#define subx(o1,o2,d) ld hl,o1 \ ld de,o2 \ ld bc,d \ call xsub
  783. ;#define rsubx(o1,o2,d) ld hl,o1 \ ld de,o2 \ ld bc,d \ call xrsub
  784. ;#define mulx(o1,o2,d) ld hl,o1 \ ld de,o2 \ ld bc,d \ call xmul
  785. ;#define divx(o1,o2,d) ld hl,o1 \ ld de,o2 \ ld bc,d \ call xdiv
  786. ;#define sqrtx(o1,d) ld hl,o1 \ ld bc,d \ call xsqrt
  787. ;#define strx(o1,d) ld hl,o1 \ ld bc,d \ call xtostr
  788. ;#define movx(src,dest)  ld hl,src \ ld de,dest \ call mov10
  789.  
  790. ; Macros
  791.         macro dec_hl_opt x
  792.         if ((x)&255)>0
  793.   dec l
  794.         else
  795.   dec hl
  796.         endif
  797.         endm
  798.  
  799.         macro inc_hl_opt x
  800.         if ((x)&255)<255
  801.   inc l
  802.         else
  803.   inc hl
  804.         endif
  805.         endm
  806.  
  807.         include "extended/constantsx.asm"
  808.         include "extended/xadd.asm"
  809.         include "extended/xsub.asm"
  810.         include "extended/xmul.asm"
  811.         include "extended/xdiv.asm"
  812.         include "extended/xcmp.asm"
  813.         include "extended/xneg.asm"
  814.         include "extended/xabs.asm"
  815.         include "extended/xsqrt.asm"
  816.         include "extended/xln.asm"
  817.         include "extended/xlog.asm" ;log_y(x) (делается через xln)
  818.         include "extended/xlg.asm" ;log2(x) (делается через xln)
  819.         include "extended/xlog10.asm" ;log10(x) (делается через xln)
  820.         include "extended/xexp.asm" ;e^x (делается через xpow2)
  821.         include "extended/xpow.asm" ;x^y (делается через xpow2)
  822.         include "extended/xpow10.asm" ;10^x (делается через xpow2)
  823.         include "extended/xsin.asm"
  824.         include "extended/xcos.asm"
  825.         include "extended/xtan.asm"
  826.         include "extended/xasin.asm"
  827.         include "extended/xacos.asm"
  828.         include "extended/xatan.asm"
  829.         include "extended/xsinh.asm"
  830.         include "extended/xcosh.asm"
  831.         include "extended/xtanh.asm"
  832.         include "extended/xasinh.asm"
  833.         include "extended/xacosh.asm"
  834.         include "extended/xatanh.asm"
  835.         include "extended/xrand.asm"
  836.         include "extended/xtostr.asm"
  837.         include "extended/strtox.asm"
  838.  
  839. wordbuf
  840.         ds MAXCMDSZ+1
  841. oldcmd
  842.         ds MAXCMDSZ+1
  843.  
  844. xnum1
  845.         ds 10
  846. xnum2
  847.         ds 10
  848. ;xnum3
  849. ;        ds 10
  850.  
  851. xnumstack
  852. ;продолжается дальше вперёд
  853.  
  854. cmd_end
  855.  
  856.         ;display "cmd size ",/d,cmd_end-cmd_begin," bytes"
  857.  
  858.         savebin "calc.com",cmd_begin,cmd_end-cmd_begin
  859.        
  860.         LABELSLIST "..\..\us\user.l",1
  861.