xref: /openbsd-src/gnu/usr.bin/binutils-2.17/include/opcode/maxq.h (revision 3d8817e467ea46cf4772788d6804dd293abfb01a)
1*3d8817e4Smiod /* maxq.h -- Header file for MAXQ opcode table.
2*3d8817e4Smiod 
3*3d8817e4Smiod    Copyright (C) 2004 Free Software Foundation, Inc.
4*3d8817e4Smiod 
5*3d8817e4Smiod    This file is part of GDB, GAS, and the GNU binutils.
6*3d8817e4Smiod 
7*3d8817e4Smiod    Written by Vineet Sharma(vineets@noida.hcltech.com)
8*3d8817e4Smiod    Inderpreet Singh (inderpreetb@noida.hcltech.com)
9*3d8817e4Smiod 
10*3d8817e4Smiod    GDB, GAS, and the GNU binutils are free software; you can redistribute
11*3d8817e4Smiod    them and/or modify them under the terms of the GNU General Public License
12*3d8817e4Smiod    as published by the Free Software Foundation; either version 2, or (at
13*3d8817e4Smiod    your option) any later version.
14*3d8817e4Smiod 
15*3d8817e4Smiod    GDB, GAS, and the GNU binutils are distributed in the hope that they will
16*3d8817e4Smiod    be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
17*3d8817e4Smiod    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
18*3d8817e4Smiod    Public License for more details.
19*3d8817e4Smiod 
20*3d8817e4Smiod    You should have received a copy of the GNU General Public License along
21*3d8817e4Smiod    with this file; see the file COPYING.  If not, write to the Free Software
22*3d8817e4Smiod    Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
23*3d8817e4Smiod 
24*3d8817e4Smiod #ifndef _MAXQ20_H_
25*3d8817e4Smiod #define  _MAXQ20_H_
26*3d8817e4Smiod 
27*3d8817e4Smiod /* This file contains the opcode table for the MAXQ10/20 processor. The table
28*3d8817e4Smiod    has been designed on the lines of the SH processor with the following
29*3d8817e4Smiod    fields:
30*3d8817e4Smiod    (1) Instruction Name
31*3d8817e4Smiod    (2) Instruction arguments description
32*3d8817e4Smiod    (3) Description of the breakup of the opcode (1+7+8|8+8|1+4+4|1+7+1+3+4
33*3d8817e4Smiod        |1+3+4+1+3+4|1+3+4+8|1+1+2+4+8)
34*3d8817e4Smiod    (4) Architecture supported
35*3d8817e4Smiod 
36*3d8817e4Smiod    The Register table is also defined. It contains the following fields
37*3d8817e4Smiod    (1) Register name
38*3d8817e4Smiod    (2) Module Number
39*3d8817e4Smiod    (3) Module Index
40*3d8817e4Smiod    (4) Opcode
41*3d8817e4Smiod    (5) Regtype
42*3d8817e4Smiod 
43*3d8817e4Smiod    The Memory access table is defined containing the various opcodes for
44*3d8817e4Smiod    memory access containing the following fields
45*3d8817e4Smiod    (1) Memory access Operand Name
46*3d8817e4Smiod    (2) Memory access Operand opcode.  */
47*3d8817e4Smiod 
48*3d8817e4Smiod # define MAXQ10 0x0001
49*3d8817e4Smiod # define MAXQ20 0x0002
50*3d8817e4Smiod # define MAX    (MAXQ10 | MAXQ20)
51*3d8817e4Smiod 
52*3d8817e4Smiod /* This is for the NOP instruction Specify : 1st bit : NOP_FMT 1st byte:
53*3d8817e4Smiod    NOP_DST 2nd byte: NOP_SRC.  */
54*3d8817e4Smiod # define NOP_FMT  1
55*3d8817e4Smiod # define NOP_SRC  0x3A
56*3d8817e4Smiod # define NOP_DST  0x5A
57*3d8817e4Smiod 
58*3d8817e4Smiod typedef enum
59*3d8817e4Smiod {
60*3d8817e4Smiod   ZEROBIT = 0x1,		/* A zero followed by 3 bits.  */
61*3d8817e4Smiod   ONEBIT = 0x2,			/* A one followed by 3 bits.  */
62*3d8817e4Smiod   REG = 0x4,			/* Register.  */
63*3d8817e4Smiod   MEM = 0x8,			/* Memory access.  */
64*3d8817e4Smiod   IMM = 0x10,			/* Immediate value.  */
65*3d8817e4Smiod   DISP = 0x20,			/* Displacement value.  */
66*3d8817e4Smiod   BIT = 0x40,			/* Bit value.  */
67*3d8817e4Smiod   FMT = 0x80,			/* The format bit.  */
68*3d8817e4Smiod   IMMBIT = 0x100,		/* An immediate bit.  */
69*3d8817e4Smiod   FLAG = 0x200,			/* A Flag.  */
70*3d8817e4Smiod   DATA = 0x400,			/* Symbol in the data section.  */
71*3d8817e4Smiod   BIT_BUCKET = 0x800,		/* FOr BIT BUCKET.  */
72*3d8817e4Smiod }
73*3d8817e4Smiod UNKNOWN_OP;
74*3d8817e4Smiod 
75*3d8817e4Smiod typedef enum
76*3d8817e4Smiod {
77*3d8817e4Smiod   NO_ARG = 0,
78*3d8817e4Smiod   A_IMM = 0x01,			/* An 8 bit immediate value.  */
79*3d8817e4Smiod   A_REG = 0x2,			/* An 8 bit source register.  */
80*3d8817e4Smiod   A_MEM = 0x4,			/* A 7 bit destination register.  */
81*3d8817e4Smiod   FLAG_C = 0x8,			/* Carry Flag.  */
82*3d8817e4Smiod   FLAG_NC = 0x10,		/* No Carry (~C) flag.  */
83*3d8817e4Smiod   FLAG_Z = 0x20,		/* Zero Flag.  */
84*3d8817e4Smiod   FLAG_NZ = 0x40,		/* Not Zero Flag.  */
85*3d8817e4Smiod   FLAG_S = 0x80,		/* Sign Flag.  */
86*3d8817e4Smiod   FLAG_E = 0x100,		/* Equals Flag.  */
87*3d8817e4Smiod   FLAG_NE = 0x200,		/* Not Equal Flag.  */
88*3d8817e4Smiod   ACC_BIT = 0x400,		/* One of the 16 accumulator bits of the form Acc.<b>.  */
89*3d8817e4Smiod   DST_BIT = 0x800,		/* One of the 8 bits of the specified SRC.  */
90*3d8817e4Smiod   SRC_BIT = 0x1000,		/* One of the 8 bits of the specified source register.  */
91*3d8817e4Smiod   A_BIT_0 = 0x2000,		/* #0.  */
92*3d8817e4Smiod   A_BIT_1 = 0x4000,		/* #1.  */
93*3d8817e4Smiod   A_DISP = 0x8000,		/* Displacement Operand.  */
94*3d8817e4Smiod   A_DATA = 0x10000,		/* Data in the data section.  */
95*3d8817e4Smiod   A_BIT_BUCKET = 0x200000,
96*3d8817e4Smiod }
97*3d8817e4Smiod MAX_ARG_TYPE;
98*3d8817e4Smiod 
99*3d8817e4Smiod typedef struct
100*3d8817e4Smiod {
101*3d8817e4Smiod   char * name;			/* Name of the instruction.  */
102*3d8817e4Smiod   unsigned int op_number;	/* Operand Number or the number of operands.  */
103*3d8817e4Smiod   MAX_ARG_TYPE arg[2];		/* Types of operands.  */
104*3d8817e4Smiod   int format;			/* Format bit.  */
105*3d8817e4Smiod   int dst[2];			/* Destination in the move instruction.  */
106*3d8817e4Smiod   int src[2];			/* Source in the move instruction.  */
107*3d8817e4Smiod   int arch;			/* The Machine architecture.  */
108*3d8817e4Smiod   unsigned int instr_id;	/* Added for decode and dissassembly.  */
109*3d8817e4Smiod }
110*3d8817e4Smiod MAXQ20_OPCODE_INFO;
111*3d8817e4Smiod 
112*3d8817e4Smiod /* Structure for holding opcodes of the same name.  */
113*3d8817e4Smiod typedef struct
114*3d8817e4Smiod {
115*3d8817e4Smiod   const MAXQ20_OPCODE_INFO *start;	/* The first opcode.  */
116*3d8817e4Smiod   const MAXQ20_OPCODE_INFO *end;	/* The last opcode.  */
117*3d8817e4Smiod }
118*3d8817e4Smiod MAXQ20_OPCODES;
119*3d8817e4Smiod 
120*3d8817e4Smiod /* The entry into the hash table will be of the type MAXX_OPCODES.  */
121*3d8817e4Smiod 
122*3d8817e4Smiod /* The definition of the table.  */
123*3d8817e4Smiod const MAXQ20_OPCODE_INFO op_table[] =
124*3d8817e4Smiod {
125*3d8817e4Smiod   /* LOGICAL OPERATIONS */
126*3d8817e4Smiod   /* AND src : f001 1010 ssss ssss */
127*3d8817e4Smiod   {"AND", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x1a, 0},
128*3d8817e4Smiod    {REG | MEM | IMM | DISP, 0}, MAX, 0x11},
129*3d8817e4Smiod   /* AND Acc.<b> : 1111 1010 bbbb 1010 */
130*3d8817e4Smiod   {"AND", 1, {ACC_BIT, 0}, 1, {0x1a, 0}, {BIT, 0xa}, MAX, 0x39},
131*3d8817e4Smiod   /* OR src : f010 1010 ssss ssss */
132*3d8817e4Smiod   {"OR", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x2a, 0},
133*3d8817e4Smiod    {REG | MEM | IMM | DISP, 0}, MAX, 0x12},
134*3d8817e4Smiod   /* OR Acc.<b> : 1010 1010 bbbb 1010 */
135*3d8817e4Smiod   {"OR", 1, {ACC_BIT, 0}, 1, {0x2a, 0}, {BIT, 0xa}, MAX, 0x3A},
136*3d8817e4Smiod   /* XOR src : f011 1010 ssss ssss */
137*3d8817e4Smiod   {"XOR", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x3a, 0},
138*3d8817e4Smiod    {REG | MEM | IMM | DISP, 0}, MAX, 0x13},
139*3d8817e4Smiod   /* XOR Acc.<b> : 1011 1010 bbbb 1010 */
140*3d8817e4Smiod   {"XOR", 1, {ACC_BIT, 0}, 1, {0x3a, 0}, {BIT, 0xa}, MAX, 0x3B},
141*3d8817e4Smiod   /* LOGICAL OPERATIONS INVOLVING ONLY THE ACCUMULATOR */
142*3d8817e4Smiod   /* CPL : 1000 1010 0001 1010 */
143*3d8817e4Smiod   {"CPL", 0, {0, 0}, 1, {0x0a, 0}, {0x1a, 0}, MAX, 0x21},
144*3d8817e4Smiod   /* CPL C : 1101 1010 0010 1010 */
145*3d8817e4Smiod   {"CPL", 1, {FLAG_C, 0}, 1, {0x5a, 0}, {0x2a, 0}, MAX, 0x3D},
146*3d8817e4Smiod   /* NEG : 1000 1010 1001 1010 */
147*3d8817e4Smiod   {"NEG", 0, {0, 0}, 1, {0x0a, 0}, {0x9a, 0}, MAX, 0x29},
148*3d8817e4Smiod   /* SLA : 1000 1010 0010 1010 */
149*3d8817e4Smiod   {"SLA", 0, {0, 0}, 1, {0x0a, 0}, {0x2a, 0}, MAX, 0x22},
150*3d8817e4Smiod   /* SLA2: 1000 1010 0011 1010 */
151*3d8817e4Smiod   {"SLA2", 0, {0, 0}, 1, {0x0a, 0}, {0x3a, 0}, MAX, 0x23},
152*3d8817e4Smiod   /* SLA4: 1000 1010 0110 1010 */
153*3d8817e4Smiod   {"SLA4", 0, {0, 0}, 1, {0x0a, 0}, {0x6a, 0}, MAX, 0x26},
154*3d8817e4Smiod   /* RL : 1000 1010 0100 1010 */
155*3d8817e4Smiod   {"RL", 0, {0, 0}, 1, {0x0a, 0}, {0x4a, 0}, MAX, 0x24},
156*3d8817e4Smiod   /* RLC : 1000 1010 0101 1010 */
157*3d8817e4Smiod   {"RLC", 0, {0, 0}, 1, {0x0a, 0}, {0x5a, 0}, MAX, 0x25},
158*3d8817e4Smiod   /* SRA : 1000 1010 1111 1010 */
159*3d8817e4Smiod   {"SRA", 0, {0, 0}, 1, {0x0a, 0}, {0xfa, 0}, MAX, 0x2F},
160*3d8817e4Smiod   /* SRA2: 1000 1010 1110 1010 */
161*3d8817e4Smiod   {"SRA2", 0, {0, 0}, 1, {0x0a, 0}, {0xea, 0}, MAX, 0x2E},
162*3d8817e4Smiod   /* SRA4: 1000 1010 1011 1010 */
163*3d8817e4Smiod   {"SRA4", 0, {0, 0}, 1, {0x0a, 0}, {0xba, 0}, MAX, 0x2B},
164*3d8817e4Smiod   /* SR : 1000 1010 1010 1010 */
165*3d8817e4Smiod   {"SR", 0, {0, 0}, 1, {0x0a, 0}, {0xaa, 0}, MAX, 0x2A},
166*3d8817e4Smiod   /* RR : 1000 1010 1100 1010 */
167*3d8817e4Smiod   {"RR", 0, {0, 0}, 1, {0x0a, 0}, {0xca, 0}, MAX, 0x2C},
168*3d8817e4Smiod   /* RRC : 1000 1010 1101 1010 */
169*3d8817e4Smiod   {"RRC", 0, {0, 0}, 1, {0x0a, 0}, {0xda, 0}, MAX, 0x2D},
170*3d8817e4Smiod   /* MATH OPERATIONS */
171*3d8817e4Smiod   /* ADD src : f100 1010 ssss ssss */
172*3d8817e4Smiod   {"ADD", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x4a, 0},
173*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x14},
174*3d8817e4Smiod   /* ADDC src : f110 1010 ssss ssss */
175*3d8817e4Smiod   {"ADDC", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x6a, 0},
176*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x16},
177*3d8817e4Smiod   /* SUB src : f101 1010 ssss ssss */
178*3d8817e4Smiod   {"SUB", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x5a, 0},
179*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x15},
180*3d8817e4Smiod   /* SUBB src : f111 1010 ssss ssss */
181*3d8817e4Smiod   {"SUBB", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x7a, 0},
182*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x17},
183*3d8817e4Smiod   /* BRANCHING OPERATIONS */
184*3d8817e4Smiod 
185*3d8817e4Smiod   /* DJNZ LC[0] src: f100 1101 ssss ssss */
186*3d8817e4Smiod   {"DJNZ", 2, {A_REG, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x4d, 0},
187*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0xA4},
188*3d8817e4Smiod   /* DJNZ LC[1] src: f101 1101 ssss ssss */
189*3d8817e4Smiod   {"DJNZ", 2, {A_REG, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x5d, 0},
190*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0xA5},
191*3d8817e4Smiod   /* CALL src : f011 1101 ssss ssss */
192*3d8817e4Smiod   {"CALL", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x3d, 0},
193*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0xA3},
194*3d8817e4Smiod   /* JUMP src : f000 1100 ssss ssss */
195*3d8817e4Smiod   {"JUMP", 1, {A_IMM | A_REG | A_MEM | A_DISP, 0}, FMT, {0x0c, 0},
196*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x50},
197*3d8817e4Smiod   /* JUMP C,src : f010 1100 ssss ssss */
198*3d8817e4Smiod   {"JUMP", 2, {FLAG_C, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x2c, 0},
199*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x52},
200*3d8817e4Smiod   /* JUMP NC,src: f110 1100 ssss ssss */
201*3d8817e4Smiod   {"JUMP", 2, {FLAG_NC, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x6c, 0},
202*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x56},
203*3d8817e4Smiod   /* JUMP Z,src : f001 1100 ssss ssss */
204*3d8817e4Smiod   {"JUMP", 2, {FLAG_Z, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x1c, 0},
205*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x51},
206*3d8817e4Smiod   /* JUMP NZ,src: f101 1100 ssss ssss */
207*3d8817e4Smiod   {"JUMP", 2, {FLAG_NZ, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x5c, 0},
208*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x55},
209*3d8817e4Smiod   /* JUMP E,src : 0011 1100 ssss ssss */
210*3d8817e4Smiod   {"JUMP", 2, {FLAG_E, A_IMM | A_DISP}, 0, {0x3c, 0}, {IMM, 0}, MAX, 0x53},
211*3d8817e4Smiod   /* JUMP NE,src: 0111 1100 ssss ssss */
212*3d8817e4Smiod   {"JUMP", 2, {FLAG_NE, A_IMM | A_DISP}, 0, {0x7c, 0}, {IMM, 0}, MAX, 0x57},
213*3d8817e4Smiod   /* JUMP S,src : f100 1100 ssss ssss */
214*3d8817e4Smiod   {"JUMP", 2, {FLAG_S, A_IMM | A_REG | A_MEM | A_DISP}, FMT, {0x4c, 0},
215*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0x54},
216*3d8817e4Smiod   /* RET : 1000 1100 0000 1101 */
217*3d8817e4Smiod   {"RET", 0, {0, 0}, 1, {0x0c, 0}, {0x0d, 0}, MAX, 0x68},
218*3d8817e4Smiod   /* RET C : 1010 1100 0000 1101 */
219*3d8817e4Smiod   {"RET", 1, {FLAG_C, 0}, 1, {0x2c, 0}, {0x0d, 0}, MAX, 0x6A},
220*3d8817e4Smiod   /* RET NC : 1110 1100 0000 1101 */
221*3d8817e4Smiod   {"RET", 1, {FLAG_NC, 0}, 1, {0x6c, 0}, {0x0d, 0}, MAX, 0x6E},
222*3d8817e4Smiod   /* RET Z : 1001 1100 0000 1101 */
223*3d8817e4Smiod   {"RET", 1, {FLAG_Z, 0}, 1, {0x1c, 0}, {0x0d, 0}, MAX, 0x69},
224*3d8817e4Smiod   /* RET NZ : 1101 1100 0000 1101 */
225*3d8817e4Smiod   {"RET", 1, {FLAG_NZ, 0}, 1, {0x5c, 0}, {0x0d, 0}, MAX, 0x6D},
226*3d8817e4Smiod   /* RET S : 1100 1100 0000 1101 */
227*3d8817e4Smiod   {"RET", 1, {FLAG_S, 0}, 1, {0x4c, 0}, {0x0d, 0}, MAX, 0x6C},
228*3d8817e4Smiod   /* RETI : 1000 1100 1000 1101 */
229*3d8817e4Smiod   {"RETI", 0, {0, 0}, 1, {0x0c, 0}, {0x8d, 0}, MAX, 0x78},
230*3d8817e4Smiod   /* ADDED ACCORDING TO NEW SPECIFICATION */
231*3d8817e4Smiod 
232*3d8817e4Smiod   /* RETI C : 1010 1100 1000 1101 */
233*3d8817e4Smiod   {"RETI", 1, {FLAG_C, 0}, 1, {0x2c, 0}, {0x8d, 0}, MAX, 0x7A},
234*3d8817e4Smiod   /* RETI NC : 1110 1100 1000 1101 */
235*3d8817e4Smiod   {"RETI", 1, {FLAG_NC, 0}, 1, {0x6c, 0}, {0x8d, 0}, MAX, 0x7E},
236*3d8817e4Smiod   /* RETI Z : 1001 1100 1000 1101 */
237*3d8817e4Smiod   {"RETI", 1, {FLAG_Z, 0}, 1, {0x1c, 0}, {0x8d, 0}, MAX, 0x79},
238*3d8817e4Smiod   /* RETI NZ : 1101 1100 1000 1101 */
239*3d8817e4Smiod   {"RETI", 1, {FLAG_NZ, 0}, 1, {0x5c, 0}, {0x8d, 0}, MAX, 0x7D},
240*3d8817e4Smiod   /* RETI S : 1100 1100 1000 1101 */
241*3d8817e4Smiod   {"RETI", 1, {FLAG_S, 0}, 1, {0x4c, 0}, {0x8d, 0}, MAX, 0x7C},
242*3d8817e4Smiod   /* MISCELLANEOUS INSTRUCTIONS */
243*3d8817e4Smiod   /* CMP src : f111 1000 ssss ssss */
244*3d8817e4Smiod   {"CMP", 1, {A_REG | A_IMM | A_MEM | A_DISP, 0}, FMT, {0x78, 0},
245*3d8817e4Smiod    {REG | MEM | IMM | DISP, 0}, MAX, 0xD7},
246*3d8817e4Smiod   /* DATA TRANSFER OPERATIONS */
247*3d8817e4Smiod   /* XCH : 1000 1010 1000 1010 */
248*3d8817e4Smiod   {"XCH", 0, {0, 0}, 1, {0x0a, 0}, {0x8a, 0}, MAXQ20, 0x28},
249*3d8817e4Smiod   /* XCHN : 1000 1010 0111 1010 */
250*3d8817e4Smiod   {"XCHN", 0, {0, 0}, 1, {0x0a, 0}, {0x7a, 0}, MAX, 0x27},
251*3d8817e4Smiod   /* PUSH src : f000 1101 ssss ssss */
252*3d8817e4Smiod   {"PUSH", 1, {A_REG | A_IMM | A_MEM | A_DISP, 0}, FMT, {0x0d, 0},
253*3d8817e4Smiod    {IMM | REG | MEM | DISP, 0}, MAX, 0xA0},
254*3d8817e4Smiod   /* POP dst : 1ddd dddd 0000 1101 */
255*3d8817e4Smiod   {"POP", 1, {A_REG, 0}, 1, {REG, 0}, {0x0d, 0}, MAX, 0xB0},
256*3d8817e4Smiod   /* Added according to new spec */
257*3d8817e4Smiod   /* POPI dst : 1ddd dddd 1000 1101 */
258*3d8817e4Smiod   {"POPI", 1, {A_REG, 0}, 1, {REG, 0}, {0x8d, 0}, MAX, 0xC0},
259*3d8817e4Smiod   /* MOVE dst,src: fddd dddd ssss ssss */
260*3d8817e4Smiod   {"MOVE", 2, {A_REG | A_MEM, A_REG | A_IMM | A_MEM | A_DATA | A_DISP}, FMT,
261*3d8817e4Smiod    {REG | MEM, 0}, {REG | IMM | MEM | DATA | A_DISP, 0}, MAX, 0x80},
262*3d8817e4Smiod   /* BIT OPERATIONS */
263*3d8817e4Smiod   /* MOVE C,Acc.<b> : 1110 1010 bbbb 1010 */
264*3d8817e4Smiod   {"MOVE", 2, {FLAG_C, ACC_BIT}, 1, {0x6a, 0}, {BIT, 0xa}, MAX, 0x3E},
265*3d8817e4Smiod   /* MOVE C,#0 : 1101 1010 0000 1010 */
266*3d8817e4Smiod   {"MOVE", 2, {FLAG_C, A_BIT_0}, 1, {0x5a, 0}, {0x0a, 0}, MAX, 0x3D},
267*3d8817e4Smiod   /* MOVE C,#1 : 1101 1010 0001 1010 */
268*3d8817e4Smiod   {"MOVE", 2, {FLAG_C, A_BIT_1}, 1, {0x5a, 0}, {0x1a, 0}, MAX, 0x3D},
269*3d8817e4Smiod   /* MOVE Acc.<b>,C : 1111 1010 bbbb 1010 */
270*3d8817e4Smiod   {"MOVE", 2, {ACC_BIT, FLAG_C}, 1, {0x7a, 0}, {BIT, 0xa}, MAX, 0x3F},
271*3d8817e4Smiod   /* MOVE dst.<b>,#0 : 1ddd dddd 0bbb 0111 */
272*3d8817e4Smiod   {"MOVE", 2, {DST_BIT, A_BIT_0}, 1, {REG, 0}, {ZEROBIT, 0x7}, MAX, 0x40},
273*3d8817e4Smiod   /* MOVE dst.<b>,#1 : 1ddd dddd 1bbb 0111 */
274*3d8817e4Smiod   {"MOVE", 2, {DST_BIT, A_BIT_1}, 1, {REG, 0}, {ONEBIT, 0x7}, MAX, 0x41},
275*3d8817e4Smiod   /* MOVE C,src.<b> : fbbb 0111 ssss ssss */
276*3d8817e4Smiod   {"MOVE", 2, {FLAG_C, SRC_BIT}, FMT, {BIT, 0x7}, {REG, 0}, MAX, 0x97},
277*3d8817e4Smiod   /* NOP : 1101 1010 0011 1010 */
278*3d8817e4Smiod   {"NOP", 0, {0, 0}, NOP_FMT, {NOP_DST, 0}, {NOP_SRC, 0}, MAX, 0x3D},
279*3d8817e4Smiod   {NULL, 0, {0, 0}, 0, {0, 0}, {0, 0}, 0, 0x00}
280*3d8817e4Smiod };
281*3d8817e4Smiod 
282*3d8817e4Smiod /* All the modules.  */
283*3d8817e4Smiod 
284*3d8817e4Smiod #define	MOD0 0x0
285*3d8817e4Smiod #define MOD1 0x1
286*3d8817e4Smiod #define MOD2 0x2
287*3d8817e4Smiod #define MOD3 0x3
288*3d8817e4Smiod #define MOD4 0x4
289*3d8817e4Smiod #define MOD5 0x5
290*3d8817e4Smiod #define MOD6 0x6
291*3d8817e4Smiod #define MOD7 0x7
292*3d8817e4Smiod #define MOD8 0x8
293*3d8817e4Smiod #define MOD9 0x9
294*3d8817e4Smiod #define MODA 0xa
295*3d8817e4Smiod #define MODB 0xb
296*3d8817e4Smiod #define MODC 0xc
297*3d8817e4Smiod #define MODD 0xd
298*3d8817e4Smiod #define MODE 0xe
299*3d8817e4Smiod #define MODF 0xf
300*3d8817e4Smiod 
301*3d8817e4Smiod /* Added according to new specification.  */
302*3d8817e4Smiod #define MOD10 0x10
303*3d8817e4Smiod #define MOD11 0x11
304*3d8817e4Smiod #define MOD12 0x12
305*3d8817e4Smiod #define MOD13 0x13
306*3d8817e4Smiod #define MOD14 0x14
307*3d8817e4Smiod #define MOD15 0x15
308*3d8817e4Smiod #define MOD16 0x16
309*3d8817e4Smiod #define MOD17 0x17
310*3d8817e4Smiod #define MOD18 0x18
311*3d8817e4Smiod #define MOD19 0x19
312*3d8817e4Smiod #define MOD1A 0x1a
313*3d8817e4Smiod #define MOD1B 0x1b
314*3d8817e4Smiod #define MOD1C 0x1c
315*3d8817e4Smiod #define MOD1D 0x1d
316*3d8817e4Smiod #define MOD1E 0x1e
317*3d8817e4Smiod #define MOD1F 0x1f
318*3d8817e4Smiod 
319*3d8817e4Smiod /* - Peripheral Register Modules - */
320*3d8817e4Smiod /* Serial Register Modules.  */
321*3d8817e4Smiod #define CTRL		MOD8	/* For the module containing the control registers.  */
322*3d8817e4Smiod #define ACC	 	MOD9	/* For the module containing the 16 accumulators.  */
323*3d8817e4Smiod #define Act_ACC 	MODA	/* For the module containing the active accumulator.  */
324*3d8817e4Smiod #define PFX  		MODB	/* For the module containing the prefix registers.  */
325*3d8817e4Smiod #define IP	 	MODC	/* For the module containing the instruction pointer register.  */
326*3d8817e4Smiod #define SPIV 		MODD	/* For the module containing the stack pointer and the interrupt vector.  */
327*3d8817e4Smiod #define	LC 		MODD	/* For the module containing the loop counters and HILO registers.  */
328*3d8817e4Smiod #define DP 		MODF	/* For the module containig the data pointer registers.  */
329*3d8817e4Smiod 
330*3d8817e4Smiod /* Register Types.  */
331*3d8817e4Smiod typedef enum _Reg_type
332*3d8817e4Smiod { Reg_8R,			/* 8 bit register. read only.  */
333*3d8817e4Smiod   Reg_16R,			/* 16 bit register, read only.  */
334*3d8817e4Smiod   Reg_8W,			/* 8 bit register, both read and write.  */
335*3d8817e4Smiod   Reg_16W			/* 16 bit register, both read and write.  */
336*3d8817e4Smiod }
337*3d8817e4Smiod Reg_type;
338*3d8817e4Smiod 
339*3d8817e4Smiod /* Register Structure.  */
340*3d8817e4Smiod typedef struct reg
341*3d8817e4Smiod {
342*3d8817e4Smiod   char *reg_name;		/* Register name.  */
343*3d8817e4Smiod   short int Mod_name;		/* The module name.  */
344*3d8817e4Smiod   short int Mod_index;		/* The module index.  */
345*3d8817e4Smiod   int opcode;			/* The opcode of the register.  */
346*3d8817e4Smiod   Reg_type rtype;		/* 8 bit/16 bit and read only/read write.  */
347*3d8817e4Smiod   int arch;			/* The Machine architecture.  */
348*3d8817e4Smiod }
349*3d8817e4Smiod reg_entry;
350*3d8817e4Smiod 
351*3d8817e4Smiod reg_entry *new_reg_table = NULL;
352*3d8817e4Smiod int num_of_reg = 0;
353*3d8817e4Smiod 
354*3d8817e4Smiod typedef struct
355*3d8817e4Smiod {
356*3d8817e4Smiod   char *rname;
357*3d8817e4Smiod   int rindex;
358*3d8817e4Smiod }
359*3d8817e4Smiod reg_index;
360*3d8817e4Smiod 
361*3d8817e4Smiod /* Register Table description.  */
362*3d8817e4Smiod reg_entry system_reg_table[] =
363*3d8817e4Smiod {
364*3d8817e4Smiod   /* Serial Registers */
365*3d8817e4Smiod   /* MODULE 8 Registers : I call them the control registers.  */
366*3d8817e4Smiod   /* Accumulator Pointer CTRL[0h] */
367*3d8817e4Smiod   {
368*3d8817e4Smiod    "AP", CTRL, 0x0, 0x00 | CTRL, Reg_8W, MAX},
369*3d8817e4Smiod   /* Accumulator Pointer Control Register : CTRL[1h] */
370*3d8817e4Smiod 
371*3d8817e4Smiod   {
372*3d8817e4Smiod    "APC", CTRL, 0x1, 0x10 | CTRL, Reg_8W, MAX},
373*3d8817e4Smiod   /* Processor Status Flag Register CTRL[4h] Note: Bits 6 and 7 read only */
374*3d8817e4Smiod   {
375*3d8817e4Smiod    "PSF", CTRL, 0x4, 0x40 | CTRL, Reg_8W, MAX},
376*3d8817e4Smiod   /* Interrupt and Control Register : CTRL[5h] */
377*3d8817e4Smiod   {
378*3d8817e4Smiod    "IC", CTRL, 0x5, 0x50 | CTRL, Reg_8W, MAX},
379*3d8817e4Smiod   /* Interrupt Mask Register : CTRL[6h] */
380*3d8817e4Smiod   {
381*3d8817e4Smiod    "IMR", CTRL, 0x6, 0x60 | CTRL, Reg_8W, MAX},
382*3d8817e4Smiod   /* Interrupt System Control : CTRL[8h] */
383*3d8817e4Smiod   {
384*3d8817e4Smiod    "SC", CTRL, 0x8, 0x80 | CTRL, Reg_8W, MAX},
385*3d8817e4Smiod   /* Interrupt Identification Register : CTRL[Bh] */
386*3d8817e4Smiod   {
387*3d8817e4Smiod    "IIR", CTRL, 0xb, 0xb0 | CTRL, Reg_8R, MAX},
388*3d8817e4Smiod   /* System Clock Control Register : CTRL[Eh] Note: Bit 5 is read only */
389*3d8817e4Smiod   {
390*3d8817e4Smiod    "CKCN", CTRL, 0xe, 0xe0 | CTRL, Reg_8W, MAX},
391*3d8817e4Smiod   /* Watchdog Control Register : CTRL[Fh] */
392*3d8817e4Smiod   {
393*3d8817e4Smiod    "WDCN", CTRL, 0xf, 0xf0 | CTRL, Reg_8W, MAX},
394*3d8817e4Smiod   /* The 16 accumulator registers : ACC[0h-Fh] */
395*3d8817e4Smiod   {
396*3d8817e4Smiod    "A[0]", ACC, 0x0, 0x00 | ACC, Reg_16W, MAXQ20},
397*3d8817e4Smiod   {
398*3d8817e4Smiod    "A[1]", ACC, 0x1, 0x10 | ACC, Reg_16W, MAXQ20},
399*3d8817e4Smiod   {
400*3d8817e4Smiod    "A[2]", ACC, 0x2, 0x20 | ACC, Reg_16W, MAXQ20},
401*3d8817e4Smiod   {
402*3d8817e4Smiod    "A[3]", ACC, 0x3, 0x30 | ACC, Reg_16W, MAXQ20},
403*3d8817e4Smiod   {
404*3d8817e4Smiod    "A[4]", ACC, 0x4, 0x40 | ACC, Reg_16W, MAXQ20},
405*3d8817e4Smiod   {
406*3d8817e4Smiod    "A[5]", ACC, 0x5, 0x50 | ACC, Reg_16W, MAXQ20},
407*3d8817e4Smiod   {
408*3d8817e4Smiod    "A[6]", ACC, 0x6, 0x60 | ACC, Reg_16W, MAXQ20},
409*3d8817e4Smiod   {
410*3d8817e4Smiod    "A[7]", ACC, 0x7, 0x70 | ACC, Reg_16W, MAXQ20},
411*3d8817e4Smiod   {
412*3d8817e4Smiod    "A[8]", ACC, 0x8, 0x80 | ACC, Reg_16W, MAXQ20},
413*3d8817e4Smiod   {
414*3d8817e4Smiod    "A[9]", ACC, 0x9, 0x90 | ACC, Reg_16W, MAXQ20},
415*3d8817e4Smiod   {
416*3d8817e4Smiod    "A[10]", ACC, 0xa, 0xa0 | ACC, Reg_16W, MAXQ20},
417*3d8817e4Smiod   {
418*3d8817e4Smiod    "A[11]", ACC, 0xb, 0xb0 | ACC, Reg_16W, MAXQ20},
419*3d8817e4Smiod   {
420*3d8817e4Smiod    "A[12]", ACC, 0xc, 0xc0 | ACC, Reg_16W, MAXQ20},
421*3d8817e4Smiod   {
422*3d8817e4Smiod    "A[13]", ACC, 0xd, 0xd0 | ACC, Reg_16W, MAXQ20},
423*3d8817e4Smiod   {
424*3d8817e4Smiod    "A[14]", ACC, 0xe, 0xe0 | ACC, Reg_16W, MAXQ20},
425*3d8817e4Smiod   {
426*3d8817e4Smiod    "A[15]", ACC, 0xf, 0xf0 | ACC, Reg_16W, MAXQ20},
427*3d8817e4Smiod   /* The Active Accumulators : Act_Acc[0h-1h] */
428*3d8817e4Smiod   {
429*3d8817e4Smiod    "ACC", Act_ACC, 0x0, 0x00 | Act_ACC, Reg_16W, MAXQ20},
430*3d8817e4Smiod   {
431*3d8817e4Smiod    "A[AP]", Act_ACC, 0x1, 0x10 | Act_ACC, Reg_16W, MAXQ20},
432*3d8817e4Smiod   /* The 16 accumulator registers : ACC[0h-Fh] */
433*3d8817e4Smiod   {
434*3d8817e4Smiod    "A[0]", ACC, 0x0, 0x00 | ACC, Reg_8W, MAXQ10},
435*3d8817e4Smiod   {
436*3d8817e4Smiod    "A[1]", ACC, 0x1, 0x10 | ACC, Reg_8W, MAXQ10},
437*3d8817e4Smiod   {
438*3d8817e4Smiod    "A[2]", ACC, 0x2, 0x20 | ACC, Reg_8W, MAXQ10},
439*3d8817e4Smiod   {
440*3d8817e4Smiod    "A[3]", ACC, 0x3, 0x30 | ACC, Reg_8W, MAXQ10},
441*3d8817e4Smiod   {
442*3d8817e4Smiod    "A[4]", ACC, 0x4, 0x40 | ACC, Reg_8W, MAXQ10},
443*3d8817e4Smiod   {
444*3d8817e4Smiod    "A[5]", ACC, 0x5, 0x50 | ACC, Reg_8W, MAXQ10},
445*3d8817e4Smiod   {
446*3d8817e4Smiod    "A[6]", ACC, 0x6, 0x60 | ACC, Reg_8W, MAXQ10},
447*3d8817e4Smiod   {
448*3d8817e4Smiod    "A[7]", ACC, 0x7, 0x70 | ACC, Reg_8W, MAXQ10},
449*3d8817e4Smiod   {
450*3d8817e4Smiod    "A[8]", ACC, 0x8, 0x80 | ACC, Reg_8W, MAXQ10},
451*3d8817e4Smiod   {
452*3d8817e4Smiod    "A[9]", ACC, 0x9, 0x90 | ACC, Reg_8W, MAXQ10},
453*3d8817e4Smiod   {
454*3d8817e4Smiod    "A[10]", ACC, 0xa, 0xa0 | ACC, Reg_8W, MAXQ10},
455*3d8817e4Smiod   {
456*3d8817e4Smiod    "A[11]", ACC, 0xb, 0xb0 | ACC, Reg_8W, MAXQ10},
457*3d8817e4Smiod   {
458*3d8817e4Smiod    "A[12]", ACC, 0xc, 0xc0 | ACC, Reg_8W, MAXQ10},
459*3d8817e4Smiod   {
460*3d8817e4Smiod    "A[13]", ACC, 0xd, 0xd0 | ACC, Reg_8W, MAXQ10},
461*3d8817e4Smiod   {
462*3d8817e4Smiod    "A[14]", ACC, 0xe, 0xe0 | ACC, Reg_8W, MAXQ10},
463*3d8817e4Smiod   {
464*3d8817e4Smiod    "A[15]", ACC, 0xf, 0xf0 | ACC, Reg_8W, MAXQ10},
465*3d8817e4Smiod   /* The Active Accumulators : Act_Acc[0h-1h] */
466*3d8817e4Smiod   {
467*3d8817e4Smiod    "A[AP]", Act_ACC, 0x1, 0x10 | Act_ACC, Reg_8W, MAXQ10},
468*3d8817e4Smiod   /* The Active Accumulators : Act_Acc[0h-1h] */
469*3d8817e4Smiod   {
470*3d8817e4Smiod    "ACC", Act_ACC, 0x0, 0x00 | Act_ACC, Reg_8W, MAXQ10},
471*3d8817e4Smiod   /* The Prefix Registers : PFX[0h,2h] */
472*3d8817e4Smiod   {
473*3d8817e4Smiod    "PFX[0]", PFX, 0x0, 0x00 | PFX, Reg_16W, MAX},
474*3d8817e4Smiod   {
475*3d8817e4Smiod    "PFX[1]", PFX, 0x1, 0x10 | PFX, Reg_16W, MAX},
476*3d8817e4Smiod   {
477*3d8817e4Smiod    "PFX[2]", PFX, 0x2, 0x20 | PFX, Reg_16W, MAX},
478*3d8817e4Smiod   {
479*3d8817e4Smiod    "PFX[3]", PFX, 0x3, 0x30 | PFX, Reg_16W, MAX},
480*3d8817e4Smiod   {
481*3d8817e4Smiod    "PFX[4]", PFX, 0x4, 0x40 | PFX, Reg_16W, MAX},
482*3d8817e4Smiod   {
483*3d8817e4Smiod    "PFX[5]", PFX, 0x5, 0x50 | PFX, Reg_16W, MAX},
484*3d8817e4Smiod   {
485*3d8817e4Smiod    "PFX[6]", PFX, 0x6, 0x60 | PFX, Reg_16W, MAX},
486*3d8817e4Smiod   {
487*3d8817e4Smiod    "PFX[7]", PFX, 0x7, 0x70 | PFX, Reg_16W, MAX},
488*3d8817e4Smiod   /* The Instruction Pointer Registers : IP[0h,8h] */
489*3d8817e4Smiod   {
490*3d8817e4Smiod    "IP", IP, 0x0, 0x00 | IP, Reg_16W, MAX},
491*3d8817e4Smiod   /* The Stack Pointer Registers : SPIV[1h,9h] */
492*3d8817e4Smiod   {
493*3d8817e4Smiod    "SP", SPIV, 0x1, 0x10 | SPIV, Reg_16W, MAX},
494*3d8817e4Smiod   /* The Interrupt Vector Registers : SPIV[2h,Ah] */
495*3d8817e4Smiod   {
496*3d8817e4Smiod    "IV", SPIV, 0x2, 0x20 | SPIV, Reg_16W, MAX},
497*3d8817e4Smiod   /* ADDED for New Specification */
498*3d8817e4Smiod 
499*3d8817e4Smiod   /* The Loop Counter Registers : LCHILO[0h-4h,8h-Bh] */
500*3d8817e4Smiod   {
501*3d8817e4Smiod    "LC[0]", LC, 0x6, 0x60 | LC, Reg_16W, MAX},
502*3d8817e4Smiod   {
503*3d8817e4Smiod    "LC[1]", LC, 0x7, 0x70 | LC, Reg_16W, MAX},
504*3d8817e4Smiod   /* MODULE Eh Whole Column has changed */
505*3d8817e4Smiod 
506*3d8817e4Smiod   {
507*3d8817e4Smiod    "OFFS", MODE, 0x3, 0x30 | MODE, Reg_8W, MAX},
508*3d8817e4Smiod   {
509*3d8817e4Smiod    "DPC", MODE, 0x4, 0x40 | MODE, Reg_16W, MAX},
510*3d8817e4Smiod   {
511*3d8817e4Smiod    "GR", MODE, 0x5, 0x50 | MODE, Reg_16W, MAX},
512*3d8817e4Smiod   {
513*3d8817e4Smiod    "GRL", MODE, 0x6, 0x60 | MODE, Reg_8W, MAX},
514*3d8817e4Smiod   {
515*3d8817e4Smiod    "BP", MODE, 0x7, 0x70 | MODE, Reg_16W, MAX},
516*3d8817e4Smiod   {
517*3d8817e4Smiod    "GRS", MODE, 0x8, 0x80 | MODE, Reg_16W, MAX},
518*3d8817e4Smiod   {
519*3d8817e4Smiod    "GRH", MODE, 0x9, 0x90 | MODE, Reg_8W, MAX},
520*3d8817e4Smiod   {
521*3d8817e4Smiod    "GRXL", MODE, 0xA, 0xA0 | MODE, Reg_8R, MAX},
522*3d8817e4Smiod   {
523*3d8817e4Smiod    "FP", MODE, 0xB, 0xB0 | MODE, Reg_16R, MAX},
524*3d8817e4Smiod   /* The Data Pointer registers : DP[3h,7h,Bh,Fh] */
525*3d8817e4Smiod   {
526*3d8817e4Smiod    "DP[0]", DP, 0x3, 0x30 | DP, Reg_16W, MAX},
527*3d8817e4Smiod   {
528*3d8817e4Smiod    "DP[1]", DP, 0x7, 0x70 | DP, Reg_16W, MAX},
529*3d8817e4Smiod };
530*3d8817e4Smiod typedef struct
531*3d8817e4Smiod {
532*3d8817e4Smiod   char *name;
533*3d8817e4Smiod   int type;
534*3d8817e4Smiod }
535*3d8817e4Smiod match_table;
536*3d8817e4Smiod 
537*3d8817e4Smiod #define GPIO0   	0x00	/* Gerneral Purpose I/O Module 0.  */
538*3d8817e4Smiod #define GPIO1   	0x01	/* Gerneral Purpose I/O Module 1.  */
539*3d8817e4Smiod #define RTC	  	0x00	/* Real Time Clock Module.  */
540*3d8817e4Smiod #define MAC	  	0x02	/* Hardware Multiplier Module.  */
541*3d8817e4Smiod #define SER0	  	0x02	/* Contains the UART Registers.  */
542*3d8817e4Smiod #define SPI	  	0x03	/* Serial Pheripheral Interface Module.  */
543*3d8817e4Smiod #define OWBM  		0x03	/* One Wire Bus Module.  */
544*3d8817e4Smiod #define SER1	  	0x03	/* Contains the UART Registers.  */
545*3d8817e4Smiod #define TIMER20		0x03	/* Timer Counter Module 2.  */
546*3d8817e4Smiod #define TIMER21		0x04	/* Timer Counter Module 2.  */
547*3d8817e4Smiod #define JTAGD 		0x03	/* In-Circuit Debugging Support.  */
548*3d8817e4Smiod #define LCD		0x03	/* LCD register Modules.  */
549*3d8817e4Smiod 
550*3d8817e4Smiod /* Plugable modules register table f.  */
551*3d8817e4Smiod 
552*3d8817e4Smiod reg_entry peripheral_reg_table[] =
553*3d8817e4Smiod {
554*3d8817e4Smiod   /* -------- The GPIO Module Registers -------- */
555*3d8817e4Smiod   /* Port n Output Registers : GPIO[0h-4h] */
556*3d8817e4Smiod   {
557*3d8817e4Smiod    "PO0", GPIO0, 0x0, 0x00 | MOD0, Reg_8W, MAX},
558*3d8817e4Smiod   {
559*3d8817e4Smiod    "PO1", GPIO0, 0x1, 0x10 | MOD0, Reg_8W, MAX},
560*3d8817e4Smiod   {
561*3d8817e4Smiod    "PO2", GPIO0, 0x2, 0x20 | MOD0, Reg_8W, MAX},
562*3d8817e4Smiod   {
563*3d8817e4Smiod    "PO3", GPIO0, 0x3, 0x30 | MOD0, Reg_8W, MAX},
564*3d8817e4Smiod   /* External Interrupt Flag Register : GPIO[6h] */
565*3d8817e4Smiod   {
566*3d8817e4Smiod    "EIF0", GPIO0, 0x6, 0x60 | MOD0, Reg_8W, MAX},
567*3d8817e4Smiod   /* External Interrupt Enable Register : GPIO[7h] */
568*3d8817e4Smiod   {
569*3d8817e4Smiod    "EIE0", GPIO0, 0x7, 0x70 | MOD0, Reg_8W, MAX},
570*3d8817e4Smiod   /* Port n Input Registers : GPIO[8h-Bh] */
571*3d8817e4Smiod   {
572*3d8817e4Smiod    "PI0", GPIO0, 0x8, 0x80 | MOD0, Reg_8W, MAX},
573*3d8817e4Smiod   {
574*3d8817e4Smiod    "PI1", GPIO0, 0x9, 0x90 | MOD0, Reg_8W, MAX},
575*3d8817e4Smiod   {
576*3d8817e4Smiod    "PI2", GPIO0, 0xa, 0xa0 | MOD0, Reg_8W, MAX},
577*3d8817e4Smiod   {
578*3d8817e4Smiod    "PI3", GPIO0, 0xb, 0xb0 | MOD0, Reg_8W, MAX},
579*3d8817e4Smiod   {
580*3d8817e4Smiod    "EIES0", GPIO0, 0xc, 0xc0 | MOD0, Reg_8W, MAX},
581*3d8817e4Smiod   /* Port n Direction Registers : GPIO[Ch-Fh] */
582*3d8817e4Smiod   {
583*3d8817e4Smiod    "PD0", GPIO0, 0x10, 0x10 | MOD0, Reg_8W, MAX},
584*3d8817e4Smiod   {
585*3d8817e4Smiod    "PD1", GPIO0, 0x11, 0x11 | MOD0, Reg_8W, MAX},
586*3d8817e4Smiod   {
587*3d8817e4Smiod    "PD2", GPIO0, 0x12, 0x12 | MOD0, Reg_8W, MAX},
588*3d8817e4Smiod   {
589*3d8817e4Smiod    "PD3", GPIO0, 0x13, 0x13 | MOD0, Reg_8W, MAX},
590*3d8817e4Smiod   /* -------- Real Time Counter Module RTC -------- */
591*3d8817e4Smiod   /* RTC Control Register : [01h] */
592*3d8817e4Smiod   {
593*3d8817e4Smiod    "RCNT", RTC, 0x19, 0x19 | MOD0, Reg_16W, MAX},
594*3d8817e4Smiod   /* RTC Seconds High [02h] */
595*3d8817e4Smiod   {
596*3d8817e4Smiod    "RTSS", RTC, 0x1A, 0x1A | MOD0, Reg_8W, MAX},
597*3d8817e4Smiod   /* RTC Seconds Low [03h] */
598*3d8817e4Smiod   {
599*3d8817e4Smiod    "RTSH", RTC, 0x1b, 0x1b | MOD0, Reg_16W, MAX},
600*3d8817e4Smiod   /* RTC Subsecond Register [04h] */
601*3d8817e4Smiod   {
602*3d8817e4Smiod    "RTSL", RTC, 0x1C, 0x1C | MOD0, Reg_16W, MAX},
603*3d8817e4Smiod   /* RTC Alarm seconds high [05h] */
604*3d8817e4Smiod   {
605*3d8817e4Smiod    "RSSA", RTC, 0x1D, 0x1D | MOD0, Reg_8W, MAX},
606*3d8817e4Smiod   /* RTC Alarm seconds high [06h] */
607*3d8817e4Smiod   {
608*3d8817e4Smiod    "RASH", RTC, 0x1E, 0x1E | MOD0, Reg_8W, MAX},
609*3d8817e4Smiod   /* RTC Subsecond Alarm Register [07h] */
610*3d8817e4Smiod   {
611*3d8817e4Smiod    "RASL", RTC, 0x1F, 0x1F | MOD0, Reg_16W, MAX},
612*3d8817e4Smiod   /* -------- The GPIO Module Registers -------- */
613*3d8817e4Smiod   /* Port n Output Registers : GPIO[0h-4h] */
614*3d8817e4Smiod   {
615*3d8817e4Smiod    "PO4", GPIO1, 0x0, 0x00 | MOD1, Reg_8W, MAX},
616*3d8817e4Smiod   {
617*3d8817e4Smiod    "PO5", GPIO1, 0x1, 0x10 | MOD1, Reg_8W, MAX},
618*3d8817e4Smiod   {
619*3d8817e4Smiod    "PO6", GPIO1, 0x2, 0x20 | MOD1, Reg_8W, MAX},
620*3d8817e4Smiod   {
621*3d8817e4Smiod    "PO7", GPIO1, 0x3, 0x30 | MOD1, Reg_8W, MAX},
622*3d8817e4Smiod   /* External Interrupt Flag Register : GPIO[6h] */
623*3d8817e4Smiod   {
624*3d8817e4Smiod    "EIF1", GPIO0, 0x6, 0x60 | MOD1, Reg_8W, MAX},
625*3d8817e4Smiod   /* External Interrupt Enable Register : GPIO[7h] */
626*3d8817e4Smiod   {
627*3d8817e4Smiod    "EIE1", GPIO0, 0x7, 0x70 | MOD1, Reg_8W, MAX},
628*3d8817e4Smiod   /* Port n Input Registers : GPIO[8h-Bh] */
629*3d8817e4Smiod   {
630*3d8817e4Smiod    "PI4", GPIO1, 0x8, 0x80 | MOD1, Reg_8W, MAX},
631*3d8817e4Smiod   {
632*3d8817e4Smiod    "PI5", GPIO1, 0x9, 0x90 | MOD1, Reg_8W, MAX},
633*3d8817e4Smiod   {
634*3d8817e4Smiod    "PI6", GPIO1, 0xa, 0xa0 | MOD1, Reg_8W, MAX},
635*3d8817e4Smiod   {
636*3d8817e4Smiod    "PI7", GPIO1, 0xb, 0xb0 | MOD1, Reg_8W, MAX},
637*3d8817e4Smiod   {
638*3d8817e4Smiod    "EIES1", GPIO1, 0xc, 0xc0 | MOD1, Reg_8W, MAX},
639*3d8817e4Smiod   /* Port n Direction Registers : GPIO[Ch-Fh] */
640*3d8817e4Smiod   {
641*3d8817e4Smiod    "PD4", GPIO1, 0x10, 0x10 | MOD1, Reg_8W, MAX},
642*3d8817e4Smiod   {
643*3d8817e4Smiod    "PD5", GPIO1, 0x11, 0x11 | MOD1, Reg_8W, MAX},
644*3d8817e4Smiod   {
645*3d8817e4Smiod    "PD6", GPIO1, 0x12, 0x12 | MOD1, Reg_8W, MAX},
646*3d8817e4Smiod   {
647*3d8817e4Smiod    "PD7", GPIO1, 0x13, 0x13 | MOD1, Reg_8W, MAX},
648*3d8817e4Smiod #if 0
649*3d8817e4Smiod   /* Supply Boltage Check Register */
650*3d8817e4Smiod   {
651*3d8817e4Smiod    "SVS", GPIO1, 0x1e, 0x1e | GPIO1, Reg_8W, MAX},
652*3d8817e4Smiod   /* Wake up output register */
653*3d8817e4Smiod   {
654*3d8817e4Smiod    "WK0", GPIO1, 0x1f, 0x1f | GPIO1, Reg_8W, MAX},
655*3d8817e4Smiod #endif /* */
656*3d8817e4Smiod 
657*3d8817e4Smiod   /* -------- MAC Hardware multiplier module -------- */
658*3d8817e4Smiod   /* MAC Hardware Multiplier control register: [01h] */
659*3d8817e4Smiod   {
660*3d8817e4Smiod    "MCNT", MAC, 0x1, 0x10 | MOD2, Reg_8W, MAX},
661*3d8817e4Smiod   /* MAC Multiplier Operand A Register [02h] */
662*3d8817e4Smiod   {
663*3d8817e4Smiod    "MA", MAC, 0x2, 0x20 | MOD2, Reg_16W, MAX},
664*3d8817e4Smiod   /* MAC Multiplier Operand B Register [03h] */
665*3d8817e4Smiod   {
666*3d8817e4Smiod    "MB", MAC, 0x3, 0x30 | MOD2, Reg_16W, MAX},
667*3d8817e4Smiod   /* MAC Multiplier Accumulator 2 Register [04h] */
668*3d8817e4Smiod   {
669*3d8817e4Smiod    "MC2", MAC, 0x4, 0x40 | MOD2, Reg_16W, MAX},
670*3d8817e4Smiod   /* MAC Multiplier Accumulator 1 Register [05h] */
671*3d8817e4Smiod   {
672*3d8817e4Smiod    "MC1", MAC, 0x5, 0x50 | MOD2, Reg_16W, MAX},
673*3d8817e4Smiod   /* MAC Multiplier Accumulator 0 Register [06h] */
674*3d8817e4Smiod   {
675*3d8817e4Smiod    "MC0", MAC, 0x6, 0x60 | MOD2, Reg_16W, MAX},
676*3d8817e4Smiod   /* -------- The Serial I/O module SER -------- */
677*3d8817e4Smiod   /* UART registers */
678*3d8817e4Smiod   /* Serial Port Control Register : SER[6h] */
679*3d8817e4Smiod   {
680*3d8817e4Smiod    "SCON0", SER0, 0x6, 0x60 | MOD2, Reg_8W, MAX},
681*3d8817e4Smiod   /* Serial Data Buffer Register : SER[7h] */
682*3d8817e4Smiod   {
683*3d8817e4Smiod    "SBUF0", SER0, 0x7, 0x70 | MOD2, Reg_8W, MAX},
684*3d8817e4Smiod   /* Serial Port Mode Register : SER[4h] */
685*3d8817e4Smiod   {
686*3d8817e4Smiod    "SMD0", SER0, 0x8, 0x80 | MOD2, Reg_8W, MAX},
687*3d8817e4Smiod   /* Serial Port Phase Register : SER[4h] */
688*3d8817e4Smiod   {
689*3d8817e4Smiod    "PR0", SER1, 0x9, 0x90 | MOD2, Reg_16W, MAX},
690*3d8817e4Smiod   /* ------ LCD Display Module ---------- */
691*3d8817e4Smiod   {
692*3d8817e4Smiod    "LCRA", LCD, 0xd, 0xd0 | MOD2, Reg_16W, MAX},
693*3d8817e4Smiod   {
694*3d8817e4Smiod    "LCFG", LCD, 0xe, 0xe0 | MOD2, Reg_8W, MAX},
695*3d8817e4Smiod   {
696*3d8817e4Smiod    "LCD16", LCD, 0xf, 0xf0 | MOD2, Reg_8W, MAX},
697*3d8817e4Smiod   {
698*3d8817e4Smiod    "LCD0", LCD, 0x10, 0x10 | MOD2, Reg_8W, MAX},
699*3d8817e4Smiod   {
700*3d8817e4Smiod    "LCD1", LCD, 0x11, 0x11 | MOD2, Reg_8W, MAX},
701*3d8817e4Smiod   {
702*3d8817e4Smiod    "LCD2", LCD, 0x12, 0x12 | MOD2, Reg_8W, MAX},
703*3d8817e4Smiod   {
704*3d8817e4Smiod    "LCD3", LCD, 0x13, 0x13 | MOD2, Reg_8W, MAX},
705*3d8817e4Smiod   {
706*3d8817e4Smiod    "LCD4", LCD, 0x14, 0x14 | MOD2, Reg_8W, MAX},
707*3d8817e4Smiod   {
708*3d8817e4Smiod    "LCD5", LCD, 0x15, 0x15 | MOD2, Reg_8W, MAX},
709*3d8817e4Smiod   {
710*3d8817e4Smiod    "LCD6", LCD, 0x16, 0x16 | MOD2, Reg_8W, MAX},
711*3d8817e4Smiod   {
712*3d8817e4Smiod    "LCD7", LCD, 0x17, 0x17 | MOD2, Reg_8W, MAX},
713*3d8817e4Smiod   {
714*3d8817e4Smiod    "LCD8", LCD, 0x18, 0x18 | MOD2, Reg_8W, MAX},
715*3d8817e4Smiod   {
716*3d8817e4Smiod    "LCD9", LCD, 0x19, 0x19 | MOD2, Reg_8W, MAX},
717*3d8817e4Smiod   {
718*3d8817e4Smiod    "LCD10", LCD, 0x1a, 0x1a | MOD2, Reg_8W, MAX},
719*3d8817e4Smiod   {
720*3d8817e4Smiod    "LCD11", LCD, 0x1b, 0x1b | MOD2, Reg_8W, MAX},
721*3d8817e4Smiod   {
722*3d8817e4Smiod    "LCD12", LCD, 0x1c, 0x1c | MOD2, Reg_8W, MAX},
723*3d8817e4Smiod   {
724*3d8817e4Smiod    "LCD13", LCD, 0x1d, 0x1d | MOD2, Reg_8W, MAX},
725*3d8817e4Smiod   {
726*3d8817e4Smiod    "LCD14", LCD, 0x1e, 0x1e | MOD2, Reg_8W, MAX},
727*3d8817e4Smiod   {
728*3d8817e4Smiod    "LCD15", LCD, 0x1f, 0x1f | MOD2, Reg_8W, MAX},
729*3d8817e4Smiod   /* -------- SPI registers -------- */
730*3d8817e4Smiod   /* SPI data buffer Register : SER[7h] */
731*3d8817e4Smiod   {
732*3d8817e4Smiod    "SPIB", SPI, 0x5, 0x50 | MOD3, Reg_16W, MAX},
733*3d8817e4Smiod   /* SPI Control Register : SER[8h] Note : Bit 7 is a read only bit */
734*3d8817e4Smiod   {
735*3d8817e4Smiod    "SPICN", SPI, 0x15, 0x15 | MOD3, Reg_8W, MAX},
736*3d8817e4Smiod   /* SPI Configuration Register : SER[9h] Note : Bits 4,3 and 2 are read
737*3d8817e4Smiod      only.  */
738*3d8817e4Smiod   {
739*3d8817e4Smiod    "SPICF", SPI, 0x16, 0x16 | MOD3, Reg_8W, MAX},
740*3d8817e4Smiod   /* SPI Clock Register : SER[Ah] */
741*3d8817e4Smiod   {
742*3d8817e4Smiod    "SPICK", SPI, 0x17, 0x17 | MOD3, Reg_8W, MAX},
743*3d8817e4Smiod   /* -------- One Wire Bus Master OWBM -------- */
744*3d8817e4Smiod   /* OWBM One Wire address Register register: [01h] */
745*3d8817e4Smiod   {
746*3d8817e4Smiod    "OWA", OWBM, 0x13, 0x13 | MOD3, Reg_8W, MAX},
747*3d8817e4Smiod   /* OWBM One Wire Data register: [02h] */
748*3d8817e4Smiod   {
749*3d8817e4Smiod    "OWD", OWBM, 0x14, 0x14 | MOD3, Reg_8W, MAX},
750*3d8817e4Smiod   /* -------- The Serial I/O module SER -------- */
751*3d8817e4Smiod   /* UART registers */
752*3d8817e4Smiod   /* Serial Port Control Register : SER[6h] */
753*3d8817e4Smiod   {
754*3d8817e4Smiod    "SCON1", SER1, 0x6, 0x60 | MOD3, Reg_8W, MAX},
755*3d8817e4Smiod   /* Serial Data Buffer Register : SER[7h] */
756*3d8817e4Smiod   {
757*3d8817e4Smiod    "SBUF1", SER1, 0x7, 0x70 | MOD3, Reg_8W, MAX},
758*3d8817e4Smiod   /* Serial Port Mode Register : SER[4h] */
759*3d8817e4Smiod   {
760*3d8817e4Smiod    "SMD1", SER1, 0x8, 0x80 | MOD3, Reg_8W, MAX},
761*3d8817e4Smiod   /* Serial Port Phase Register : SER[4h] */
762*3d8817e4Smiod   {
763*3d8817e4Smiod    "PR1", SER1, 0x9, 0x90 | MOD3, Reg_16W, MAX},
764*3d8817e4Smiod   /* -------- Timer/Counter 2 Module -------- */
765*3d8817e4Smiod   /* Timer 2 configuration Register : TC[3h] */
766*3d8817e4Smiod   {
767*3d8817e4Smiod    "T2CNA0", TIMER20, 0x0, 0x00 | MOD3, Reg_8W, MAX},
768*3d8817e4Smiod   {
769*3d8817e4Smiod    "T2H0", TIMER20, 0x1, 0x10 | MOD3, Reg_8W, MAX},
770*3d8817e4Smiod   {
771*3d8817e4Smiod    "T2RH0", TIMER20, 0x2, 0x20 | MOD3, Reg_8W, MAX},
772*3d8817e4Smiod   {
773*3d8817e4Smiod    "T2CH0", TIMER20, 0x3, 0x30 | MOD3, Reg_8W, MAX},
774*3d8817e4Smiod   {
775*3d8817e4Smiod    "T2CNB0", TIMER20, 0xc, 0xc0 | MOD3, Reg_8W, MAX},
776*3d8817e4Smiod   {
777*3d8817e4Smiod    "T2V0", TIMER20, 0xd, 0xd0 | MOD3, Reg_16W, MAX},
778*3d8817e4Smiod   {
779*3d8817e4Smiod    "T2R0", TIMER20, 0xe, 0xe0 | MOD3, Reg_16W, MAX},
780*3d8817e4Smiod   {
781*3d8817e4Smiod    "T2C0", TIMER20, 0xf, 0xf0 | MOD3, Reg_16W, MAX},
782*3d8817e4Smiod   {
783*3d8817e4Smiod    "T2CFG0", TIMER20, 0x10, 0x10 | MOD3, Reg_8W, MAX},
784*3d8817e4Smiod   /* Timer 2-1 configuration Register : TC[4h] */
785*3d8817e4Smiod 
786*3d8817e4Smiod   {
787*3d8817e4Smiod    "T2CNA1", TIMER21, 0x0, 0x00 | MOD4, Reg_8W, MAX},
788*3d8817e4Smiod   {
789*3d8817e4Smiod    "T2H1", TIMER21, 0x1, 0x10 | MOD4, Reg_8W, MAX},
790*3d8817e4Smiod   {
791*3d8817e4Smiod    "T2RH1", TIMER21, 0x2, 0x20 | MOD4, Reg_8W, MAX},
792*3d8817e4Smiod   {
793*3d8817e4Smiod    "T2CH1", TIMER21, 0x3, 0x30 | MOD4, Reg_8W, MAX},
794*3d8817e4Smiod   {
795*3d8817e4Smiod    "T2CNA2", TIMER21, 0x4, 0x40 | MOD4, Reg_8W, MAX},
796*3d8817e4Smiod   {
797*3d8817e4Smiod    "T2H2", TIMER21, 0x5, 0x50 | MOD4, Reg_8W, MAX},
798*3d8817e4Smiod   {
799*3d8817e4Smiod    "T2RH2", TIMER21, 0x6, 0x60 | MOD4, Reg_8W, MAX},
800*3d8817e4Smiod   {
801*3d8817e4Smiod    "T2CH2", TIMER21, 0x7, 0x70 | MOD4, Reg_8W, MAX},
802*3d8817e4Smiod   {
803*3d8817e4Smiod    "T2CNB1", TIMER21, 0x8, 0x80 | MOD4, Reg_8W, MAX},
804*3d8817e4Smiod   {
805*3d8817e4Smiod    "T2V1", TIMER21, 0x9, 0x90 | MOD4, Reg_16W, MAX},
806*3d8817e4Smiod   {
807*3d8817e4Smiod    "T2R1", TIMER21, 0xa, 0xa0 | MOD4, Reg_16W, MAX},
808*3d8817e4Smiod   {
809*3d8817e4Smiod    "T2C1", TIMER21, 0xb, 0xb0 | MOD4, Reg_16W, MAX},
810*3d8817e4Smiod   {
811*3d8817e4Smiod    "T2CNB2", TIMER21, 0xc, 0xc0 | MOD4, Reg_8W, MAX},
812*3d8817e4Smiod   {
813*3d8817e4Smiod    "T2V2", TIMER21, 0xd, 0xd0 | MOD4, Reg_16W, MAX},
814*3d8817e4Smiod   {
815*3d8817e4Smiod    "T2R2", TIMER21, 0xe, 0xe0 | MOD4, Reg_16W, MAX},
816*3d8817e4Smiod   {
817*3d8817e4Smiod    "T2C2", TIMER21, 0xf, 0xf0 | MOD4, Reg_16W, MAX},
818*3d8817e4Smiod   {
819*3d8817e4Smiod    "T2CFG1", TIMER21, 0x10, 0x10 | MOD4, Reg_8W, MAX},
820*3d8817e4Smiod   {
821*3d8817e4Smiod    "T2CFG2", TIMER21, 0x11, 0x11 | MOD4, Reg_8W, MAX},
822*3d8817e4Smiod   {
823*3d8817e4Smiod    NULL, 0, 0, 0, 0, 0}
824*3d8817e4Smiod };
825*3d8817e4Smiod 
826*3d8817e4Smiod /* Memory access argument.  */
827*3d8817e4Smiod struct mem_access
828*3d8817e4Smiod {
829*3d8817e4Smiod   char *name;			/* Name of the Memory access operand.  */
830*3d8817e4Smiod   int opcode;			/* Its corresponding opcode.  */
831*3d8817e4Smiod };
832*3d8817e4Smiod typedef struct mem_access mem_access;
833*3d8817e4Smiod 
834*3d8817e4Smiod /* The Memory table for accessing the data memory through particular registers.  */
835*3d8817e4Smiod struct mem_access mem_table[] =
836*3d8817e4Smiod {
837*3d8817e4Smiod   /* The Pop Operation on the stack.  */
838*3d8817e4Smiod   {"@SP--", 0x0d},
839*3d8817e4Smiod   /* Data Pointer 0 */
840*3d8817e4Smiod   {"@DP[0]", 0x0f},
841*3d8817e4Smiod   /* Data Ponter 1 */
842*3d8817e4Smiod   {"@DP[1]", 0x4f},
843*3d8817e4Smiod   /* Data Pointer 0 post increment */
844*3d8817e4Smiod   {"@DP[0]++", 0x1f},
845*3d8817e4Smiod   /* Data Pointer 1 post increment */
846*3d8817e4Smiod   {"@DP[1]++", 0x5f},
847*3d8817e4Smiod   /* Data Pointer 0 post decrement */
848*3d8817e4Smiod   {"@DP[0]--", 0x2f},
849*3d8817e4Smiod   /* Data Pointer 1 post decrement */
850*3d8817e4Smiod   {"@DP[1]--", 0x6f},
851*3d8817e4Smiod   /* ADDED According to New Specification.  */
852*3d8817e4Smiod 
853*3d8817e4Smiod   {"@BP[OFFS]", 0x0E},
854*3d8817e4Smiod   {"@BP[OFFS++]", 0x1E},
855*3d8817e4Smiod   {"@BP[OFFS--]", 0x2E},
856*3d8817e4Smiod   {"NUL", 0x76},
857*3d8817e4Smiod   {"@++SP", 0x0D},
858*3d8817e4Smiod   {"@BP[++OFFS]", 0x1E},
859*3d8817e4Smiod   {"@BP[--OFFS]", 0x2E},
860*3d8817e4Smiod   {"@++DP[0]", 0x1F},
861*3d8817e4Smiod   {"@++DP[1]", 0x5F}, {"@--DP[0]", 0x2F}, {"@--DP[1]", 0x6F}
862*3d8817e4Smiod };
863*3d8817e4Smiod 
864*3d8817e4Smiod /* Register bit argument.  */
865*3d8817e4Smiod struct reg_bit
866*3d8817e4Smiod {
867*3d8817e4Smiod   reg_entry *reg;
868*3d8817e4Smiod   int bit;
869*3d8817e4Smiod };
870*3d8817e4Smiod typedef struct reg_bit reg_bit;
871*3d8817e4Smiod 
872*3d8817e4Smiod /* There are certain names given to particular bits of some registers.
873*3d8817e4Smiod    These will be taken care of here.  */
874*3d8817e4Smiod struct bit_name
875*3d8817e4Smiod {
876*3d8817e4Smiod   char *name;
877*3d8817e4Smiod   char *reg_bit;
878*3d8817e4Smiod };
879*3d8817e4Smiod typedef struct bit_name bit_name;
880*3d8817e4Smiod 
881*3d8817e4Smiod bit_name bit_table[] =
882*3d8817e4Smiod {
883*3d8817e4Smiod   {
884*3d8817e4Smiod    "RI", "SCON.0"},
885*3d8817e4Smiod   /* FOr APC */
886*3d8817e4Smiod   {
887*3d8817e4Smiod    "MOD0", "APC.0"},
888*3d8817e4Smiod   {
889*3d8817e4Smiod    "MOD1", "APC.1"},
890*3d8817e4Smiod   {
891*3d8817e4Smiod    "MOD2", "APC.2"},
892*3d8817e4Smiod   {
893*3d8817e4Smiod    "IDS", "APC.6"},
894*3d8817e4Smiod   {
895*3d8817e4Smiod    "CLR", "APC.6"},
896*3d8817e4Smiod   /* For PSF */
897*3d8817e4Smiod   {
898*3d8817e4Smiod    "E", "PSF.0"},
899*3d8817e4Smiod   {
900*3d8817e4Smiod    "C", "PSF.1"},
901*3d8817e4Smiod   {
902*3d8817e4Smiod    "OV", "PSF.2"},
903*3d8817e4Smiod   {
904*3d8817e4Smiod    "S", "PSF.6"},
905*3d8817e4Smiod   {
906*3d8817e4Smiod    "Z", "PSF.7"},
907*3d8817e4Smiod   /* For IC */
908*3d8817e4Smiod 
909*3d8817e4Smiod   {
910*3d8817e4Smiod    "IGE", "IC.0"},
911*3d8817e4Smiod   {
912*3d8817e4Smiod    "INS", "IC.1"},
913*3d8817e4Smiod   {
914*3d8817e4Smiod    "CGDS", "IC.5"},
915*3d8817e4Smiod   /* For IMR */
916*3d8817e4Smiod 
917*3d8817e4Smiod   {
918*3d8817e4Smiod    "IM0", "IMR.0"},
919*3d8817e4Smiod   {
920*3d8817e4Smiod    "IM1", "IMR.1"},
921*3d8817e4Smiod   {
922*3d8817e4Smiod    "IM2", "IMR.2"},
923*3d8817e4Smiod   {
924*3d8817e4Smiod    "IM3", "IMR.3"},
925*3d8817e4Smiod   {
926*3d8817e4Smiod    "IM4", "IMR.4"},
927*3d8817e4Smiod   {
928*3d8817e4Smiod    "IM5", "IMR.5"},
929*3d8817e4Smiod   {
930*3d8817e4Smiod    "IMS", "IMR.7"},
931*3d8817e4Smiod   /* For SC */
932*3d8817e4Smiod   {
933*3d8817e4Smiod    "PWL", "SC.1"},
934*3d8817e4Smiod   {
935*3d8817e4Smiod    "ROD", "SC.2"},
936*3d8817e4Smiod   {
937*3d8817e4Smiod    "UPA", "SC.3"},
938*3d8817e4Smiod   {
939*3d8817e4Smiod    "CDA0", "SC.4"},
940*3d8817e4Smiod   {
941*3d8817e4Smiod    "CDA1", "SC.5"},
942*3d8817e4Smiod   /* For IIR */
943*3d8817e4Smiod 
944*3d8817e4Smiod   {
945*3d8817e4Smiod    "II0", "IIR.0"},
946*3d8817e4Smiod   {
947*3d8817e4Smiod    "II1", "IIR.1"},
948*3d8817e4Smiod   {
949*3d8817e4Smiod    "II2", "IIR.2"},
950*3d8817e4Smiod   {
951*3d8817e4Smiod    "II3", "IIR.3"},
952*3d8817e4Smiod   {
953*3d8817e4Smiod    "II4", "IIR.4"},
954*3d8817e4Smiod   {
955*3d8817e4Smiod    "II5", "IIR.5"},
956*3d8817e4Smiod   {
957*3d8817e4Smiod    "IIS", "IIR.7"},
958*3d8817e4Smiod   /* For CKCN */
959*3d8817e4Smiod 
960*3d8817e4Smiod   {
961*3d8817e4Smiod    "CD0", "CKCN.0"},
962*3d8817e4Smiod   {
963*3d8817e4Smiod    "CD1", "CKCN.1"},
964*3d8817e4Smiod   {
965*3d8817e4Smiod    "PMME", "CKCN.2"},
966*3d8817e4Smiod   {
967*3d8817e4Smiod    "SWB", "CKCN.3"},
968*3d8817e4Smiod   {
969*3d8817e4Smiod    "STOP", "CKCN.4"},
970*3d8817e4Smiod   {
971*3d8817e4Smiod    "RGMD", "CKCN.5"},
972*3d8817e4Smiod   {
973*3d8817e4Smiod    "RGSL", "CKCN.6"},
974*3d8817e4Smiod   /* For WDCN */
975*3d8817e4Smiod 
976*3d8817e4Smiod   {
977*3d8817e4Smiod    "RWT", "WDCN.0"},
978*3d8817e4Smiod   {
979*3d8817e4Smiod    "EWT", "WDCN.1"},
980*3d8817e4Smiod   {
981*3d8817e4Smiod    "WTRF", "WDCN.2"},
982*3d8817e4Smiod   {
983*3d8817e4Smiod    "WDIF", "WDCN.3"},
984*3d8817e4Smiod   {
985*3d8817e4Smiod    "WD0", "WDCN.4"},
986*3d8817e4Smiod   {
987*3d8817e4Smiod    "WD1", "WDCN.5"},
988*3d8817e4Smiod   {
989*3d8817e4Smiod    "EWDI", "WDCN.6"},
990*3d8817e4Smiod   {
991*3d8817e4Smiod    "POR", "WDCN.7"},
992*3d8817e4Smiod   /* For DPC */
993*3d8817e4Smiod 
994*3d8817e4Smiod   {
995*3d8817e4Smiod    "DPS0", "DPC.0"},
996*3d8817e4Smiod   {
997*3d8817e4Smiod    "DPS1", "DPC.1"},
998*3d8817e4Smiod   {
999*3d8817e4Smiod    "WBS0", "DPC.2"},
1000*3d8817e4Smiod   {
1001*3d8817e4Smiod    "WBS1", "DPC.3"},
1002*3d8817e4Smiod   {
1003*3d8817e4Smiod    "WBS2", "DPC.4"},
1004*3d8817e4Smiod 
1005*3d8817e4Smiod    /* For SCON */
1006*3d8817e4Smiod   {
1007*3d8817e4Smiod    "TI", "SCON.1"},
1008*3d8817e4Smiod   {
1009*3d8817e4Smiod    "RB8", "SCON.2"},
1010*3d8817e4Smiod   {
1011*3d8817e4Smiod    "TB8", "SCON.3"},
1012*3d8817e4Smiod   {
1013*3d8817e4Smiod    "REN", "SCON.4"},
1014*3d8817e4Smiod   {
1015*3d8817e4Smiod    "SM2", "SCON.5"},
1016*3d8817e4Smiod   {
1017*3d8817e4Smiod    "SM1", "SCON.6"},
1018*3d8817e4Smiod   {
1019*3d8817e4Smiod    "SM0", "SCON.7"},
1020*3d8817e4Smiod   {
1021*3d8817e4Smiod    "FE", "SCON.7"}
1022*3d8817e4Smiod };
1023*3d8817e4Smiod 
1024*3d8817e4Smiod const char *LSInstr[] =
1025*3d8817e4Smiod {
1026*3d8817e4Smiod   "LJUMP", "SJUMP", "LDJNZ", "SDJNZ", "LCALL", "SCALL", "JUMP",
1027*3d8817e4Smiod   "DJNZ", "CALL", NULL
1028*3d8817e4Smiod };
1029*3d8817e4Smiod 
1030*3d8817e4Smiod typedef enum
1031*3d8817e4Smiod {
1032*3d8817e4Smiod   DST,
1033*3d8817e4Smiod   SRC,
1034*3d8817e4Smiod   BOTH,
1035*3d8817e4Smiod }
1036*3d8817e4Smiod type1;
1037*3d8817e4Smiod 
1038*3d8817e4Smiod struct mem_access_syntax
1039*3d8817e4Smiod {
1040*3d8817e4Smiod   char name[12];		/* Name of the Memory access operand.  */
1041*3d8817e4Smiod   type1 type;
1042*3d8817e4Smiod   char *invalid_op[5];
1043*3d8817e4Smiod };
1044*3d8817e4Smiod typedef struct mem_access_syntax mem_access_syntax;
1045*3d8817e4Smiod 
1046*3d8817e4Smiod /* The Memory Access table for accessing the data memory through particular
1047*3d8817e4Smiod    registers.  */
1048*3d8817e4Smiod const mem_access_syntax mem_access_syntax_table[] =
1049*3d8817e4Smiod {
1050*3d8817e4Smiod   {
1051*3d8817e4Smiod    "@SP--", SRC,
1052*3d8817e4Smiod    {
1053*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1054*3d8817e4Smiod   /* Data Pointer 0 */
1055*3d8817e4Smiod   {
1056*3d8817e4Smiod    "@DP[0]", BOTH,
1057*3d8817e4Smiod    {
1058*3d8817e4Smiod     "@DP[0]--", "@DP[0]++", NULL, NULL, NULL}},
1059*3d8817e4Smiod   /* Data Ponter 1 */
1060*3d8817e4Smiod   {
1061*3d8817e4Smiod    "@DP[1]", BOTH,
1062*3d8817e4Smiod    {
1063*3d8817e4Smiod     "@DP[1]--", "@DP[1]++", NULL, NULL, NULL}},
1064*3d8817e4Smiod   /* Data Pointer 0 post increment */
1065*3d8817e4Smiod   {
1066*3d8817e4Smiod    "@DP[0]++", SRC,
1067*3d8817e4Smiod    {
1068*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1069*3d8817e4Smiod   /* Data Pointer 1 post increment */
1070*3d8817e4Smiod   {
1071*3d8817e4Smiod    "@DP[1]++", SRC,
1072*3d8817e4Smiod    {
1073*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1074*3d8817e4Smiod   /* Data Pointer 0 post decrement */
1075*3d8817e4Smiod   {
1076*3d8817e4Smiod    "@DP[0]--", SRC,
1077*3d8817e4Smiod    {
1078*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1079*3d8817e4Smiod   /* Data Pointer 1 post decrement */
1080*3d8817e4Smiod   {
1081*3d8817e4Smiod    "@DP[1]--", SRC,
1082*3d8817e4Smiod    {
1083*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1084*3d8817e4Smiod   /* ADDED According to New Specification */
1085*3d8817e4Smiod 
1086*3d8817e4Smiod   {
1087*3d8817e4Smiod    "@BP[OFFS]", BOTH,
1088*3d8817e4Smiod    {
1089*3d8817e4Smiod     "@BP[OFFS++]", "@BP[OFFS--]", NULL, NULL, NULL}},
1090*3d8817e4Smiod   {
1091*3d8817e4Smiod    "@BP[OFFS++]", SRC,
1092*3d8817e4Smiod    {
1093*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1094*3d8817e4Smiod   {
1095*3d8817e4Smiod    "@BP[OFFS--]", SRC,
1096*3d8817e4Smiod    {
1097*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1098*3d8817e4Smiod   {
1099*3d8817e4Smiod    "NUL", DST,
1100*3d8817e4Smiod    {
1101*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1102*3d8817e4Smiod   {
1103*3d8817e4Smiod    "@++SP", DST,
1104*3d8817e4Smiod    {
1105*3d8817e4Smiod     NULL, NULL, NULL, NULL, NULL}},
1106*3d8817e4Smiod   {
1107*3d8817e4Smiod    "@BP[++OFFS]", DST,
1108*3d8817e4Smiod    {
1109*3d8817e4Smiod     "@BP[OFFS--]", "@BP[OFFS++]", NULL, NULL, NULL}},
1110*3d8817e4Smiod   {
1111*3d8817e4Smiod    "@BP[--OFFS]", DST,
1112*3d8817e4Smiod    {
1113*3d8817e4Smiod     "@BP[OFFS--]", "@BP[OFFS++]", NULL, NULL, NULL}},
1114*3d8817e4Smiod   {
1115*3d8817e4Smiod    "@++DP[0]", DST,
1116*3d8817e4Smiod    {
1117*3d8817e4Smiod     "@DP[0]--", "@DP[0]++", NULL, NULL, NULL}},
1118*3d8817e4Smiod   {
1119*3d8817e4Smiod    "@++DP[1]", DST,
1120*3d8817e4Smiod    {
1121*3d8817e4Smiod     "@DP[1]--", "@DP[1]++", NULL, NULL, NULL}},
1122*3d8817e4Smiod   {
1123*3d8817e4Smiod    "@--DP[0]", DST,
1124*3d8817e4Smiod    {
1125*3d8817e4Smiod     "@DP[0]++", "@DP[0]--", NULL, NULL, NULL}},
1126*3d8817e4Smiod   {
1127*3d8817e4Smiod    "@--DP[1]", DST,
1128*3d8817e4Smiod    {
1129*3d8817e4Smiod     "@DP[1]++", "@DP[1]--", NULL, NULL, NULL}}
1130*3d8817e4Smiod };
1131*3d8817e4Smiod 
1132*3d8817e4Smiod #endif
1133