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