started expression parser; for now, implemented numeric parser, with alot of prefixes...
[bz80asm.git] / parser_misc.zas
blob2c1cd49502d494aea7235c3ac89239745e74e9ea
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; math expression parser, misc routines
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6 ;; skip blanks
7 ;; returns current char in A
8 ;; sets zero flag on EOL
9 ;; IN:
10 ;;   IY: text buffer
11 ;; OUT:
12 ;;   IY: text buffer at non-blank or EOL
13 ;;    A: non-blank or EOL char
14 ;;   zero flag is set on EOL
16 skipBlanks:
17   ld    a,(iy)
18   or    a
19   ret   z
20   cp    13
21   ret   z
22   inc   iy
23   cp    33
24   jr    c,skipBlanks
25   dec   iy
26   ; reset zero flag
27   or    a
28   ret
31 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
32 ;; check if A is an alpha char
33 ;; carry set: not an alpha char
35 isAlpha:
36   cp    'a'
37   jr    c,.notlower
38   cp    'z'+1
39   jr    nc,.notlower
40   or    a
41   ret
42 .notlower:
43   cp    'A'
44   ret   c
45   cp    'Z'+1
46   ccf
47   ret
50 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51 ;; check if A is a decimal digit
52 ;; carry set: not a digit char
54 isDigit:
55   cp    '0'
56   ret   c
57   cp    '9'+1
58   ccf
59   ret
62 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
63 ;; check if A is a valid identifier char (including digits)
64 ;; carry set: not an id char
66 isIdChar:
67   call  isAlpha
68   ret   nc
69   call  isDigit
70   ret   nc
71   cp    '_'
72   jr    z,.goodchar
73   cp    '$'
74   jr    z,.goodchar
75   scf
76   ret
77 .goodchar:
78   or    a
79   ret
82 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
83 ;; converts 'A' to digit (assume hex)
84 ;; carry set: not a digit char (and A is destroyed)
86 convDigit:
87   sub   '0'
88   ret   c
89   cp    10
90   ccf
91   ret   nc
92   add   a,'0'
93   and   %11011111   ; cheap uppercase
94   sub   'A'-10
95   ret   c
96   cp    16
97   ccf
98   ret