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