Protoization.
[deliverable/binutils-gdb.git] / gdb / abug-rom.c
CommitLineData
c906108c
SS
1/* Remote debugging interface for ABug Rom monitor for GDB, the GNU debugger.
2 Copyright 1995, 1996, 1998 Free Software Foundation, Inc.
3
4 Written by Rob Savoye of Cygnus Support
5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23#include "defs.h"
24#include "gdbcore.h"
25#include "target.h"
26#include "monitor.h"
27#include "serial.h"
28
29/* Prototypes for local functions. */
30
a14ed312 31static void abug_open (char *args, int from_tty);
c906108c
SS
32
33static void
fba45db2 34abug_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 *abug_regnames[NUM_REGS] =
78{
79 "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
80 "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7",
81 "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 abug_ops;
91
c5aa993b
JM
92static char *abug_inits[] =
93{"\r", NULL};
c906108c 94
c5aa993b 95static struct monitor_ops abug_cmds;
c906108c 96
c5aa993b
JM
97static void
98init_abug_cmds (void)
c906108c 99{
c5aa993b
JM
100 abug_cmds.flags = MO_CLR_BREAK_USES_ADDR;
101 abug_cmds.init = abug_inits; /* Init strings */
102 abug_cmds.cont = "g\r"; /* continue command */
103 abug_cmds.step = "t\r"; /* single step */
104 abug_cmds.stop = NULL; /* interrupt command */
105 abug_cmds.set_break = "br %x\r"; /* set a breakpoint */
106 abug_cmds.clr_break = "nobr %x\r"; /* clear a breakpoint */
107 abug_cmds.clr_all_break = "nobr\r"; /* clear all breakpoints */
108 abug_cmds.fill = "bf %x:%x %x;b\r"; /* fill (start count val) */
109 abug_cmds.setmem.cmdb = "ms %x %02x\r"; /* setmem.cmdb (addr, value) */
110 abug_cmds.setmem.cmdw = "ms %x %04x\r"; /* setmem.cmdw (addr, value) */
111 abug_cmds.setmem.cmdl = "ms %x %08x\r"; /* setmem.cmdl (addr, value) */
112 abug_cmds.setmem.cmdll = NULL; /* setmem.cmdll (addr, value) */
113 abug_cmds.setmem.resp_delim = NULL; /* setreg.resp_delim */
114 abug_cmds.setmem.term = NULL; /* setreg.term */
115 abug_cmds.setmem.term_cmd = NULL; /* setreg.term_cmd */
116 abug_cmds.getmem.cmdb = "md %x:%x;b\r"; /* getmem.cmdb (addr, len) */
117 abug_cmds.getmem.cmdw = "md %x:%x;b\r"; /* getmem.cmdw (addr, len) */
118 abug_cmds.getmem.cmdl = "md %x:%x;b\r"; /* getmem.cmdl (addr, len) */
119 abug_cmds.getmem.cmdll = NULL; /* getmem.cmdll (addr, len) */
120 abug_cmds.getmem.resp_delim = " "; /* getmem.resp_delim */
121 abug_cmds.getmem.term = NULL; /* getmem.term */
122 abug_cmds.getmem.term_cmd = NULL; /* getmem.term_cmd */
123 abug_cmds.setreg.cmd = "rm %s %x\r"; /* setreg.cmd (name, value) */
124 abug_cmds.setreg.resp_delim = "="; /* setreg.resp_delim */
125 abug_cmds.setreg.term = "? "; /* setreg.term */
126 abug_cmds.setreg.term_cmd = ".\r"; /* setreg.term_cmd */
127 abug_cmds.getreg.cmd = "rm %s\r"; /* getreg.cmd (name) */
128 abug_cmds.getreg.resp_delim = "="; /* getreg.resp_delim */
129 abug_cmds.getreg.term = "? "; /* getreg.term */
130 abug_cmds.getreg.term_cmd = ".\r"; /* getreg.term_cmd */
131 abug_cmds.dump_registers = "rd\r"; /* dump_registers */
132 abug_cmds.register_pattern = "\\(\\w+\\) +=\\([0-9a-fA-F]+\\b\\)"; /* register_pattern */
133 abug_cmds.supply_register = abug_supply_register; /* supply_register */
134 abug_cmds.load_routine = NULL; /* load_routine (defaults to SRECs) */
135 abug_cmds.load = "lo 0\r"; /* download command */
136 abug_cmds.loadresp = "\n"; /* load response */
137 abug_cmds.prompt = "135Bug>"; /* monitor command prompt */
138 abug_cmds.line_term = "\r"; /* end-of-line terminator */
139 abug_cmds.cmd_end = NULL; /* optional command terminator */
140 abug_cmds.target = &abug_ops; /* target operations */
141 abug_cmds.stopbits = SERIAL_1_STOPBITS; /* number of stop bits */
142 abug_cmds.regnames = abug_regnames; /* registers names */
143 abug_cmds.magic = MONITOR_OPS_MAGIC; /* magic */
144};
c906108c
SS
145
146static void
fba45db2 147abug_open (char *args, int from_tty)
c906108c
SS
148{
149 monitor_open (args, &abug_cmds, from_tty);
150}
151
152void
fba45db2 153_initialize_abug_rom (void)
c906108c 154{
c5aa993b 155 init_abug_cmds ();
c906108c
SS
156 init_monitor_ops (&abug_ops);
157
158 abug_ops.to_shortname = "abug";
159 abug_ops.to_longname = "ABug monitor";
160 abug_ops.to_doc = "Debug via the ABug monitor.\n\
161Specify the serial device it is connected to (e.g. /dev/ttya).";
162 abug_ops.to_open = abug_open;
163
164 add_target (&abug_ops);
165}
This page took 0.064991 seconds and 4 git commands to generate.