1 /* rab.h */
2 
3 /*
4  *  Copyright (C) 1989-2009  Alan R. Baldwin
5  *
6  *  This program is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  This program is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  *
19  *
20  * Alan R. Baldwin
21  * 721 Berkeley St.
22  * Kent, Ohio  44240
23  *
24  * ported to the Rabbit2000 by
25  * Ulrich Raich and Razaq Ijoduola
26  * PS Division
27  * CERN
28  * CH-1211 Geneva-23
29  * email: Ulrich dot Raich at cern dot ch
30  */
31 
32 /*
33  * Extensions: P. Felber
34  *
35  * Altered by Leland Morrison to support rabbit 2000
36  *   and rabbit 4000 instruction sets (2011)
37  */
38 
39 /*)BUILD
40         $(PROGRAM) =    ASRAB
41         $(INCLUDE) = {
42                 ASXXXX.H
43                 RAB.H
44         }
45         $(FILES) = {
46                 RABMCH.C
47                 RABADR.C
48                 RABPST.C
49                 ASMAIN.C
50                 ASDBG.C
51                 ASLEX.C
52                 ASSYM.C
53                 ASSUBR.C
54                 ASEXPR.C
55                 ASDATA.C
56                 ASLIST.C
57                 ASOUT.C
58         }
59         $(STACK) = 3000
60 */
61 
62 /*
63  * Indirect Addressing delimeters
64  */
65 #define LFIND           '('
66 #define RTIND           ')'
67 
68 /*
69  * Registers
70  */
71 #define B               0
72 #define C               1
73 #define D               2
74 #define E               3
75 #define H               4
76 #define L               5
77 #define A               7
78 
79 #define BC              0
80 #define DE              1
81 #define HL              2
82 #define SP              3
83 #define AF              4
84 #define IX              5
85 #define IY              6
86 
87 #define IIR             0x47
88 #define EIR             0x4F
89 #define IP              0x76
90 
91 #define BCDE            1
92 #define JKHL            1
93 
94 /*
95  * Conditional definitions
96  */
97 #define NZ              0
98 #define Z               1
99 #define NC              2
100 #define CS              3
101 #define PO              4
102 #define PE              5
103 #define P               6
104 #define M               7
105 
106 /*
107  * Alternate set of conditional definitions for some rabbit 4000 instructions
108  */
109 #define CC_GT           0
110 #define CC_GTU          1
111 #define CC_LT           2
112 #define CC_V            3
113 #define CC_NZ           4
114 #define CC_Z            5
115 #define CC_NC           6
116 #define CC_C            7
117 
118 /*
119  * Symbol types
120  */
121 #define S_IMMED         30
122 #define S_R8            31
123 #define S_R8X           32
124 
125 #define S_R16           34
126 #define S_R16X          35
127 #define S_CND           36
128 #define S_FLAG          37
129 
130 #define S_R32_BCDE      38
131 #define S_R32_JKHL      39
132 #define S_RXPC          40
133 
134 /*
135  * Indexing modes
136  */
137 #define S_INDB          40
138 #define S_IDC           41
139 #define S_INDR          50
140 #define S_IDBC          50
141 #define S_IDDE          51
142 #define S_IDHL          52
143 #define S_IDSP          53
144 #define S_IDIX          55
145 #define S_IDIY          56
146 #define S_INDM          57
147 #define S_IDHL_OFFSET   58
148 
149 /*
150  * Instruction types
151  */
152 #define S_LD            60
153 #define S_CALL          61
154 #define S_JP            62
155 #define S_JR            63
156 #define S_RET           64
157 #define S_BIT           65
158 #define S_INC           66
159 #define S_DEC           67
160 #define S_ADD           68
161 #define S_ADC           69
162 #define S_AND           70
163 #define S_EX            71
164 #define S_PUSH          72
165 #define S_IN            73
166 #define S_OUT           74
167 #define S_RL            75
168 #define S_RST           76
169 #define S_IM            77
170 #define S_INH1          78
171 #define S_INH2          81
172 #define S_DJNZ          84
173 #define S_SUB           85
174 #define S_SBC           86
175 #define S_NEG           83
176 #define S_CPU           88
177 
178 /*
179  * Processor Types (S_CPU)
180  */
181 #define X_R2K           0
182 #define X_HD64          1
183 #define X_Z80           2
184 #define X_R4K           3
185 
186 /*
187  * HD64180 Instructions
188  */
189 #define HD_INH2         90
190 #define HD_IN           91
191 #define HD_OUT          92
192 #define HD_MLT          93
193 #define HD_TST          94
194 #define HD_TSTIO        95
195 
196 /*
197  * Rabbit 2000 / Rabbit 4000 specific Instructions
198  */
199 #define X_LJP                97
200 #define X_LCALL              98
201 #define X_BOOL               99
202 
203 #define X_R3K_MODE          101
204 #define R3K_INH1            102
205 #define R3K_INH2            103
206 
207 #define X_R4K_MODE          105
208 /* the remaining instructions are only on Rabbit 4000: */
209 #define X_R4K_MULU          106
210 #define X_JRE               107
211 #define X_CLR               108
212 #define R4K_INH2            109
213 
214 #define BCDE_PG           0xDD
215 #define JKHL_PG           0xFD
216 
217 struct adsym
218 {
219         char    a_str[8];       /* addressing string */
220         int     a_val;          /* addressing mode value */
221 };
222 
223         /* register names are in rabadr.c: */
224 extern  struct  adsym   R8[];
225 extern  struct  adsym   R8X[];
226 extern  struct  adsym   R8IP[];
227 extern  struct  adsym   R16[];
228 extern  struct  adsym   R16X[];
229 
230 extern  struct  adsym   R32_JKHL[];
231 extern  struct  adsym   R32_BCDE[];
232 extern  struct  adsym   RXPC[];
233 
234 extern  struct  adsym   CND[];
235 extern  struct  adsym   ALT_CND[];
236 
237         /* machine dependent functions */
238 
239 #ifdef  OTHERSYSTEM
240 
241         /* rabadr.c */
242 extern  int             addr(struct expr *esp);
243 extern  int             admode(struct adsym *sp);
244 extern  int             any(char c, char *str);
245 extern  int             srch(char *str);
246 
247 
248         /* rabmch.c */
249 extern  int             genop(int pop, int op, struct expr *esp, int f);
250 extern  int             gixiy(int v);
251 extern  int             mchpcr(struct expr *esp);
252 
253 #else
254 
255         /* rabadr.c */
256 extern  int             addr();
257 extern  int             admode();
258 extern  int             any();
259 extern  int             srch();
260 
261         /* rabmch.c */
262 extern  int             genop();
263 extern  int             gixiy();
264 extern  int             mchpcr();
265 
266 #endif
267