UrForth: removed some unused code; oops! fixed bug in C kernel basic compiler (negati...
[urasm.git] / libs / muldiv_fast.zas
blobc897a6ba1d1252fb23ade24c3191ea0d28f5fa41
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; unsigned multiply
3 ;; IN:
4 ;;   DE: num0
5 ;;   HL: num1
6 ;; OUT:
7 ;;   HL: high part
8 ;;   DE: low part
9 ;;   BC: dead
10 ;;   AF: dead
11 UMul1616_32f:
12   ld    bc,hl
13 ;; hlde=de*bc, bc is not changed
14 ;; min ticks: 730; max ticks: 826
15   ld    hl,0
16   or    a
18   rr    d
19   rr    e
20   jp    nc,$+4
21   add   hl,bc
23  DUP 15
24   rr    h
25   rr    l
26   rr    d
27   rr    e
28   jp    nc,$+4
29   add   hl,bc
30  EDUP
32   rr    h
33   rr    l
34   rr    d
35   rr    e
37   ret
40 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
41 ;; unsigned division
42 ;; IN:
43 ;;   HL: high part
44 ;;   DE: low part
45 ;;   BC: divisor
46 ;; OUT:
47 ;;   DE: res
48 ;;   HL: mod
49 ;;   BC: not changed
50 ;;   AF: dead
51 UDiv3216_16f:
52   or    a
54  DUP 16
55   rl    e
56   rl    d
57   adc   hl,hl
58   sbc   hl,bc
59   jp    nc,$+4
60   add   hl,bc
61  EDUP
63   ld    a,e
64   rla
65   cpl
66   ld    e,a
68   ld    a,d
69   rla
70   cpl
71   ld    d,a
73   ret