moved number parser to separate source file
[bz80asm.git] / parser_misc.zas
blob210e207743b5b09a8d17fec0cf757db48081ee90
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 for EOL
33 ;; returns current char in A
34 ;; sets zero flag on EOL
35 ;; IN:
36 ;;   IY: text buffer
37 ;; OUT:
38 ;;   IY: text buffer (unchanged)
39 ;;    A: current or EOL char
40 ;;   zero flag is set on EOL
42 checkEOL:
43   ld    a,(iy)
44   or    a
45   ret   z
46   cp    13
47   ret
50 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51 ;; check if A is an alpha char
52 ;; carry set: not an alpha char
54 isAlpha:
55   cp    'a'
56   jr    c,.notlower
57   cp    'z'+1
58   jr    nc,.notlower
59   or    a
60   ret
61 .notlower:
62   cp    'A'
63   ret   c
64   cp    'Z'+1
65   ccf
66   ret
69 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
70 ;; check if A is a decimal digit
71 ;; carry set: not a digit char
73 isDigit:
74   cp    '0'
75   ret   c
76   cp    '9'+1
77   ccf
78   ret
81 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
82 ;; check if A is a valid identifier char (including digits)
83 ;; carry set: not an id char
85 isIdChar:
86   call  isAlpha
87   ret   nc
88   call  isDigit
89   ret   nc
90   cp    '_'
91   jr    z,.goodchar
92   cp    '$'
93   jr    z,.goodchar
94   scf
95   ret
96 .goodchar:
97   or    a
98   ret
101 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
102 ;; converts 'A' to digit (assume hex)
103 ;; carry set: not a digit char (and A is destroyed)
105 convDigit:
106   sub   '0'
107   ret   c
108   cp    10
109   ccf
110   ret   nc
111   add   a,'0'
112   and   %11011111   ; cheap uppercase
113   sub   'A'-10
114   ret   c
115   cp    16
116   ccf
117   ret