home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / uploads / zcsrc.lbr / CLIBMATH.MYC / CLIBMATH.MYC
Encoding:
Text File  |  1992-02-11  |  2.9 KB  |  306 lines

  1. ; CLIBMATH.MAC
  2. ; Multiply and divide routines (c)1981 UltiMeth Corp. Permission is granted
  3. ; to reproduce them without charge, provided this notice is included.
  4.  
  5.     CSEG
  6.  
  7. o.::    POP    B
  8.     POP    D
  9.     PUSH    B
  10.     MOV    A,L
  11.     ORA    E
  12.     MOV    L,A
  13.     MOV    A,H
  14.     ORA    D
  15.     MOV    H,A
  16.     RET
  17.  
  18. x.::    POP    B
  19.     POP    D
  20.     PUSH    B
  21.     MOV    A,L
  22.     XRA    E
  23.     MOV    L,A
  24.     MOV    A,H
  25.     XRA    D
  26.     MOV    H,A
  27.     RET
  28.  
  29. a.::    POP    B
  30.     POP    D
  31.     PUSH    B
  32.     MOV    A,L
  33.     ANA    E
  34.     MOV    L,A
  35.     MOV    A,H
  36.     ANA    D
  37.     MOV    H,A
  38.     RET
  39.  
  40. e.0::    MOV    A,H
  41.     ORA    L
  42.     RZ
  43. e.t::    LXI    H,0
  44. e.2::    INR    L
  45.     RET
  46.  
  47. e.::    POP    B
  48.     POP    D
  49.     PUSH    B
  50. e.1:    MOV    A,H
  51.     CMP    D
  52.     MOV    A,L
  53.     LXI    H,0
  54.     JNZ    e.f
  55.     CMP    E
  56.     JNZ    e.f
  57.     INR    L
  58.     RET
  59.  
  60. e.f:    XRA    A
  61.     RET
  62.  
  63. c.not::    MOV    A,H
  64.     ORA    L
  65.     JZ    e.2
  66.     LXI    H,0
  67.     XRA    A
  68.     RET
  69.  
  70. n.::    POP    B
  71.     POP    D
  72.     PUSH    B
  73. n.1:    MOV    A,H
  74.     CMP    D
  75.     MOV    A,L
  76.     LXI    H,1
  77.     RNZ
  78.     CMP    E
  79.     RNZ
  80.     DCR    L
  81.     RET
  82.  
  83. c.ge::    XCHG
  84. c.le::    MOV    A,D
  85.     CMP    H
  86.     JNZ    c.lt1
  87.     MOV    A,E
  88.     CMP    L
  89.     JNZ    c.lt3
  90. true:    LXI    H,0
  91.     INR    L
  92.     RET
  93.  
  94. c.gt::    XCHG
  95. c.lt::    MOV    A,D
  96. c.lt1:    XRA    H
  97.     JM    negHL
  98.     MOV    A,D
  99.     CMP    H
  100.     JNZ    c.lt3
  101.     MOV    A,E
  102.     CMP    L
  103. c.lt3:    LXI    H,1
  104.     RC
  105. c.lt4:    DCR    L
  106.     RET
  107.  
  108. negHL:    MOV    A,H
  109.     ANA    A
  110.     LXI    H,1
  111.     JM    c.lt4
  112.     ORA    L
  113.     RET
  114.  
  115. c.tst::    MOV    A,H
  116.     XRI    128
  117.     MOV    H,A
  118.     DAD    D
  119.     RET
  120.  
  121. c.uge::    XCHG
  122. c.ule::    MOV    A,H
  123.     CMP    D
  124.     JNZ    c.ule1
  125.     MOV    A,L
  126.     CMP    E
  127. c.ule1:    LXI    H,1
  128.     JNC    c.true
  129. c.fals:    DCR    L
  130.     RET
  131.  
  132. c.true:    ORA    L
  133.     RET
  134.  
  135. c.ugt::    XCHG
  136. c.ult::    MOV    A,D
  137.     CMP    H
  138.     JNZ    c.rt
  139.     MOV    A,E
  140.     CMP    L
  141. c.rt:    LXI    H,1
  142.     RC
  143.     DCR    L
  144.     RET
  145.  
  146. c.asr::    XCHG
  147.     MOV    A,H
  148.     RAL
  149. c.shf:    DCR    E
  150.     RM
  151.     MOV    A,H
  152.     RAR
  153.     MOV    H,A
  154.     MOV    A,L
  155.     RAR
  156.     MOV    L,A
  157.     JMP    c.asr+1
  158.  
  159. c.usr::    XCHG
  160.     XRA    A
  161.     JMP    c.shf
  162.  
  163. c.asl::    XCHG
  164.     DCR    E
  165.     RM
  166.     DAD    H
  167.     JMP    c.asl+1
  168.  
  169. s.::    POP    B
  170.     POP    D
  171.     PUSH    B
  172. s.1::    MOV    A,E
  173.     SUB    L
  174.     MOV    L,A
  175.     MOV    A,D
  176.     SBB    H
  177.     MOV    H,A
  178.     RET
  179.  
  180. c.neg::    DCX    H
  181. c.com::    MOV    A,H
  182.     CMA
  183.     MOV    H,A
  184.     MOV    A,L
  185.     CMA
  186.     MOV    L,A
  187.     RET
  188.  
  189. g.::    MOV    A,M
  190. c.sxt::    MOV    L,A
  191.     RLC
  192.     SBB    A
  193.     MOV    H,A
  194.     RET
  195.  
  196. h.::    MOV    A,M
  197.     INX    H
  198.     MOV    H,M
  199.     MOV    L,A
  200.     RET
  201.  
  202. q.::    XCHG
  203.     POP    H
  204.     XTHL
  205.     MOV    M,E
  206.     INX    H
  207.     MOV    M,D
  208.     XCHG
  209.     RET
  210.  
  211. .switch::
  212.     XCHG
  213.     POP    H
  214. S.9:    MOV    C,M
  215.     INX    H
  216.     MOV    B,M
  217.     INX    H
  218.     MOV    A,B
  219.     ORA    C
  220.     JZ    S.8
  221.     MOV    A,M
  222.     INX    H
  223.     CMP    E
  224.     MOV    A,M
  225.     INX    H
  226.     JNZ    S.9
  227.     CMP    D
  228.     JNZ    S.9
  229.     MOV    H,B
  230.     MOV    L,C
  231. S.8:    PCHL
  232.  
  233. c.mult::    MOV    B,H
  234.     MOV    C,L
  235.     LXI    H,0
  236.     MOV    A,D
  237.     ORA    A
  238.     MVI    A,16
  239.     JNZ    .MLP
  240.     MOV    D,E
  241.     MOV    E,H
  242.     RRC
  243. .MLP:    DAD    H
  244.     XCHG
  245.     DAD    H
  246.     XCHG
  247.     JNC    .MSK
  248.     DAD    B
  249. .MSK:    DCR    A
  250.     JNZ    .MLP
  251.     RET
  252.  
  253. c.udv::    XRA    A
  254.     PUSH    PSW
  255.     JMP    c.d1
  256.  
  257. c.div::    MOV    A,D
  258.     XRA    H
  259.     PUSH    PSW
  260.     XRA    H
  261.     XCHG
  262.     CM    c.neg
  263.     XCHG
  264.     MOV    A,H
  265.     ORA    A
  266. c.d1:    CP    c.neg
  267.     MOV    C,L
  268.     MOV    B,H
  269.     LXI    H,0
  270.     MOV    A,B
  271.     INR    A
  272.     JNZ    .DV3
  273.     MOV    A,D
  274.     ADD    C
  275.     MVI    A,16
  276.     JC    .DV1
  277. .DV3:    MOV    L,D
  278.     MOV    D,E
  279.     MOV    E,H
  280.     MVI    A,8
  281. .DV1:    DAD    H
  282.     XCHG
  283.     DAD    H
  284.     XCHG
  285.     JNC    .DV4
  286.     INX    H
  287. .DV4:    PUSH    H
  288.     DAD    B
  289.     POP    H
  290.     JNC    .DV5
  291.     DAD    B
  292.     INX    D
  293. .DV5:    DCR    A
  294.     JNZ    .DV1
  295.     XCHG
  296.     POP    PSW
  297.     RP
  298.     XCHG
  299.     CALL    c.neg
  300.     XCHG
  301.     JMP    c.neg
  302.  
  303. $END::    DS    0        ;program end
  304.     END    o.        ;end of MATHLIB.MAC
  305.  
  306.