dsforth: cosmetix
[urasm.git] / dsforth / math_basic.zas
blob74360a6e99ae22a1ad4fab91e23fd73254eda214
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; basic low-level math
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5   IF USE_FAST_MULDIV
6     include "muldiv_fast.zas"
7   ELSE
8     include "muldiv_slow.zas"
9   ENDIF
11 $FORTH_CODE_WORD +
12 ;; AberSoft
13 ;; ( n0 n1 -- n )
14   pop   de
15   pop   hl
16   add   hl,de
17   jp    i_pushhl
18 $FORTH_END_CODE_WORD +
20 $FORTH_CODE_WORD -
21 ;; AberSoft
22 ;; ( n0 n1 -- n )
23   pop   de
24   pop   hl
25   and   a
26   sbc   hl,de
27   jp    i_pushhl
28 $FORTH_END_CODE_WORD -
30 $FORTH_CODE_WORD D+
31 ;; AberSoft
32 ;; ( d0 d1 -- d )
33   ld    hl,6
34   add   hl,sp
35   ld    e,(hl)
36   ld    (hl),c
37   inc   hl
38   ld    d,(hl)
39   ld    (hl),b
40   pop   bc
41   pop   hl
42   add   hl,de
43   ex    de,hl
44   pop   hl
45   sbc   hl,bc
46   pop   bc
47   push  de
48   jp    i_pushhl
49 $FORTH_END_CODE_WORD D+
51 ;; change sign
52 ;; TODO: error on -32768?
53 $FORTH_CODE_WORD NEGATE
54 ;; AberSoft
55 ;; ( n -- -n )
56   pop   de
57   ld    hl,0
58   and   a
59   sbc   hl,de
60   jp    i_pushhl
61 $FORTH_END_CODE_WORD NEGATE
63 ;; change sign
64 ;; TODO: error on MAXLONGINT?
65 $FORTH_CODE_WORD DNEGATE
66 ;; AberSoft
67 ;; ( d -- -d )
68   pop   hl
69   pop   de
70   sub   a
71   sub   e
72   ld    e,a
73   ld    a,0
74   sbc   a,d
75   ld    d,a
76   ld    a,0
77   sbc   a,l
78   ld    l,a
79   ld    a,0
80   sbc   a,h
81   ld    h,a
82   push  de
83   jp    i_pushhl
84 $FORTH_END_CODE_WORD DNEGATE