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