Update/correct copyright notices.
[deliverable/binutils-gdb.git] / gdb / remote-est.c
CommitLineData
c906108c 1/* Remote debugging interface for EST-300 ICE, for GDB
b6ba6518
KB
2 Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001
3 Free Software Foundation, Inc.
c906108c
SS
4 Contributed by Cygnus Support.
5
6 Written by Steve Chamberlain for Cygnus Support.
7 Re-written by Stu Grossman of Cygnus Support
8
c5aa993b 9 This file is part of GDB.
c906108c 10
c5aa993b
JM
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
c906108c 15
c5aa993b
JM
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
c906108c 20
c5aa993b
JM
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 59 Temple Place - Suite 330,
24 Boston, MA 02111-1307, USA. */
c906108c
SS
25
26#include "defs.h"
27#include "gdbcore.h"
28#include "target.h"
29#include "monitor.h"
30#include "serial.h"
4e052eda 31#include "regcache.h"
c906108c 32
a14ed312 33static void est_open (char *args, int from_tty);
c906108c
SS
34
35static void
fba45db2 36est_supply_register (char *regname, int regnamelen, char *val, int vallen)
c906108c
SS
37{
38 int regno;
39
40 if (regnamelen != 2)
41 return;
42
43 switch (regname[0])
44 {
45 case 'S':
46 if (regname[1] != 'R')
47 return;
48 regno = PS_REGNUM;
49 break;
50 case 'P':
51 if (regname[1] != 'C')
52 return;
53 regno = PC_REGNUM;
54 break;
55 case 'D':
56 if (regname[1] < '0' || regname[1] > '7')
57 return;
58 regno = regname[1] - '0' + D0_REGNUM;
59 break;
60 case 'A':
61 if (regname[1] < '0' || regname[1] > '7')
62 return;
63 regno = regname[1] - '0' + A0_REGNUM;
64 break;
65 default:
66 return;
67 }
68
69 monitor_supply_register (regno, val);
70}
71
72/*
73 * This array of registers needs to match the indexes used by GDB. The
74 * whole reason this exists is because the various ROM monitors use
75 * different names than GDB does, and don't support all the
76 * registers either. So, typing "info reg sp" becomes a "r30".
77 */
78
79static char *est_regnames[NUM_REGS] =
80{
81 "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
82 "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7",
83 "SR", "PC",
84};
85
86/*
87 * Define the monitor command strings. Since these are passed directly
88 * through to a printf style function, we need can include formatting
89 * strings. We also need a CR or LF on the end.
90 */
91
92static struct target_ops est_ops;
93
c5aa993b
JM
94static char *est_inits[] =
95{"he\r", /* Resets the prompt, and clears repeated cmds */
96 NULL};
c906108c 97
c5aa993b 98static struct monitor_ops est_cmds;
c906108c 99
c5aa993b
JM
100static void
101init_est_cmds (void)
c906108c 102{
c5aa993b
JM
103 est_cmds.flags = MO_CLR_BREAK_USES_ADDR | MO_FILL_USES_ADDR | MO_NEED_REGDUMP_AFTER_CONT |
104 MO_SREC_ACK | MO_SREC_ACK_PLUS;
105 est_cmds.init = est_inits; /* Init strings */
106 est_cmds.cont = "go\r"; /* continue command */
107 est_cmds.step = "sidr\r"; /* single step */
108 est_cmds.stop = "\003"; /* ^C interrupts the program */
109 est_cmds.set_break = "sb %x\r"; /* set a breakpoint */
110 est_cmds.clr_break = "rb %x\r"; /* clear a breakpoint */
111 est_cmds.clr_all_break = "rb\r"; /* clear all breakpoints */
112 est_cmds.fill = "bfb %x %x %x\r"; /* fill (start end val) */
113 est_cmds.setmem.cmdb = "smb %x %x\r"; /* setmem.cmdb (addr, value) */
114 est_cmds.setmem.cmdw = "smw %x %x\r"; /* setmem.cmdw (addr, value) */
115 est_cmds.setmem.cmdl = "sml %x %x\r"; /* setmem.cmdl (addr, value) */
116 est_cmds.setmem.cmdll = NULL; /* setmem.cmdll (addr, value) */
117 est_cmds.setmem.resp_delim = NULL; /* setreg.resp_delim */
118 est_cmds.setmem.term = NULL; /* setreg.term */
119 est_cmds.setmem.term_cmd = NULL; /* setreg.term_cmd */
120 est_cmds.getmem.cmdb = "dmb %x %x\r"; /* getmem.cmdb (addr, len) */
121 est_cmds.getmem.cmdw = "dmw %x %x\r"; /* getmem.cmdw (addr, len) */
122 est_cmds.getmem.cmdl = "dml %x %x\r"; /* getmem.cmdl (addr, len) */
123 est_cmds.getmem.cmdll = NULL; /* getmem.cmdll (addr, len) */
124 est_cmds.getmem.resp_delim = ": "; /* getmem.resp_delim */
125 est_cmds.getmem.term = NULL; /* getmem.term */
126 est_cmds.getmem.term_cmd = NULL; /* getmem.term_cmd */
127 est_cmds.setreg.cmd = "sr %s %x\r"; /* setreg.cmd (name, value) */
128 est_cmds.setreg.resp_delim = NULL; /* setreg.resp_delim */
129 est_cmds.setreg.term = NULL; /* setreg.term */
130 est_cmds.setreg.term_cmd = NULL; /* setreg.term_cmd */
131 est_cmds.getreg.cmd = "dr %s\r"; /* getreg.cmd (name) */
132 est_cmds.getreg.resp_delim = " = "; /* getreg.resp_delim */
133 est_cmds.getreg.term = NULL; /* getreg.term */
134 est_cmds.getreg.term_cmd = NULL; /* getreg.term_cmd */
135 est_cmds.dump_registers = "dr\r"; /* dump_registers */
136 est_cmds.register_pattern = "\\(\\w+\\) = \\([0-9a-fA-F]+\\)"; /* register_pattern */
137 est_cmds.supply_register = est_supply_register; /* supply_register */
138 est_cmds.load_routine = NULL; /* load_routine (defaults to SRECs) */
139 est_cmds.load = "dl\r"; /* download command */
140 est_cmds.loadresp = "+"; /* load response */
141 est_cmds.prompt = ">BKM>"; /* monitor command prompt */
142 est_cmds.line_term = "\r"; /* end-of-line terminator */
143 est_cmds.cmd_end = NULL; /* optional command terminator */
144 est_cmds.target = &est_ops; /* target operations */
145 est_cmds.stopbits = SERIAL_1_STOPBITS; /* number of stop bits */
146 est_cmds.regnames = est_regnames; /* registers names */
147 est_cmds.magic = MONITOR_OPS_MAGIC; /* magic */
148} /* init_est_cmds */
c906108c
SS
149
150static void
fba45db2 151est_open (char *args, int from_tty)
c906108c
SS
152{
153 monitor_open (args, &est_cmds, from_tty);
154}
155
156void
fba45db2 157_initialize_est (void)
c906108c 158{
c5aa993b 159 init_est_cmds ();
c906108c
SS
160 init_monitor_ops (&est_ops);
161
162 est_ops.to_shortname = "est";
163 est_ops.to_longname = "EST background debug monitor";
164 est_ops.to_doc = "Debug via the EST BDM.\n\
165Specify the serial device it is connected to (e.g. /dev/ttya).";
166 est_ops.to_open = est_open;
167
168 add_target (&est_ops);
169}
This page took 0.107754 seconds and 4 git commands to generate.