]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/op50-rom.c
import gdb-1999-07-07 post reformat
[thirdparty/binutils-gdb.git] / gdb / op50-rom.c
CommitLineData
c906108c
SS
1/* Remote target glue for the Oki op50n based eval board.
2
3 Copyright 1995 Free Software Foundation, Inc.
4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b
JM
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
c906108c
SS
21
22#include "defs.h"
23#include "gdbcore.h"
24#include "target.h"
25#include "monitor.h"
26#include "serial.h"
27
28static void op50n_open PARAMS ((char *args, int from_tty));
29
30/*
31 * this array of registers need to match the indexes used by GDB. The
32 * whole reason this exists is cause the various ROM monitors use
33 * different strings than GDB does, and doesn't support all the
34 * registers either. So, typing "info reg sp" becomes a "r30".
35 */
36
37static char *op50n_regnames[NUM_REGS] =
38{
39 "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
40 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
41 "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
42 "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
43 "cr11", "p", NULL, NULL, NULL, "cr15", "cr19", "cr20",
44 "cr21", "cr22", NULL, NULL, NULL, NULL, NULL, NULL,
c5aa993b 45 NULL, NULL, NULL, "cr0", "cr8", "cr9", "cr10", "cr12",
c906108c
SS
46 "cr13", "cr24", "cr25", "cr26",
47};
48
49/*
50 * Define the monitor command strings. Since these are passed directly
51 * through to a printf style function, we need can include formatting
52 * strings. We also need a CR or LF on the end.
53 */
54
55static struct target_ops op50n_ops;
56
c5aa993b
JM
57static char *op50n_inits[] =
58{".\r", NULL};
c906108c 59
c5aa993b 60static struct monitor_ops op50n_cmds;
c906108c 61
c5aa993b
JM
62static void
63init_op50n_cmds (void)
c906108c 64{
c5aa993b
JM
65 op50n_cmds.flags = MO_CLR_BREAK_USES_ADDR /*| MO_GETMEM_READ_SINGLE */ ; /* flags */
66 op50n_cmds.init = op50n_inits; /* Init strings */
67 op50n_cmds.cont = "g\r"; /* continue command */
68 op50n_cmds.step = "t\r"; /* single step */
69 op50n_cmds.stop = "\003.\r"; /* Interrupt char */
70 op50n_cmds.set_break = "b %x\r"; /* set a breakpoint */
71 op50n_cmds.clr_break = "b %x;0\r"; /* clear breakpoint at addr */
72 op50n_cmds.clr_all_break = "bx\r"; /* clear all breakpoints */
73 op50n_cmds.fill = "fx %x s%x %x\r"; /* memory fill cmd (addr, len, val) */
74 op50n_cmds.setmem.cmdb = "sx %x %x\r"; /* setmem.cmdb (addr, value) */
75 op50n_cmds.setmem.cmdw = "sh %x %x\r"; /* setmem.cmdw (addr, value) */
76 op50n_cmds.setmem.cmdl = "s %x %x\r"; /* setmem.cmdl (addr, value) */
77 op50n_cmds.setmem.cmdll = NULL; /* setmem.cmdll (addr, value) */
78 op50n_cmds.setmem.resp_delim = NULL; /* setmem.resp_delim */
79 op50n_cmds.setmem.term = NULL; /* setmem.term */
80 op50n_cmds.setmem.term_cmd = NULL; /* setmem.term_cmd */
c906108c
SS
81#if 0
82 {
83 "sx %x\r", /* getmem.cmdb (addr, len) */
c5aa993b 84 "sh %x\r", /* getmem.cmdw (addr, len) */
c906108c
SS
85 "s %x\r", /* getmem.cmdl (addr, len) */
86 NULL, /* getmem.cmdll (addr, len) */
87 " : ", /* getmem.resp_delim */
88 " ", /* getmem.term */
89 ".\r", /* getmem.term_cmd */
c5aa993b 90 };
c906108c 91#else
c5aa993b
JM
92 op50n_cmds.getmem.cmdb = "dx %x s%x\r"; /* getmem.cmdb (addr, len) */
93 op50n_cmds.getmem.cmdw = NULL; /* getmem.cmdw (addr, len) */
94 op50n_cmds.getmem.cmdl = NULL; /* getmem.cmdl (addr, len) */
95 op50n_cmds.getmem.cmdll = NULL; /* getmem.cmdll (addr, len) */
96 op50n_cmds.getmem.resp_delim = " : "; /* getmem.resp_delim */
97 op50n_cmds.getmem.term = NULL; /* getmem.term */
98 op50n_cmds.getmem.term_cmd = NULL; /* getmem.term_cmd */
c906108c 99#endif
c5aa993b
JM
100 op50n_cmds.setreg.cmd = "x %s %x\r"; /* setreg.cmd (name, value) */
101 op50n_cmds.setreg.resp_delim = NULL; /* setreg.resp_delim */
102 op50n_cmds.setreg.term = NULL; /* setreg.term */
103 op50n_cmds.setreg.term_cmd = NULL; /* setreg.term_cmd */
104 op50n_cmds.getreg.cmd = "x %s\r"; /* getreg.cmd (name) */
105 op50n_cmds.getreg.resp_delim = "="; /* getreg.resp_delim */
106 op50n_cmds.getreg.term = " "; /* getreg.term */
107 op50n_cmds.getreg.term_cmd = ".\r"; /* getreg.term_cmd */
108 op50n_cmds.dump_registers = NULL; /* dump_registers */
109 op50n_cmds.register_pattern = NULL; /* register_pattern */
110 op50n_cmds.supply_register = NULL; /* supply_register */
111 op50n_cmds.load_routine = NULL; /* load routine */
112 op50n_cmds.load = "r 0\r"; /* download command */
113 op50n_cmds.loadresp = NULL; /* load response */
114 op50n_cmds.prompt = "\n#"; /* monitor command prompt */
115 op50n_cmds.line_term = "\r"; /* end-of-command delimitor */
116 op50n_cmds.cmd_end = NULL; /* optional command terminator */
117 op50n_cmds.target = &op50n_ops; /* target operations */
118 op50n_cmds.stopbits = SERIAL_1_STOPBITS; /* number of stop bits */
119 op50n_cmds.regnames = op50n_regnames; /* register names */
120 op50n_cmds.magic = MONITOR_OPS_MAGIC; /* magic */
c906108c
SS
121};
122
123static void
124op50n_open (args, from_tty)
125 char *args;
126 int from_tty;
127{
128 monitor_open (args, &op50n_cmds, from_tty);
129}
130
131void
132_initialize_op50n ()
133{
c5aa993b 134 init_op50n_cmds ();
c906108c
SS
135 init_monitor_ops (&op50n_ops);
136
137 op50n_ops.to_shortname = "op50n";
138 op50n_ops.to_longname = "Oki's debug monitor for the Op50n Eval board";
139 op50n_ops.to_doc = "Debug on a Oki OP50N eval board.\n\
140Specify the serial device it is connected to (e.g. /dev/ttya).";
141 op50n_ops.to_open = op50n_open;
142
143 add_target (&op50n_ops);
144}