summaryrefslogtreecommitdiff
path: root/sdas/astlcs90/t90.h
blob: c29f13af72eaeab9d057068db8afaa5cd343c4b3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
/* t90.h */

/*
 *  Copyright (C) 1989-2009  Alan R. Baldwin
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *
 * Alan R. Baldwin
 * 721 Berkeley St.
 * Kent, Ohio  44240
 */

/*
 * Extensions: P. Felber
 */

/*
 * TLCS90 Port: R. Keuchel
 */

/*
 * Indirect Addressing delimeters
 */
#define	LFIND	'('
#define RTIND	')'

/*
 * Registers
 */
#define B	0
#define C	1
#define D	2
#define E	3
#define H	4
#define L	5
#define A	6

#define I	0107
#define R	0117

#define BC	0
#define DE	1
#define HL	2
#define IX	4
#define IY	5
#define SP	6

#define AF	6

/*
 * Conditional definitions
 */

/*
F - always False
T - always True
Z Z = 1 Result zero
NZ Z = 0 Result not zero
C C = 1 Carry is Set
NC C = 0 Carry is not Set
PL or P S = 0 Result positive; >= 0
MI or M S = 1 Result negative; < 0
NE Z = 0 Result not zero
EQ Z = 1 Result zero
OV P/V = 1 Overflow ocurred
NOV P/V = 0 Overflow didn't occur
PE P/V = 1 Result has even Parity
PO P/V = 0 Result has odd Parity
GE (S xor P/V) = 0 Result (signed) is >= 0
LT (S xor P/V) = 1 Result (signed) is < 0
GT [Z or (S xor P/V)] = 0 Result (signed) is > 0
LE [Z or (S xor P/V)] = 1 Result (signed) is <= 0
UGE C = 0 Result (unsigned) is >= 0
ULT C = 1 Result (unsigned) is < 0
UGT (C or Z) = 0 Result (unsigned) is > 0
ULE (C or Z) = 1 Result (unsigned) is <= 0
*/

#define CS	0x7
#define EQ	0x6
#define F       0x0
#define GE      0x9
#define GT      0xA
#define LE      0x2
#define LT      0x1
#define M	0x5
#define NC	0xF
#define NE	0xE
#define NOV	0xC
#define NZ	0xE
#define OV      0x4
#define P       0xD
#define PE      0x4
#define PO	0xC
#define T       0x8
#define UGE     0xF
#define UGT     0xB
#define ULE     0x3
#define ULT	0x7
#define Z	0x6

/*
 * Symbol types
 */
#define	S_IMMED	30
#define	S_R8	31
#define	S_R8X	32
#define	S_R16	33
#define	S_R16X	34
#define	S_CND	35
#define	S_FLAG	36
//#define S_R8U1  37
#define S_R8U2  38

/*
 * Indexing modes
 */
#define	S_INDB	40
#define	S_IDC	41

#define	S_INDR	50

#define	S_IDBC	50
#define	S_IDDE	51
#define	S_IDHL	52
#define	S_IDIX	54
#define	S_IDIY	55
#define	S_IDSP	56

#define	S_INDM	57

/*
 * Instruction types
 */
#define	S_LD	60
#define	S_CALL	61
#define	S_JP	62
#define	S_JR	63
#define	S_RET	64
#define	S_INC	66
#define	S_DEC	67
#define	S_ADD	68
#define	S_ADC	69
#define	S_EX	71
#define	S_PUSH	72
#define	S_INH1	78
#define	S_DJNZ	80
#define	S_SUB	81
#define	S_SBC	82

/*
 * CPU Types
 */

#define S_INCX  84
#define S_DECX  85

#define	S_IRET	86

#define	S_MUL	87
#define	S_DIV	88

#define S_INCW  89
#define S_DECW  90

#define	S_BIT	91
#define	S_SET	92
#define	S_RES	93

#define	S_AND	94
#define	S_CP	95
#define	S_OR	96
#define	S_XOR	97

// must be ordered!
#define	S_RLC	98
#define	S_RRC	99
#define	S_RL	100
#define	S_RR	101
#define	S_SLA	102
#define	S_SRA	103
#define	S_SLL	104
#define	S_SRL	105

#define	S_LDI	106
#define	S_LDIR	107
#define	S_LDD	108
#define	S_LDDR	109
#define	S_CPI	110
#define	S_CPIR	111
#define	S_CPD	112
#define	S_CPDR	113

#define	S_LDAR	114

#define	S_LDW	115

#define	S_RLD	116
#define	S_RRD	117

#define S_CALLR 118

// .t90
#define	S_CPU	123

/*
 * Processor Types (S_CPU)
 */
#define	X_T90	0

struct adsym
{
	char a_str[4];	/* addressing string */
	int	a_val;		/* addressing mode value */
};

extern	struct	adsym	R8[];
//extern	struct	adsym	R8X[];
//extern	struct	adsym	R8U1[];
//extern	struct	adsym	R8U2[];

extern	struct	adsym	R16[];
extern	struct	adsym	R16X[];
extern	struct	adsym	CND[];

	/* machine dependent functions */

#ifdef	OTHERSYSTEM
	
	/* t90adr.c */
extern	int		addr(struct expr *esp);
extern	int		admode(struct adsym *sp);
extern	int		srch(char *str);

	/* t90mch.c */
extern	int		genop(int pop, int op, struct expr *esp, int f);
extern	VOID		machine(struct mne *mp);
extern	int		mchpcr(struct expr *esp);
extern	VOID		minit(void);

#else

	/* t90adr.c */
extern	int		addr();
extern	int		admode();
extern	int		srch();

	/* t90mch.c */
extern	VOID		machine();
extern	int		mchpcr();
extern	VOID		minit();

#endif