aboutsummaryrefslogtreecommitdiff
path: root/gdb/rom68k-rom.c
diff options
context:
space:
mode:
authorRob Savoye <rob@cygnus>1994-11-10 23:20:03 +0000
committerRob Savoye <rob@cygnus>1994-11-10 23:20:03 +0000
commit06b8f5e4067b35808aa31dcc1efe61e5396008af (patch)
treedd729f6eb292b7635096dcd70c46762d44b3ad86 /gdb/rom68k-rom.c
parentf449d250be96573b3ad6addae26e318531d766d0 (diff)
downloadgdb-06b8f5e4067b35808aa31dcc1efe61e5396008af.zip
gdb-06b8f5e4067b35808aa31dcc1efe61e5396008af.tar.gz
gdb-06b8f5e4067b35808aa31dcc1efe61e5396008af.tar.bz2
* rom68k-rom.c: New file. Replaces the old remote-mon.c and uses
the new generic ROM interface in monitor.c. * config/m68k/monitor.mt: Use new ROM support. * monitor.c: Add support for xmodem download protocol.
Diffstat (limited to 'gdb/rom68k-rom.c')
-rw-r--r--gdb/rom68k-rom.c143
1 files changed, 143 insertions, 0 deletions
diff --git a/gdb/rom68k-rom.c b/gdb/rom68k-rom.c
new file mode 100644
index 0000000..719cb4d
--- /dev/null
+++ b/gdb/rom68k-rom.c
@@ -0,0 +1,143 @@
+#include "defs.h"
+#include "gdbcore.h"
+#include "target.h"
+#include "monitor.h"
+
+extern int baud_rate;
+
+void rom68k_open();
+void monitor_open();
+
+/*
+ * this array of registers need to match the indexes used by GDB. The
+ * whole reason this exists is cause the various ROM monitors use
+ * different strings than GDB does, and doesn't support all the
+ * registers either. So, typing "info reg sp" becomes a "r30".
+ */
+static char *rom68k_regnames[] = {
+ "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a0", "a1",
+ "a2", "a3", "a4", "a5", "a6", "usp", "ssp","pc", "", "",
+ "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", "",
+ "", "", "", "", "", "", "", ""
+};
+
+/*
+ * Define the monitor command strings. Since these are passed directly
+ * through to a printf style function, we need can include formatting
+ * strings. We also need a CR or LF on the end.
+ */
+
+struct target_ops rom68k_ops = {
+ "rom68k",
+ "WinBond's debug monitor for the Rom68k Eval board",
+ "Debug on a Motorola IDP eval board running the ROM68K monitor.\n\
+Specify the serial device it is connected to (e.g. /dev/ttya).",
+ rom68k_open,
+ monitor_close,
+ monitor_attach,
+ monitor_detach,
+ monitor_resume,
+ monitor_wait,
+ monitor_fetch_register,
+ monitor_store_register,
+ monitor_prepare_to_store,
+ monitor_xfer_inferior_memory,
+ monitor_files_info,
+ monitor_insert_breakpoint,
+ monitor_remove_breakpoint, /* Breakpoints */
+ 0,
+ 0,
+ 0,
+ 0,
+ 0, /* Terminal handling */
+ monitor_kill,
+ monitor_load, /* load */
+ 0, /* lookup_symbol */
+ monitor_create_inferior,
+ monitor_mourn_inferior,
+ 0, /* can_run */
+ 0, /* notice_signals */
+ process_stratum,
+ 0, /* next */
+ 1,
+ 1,
+ 1,
+ 1,
+ 1, /* all mem, mem, stack, regs, exec */
+ 0,
+ 0, /* Section pointers */
+ OPS_MAGIC, /* Always the last thing */
+};
+
+struct monitor_ops rom68k_cmds = {
+ 1, /* 1 for ASCII, 0 for binary */
+ "\n", /* monitor init string */
+ "go \n", /* execute or usually GO command */
+ "go \n", /* continue command */
+ "st \n", /* single step */
+ "db %x\n", /* set a breakpoint */
+ "cb %x\r", /* clear a breakpoint */
+ 0, /* 0 for number, 1 for address */
+ {
+ "pm %x %x\r", /* set memory */
+ "=", /* delimiter */
+ "", /* the result */
+ },
+ {
+ "dm %x 1\r", /* get memory */
+ "", /* delimiter */
+ "", /* the result */
+ },
+ {
+ "pr %s %x\r", /* set a register */
+ "", /* delimiter between registers */
+ "", /* the result */
+ },
+ {
+ "pr %s\n", /* get a register */
+ ":", /* delimiter between registers */
+ "", /* the result */
+ },
+ "dc\n", /* download command */
+ "ROM68K :->", /* monitor command prompt */
+ "=", /* end-of-command delimitor */
+ ".\n", /* optional command terminator */
+ &rom68k_ops, /* target operations */
+ "srec,xmodem-ascii,xmodem-srec,default",/* load types */
+ rom68k_regnames /* registers names */
+};
+
+void
+rom68k_open(args, from_tty)
+ char *args;
+ int from_tty;
+{
+ target_preopen(from_tty);
+ push_target (&rom68k_ops);
+ push_monitor (&rom68k_cmds);
+ monitor_open (args, "rom68k", from_tty);
+}
+
+void
+_initialize_rom68k ()
+{
+ add_target (&rom68k_ops);
+
+ /* this is the default, since it's the only baud rate supported by the hardware */
+ baud_rate = 9600;
+}
+
+
+
+