Advertisement
NovaYoshi

derivative from Symbolic

Feb 3rd, 2016
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. diffabs:
  2.  inc        hl
  3.  ld     e,(hl)
  4.  inc        hl
  5.  ld     d,(hl)
  6.  ld     hl,(freeRam)
  7.  push       hl
  8.  push       hl
  9.  pop        ix
  10.  ld     (ix),tmul
  11.  ld     (ix+5),tsign
  12.  ld     bc,5
  13.  add        hl,bc
  14.  ld     (ix+1),l
  15.  ld     (ix+2),h
  16.  inc        hl
  17.  inc        hl
  18.  inc        hl
  19.  ld     (freeRam),hl
  20.  jp     pushdeixcopyde67pophldiffsav34
  21.  
  22. diffcoti:
  23.  call       diffcothi
  24.  jp     negateTree
  25. diffcothi:
  26.  inc        hl
  27.  ld     e,(hl)
  28.  inc        hl
  29.  ld     d,(hl)
  30.  ld     hl,(freeRam)
  31.  push       hl
  32.  push       hl
  33.  pop        ix
  34.  ld     (ix),tdiv
  35.  cp     tcoti
  36.  jr     nz,diffcoti2
  37.  ld     (ix+5),tadd
  38.  jr     diffcoti3
  39. diffcoti2:
  40.  ld     (ix+5),tsub
  41. diffcoti3:
  42.  ld     (ix+10),tpower
  43.  ld     bc,5
  44.  add        hl,bc
  45.  ld     (ix+3),l
  46.  ld     (ix+4),h
  47.  add        hl,bc
  48.  ld     (ix+8),l
  49.  ld     (ix+9),h
  50.  add        hl,bc
  51.  ld     (freeRam),hl
  52.  push       de
  53.  push       ix
  54.  call       copySub
  55.  pop        ix
  56.  ld     (ix+11),e
  57.  ld     (ix+12),d
  58.  pop        hl
  59.  push       ix
  60.  call       differentiate
  61.  pop        ix
  62.  ld     (ix+1),l
  63.  ld     (ix+2),h
  64.  call       makeTwo
  65.  ld     (ix+13),e
  66.  ld     (ix+14),d
  67.  call       makeOne
  68.  ld     (ix+6),e
  69.  ld     (ix+7),d
  70.  pop        hl
  71.  ret
  72.  
  73. diffsechi:
  74.  call       diffseci
  75.  ld     e,(ix+14)
  76.  ld     d,(ix+16)
  77.  ld     (ix+14),d
  78.  ld     (ix+16),e
  79.  ld     e,(ix+15)
  80.  ld     d,(ix+17)
  81.  ld     (ix+15),d
  82.  ld     (ix+17),e
  83. negateTree:
  84.  ex     de,hl
  85.  ld     hl,(freeRam)
  86.  push       hl
  87.  ld     (hl),0B0h
  88.  inc        hl
  89.  ld     (hl),e
  90.  inc        hl
  91.  ld     (hl),d
  92.  inc        hl
  93.  ld     (freeRam),hl
  94.  pop        hl
  95.  ret
  96. diffseci:
  97.  inc        hl
  98.  ld     e,(hl)
  99.  inc        hl
  100.  ld     d,(hl)
  101.  ld     hl,(freeRam)
  102.  push       hl
  103.  push       hl
  104.  pop        ix
  105.  ld     (ix),tdiv
  106.  ld     (ix+5),tmul
  107.  ld     (ix+10),tsqrt
  108.  ld     (ix+13),tsub
  109.  ld     (ix+18),tpower
  110.  ld     bc,5
  111.  add        hl,bc
  112.  ld     (ix+3),l
  113.  ld     (ix+4),h
  114.  add        hl,bc
  115.  ld     (ix+8),l
  116.  ld     (ix+9),h
  117.  inc        hl
  118.  inc        hl
  119.  inc        hl
  120.  ld     (ix+11),l
  121.  ld     (ix+12),h
  122.  add        hl,bc
  123.  ld     (ix+14),l
  124.  ld     (ix+15),h
  125.  add        hl,bc
  126.  ld     (freeRam),hl
  127.  push       de
  128.  push       ix
  129.  call       copySub
  130.  pop        ix
  131.  ld     (ix+19),e
  132.  ld     (ix+20),d
  133.  pop        de
  134.  push       de
  135.  push       ix
  136.  call       copySub
  137.  pop        ix
  138.  ld     (ix+6),e
  139.  ld     (ix+7),d
  140.  pop        hl
  141.  push       ix
  142.  call       differentiate
  143.  pop        ix
  144.  ld     (ix+1),l
  145.  ld     (ix+2),h
  146.  call       makeOne
  147.  ld     (ix+16),e
  148.  ld     (ix+17),d
  149.  call       makeTwo
  150.  ld     (ix+21),e
  151.  ld     (ix+22),d
  152.  pop        hl
  153.  ret
  154. diffcschi:
  155.  call       diffcsci
  156.  push       hl
  157.  ld     hl,(freeRam)
  158.  ld     a,(ix+9)
  159.  ld     (ix+9),l
  160.  ld     b,(ix+10)
  161.  ld     (ix+10),h
  162.  ld     (hl),tabs
  163.  inc        hl
  164.  ld     (hl),a
  165.  inc        hl
  166.  ld     (hl),b
  167.  inc        hl
  168.  ld     (freeRam),hl
  169.  pop        hl
  170.  ret
  171.  
  172. diffcsci:
  173.  inc        hl
  174.  ld     e,(hl)
  175.  inc        hl
  176.  ld     d,(hl)
  177.  ld     hl,(freeRam)
  178.  push       hl
  179.  push       hl
  180.  pop        ix
  181.  ld     (ix),0B0h
  182.  ld     (ix+3),tdiv
  183.  ld     (ix+8),tmul
  184.  ld     (ix+13),tsqrt
  185.  cp     tcsci
  186.  jr     z,diffcsci2
  187.  ld     (ix+16),tadd
  188.  jr     diffcsci3
  189. diffcsci2:
  190.  ld     (ix+16),tsub
  191. diffcsci3:
  192.  ld     (ix+21),tpower
  193.  inc        hl
  194.  inc        hl
  195.  inc        hl
  196.  ld     (ix+1),l
  197.  ld     (ix+2),h
  198.  ld     bc,5
  199.  add        hl,bc
  200.  ld     (ix+6),l
  201.  ld     (ix+7),h
  202.  add        hl,bc
  203.  ld     (ix+11),l
  204.  ld     (ix+12),h
  205.  inc        hl
  206.  inc        hl
  207.  inc        hl
  208.  ld     (ix+14),l
  209.  ld     (ix+15),h
  210.  add        hl,bc
  211.  ld     (ix+17),l
  212.  ld     (ix+18),h
  213.  add        hl,bc
  214.  ld     (freeRam),hl
  215.  push       de
  216.  push       ix
  217.  call       copySub
  218.  pop        ix
  219.  ld     (ix+22),e
  220.  ld     (ix+23),d
  221.  pop        de
  222.  push       de
  223.  push       ix
  224.  call       copySub
  225.  pop        ix
  226.  ld     (ix+9),e
  227.  ld     (ix+10),d
  228.  pop        hl
  229.  push       ix
  230.  call       differentiate
  231.  pop        ix
  232.  ld     (ix+4),l
  233.  ld     (ix+5),h
  234.  call       makeTwo
  235.  ld     (ix+24),e
  236.  ld     (ix+25),d
  237.  call       makeOne
  238.  ld     (ix+19),e
  239.  ld     (ix+20),d
  240.  pop        hl
  241.  ret
  242.  
  243. diffcoth:
  244. diffcot:
  245.  inc        hl
  246.  ld     e,(hl)
  247.  inc        hl
  248.  ld     d,(hl)
  249.  ld     hl,(freeRam)
  250.  push       hl
  251.  push       de
  252.  push       hl
  253.  pop        ix
  254.  ld     (ix),0B0h
  255.  ld     (ix+3),tmul
  256.  ld     (ix+8),tpower
  257.  sub        4
  258.  ld     (ix+13),a
  259.  inc        hl
  260.  inc        hl
  261.  inc        hl
  262.  ld     (ix+1),l
  263.  ld     (ix+2),h
  264.  ld     bc,5
  265.  add        hl,bc
  266.  ld     (ix+6),l
  267.  ld     (ix+7),h
  268.  add        hl,bc
  269.  ld     (ix+9),l
  270.  ld     (ix+10),h
  271.  inc        hl
  272.  inc        hl
  273.  inc        hl
  274.  ld     (freeRam),hl
  275.  call       makeTwo
  276.  ld     (ix+11),e
  277.  ld     (ix+12),d
  278.  pop        de
  279.  push       de
  280.  push       ix
  281.  call       copySub
  282.  pop        ix
  283.  ld     (ix+14),e
  284.  ld     (ix+15),d
  285.  pop        hl
  286.  push       ix
  287.  call       differentiate
  288.  pop        ix
  289.  ld     (ix+4),l
  290.  ld     (ix+5),h
  291.  pop        hl
  292.  ret
  293.  
  294.  
  295. diffsech:
  296.  call       diffsec
  297.  jp     negateTree
  298.  
  299. diffsec:
  300.  inc        hl
  301.  ld     e,(hl)
  302.  inc        hl
  303.  ld     d,(hl)
  304.  ld     hl,(freeRam)
  305.  push       hl
  306.  push       hl
  307.  pop        ix
  308.  ld     (ix),tmul
  309.  ld     (ix+5),tmul
  310.  ld     (ix+10),a
  311.  sub        11
  312.  ld     (ix+13),a
  313.  ld     bc,5
  314.  add        hl,bc
  315.  ld     (ix+3),l
  316.  ld     (ix+4),h
  317.  add        hl,bc
  318.  ld     (ix+6),l
  319.  ld     (ix+7),h
  320.  inc        hl
  321.  inc        hl
  322.  inc        hl
  323.  ld     (ix+8),l
  324.  ld     (ix+9),h
  325.  inc        hl
  326.  inc        hl
  327.  inc        hl
  328.  ld     (freeRam),hl
  329.  push       de
  330.  push       ix
  331.  call       copySub
  332.  pop        ix
  333.  ld     (ix+11),e
  334.  ld     (ix+12),d
  335.  pop        de
  336.  push       de
  337.  push       ix
  338.  call       copySub
  339.  pop        ix
  340.  ld     (ix+14),e
  341.  ld     (ix+15),d
  342.  pop        hl
  343.  jp     pushixdiffsave12ret
  344. diffcsch:
  345. diffcsc:
  346.  inc        hl
  347.  ld     e,(hl)
  348.  inc        hl
  349.  ld     d,(hl)
  350.  ld     hl,(freeRam)
  351.  push       hl
  352.  push       de
  353.  push       hl
  354.  pop        ix
  355.  ld     (ix),0B0h
  356.  ld     de,3
  357.  add        hl,de
  358.  ld     (ix+1),l
  359.  ld     (ix+2),h
  360.  ld     bc,5
  361.  add        hl,bc
  362.  ld     (ix+3),tmul
  363.  ld     (ix+6),l
  364.  ld     (ix+7),h
  365.  add        hl,bc
  366.  ld     (ix+8),tmul
  367.  ld     (ix+9),l
  368.  ld     (ix+10),h
  369.  add        hl,de
  370.  ld     (ix+11),l
  371.  ld     (ix+12),h
  372.  ld     (ix+13),a
  373.  add        a,4
  374.  ld     (ix+16),a
  375.  add        hl,de
  376.  ld     (freeRam),hl
  377.  pop        de
  378.  push       de
  379.  push       ix
  380.  call       copySub
  381.  pop        ix
  382.  ld     (ix+14),e
  383.  ld     (ix+15),d
  384.  pop        de
  385.  push       de
  386.  push       ix
  387.  call       copySub
  388.  pop        ix
  389.  ld     (ix+17),e
  390.  ld     (ix+18),d
  391.  pop        hl
  392.  push       ix
  393.  call       differentiate
  394.  pop        ix
  395.  ld     (ix+4),l
  396.  ld     (ix+5),h
  397.  pop        hl
  398.  ret
  399. difflog:
  400.  inc        hl
  401.  ld     e,(hl)
  402.  inc        hl
  403.  ld     d,(hl)
  404.  ld     hl,(freeRam)
  405.  push       hl
  406.  push       de
  407.  push       hl
  408.  pop        ix
  409.  ld     (ix),tdiv
  410.  ld     (ix+5),tmul
  411.  ld     (ix+10),tln
  412.  ld     bc,5
  413.  add        hl,bc
  414.  ld     (ix+3),l
  415.  ld     (ix+4),h
  416.  add        hl,bc
  417.  ld     (ix+8),l
  418.  ld     (ix+9),h
  419.  inc        hl
  420.  inc        hl
  421.  inc        hl
  422.  ld     (freeRam),hl
  423.  pop        de
  424.  push       de
  425.  push       ix
  426.  call       copySub
  427.  pop        ix
  428.  ld     (ix+6),e
  429.  ld     (ix+7),d
  430.  pop        hl
  431.  push       ix
  432.  call       differentiate
  433.  pop        ix
  434.  ld     (ix+1),l
  435.  ld     (ix+2),h
  436.  call       makeOne
  437.  ex     de,hl
  438.  ld     (ix+11),l
  439.  ld     (ix+12),h
  440.  inc        hl
  441.  inc        (hl)
  442.  pop        hl
  443.  ret
  444. pophldiffsubix12ret:
  445.  pop        hl
  446.  inc        hl
  447.  ld     a,(hl)
  448.  inc        hl
  449.  ld     h,(hl)
  450.  ld     l,a
  451. pushixdiffsave12ret:
  452.  push       ix
  453.  call       differentiate
  454.  pop        ix
  455.  ld     (ix+1),l
  456.  ld     (ix+2),h
  457.  pop        hl
  458.  ret
  459.  
  460. diffsqrt:
  461.  push       hl
  462.  pop        de
  463.  ld     hl,(freeRam)
  464.  push       hl
  465.  push       de
  466.  push       hl
  467.  pop        ix
  468.  ld     (ix),tdiv
  469.  ld     (ix+5),tmul
  470.  ld     bc,5
  471.  add        hl,bc
  472.  ld     (ix+3),l
  473.  ld     (ix+4),h
  474.  add        hl,bc
  475.  ld     (freeRam),hl
  476.  call       makeTwo
  477.  ld     (ix+6),e
  478.  ld     (ix+7),d
  479.  pop        de
  480.  push       de
  481.  push       ix
  482.  call       copySub
  483.  pop        ix
  484.  ld     (ix+8),e
  485.  ld     (ix+9),d
  486.  jp     pophldiffsubix12ret
  487.  
  488. diffcoshi:
  489. diffsinhi:
  490.  inc        hl
  491.  ld     e,(hl)
  492.  inc        hl
  493.  ld     d,(hl)
  494.  ld     hl,(freeRam)
  495.  push       hl
  496.  push       de
  497.  push       hl
  498.  pop        ix
  499.  ld     (ix),tdiv
  500.  ld     (ix+5),tadd
  501.  cp     tasinh
  502.  jr     z,diffsinhi2
  503.  ld     (ix+5),tsub
  504. diffsinhi2:
  505.  ld     (ix+10),tpower
  506.  ld     (ix+15),tsqrt
  507.  ld     bc,5
  508.  add        hl,bc
  509.  ld     (ix+16),l
  510.  ld     (ix+17),h
  511.  add        hl,bc
  512.  ld     (ix+6),l
  513.  ld     (ix+7),h
  514.  add        hl,bc
  515.  ld     (ix+3),l
  516.  ld     (ix+4),h
  517.  inc        hl
  518.  inc        hl
  519.  inc        hl
  520.  ld     (freeRam),hl
  521.  call       makeOne
  522.  ld     (ix+8),e
  523.  ld     (ix+9),d
  524.  call       makeTwo
  525.  ld     (ix+13),e
  526.  ld     (ix+14),d
  527.  jp     copydiffandsaveix12
  528.  
  529. difftanhi:
  530. difftani:
  531.  inc        hl
  532.  ld     e,(hl)
  533.  inc        hl
  534.  ld     d,(hl)
  535.  ld     hl,(freeRam)
  536.  push       hl
  537.  push       de
  538.  push       hl
  539.  pop        ix
  540.  ld     (ix),tdiv
  541.  ld     (ix+5),tadd
  542.  cp     tatan
  543.  jr     z,difftani2
  544.  ld     (ix+5),tsub
  545. difftani2:
  546.  ld     (ix+10),tpower
  547.  ld     bc,5
  548.  add        hl,bc
  549.  ld     (ix+3),l
  550.  ld     (ix+4),h
  551.  add        hl,bc
  552.  ld     (ix+8),l
  553.  ld     (ix+9),h
  554.  add        hl,bc
  555.  ld     (freeRam),hl
  556.  call       makeTwo
  557.  ld     (ix+13),e
  558.  ld     (ix+14),d
  559.  call       makeOne
  560.  ld     (ix+6),e
  561.  ld     (ix+7),d
  562.  jp     copydiffandsaveix12
  563. diffcosi:
  564.  push       hl
  565.  ld     hl,(freeRam)
  566.  push       hl
  567.  ld     (hl),0b0h
  568.  inc        hl
  569.  ld     e,l
  570.  ld     d,h
  571.  inc        de
  572.  inc        de
  573.  ld     (hl),e
  574.  inc        hl
  575.  ld     (hl),d
  576.  ld     (freeRam),de
  577.  pop        bc
  578.  pop        hl
  579.  push       bc
  580.  inc        hl
  581.  ld     e,(hl)
  582.  inc        hl
  583.  ld     d,(hl)
  584.  ld     hl,(freeRam)
  585.  jr     diffsini2
  586. diffsini:
  587.  inc        hl
  588.  ld     e,(hl)
  589.  inc        hl
  590.  ld     d,(hl)
  591.  ld     hl,(freeRam)
  592.  push       hl
  593. diffsini2:
  594.  push       de
  595.  push       hl
  596.  pop        ix
  597.  ld     (ix),tdiv
  598.  ld     (ix+15),tsqrt
  599.  ld     (ix+5),tsub
  600.  ld     (ix+10),tpower
  601.  ld     bc,5
  602.  add        hl,bc
  603.  ld     (ix+16),l
  604.  ld     (ix+17),h
  605.  add        hl,bc
  606.  ld     (ix+8),l
  607.  ld     (ix+9),h
  608.  add        hl,bc
  609.  ld     (ix+3),l
  610.  ld     (ix+4),h
  611.  inc        hl
  612.  inc        hl
  613.  inc        hl
  614.  ld     (freeRam),hl
  615.  call       makeOne
  616.  ld     (ix+6),e
  617.  ld     (ix+7),d
  618.  pop        de
  619.  push       de
  620.  push       ix
  621.  call       copySub
  622.  pop        ix
  623.  ld     (ix+11),e
  624.  ld     (ix+12),d
  625.  pop        hl
  626.  push       ix
  627.  call       differentiate
  628.  pop        ix
  629.  ld     (ix+1),l
  630.  ld     (ix+2),h
  631.  call       makeTwo
  632.  ld     (ix+13),e
  633.  ld     (ix+14),d
  634.  pop        hl
  635.  ret
  636.  
  637. diffDiv:
  638.  push       hl      ;1
  639.  ld     hl,(freeRam)
  640.  push       hl      ;2
  641.  push       hl      ;3
  642.  pop        ix      ;-1
  643.  ld     bc,5
  644.  add        hl,bc
  645.  ld     (ix),tdiv
  646.  ld     (ix+5),tpower
  647.  ld     (ix+10),tsub
  648.  ld     (ix+15),tmul
  649.  ld     (ix+20),tmul
  650.  ld     (ix+3),l
  651.  ld     (ix+4),h
  652.  add        hl,bc
  653.  ld     (ix+1),l
  654.  ld     (ix+2),h
  655.  add        hl,bc
  656.  ld     (ix+13),l
  657.  ld     (ix+14),h
  658.  add        hl,bc
  659.  ld     (ix+11),l
  660.  ld     (ix+12),h
  661.  add        hl,bc
  662.  ld     (freeRam),hl
  663.  ld     (ix+8),l
  664.  ld     (ix+9),h
  665.  call       makeTwo
  666.  pop        de      ;-2
  667.  pop        hl      ;-3
  668.  push       de      ;4
  669.  inc        hl
  670.  ld     e,(hl)
  671.  inc        hl
  672.  ld     d,(hl)
  673.  inc        hl
  674.  push       hl      ;5
  675.  push       de      ;11
  676.  push       ix      ;12
  677.  call       copySub
  678.  pop        ix      ;-10
  679.  ld     (ix+16),e
  680.  ld     (ix+17),d
  681.  pop        hl      ;-11
  682.  push       ix      ;13
  683.  call       differentiate
  684.  pop        ix      ;-12
  685.  ld     (ix+21),l
  686.  ld     (ix+22),h
  687.  pop        hl      ;-9
  688.  ld     e,(hl)
  689.  inc        hl
  690.  ld     d,(hl)
  691.  push       de      ;6
  692.  push       ix      ;7
  693.  call       copySub
  694.  pop        ix      ;-4
  695.  ld     (ix+6),e
  696.  ld     (ix+7),d
  697.  pop        de      ;-5
  698.  push       de      ;8
  699.  push       ix      ;9
  700.  call       copySub
  701.  pop        ix      ;-6
  702.  ld     (ix+23),e
  703.  ld     (ix+24),d
  704. pophldiffsav1819:
  705.  pop        hl      ;-7
  706.  push       ix      ;10
  707.  call       differentiate
  708.  pop        ix      ;-8
  709.  ex     de,hl
  710.  ld     (ix+18),e
  711.  ld     (ix+19),d
  712.  pop        hl      ;-14
  713.  ret
  714.  
  715. diffMult:
  716.  push   hl
  717.  ld hl,(freeRam)
  718.  push   hl
  719.  push   hl
  720.  pop    ix
  721.  ld bc,5
  722.  add    hl,bc
  723.  ld (ix),tadd
  724.  ld (ix+5),tmul
  725.  ld (ix+1),l
  726.  ld (ix+2),h
  727.  add    hl,bc
  728.  ld (ix+10),tmul
  729.  ld (ix+3),l
  730.  ld (ix+4),h
  731.  add    hl,bc
  732.  ld (freeRam),hl
  733.  pop    de
  734.  pop    hl
  735.  push   de
  736.  inc    hl
  737.  ld e,(hl)
  738.  inc    hl
  739.  ld d,(hl)
  740.  inc    hl
  741.  push   hl
  742.  push   de
  743.  push   ix
  744.  call   copySub
  745.  pop    ix
  746.  ld (ix+6),e
  747.  ld (ix+7),d
  748.  pop    hl
  749.  push   ix
  750.  call   differentiate
  751.  pop    ix
  752.  ex de,hl
  753.  ld (ix+11),e
  754.  ld (ix+12),d
  755.  pop    hl      ;loc of loc of other node being multiplied
  756.  ld e,(hl)
  757.  inc    hl
  758.  ld d,(hl)
  759.  push   de
  760.  push   ix
  761.  call   copySub
  762.  pop    ix
  763.  ld (ix+13),e
  764.  ld (ix+14),d
  765.  pop    hl
  766.  push   ix
  767.  call   differentiate
  768.  pop    ix
  769.  ex de,hl
  770.  ld (ix+8),e
  771.  ld (ix+9),d
  772.  pop    hl
  773.  ret
  774. diffExpo:               ;a^b
  775.  ex de,hl
  776.  ld     hl,(freeRam)
  777.  push   hl
  778.  push   hl
  779.  pop    ix
  780.  ld     (ix),tmul
  781.  ld     bc,5
  782.  add    hl,bc       ;hl=+5
  783.  ld     (ix+3),l
  784.  ld     (ix+4),h
  785.  ld     (ix+5),tpower
  786.  add    hl,bc       ;hl=+10
  787.  ld     (ix+1),l
  788.  ld     (ix+2),h
  789.  ld     (ix+10),tadd
  790.  add    hl,bc       ;hl=+15
  791.  ld     (ix+11),l
  792.  ld     (ix+12),h
  793.  ld     (ix+15),tmul
  794.  add    hl,bc       ;hl=+20
  795.  ld     (ix+20),tln
  796.  ld     (ix+16),l
  797.  ld     (ix+17),h
  798.  ld     bc,3
  799.  add    hl,bc       ;hl=+23
  800.  ld     (ix+23),tmul
  801.  ld     (ix+13),l
  802.  ld     (ix+14),h
  803.  ld     bc,5
  804.  add    hl,bc       ;hl=+28
  805.  ld     (ix+28),tdiv
  806.  ld     (ix+24),l
  807.  ld     (ix+25),h
  808.  add    hl,bc       ;hl=+33
  809.  ld     (freeRam),hl
  810.  ex     de,hl
  811.  inc    hl
  812.  ld     e,(hl)
  813.  inc    hl
  814.  ld     d,(hl)
  815.  inc    hl          ;de = loc of b
  816.  push   hl          ;save loc of the ^ + [3]
  817.  push   de
  818.  push   ix
  819.  call   copySub
  820.  pop    ix
  821.  ld     (ix+6),e
  822.  ld     (ix+7),d
  823.  pop    de
  824.  push   de
  825.  push   ix
  826.  call   copySub
  827.  pop    ix
  828.  ld     (ix+21),e
  829.  ld     (ix+22),d
  830.  pop    de
  831.  push   de
  832.  push   ix
  833.  call   copySub
  834.  pop    ix
  835.  ld     (ix+31),e
  836.  ld     (ix+32),d
  837.  pop    hl
  838.  push   ix
  839.  call   differentiate
  840.  pop    ix
  841.  ld     (ix+26),l
  842.  ld     (ix+27),h
  843.  pop    hl
  844.  ld     e,(hl)
  845.  inc    hl
  846.  ld     d,(hl)
  847.  push   de
  848.  push   ix
  849.  call   copySub
  850.  pop    ix
  851.  ld     (ix+8),e
  852.  ld     (ix+9),d
  853.  pop    de
  854.  push   de
  855.  push   ix
  856.  call   copySub
  857.  pop    ix
  858.  ld     (ix+29),e
  859.  ld     (ix+30),d
  860.  jp     pophldiffsav1819
  861. ; pop    hl
  862. ; push   ix
  863. ; call   differentiate
  864. ; pop    ix
  865. ; ld     (ix+18),l
  866. ; ld     (ix+19),h  
  867. ; pop    hl
  868. ; ret
  869.  
  870. diffCosh:
  871.  sub    4
  872.  jr     diffSin
  873. diffCos:
  874.  ex de,hl
  875.  ld hl,(freeRam)
  876.  ld (hl),0b0h
  877.  push   hl
  878.  inc    hl
  879.  push   hl
  880.  pop    ix
  881.  inc    hl
  882.  inc    hl
  883.  ld     (ix),l
  884.  ld     (ix+1),h
  885.  sub    4
  886.  jr     diffTrig
  887. diffSin:
  888.  ex de,hl
  889.  ld hl,(freeRam)
  890.  push   hl
  891. diffTrig:
  892.  push   hl
  893.  pop    ix
  894.  ld (ix),tmul
  895.  add    a,2
  896.  ld (ix+5),a
  897.  ld bc,5
  898.  add    hl,bc
  899.  ld (ix+1),l
  900.  ld (ix+2),h
  901.  inc    hl
  902.  inc    hl
  903.  inc    hl
  904.  ld (freeRam),hl
  905.  ex de,hl
  906.  inc    hl
  907.  ld e,(hl)
  908.  inc    hl
  909.  ld d,(hl)
  910. pushdeixcopyde67pophldiffsav34:
  911.  push   de
  912.  push   ix
  913.  call   copySub
  914.  pop    ix
  915.  ld (ix+6),e
  916.  ld (ix+7),d
  917.  pop    hl
  918.  push   ix
  919.  call   differentiate
  920.  pop    ix
  921.  ld (ix+3),l
  922.  ld (ix+4),h
  923.  pop    hl
  924.  ret
  925. diffTan:
  926.  inc    hl
  927.  ld     e,(hl)
  928.  inc    hl
  929.  ld     d,(hl)
  930.  ld     hl,(freeRam)
  931.  push   hl
  932.  push   de
  933.  push   hl
  934.  pop    ix
  935.  ld     bc,5
  936.  add    hl,bc
  937.  ld     (ix+3),l
  938.  ld     (ix+4),h
  939.  add    hl,bc
  940.  ld     (ix+6),l
  941.  ld     (ix+7),h
  942.  ld     bc,3
  943.  add    hl,bc
  944.  ld     (ix+8),l
  945.  ld     (ix+9),h
  946.  ld     (freeRam),hl
  947.  call       makeTwo
  948.  ld     (ix),tdiv
  949.  ld     (ix+5),tpower
  950.  sub    2
  951.  ld     (ix+10),a       ;tan or tanh -> cos or cosh
  952. copydiffandsaveix12:
  953.  pop    de
  954.  push   de
  955.  push   ix
  956.  call   copySub
  957.  pop    ix
  958.  ld     (ix+11),e
  959.  ld     (ix+12),d
  960.  jr     diffandsaveix12
  961.  
  962. diffLn:
  963.  inc    hl
  964.  ld     e,(hl)
  965.  inc    hl
  966.  ld     d,(hl)
  967.  ld     hl,(freeRam)
  968.  push   hl
  969.  push   hl
  970.  pop    ix
  971.  ld     bc,5
  972.  add    hl,bc
  973.  ld     (freeRam),hl
  974.  ld     (ix),tdiv
  975.  push   de
  976.  push   ix
  977.  call   copySub
  978.  pop    ix
  979.  ld     (ix+3),e
  980.  ld     (ix+4),d
  981. diffandsaveix12:
  982.  pop    hl
  983.  push   ix
  984.  call   differentiate
  985.  pop    ix
  986.  ld     (ix+1),l
  987.  ld     (ix+2),h
  988.  pop    hl
  989.  ret
  990.  
  991. differentiate:
  992. ;*
  993.  call   memAssert
  994. ;*
  995.  ld a,(hl)
  996.  cp tsin         ;sin
  997.  jp z,diffSin
  998.  cp tsinh         ;sinh
  999.  jp z,diffSin
  1000.  cp tcos
  1001.  jp z,diffCos
  1002.  cp tcoshh
  1003.  jp z,diffCosh
  1004.  cp tln
  1005.  jr z,diffLn
  1006.  cp ttan
  1007.  jp z,diffTan
  1008.  cp ttanh
  1009.  jp z,diffTan
  1010.  cp tadd
  1011.  jp z,diffPlus
  1012.  cp tsub
  1013.  jp z,diffPlus
  1014.  or a
  1015.  jp z,diffZero
  1016.  cp 01h
  1017.  jp z,diffVar
  1018.  cp tmul
  1019.  jp z,diffMult
  1020.  cp tdiv
  1021.  jp z,diffDiv
  1022.  cp tpower
  1023.  jp z,diffExpo
  1024.  cp 0b0h
  1025.  jp z,diffneg
  1026.  cp tasin
  1027.  jp z,diffsini
  1028.  cp tacos
  1029.  jp z,diffcosi
  1030.  cp tatan
  1031.  jp z,difftani
  1032.  cp tasinh
  1033.  jp z,diffsinhi
  1034.  cp tacosh
  1035.  jp z,diffcoshi
  1036.  cp tatanh
  1037.  jp z,difftanhi
  1038.  cp tsqrt
  1039.  jp z,diffsqrt
  1040.  
  1041. ; cuberoots are converted to "3[xroot](" in demess now
  1042. ; cp tcubrt
  1043. ; jp z,diffcbrt
  1044.  
  1045.  cp tlog
  1046.  jp z,difflog
  1047.  
  1048.  cp tcsc
  1049.  jp z,diffcsc
  1050.  cp tcsch
  1051.  jp z,diffcsch
  1052.  
  1053.  cp tsec
  1054.  jp z,diffsec
  1055.  cp tsech
  1056.  jp z,diffsech
  1057.  cp tcot
  1058.  jp z,diffcot
  1059.  cp tcoth
  1060.  jp z,diffcoth
  1061.  
  1062.  cp tcsci
  1063.  jp z,diffcsci
  1064.  cp tcschi
  1065.  jp z,diffcschi
  1066.  
  1067.  cp tseci
  1068.  jp z,diffseci
  1069.  cp tsechi
  1070.  jp z,diffsechi
  1071.  
  1072.  cp tcoti
  1073.  jp z,diffcoti
  1074.  cp tcothi
  1075.  jp z,diffcothi
  1076.  cp tabs
  1077.  jp z,diffabs
  1078.  jp syntaxErr
  1079.  
  1080. diffneg:
  1081.  inc        hl
  1082.  ld     e,(hl)
  1083.  inc        hl
  1084.  ld     d,(hl)
  1085.  ex     de,hl
  1086.  call       differentiate
  1087.  jp     negateTree
  1088.  
  1089. diffPlus:
  1090.  inc        hl
  1091.  ld     e,(hl)
  1092.  inc        hl
  1093.  ld     d,(hl)
  1094.  inc        hl
  1095.  push       hl
  1096.  ex     de,hl
  1097.  push       af
  1098.  call       differentiate
  1099.  pop        af
  1100.  ex     de,hl
  1101.  ld     hl,(freeRam)
  1102.  ld     (hl),a
  1103.  inc        hl
  1104.  ld     (hl),e
  1105.  inc        hl
  1106.  ld     (hl),d
  1107.  inc        hl
  1108.  pop        de
  1109.  inc        hl
  1110.  push       hl
  1111.  inc        hl
  1112.  ld     (freeRam),hl
  1113.  ex     de,hl
  1114.  ld     (hl),e
  1115.  inc        hl
  1116.  ld     (hl),d
  1117.  inc        hl
  1118.  call       differentiate
  1119.  ex     de,hl
  1120.  pop        hl
  1121.  ld     (hl),d
  1122.  dec        hl
  1123.  ld     (hl),e
  1124.  dec        hl
  1125.  dec        hl
  1126.  dec        hl
  1127.  ret
  1128. diffOne:
  1129.  call   makeOne
  1130.  ex de,hl
  1131.  ret
  1132. diffVar:
  1133.  inc    hl
  1134.  ld     a,(respect2)
  1135.  cp     (hl)
  1136.  jr     z,diffOne
  1137. diffZero:
  1138.  call   makeZero
  1139.  ex de,hl
  1140.  ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement