diff options
author | Rob Savoye <rob@cygnus> | 1994-11-10 23:20:03 +0000 |
---|---|---|
committer | Rob Savoye <rob@cygnus> | 1994-11-10 23:20:03 +0000 |
commit | 06b8f5e4067b35808aa31dcc1efe61e5396008af (patch) | |
tree | dd729f6eb292b7635096dcd70c46762d44b3ad86 /gdb/rom68k-rom.c | |
parent | f449d250be96573b3ad6addae26e318531d766d0 (diff) | |
download | gdb-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.c | 143 |
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; +} + + + + |