1 /* Remote target glue for the Hitachi SH-3 ROM monitor.
2 Copyright 1995, 1996 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
27 static serial_t parallel
;
28 static int parallel_in_use
;
30 static void sh3_open
PARAMS ((char *args
, int from_tty
));
33 sh3_supply_register (regname
, regnamelen
, val
, vallen
)
50 if (regname
[1] == 'R')
54 if (regname
[1] == 'C')
56 else if (regname
[1] == 'R')
61 else if (regnamelen
== 3)
67 if (regname
[1] == 'B' && regname
[2] == 'R')
68 if (regname
[0] == 'G')
75 if (regname
[1] == 'S' && regname
[2] == 'R')
77 else if (regname
[1] == 'P' && regname
[2] == 'C')
83 else if (regnamelen
== 4)
88 if (regname
[1] == 'A' && regname
[2] == 'C')
89 if (regname
[3] == 'H')
91 else if (regname
[3] == 'L')
95 if (regname
[1] == '0' && regname
[2] == '-' && regname
[3] == '7')
102 else if (regnamelen
== 5)
104 if (regname
[1] == '8' && regname
[2] == '-' && regname
[3] == '1'
107 regno
= R0_REGNUM
+ 8;
113 while (numregs
-- > 0)
114 val
= monitor_supply_register (regno
++, val
);
118 sh3_load (desc
, file
, hashmark
)
125 monitor_printf("pl;s\r");
126 load_srec (parallel
, file
, 80, SREC_ALL
, hashmark
);
127 monitor_expect_prompt (NULL
, 0);
131 monitor_printf ("il;s:x\r");
132 monitor_expect ("\005", NULL
, 0); /* Look for ENQ */
133 SERIAL_WRITE (desc
, "\006", 1); /* Send ACK */
134 monitor_expect ("LO x\r", NULL
, 0); /* Look for filename */
136 load_srec (desc
, file
, 80, SREC_ALL
, hashmark
);
138 monitor_expect ("\005", NULL
, 0); /* Look for ENQ */
139 SERIAL_WRITE (desc
, "\006", 1); /* Send ACK */
140 monitor_expect_prompt (NULL
, 0);
144 /* This array of registers need to match the indexes used by GDB.
145 This exists because the various ROM monitors use different strings
146 than does GDB, and don't necessarily support all the registers
147 either. So, typing "info reg sp" becomes a "r30". */
149 static char *sh3_regnames
[NUM_REGS
] = {
150 "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7",
151 "R8", "R9", "R10", "R11","R12", "R13", "R14", "R15",
152 "PC", "PR", "GBR", "VBR","MACH","MACL", "SR",
154 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
155 NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
, NULL
,
156 "R0_BANK0", "R1_BANK0", "R2_BANK0", "R3_BANK0",
157 "R4_BANK0", "R5_BANK0", "R6_BANK0", "R7_BANK0",
158 "R0_BANK1", "R1_BANK1", "R2_BANK1", "R3_BANK1",
159 "R4_BANK1", "R5_BANK1", "R6_BANK1", "R7_BANK1"
162 /* Define the monitor command strings. Since these are passed directly
163 through to a printf style function, we may include formatting
164 strings. We also need a CR or LF on the end. */
166 static struct target_ops sh3_ops
;
168 static char *sh3_inits
[] = {"\003", NULL
}; /* Exits sub-command mode & download cmds */
170 static struct monitor_ops sh3_cmds
=
172 MO_CLR_BREAK_USES_ADDR
173 | MO_GETMEM_READ_SINGLE
, /* flags */
174 sh3_inits
, /* monitor init string */
175 "g\r", /* continue command */
176 "s\r", /* single step */
177 "\003", /* Interrupt program */
178 "b %x\r", /* set a breakpoint */
179 "b -%x\r", /* clear a breakpoint */
180 "b -\r", /* clear all breakpoints */
181 "f %x @%x %x\r", /* fill (start len val) */
183 "m %x %x\r", /* setmem.cmdb (addr, value) */
184 "m %x %x;w\r", /* setmem.cmdw (addr, value) */
185 "m %x %x;l\r", /* setmem.cmdl (addr, value) */
186 NULL
, /* setmem.cmdll (addr, value) */
187 NULL
, /* setreg.resp_delim */
188 NULL
, /* setreg.term */
189 NULL
, /* setreg.term_cmd */
192 "m %x\r", /* getmem.cmdb (addr, len) */
193 "m %x;w\r", /* getmem.cmdw (addr, len) */
194 "m %x;l\r", /* getmem.cmdl (addr, len) */
195 NULL
, /* getmem.cmdll (addr, len) */
196 "^ [0-9A-F]+ ", /* getmem.resp_delim */
197 "? ", /* getmem.term */
198 ".\r", /* getmem.term_cmd */
201 ".%s %x\r", /* setreg.cmd (name, value) */
202 NULL
, /* setreg.resp_delim */
203 NULL
, /* setreg.term */
204 NULL
/* setreg.term_cmd */
207 ".%s\r", /* getreg.cmd (name) */
208 "=", /* getreg.resp_delim */
209 "? ", /* getreg.term */
210 ".\r" /* getreg.term_cmd */
212 "r\r", /* dump_registers */
213 /* register_pattern */
214 "\\(\\w+\\)=\\([0-9a-fA-F]+\\( +[0-9a-fA-F]+\\b\\)*\\)",
215 sh3_supply_register
, /* supply_register */
216 sh3_load
, /* load_routine */
217 NULL
, /* download command */
218 NULL
, /* Load response */
219 "\n:", /* monitor command prompt */
220 "\r", /* end-of-line terminator */
221 ".\r", /* optional command terminator */
222 &sh3_ops
, /* target operations */
223 SERIAL_1_STOPBITS
, /* number of stop bits */
224 sh3_regnames
, /* registers names */
225 MONITOR_OPS_MAGIC
/* magic */
229 sh3_open (args
, from_tty
)
233 char *serial_port_name
= args
;
234 char *parallel_port_name
= 0;
238 char *cursor
= serial_port_name
= strsave (args
);
240 while (*cursor
&& *cursor
!= ' ')
246 while (*cursor
== ' ')
250 parallel_port_name
= cursor
;
253 monitor_open (serial_port_name
, &sh3_cmds
, from_tty
);
255 if (parallel_port_name
)
257 parallel
= SERIAL_OPEN (parallel_port_name
);
260 perror_with_name ("Unable to open parallel port.");
265 /* If we connected successfully, we know the processor is an SH3. */
266 sh_set_processor_type ("sh3");
274 monitor_close (quitting
);
275 if (parallel_in_use
) {
276 SERIAL_CLOSE (parallel
);
284 init_monitor_ops (&sh3_ops
);
286 sh3_ops
.to_shortname
= "sh3";
287 sh3_ops
.to_longname
= "Hitachi SH-3 rom monitor";
291 /* On windows we can talk through the parallel port too. */
292 "Debug on a Hitachi eval board running the SH-3 rom monitor.\n"
293 "Specify the serial device it is connected to (e.g. com2).\n"
294 "If you want to use the parallel port to download to it, specify that\n"
295 "as the second argument. (e.g. lpt1)";
297 "Debug on a Hitachi eval board running the SH-3 rom monitor.\n\
298 Specify the serial device it is connected to (e.g. /dev/ttya).";
301 sh3_ops
.to_open
= sh3_open
;
302 sh3_ops
.to_close
= sh3_close
;
304 add_target (&sh3_ops
);
This page took 0.043434 seconds and 4 git commands to generate.