summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormazzoo <mazzoo@8d8ab74c-27aa-4a3d-9bde-523a2bc1f624>2009-02-14 21:01:30 +0000
committermazzoo <mazzoo@8d8ab74c-27aa-4a3d-9bde-523a2bc1f624>2009-02-14 21:01:30 +0000
commitbf83516eb002b35042c08f48e8c2c83b133b8064 (patch)
treed533ee0d97078831b378c26da33b9694e0c050c6
parent8311d7bb7b0651dc8ece41b49198605db435a5cc (diff)
dump_dip: add a Sitel SC144xx DIP Disassembler
git-svn-id: https://dedected.org/svn/trunk@75 8d8ab74c-27aa-4a3d-9bde-523a2bc1f624
-rw-r--r--com-on-air_cs-linux/dip_opcodes.txt136
-rw-r--r--com-on-air_cs-linux/tools/Makefile2
-rw-r--r--com-on-air_cs-linux/tools/dump_dip.c321
-rw-r--r--com-on-air_cs-linux/tools/dump_dip.h225
4 files changed, 683 insertions, 1 deletions
diff --git a/com-on-air_cs-linux/dip_opcodes.txt b/com-on-air_cs-linux/dip_opcodes.txt
new file mode 100644
index 0000000..70b49f0
--- /dev/null
+++ b/com-on-air_cs-linux/dip_opcodes.txt
@@ -0,0 +1,136 @@
+//----
+// DIP codes, partially explained
+//----
+
+BR label : branch to label
+JMP label : jump to subroutine label
+JMP1 label : jump to subroutine label if true (whatever)
+RTN : return from subroutine
+WNT x : wait x slots
+WT x : wait x dect-clocks
+U_INT0 : raise interrupt 0
+U_INT1 : raise interrupt 1
+U_INT2 : raise interrupt 2
+U_INT3 : raise interrupt 3
+U_PSC
+U_VINT
+P_EN : enable portbits
+P_LDH x : set selected portbits to high
+P_LDL x : set selected portbits to low
+P_LD x : load portbit ???
+P_SC
+M_WR : start transfer over microwire-output
+M_RST : stop transfer over microwire-output
+M_INI0
+M_INI1
+MEN1N : set microwire enable 1 low
+MEN1 : set microwire enable 1 high
+MEN2N : set microwire enable 2 low
+MEN2 : set microwire enable 2 high
+MEN3N : set microwire enable 3 low
+MEN3 : set microwire enable 3 high
+RFEN : enable clk output
+RFDIS : disable clk output
+D_ON : enable xor with DSC
+D_OFF : disable xor with DSC
+D_LDK : Load DSC Key
+D_PREP : DSC Prepare
+D_WRS : writes internal DSC state
+D_LDS : load DSC state
+D_RST : DSC Reset
+BK_C : set upper address nibble
+LD_PTR
+BK_A
+A_RST
+A_LDR
+A_LDW
+A_MUTE : ADPCM mute
+A_MTOFF : ADPCM mute off
+BK_A1
+A_RST1
+A_LDR1
+A_LDW1
+A_MUTE1 : ADPCM1 mute
+A_MTOFF1 : ADPCM1 mute off
+B_RST : reset rx stuff
+B_XOFF : disable B field CRC
+B_XON : enable B field CRC
+SLOTZERO : wait until in slot zero (partly understood)
+
+
+//----
+// missing / unknown mnemonics
+//----
+
+WNTM1
+WNTP1
+
+B_ST2
+B_XT
+B_BTFU
+UNLCK
+B_SR
+B_XR
+EN_SL_ADJ
+B_BRFU
+B_RINV
+B_RON
+
+
+B_ST
+B_AT
+B_RC
+B_BT
+B_BTFP
+B_AT2
+B_WRS
+B_AR
+B_BR
+B_BRFP
+B_AR2
+
+WSC
+
+RCK_INT
+RCK_EXT
+B_WB_OFF
+B_WB_ON
+CLK1
+CLK3
+U_CK8
+U_CK4
+U_CK2
+U_CK1
+
+A_RCV0
+A_RCV36
+A_RCV30
+A_RCV24
+A_RCV18
+A_RCV12
+A_RCV6
+A_RCV33
+A_RCV27
+A_RCV21
+A_RCV15
+A_RCV9
+A_RCV3
+
+M_RD
+
+M_WRS
+
+A_STOFF
+A_ALAW
+A_DT
+A_NORM
+A_LIN
+A_STON
+A_DT1
+
+A_STRN
+C_ON
+C_OFF
+
+C_LD
+
diff --git a/com-on-air_cs-linux/tools/Makefile b/com-on-air_cs-linux/tools/Makefile
index deab733..7695a90 100644
--- a/com-on-air_cs-linux/tools/Makefile
+++ b/com-on-air_cs-linux/tools/Makefile
@@ -1,5 +1,5 @@
CFLAGS=-Wall -O2 -I..
-PROGS=coa_syncsniff pcap2cchan dump_eeprom
+PROGS=coa_syncsniff pcap2cchan dump_eeprom dump_dip
PCAP_PROGS=pcapstein dect_cli
all:$(PROGS) $(PCAP_PROGS)
diff --git a/com-on-air_cs-linux/tools/dump_dip.c b/com-on-air_cs-linux/tools/dump_dip.c
new file mode 100644
index 0000000..189b791
--- /dev/null
+++ b/com-on-air_cs-linux/tools/dump_dip.c
@@ -0,0 +1,321 @@
+/*
+ * dump_dip - simple disassembler for sc144xx DIP codes
+ *
+ * usage: dump_dip [options] <files>
+ * options:
+ * -b byteswap
+ *
+ * example:
+ * dump_dip ../WinCD/install/M* > win_cd_dip.asm
+ *
+ * authors:
+ * (c) 2009 Matthias Wenzel - dect /at/ mazzoo /dot/ de
+ *
+ * license:
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <stdio.h>
+#include <stdint.h>
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+
+#include "dump_dip.h"
+
+
+uint32_t current_CPUs;
+int files_done = 0;
+
+int opt_byteswap = 0;
+
+#define OP_CODE_SIZE 2 /* 16 bit DIP opcodes */
+#define THRESHOLD 50 /* min number of sequential opcodes before dumping */
+#define MAX_LABELS 4096
+
+
+struct op_code * get_op_code(uint8_t c)
+{
+ struct op_code * ret = NULL;
+ struct op_code * p = dip_op_code;
+
+ while (p->mnemonic)
+ {
+ if (p->code == c)
+ return p;
+ p++;
+ }
+
+ return ret;
+}
+
+void dump_fw(uint8_t * fw, int fwsz)
+{
+ int i, j;
+ struct op_code * op;
+
+ int nlabel=0; /* total number of labels in a FW */
+ uint8_t label[MAX_LABELS];
+
+ /* first run: collect labels */
+ for (i=0; i<fwsz; i+=2)
+ {
+ op = get_op_code(fw[i]);
+ if (!op)
+ {
+ printf("; !!! internal ERROR :(\n");
+ exit(1);
+ }
+ if (op->param_type == PARAM_LABEL)
+ label[nlabel++] = fw[i+1];
+ if (nlabel == MAX_LABELS)
+ {
+ printf("; !!! MAX_LABELS reached.\n");
+ printf("; !!! aborting current firmware\n");
+ return;
+ }
+ }
+
+ /* second run: emit .asm code with labels */
+ for (i=0; i<fwsz; i+=2)
+ {
+ op = get_op_code(fw[i]);
+ if (!op)
+ {
+ printf("; !!! internal ERROR :(\n");
+ exit(1);
+ }
+
+ /* see if we need to label the address */
+ for (j=0; j<nlabel; j++){
+ if (i/2 == label[j])
+ {
+ printf("label_%2.2x:\n", label[j]);
+ goto label_done;
+ }
+ }
+label_done:
+
+ printf("\t%s", op->mnemonic);
+ switch (op->param_type)
+ {
+ case PARAM_NONE:
+ break;
+ case PARAM_LABEL:
+ printf("\tlabel_%2.2x", fw[i+1]);
+ break;
+ case PARAM_HEX:
+ printf("\t0x%2.2x", fw[i+1]);
+ break;
+ case PARAM_DEC:
+ printf("\t %3.1d", fw[i+1]);
+ break;
+ default:
+ printf("; !!! internal ERROR :(\n");
+ exit(1);
+ }
+ printf("\n");
+ current_CPUs &= op->cpu;
+ }
+}
+
+void handle_mmap(uint8_t * map, int size, char * fname, int fcount)
+{
+ uint8_t * p = map;
+ int op_count = 0;
+ int rest = size;
+
+ struct op_code * op;
+ uint8_t * pstart;
+ int FW_count = 0;
+
+ while (rest>0)
+ {
+ pstart = p;
+ while( (op = get_op_code(*p)) )
+ {
+ p += OP_CODE_SIZE;
+ op_count++;
+ }
+
+ if (op_count > THRESHOLD)
+ {
+ current_CPUs =
+ M_14400 |
+ M_14401 |
+ M_14402 |
+ M_14404 |
+ M_14405 |
+ M_14420 |
+ M_14421 |
+ M_14422 |
+ M_14424;
+ printf("; ----------------------------------------\n");
+ printf("; firmware_%d_%d offset %d size %d bytes\n; file %s\n",
+ fcount,
+ FW_count,
+ pstart - map,
+ op_count * OP_CODE_SIZE,
+ fname);
+ printf("; ----------------------------------------\n");
+ printf("\n");
+
+ dump_fw(pstart, op_count * OP_CODE_SIZE);
+
+ printf("\n");
+ printf("; the above firmware is supported by the following CPUs:\n");
+ int i=0;
+ while (current_CPUs)
+ {
+ printf("; %s\n", cpu_name[i++]);
+ current_CPUs>>=1;
+ }
+ printf("\n");
+ printf("\n");
+
+ FW_count++;
+ }
+
+ pstart += op_count * OP_CODE_SIZE;
+
+ rest -= op_count * OP_CODE_SIZE;
+ rest --;
+ p++;
+
+ op_count = 0;
+ }
+
+}
+
+void handle_file(char * fn)
+{
+ int ret;
+ ret = open(fn, O_RDONLY);
+ if (ret < 0)
+ {
+ printf("; !!! couldn't open(\"%s\"): %s\n",
+ fn,
+ strerror(errno));
+ exit(1);
+ }
+
+ int f = ret;
+
+ ret = lseek(f, 0, SEEK_END);
+ if (ret < 0)
+ {
+ printf("; !!! couldn't lseek(SEEK_END): %s\n",
+ strerror(errno));
+ exit(1);
+ }
+
+ int fsz = ret;
+
+ uint8_t * pf = NULL;
+ pf = mmap(NULL, fsz, PROT_READ, MAP_PRIVATE, f, 0);
+ if (pf == (void *) -1)
+ {
+#if 0
+ /* most commonly directories */
+ printf("!!! couldn't mmap(%s): %s\n",
+ fn,
+ strerror(errno));
+#endif
+ }else{
+ uint8_t * map;
+ if (opt_byteswap){
+ map = malloc(fsz);
+ if (!map)
+ {
+ printf("; !!! ERROR: couln't malloc()\n");
+ exit(1);
+ }
+ int i;
+ for (i=0; i<fsz; i+=2)
+ {
+ map[i+1] = pf[i+0];
+ map[i+0] = pf[i+1];
+ }
+ }else
+ map = pf;
+
+ handle_mmap(map, fsz, fn, files_done);
+
+ if (opt_byteswap)
+ free(map);
+
+ files_done++;
+ ret = munmap(pf, fsz);
+ if (ret < 0)
+ {
+ printf("; !!! couldn't munmap(\"%s\"): %s\n",
+ fn,
+ strerror(errno));
+ exit(1);
+ }
+ }
+
+ ret = close(f);
+ if (ret < 0)
+ {
+ printf("; !!! couldn't close(\"%s\"): %s\n",
+ fn,
+ strerror(errno));
+ exit(1);
+ }
+}
+
+void usage(void)
+{
+ printf("dump_dip - simple disassembler for sc144xx DIP codes\n");
+ printf("\n");
+ printf("usage: dump_dip [options] <files>\n");
+ printf("options:\n");
+ printf(" -b byteswap\n");
+ printf("\n");
+ printf("example:\n");
+ printf(" dump_dip ../WinCD/install/M* > win_cd_dip.asm\n");
+ printf("\n");
+}
+
+int main(int argc, char ** argv){
+ int n=1;
+
+ if (argc == 1)
+ {
+ usage();
+ exit(1);
+ }
+
+ while (argv[n][0] == '-')
+ {
+ switch (argv[n][1]){
+ case 'b':
+ opt_byteswap = 1;
+ break;
+ default:
+ printf("; !!! ERROR: unknown option %c\n", argv[n][1]);
+ usage();
+ exit(1);
+ }
+ n++;
+ if (!argv[n])
+ {
+ usage();
+ exit(1);
+ }
+ }
+
+ while (argv[n])
+ handle_file(argv[n++]);
+
+ printf("; +++ processed %d input files\n", files_done);
+ return 0;
+}
diff --git a/com-on-air_cs-linux/tools/dump_dip.h b/com-on-air_cs-linux/tools/dump_dip.h
new file mode 100644
index 0000000..65bfec1
--- /dev/null
+++ b/com-on-air_cs-linux/tools/dump_dip.h
@@ -0,0 +1,225 @@
+/*
+ * dump_dip - simple disassembler for sc144xx DIP codes
+ *
+ * usage: dump_dip [options] <files>
+ * options:
+ * -b byteswap
+ *
+ * example:
+ * dump_dip ../WinCD/install/M* > win_cd_dip.asm
+ *
+ * authors:
+ * (c) 2009 Matthias Wenzel - dect /at/ mazzoo /dot/ de
+ * (c) 1999 Alfred Arnold
+ *
+ * license:
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+#ifndef DUMP_DIP_H
+#define DUMP_DIP_H
+
+#define M_14400 (1 << 0)
+#define M_14401 (1 << 1)
+#define M_14402 (1 << 2)
+#define M_14404 (1 << 3)
+#define M_14405 (1 << 4)
+#define M_14420 (1 << 5)
+#define M_14421 (1 << 6)
+#define M_14422 (1 << 7)
+#define M_14424 (1 << 8)
+
+#define PARAM_NONE 0
+#define PARAM_HEX 1
+#define PARAM_DEC 2
+#define PARAM_LABEL 3
+
+char * cpu_name[] =
+{
+ "sc14400",
+ "sc14401",
+ "sc14402",
+ "sc14404",
+ "sc14405",
+ "sc14420",
+ "sc14421",
+ "sc14422",
+ "sc14424",
+};
+
+struct op_code {
+ char * mnemonic;
+ uint8_t code;
+ uint32_t cpu;
+ uint32_t param_type;
+};
+
+struct op_code dip_op_code[] =
+{
+ {"BR" , 0x01, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_LABEL},
+ {"BRK" , 0x6e, M_14402 | M_14404 | M_14405 | M_14422 | M_14424, PARAM_NONE },
+ {"JMP" , 0x02, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_LABEL},
+ {"JMP1" , 0x03, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_LABEL},
+ {"RTN" , 0x04, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"WNT" , 0x08, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_DEC },
+ {"WT" , 0x09, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_DEC },
+ {"WSC" , 0x48, M_14404 | M_14405 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"RFEN" , 0x0b, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"RFDIS" , 0x0a, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"BK_A" , 0x0e, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"BK_A1" , 0x05, M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"BK_C" , 0x0f, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"SLOTZERO" , 0x0d, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"EN_SL_ADJ", 0x2c, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"WNTP1" , 0x07, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"WNTM1" , 0x06, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"LD_PTR" , 0x0c, M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"UNLCK" , 0x28, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RX" , 0x49, M_14404 | M_14405 | M_14422 | M_14424, PARAM_HEX },
+ {"A_TX" , 0x4a, M_14404 | M_14405 | M_14422 | M_14424, PARAM_HEX },
+ {"A_MUTE" , 0xc1, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_MTOFF" , 0xc9, M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_MUTE1" , 0xca, M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_MTOFF1" , 0xcb, M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_STOFF" , 0xc2, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_STON" , 0xcc, M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV0" , 0x80, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV36" , 0x82, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV30" , 0x83, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV24" , 0x84, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV18" , 0x85, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV12" , 0x86, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV6" , 0x87, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV33" , 0x8a, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV27" , 0x8b, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV21" , 0x8c, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV15" , 0x8d, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV9" , 0x8e, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RCV3" , 0x8f, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_NORM" , 0xc5, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_RST" , 0xc0, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_LDR" , 0xc6, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"A_LDW" , 0xc7, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"A_RST1" , 0xeb, M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"A_LDR1" , 0xce, M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"A_LDW1" , 0xcf, M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"A_ST18" , 0xe1, M_14402 , PARAM_NONE },
+ {"B_ST" , 0x31, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_ST2" , 0x21, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_PPT" , 0x22, M_14404 | M_14405 | M_14424, PARAM_NONE },
+ {"B_ZT" , 0x22, M_14400 , PARAM_NONE },
+ {"B_ZR" , 0x2a, M_14400 , PARAM_NONE },
+ {"B_AT" , 0x32, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_AT2" , 0x37, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BT" , 0x34, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BTFM" , 0x23, M_14404 | M_14405 | M_14424, PARAM_HEX },
+ {"B_BTFU" , 0x25, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BTFP" , 0x35, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BTDU" , 0x71, M_14404 | M_14405 | M_14424, PARAM_HEX },
+ {"B_BTDP" , 0x72, M_14404 | M_14405 | M_14424, PARAM_HEX },
+ {"B_XON" , 0x27, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_XOFF" , 0x26, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_SR" , 0x29, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_AR" , 0x3a, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_AR2" , 0x3f, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_RON" , 0x2f, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_RINV" , 0x2e, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_BR" , 0x3c, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BRFU" , 0x2d, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BRFP" , 0x3d, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BRFD" , 0x2a, M_14404 | M_14405 | M_14424, PARAM_HEX },
+ {"B_BRDU" , 0x79, M_14404 | M_14405 | M_14424, PARAM_HEX },
+ {"B_BRDP" , 0x7a, M_14404 | M_14405 | M_14424, PARAM_HEX },
+ {"B_XR" , 0x2b, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_XT" , 0x24, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_WB_ON" , 0x65, M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_WB_OFF" , 0x64, M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_WRS" , 0x39, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_RC" , 0x33, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_RST" , 0x20, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"B_DIV1" , 0x4f, M_14405 , PARAM_NONE },
+ {"B_DIV2" , 0x4e, M_14405 , PARAM_NONE },
+ {"B_DIV4" , 0x4d, M_14405 , PARAM_NONE },
+ {"C_LD" , 0xfa, M_14401 | M_14402 | M_14420 | M_14421 | M_14422 , PARAM_HEX },
+ {"C_ON" , 0xee, M_14420 | M_14421 | M_14422 , PARAM_NONE },
+ {"C_OFF" , 0xef, M_14420 | M_14421 | M_14422 , PARAM_NONE },
+ {"C_LD2" , 0xba, M_14424, PARAM_HEX },
+ {"C_ON2" , 0xae, M_14424, PARAM_NONE },
+ {"C_OFF2" , 0xaf, M_14424, PARAM_NONE },
+ {"D_LDK" , 0x50, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"D_PREP" , 0x44, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"D_WRS" , 0x5f, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"D_LDS" , 0x57, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"D_RST" , 0x40, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"M_WR" , 0xb9, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"M_RST" , 0xa9, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"M_INI0" , 0xa0, M_14404 | M_14405 | M_14424, PARAM_NONE },
+ {"M_INI1" , 0xa1, M_14404 | M_14405 | M_14424, PARAM_NONE },
+ {"MEN1N" , 0xa4, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"MEN1" , 0xa5, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"P_EN" , 0xe9, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"P_LDH" , 0xed, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"P_LDL" , 0xec, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"P_LD" , 0xe8, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"P_SC" , 0xea, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"U_INT0" , 0x61, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"U_INT1" , 0x6b, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"U_INT2" , 0x6d, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"U_INT3" , 0x6f, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"U_PSC" , 0x60, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {"U_VINT" , 0x63, M_14404 | M_14405 | M_14422 | M_14424, PARAM_HEX },
+
+ /* obsolete stuff - argument range may be incorrect */
+
+ {"D_ON" , 0x42, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"D_OFF" , 0x43, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"RCK_INT" , 0x62, M_14420 | M_14421 , PARAM_NONE },
+ {"CLK1" , 0x66, M_14420 | M_14421 , PARAM_NONE },
+ {"CLK3" , 0x67, M_14420 | M_14421 , PARAM_NONE },
+ {"U_CK8" , 0x68, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"U_CK4" , 0x69, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"U_CK2" , 0x6a, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"U_CK1" , 0x6c, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"MEN3N" , 0xa2, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"MEN3" , 0xa3, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"MEN2N" , 0xa6, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"MEN2" , 0xa7, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"M_RD" , 0xa8, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_HEX },
+ {"M_WRS" , 0xb8, M_14400 | M_14420 | M_14421 , PARAM_HEX },
+ {"A_ALAW" , 0xc3, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"A_DT" , 0xc4, M_14400 | M_14401 | M_14420 | M_14421 , PARAM_NONE },
+ {"A_LIN" , 0xc8, M_14420 | M_14421 , PARAM_NONE },
+ {"A_DT1" , 0xcd, M_14420 | M_14421 , PARAM_NONE },
+ {"A_STRN" , 0xe0, M_14420 | M_14421 , PARAM_NONE },
+ {"RCK_EXT" , 0x63, M_14420 | M_14421 , PARAM_HEX },
+ {"P_SPD0" , 0xe8, M_14400 , PARAM_HEX },
+ {"P_SPD1" , 0xe9, M_14400 , PARAM_HEX },
+ {"P_SPD2" , 0xea, M_14400 , PARAM_HEX },
+ {"P_SPD3" , 0xeb, M_14400 , PARAM_HEX },
+ {"P_SPD4" , 0xec, M_14400 , PARAM_HEX },
+ {"P_SPD5" , 0xed, M_14400 , PARAM_HEX },
+ {"P_SPD6" , 0xee, M_14400 , PARAM_HEX },
+ {"P_SPD7" , 0xef, M_14400 , PARAM_HEX },
+ {"P_RPD0" , 0xe0, M_14400 , PARAM_HEX },
+ {"P_RPD1" , 0xe1, M_14400 , PARAM_HEX },
+ {"P_RPD2" , 0xe2, M_14400 , PARAM_HEX },
+ {"P_RPD3" , 0xe3, M_14400 , PARAM_HEX },
+ {"P_RPD4" , 0xe4, M_14400 , PARAM_HEX },
+ {"P_RPD5" , 0xe5, M_14400 , PARAM_HEX },
+ {"P_RPD6" , 0xe6, M_14400 , PARAM_HEX },
+ {"P_RPD7" , 0xe7, M_14400 , PARAM_HEX },
+
+ /* aliases */
+
+ {"B_TX" , 0x31, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BT2" , 0x25, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BR2" , 0x2d, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BTP" , 0x35, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_BRP" , 0x3d, M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_HEX },
+ {"B_ON" , 0x27, M_14400 | M_14401 | M_14402 | M_14404 | M_14405 | M_14420 | M_14421 | M_14422 | M_14424, PARAM_NONE },
+ {NULL, 0, 0, 0}
+};
+
+#endif /* DUMP_DIP_H */