dsforth: added `[CHAR]`
[urasm.git] / dsforth / math_bitop.zas
blob2df8e68ca807c2dc08448b18c5bad0ca464ea32b
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; bitwise and logic operations
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 $FORTH_CODE_WORD AND
6 ;; AberSoft
7 ;; ( n0 n1 -- n )
8   pop   de
9   pop   hl
10   ld    a,e
11   and   l
12   ld    l,a
13   ld    a,d
14   and   h
15   ld    h,a
16   jp    i_pushhl
17 $FORTH_END_CODE_WORD AND
19 ;; "logical" and
20 $FORTH_CODE_WORD LAND
21 ;; k8
22 ;; ( n0 n1 -- 0 or 1 )
23   pop   de
24   pop   hl
25   ld    a,l
26   or    h
27   jp    z,i_pushhl
28   ex    de,hl
29   ld    a,l
30   or    h
31   jp    z,i_pushhl
32   ld    hl,1
33   jp    i_pushhl
34 $FORTH_END_CODE_WORD LAND
36 $FORTH_CODE_WORD OR
37 ;; AberSoft
38 ;; ( n0 n1 -- n )
39   pop   de
40   pop   hl
41   ld    a,e
42   or    l
43   ld    l,a
44   ld    a,d
45   or    h
46   ld    h,a
47   jp    i_pushhl
48 $FORTH_END_CODE_WORD OR
50 ;; "logical" or
51 $FORTH_CODE_WORD LOR
52 ;; k8
53 ;; ( n0 n1 -- 0 or 1 )
54   pop   de
55   pop   hl
56   ld    a,l
57   or    h
58   jr    nz,logor_push_one
59   ;; hl is 0 here
60   ld    a,d
61   or    e
62   jp    z,i_pushhl
63 logor_push_one:
64   ld    hl,1
65   jp    i_pushhl
66 $FORTH_END_CODE_WORD LOR
68 ;; "logical" not-not
69 $FORTH_CODE_WORD NOTNOT
70 ;; k8
71 ;; ( n -- 0 or 1 )
72   pop   hl
73   ld    a,l
74   or    h
75   jp    z,i_pushhl
76   ld    hl,1
77   jp    i_pushhl
78 $FORTH_END_CODE_WORD NOTNOT
80 $FORTH_CODE_WORD XOR
81 ;; AberSoft
82 ;; ( n0 n1 -- n )
83   pop   de
84   pop   hl
85   ld    a,e
86   xor   l
87   ld    l,a
88   ld    a,d
89   xor   h
90   ld    h,a
91   jp    i_pushhl
92 $FORTH_END_CODE_WORD XOR