* config/i386/nm-nbsd.h (FLOAT_INFO): Comment out.
[deliverable/binutils-gdb.git] / gdb / rom68k-rom.c
... / ...
CommitLineData
1/* Remote target glue for the ROM68K ROM monitor.
2 Copyright 1988, 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with this program; if not, write to the Free Software
18Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
19
20#include "defs.h"
21#include "gdbcore.h"
22#include "target.h"
23#include "monitor.h"
24#include "serial.h"
25
26static void rom68k_open PARAMS ((char *args, int from_tty));
27
28static void
29rom68k_supply_register (regname, regnamelen, val, vallen)
30 char *regname;
31 int regnamelen;
32 char *val;
33 int vallen;
34{
35 int numregs;
36 int regno;
37
38 numregs = 1;
39 regno = -1;
40
41 if (regnamelen == 2)
42 switch (regname[0])
43 {
44 case 'S':
45 if (regname[1] == 'R')
46 regno = PS_REGNUM;
47 break;
48 case 'P':
49 if (regname[1] == 'C')
50 regno = PC_REGNUM;
51 break;
52 case 'D':
53 if (regname[1] != 'R')
54 break;
55 regno = D0_REGNUM;
56 numregs = 8;
57 break;
58 case 'A':
59 if (regname[1] != 'R')
60 break;
61 regno = A0_REGNUM;
62 numregs = 7;
63 break;
64 }
65 else if (regnamelen == 3)
66 switch (regname[0])
67 {
68 case 'I':
69 if (regname[1] == 'S' && regname[2] == 'P')
70 regno = SP_REGNUM;
71 }
72
73 if (regno >= 0)
74 while (numregs-- > 0)
75 val = monitor_supply_register (regno++, val);
76}
77
78/* This array of registers need to match the indexes used by GDB.
79 This exists because the various ROM monitors use different strings
80 than does GDB, and don't necessarily support all the registers
81 either. So, typing "info reg sp" becomes a "r30". */
82
83static char *rom68k_regnames[NUM_REGS] = {
84 "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7",
85 "A0", "A1", "A2", "A3", "A4", "A5", "A6", "ISP",
86 "SR", "PC" };
87
88/* Define the monitor command strings. Since these are passed directly
89 through to a printf style function, we may include formatting
90 strings. We also need a CR or LF on the end. */
91
92static struct target_ops rom68k_ops;
93
94static char *rom68k_inits[] = {".\r\r", NULL}; /* Exits pm/pr & download cmds */
95
96static struct monitor_ops rom68k_cmds =
97{
98 0, /* flags */
99 rom68k_inits, /* monitor init string */
100 "go\r", /* continue command */
101 "st\r", /* single step */
102 NULL, /* No way to interrupt program */
103 "db %x\r", /* set a breakpoint */
104 "cb %x\r", /* clear a breakpoint */
105 "cb *\r", /* clear all breakpoints */
106 "fm %x %x %x\r", /* fill (start len val) */
107 {
108 "pm %x %x\r", /* setmem.cmdb (addr, value) */
109 "pm.w %x %x\r", /* setmem.cmdw (addr, value) */
110 "pm.l %x %x\r", /* setmem.cmdl (addr, value) */
111 NULL, /* setmem.cmdll (addr, value) */
112 NULL, /* setreg.resp_delim */
113 NULL, /* setreg.term */
114 NULL, /* setreg.term_cmd */
115 },
116 {
117 "dm %x %x\r", /* getmem.cmdb (addr, len) */
118 "dm.w %x %x\r", /* getmem.cmdw (addr, len) */
119 "dm.l %x %x\r", /* getmem.cmdl (addr, len) */
120 NULL, /* getmem.cmdll (addr, len) */
121 " ", /* getmem.resp_delim */
122 NULL, /* getmem.term */
123 NULL, /* getmem.term_cmd */
124 },
125 {
126 "pr %s %x\r", /* setreg.cmd (name, value) */
127 NULL, /* setreg.resp_delim */
128 NULL, /* setreg.term */
129 NULL /* setreg.term_cmd */
130 },
131 {
132 "pr %s\r", /* getreg.cmd (name) */
133 ": ", /* getreg.resp_delim */
134 "= ", /* getreg.term */
135 ".\r" /* getreg.term_cmd */
136 },
137 "dr\r", /* dump_registers */
138 /* register_pattern */
139 "\\(\\w+\\)=\\([0-9a-fA-F]+\\( +[0-9a-fA-F]+\\b\\)*\\)",
140 rom68k_supply_register, /* supply_register */
141 NULL, /* load_routine (defaults to SRECs) */
142 "dc\r", /* download command */
143 "Waiting for S-records from host... ", /* Load response */
144 "ROM68K :-> ", /* monitor command prompt */
145 "\r", /* end-of-line terminator */
146 ".\r", /* optional command terminator */
147 &rom68k_ops, /* target operations */
148 SERIAL_1_STOPBITS, /* number of stop bits */
149 rom68k_regnames, /* registers names */
150 MONITOR_OPS_MAGIC /* magic */
151};
152
153static void
154rom68k_open (args, from_tty)
155 char *args;
156 int from_tty;
157{
158 monitor_open (args, &rom68k_cmds, from_tty);
159}
160
161void
162_initialize_rom68k ()
163{
164 init_monitor_ops (&rom68k_ops);
165
166 rom68k_ops.to_shortname = "rom68k";
167 rom68k_ops.to_longname = "Rom68k debug monitor for the IDP Eval board";
168 rom68k_ops.to_doc = "Debug on a Motorola IDP eval board running the ROM68K monitor.\n\
169Specify the serial device it is connected to (e.g. /dev/ttya).";
170 rom68k_ops.to_open = rom68k_open;
171
172 add_target (&rom68k_ops);
173}
This page took 0.022177 seconds and 4 git commands to generate.