* monitor.h: Add MO_GETMEM_NEEDS_RANGE flag.
authorStu Grossman <grossman@cygnus>
Mon, 3 Apr 1995 21:03:27 +0000 (21:03 +0000)
committerStu Grossman <grossman@cygnus>
Mon, 3 Apr 1995 21:03:27 +0000 (21:03 +0000)
* monitor.c (monitor_read_memory):  Use previously mentioned flag
to send proper format memory examine commands to the w89k monitor.
Also, try to handle bizarre format of memory dump...

* op50-rom.c w89k-rom.c:  Update to new monitor.[ch] conventions.

gdb/monitor.h
gdb/op50-rom.c
gdb/w89k-rom.c

index 1bd4b7cd81b3ab340b7019056e3cb9fe5723faa8..6d8ae486f87e5e8379a1f1d1ced5b511c2f6e1a3 100644 (file)
@@ -125,6 +125,7 @@ struct monitor_ops
 #define MO_NEED_REGDUMP_AFTER_CONT 0x4 /* If set, then monitor doesn't auto-
                                          matically supply register dump when
                                          coming back after a continue.  */
+#define MO_GETMEM_NEEDS_RANGE 0x8 /* getmem needs start addr and end addr */
 
 extern struct monitor_ops        *current_monitor;
 
index 5d3b228b0c6fc3de8941a25261bf37d3ed8ae48f..0cfb4b289d5af9c7e1fd324a83f2abc94c25235a 100644 (file)
@@ -22,9 +22,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "gdbcore.h"
 #include "target.h"
 #include "monitor.h"
+#include "serial.h"
 
-void op50n_open();
-void monitor_open();
+static void op50n_open PARAMS ((char *args, int from_tty));
 
 /*
  * this array of registers need to match the indexes used by GDB. The
@@ -32,24 +32,17 @@ void monitor_open();
  * different strings than GDB does, and doesn't support all the
  * registers either. So, typing "info reg sp" becomes a "r30".
  */
-static char *op50n_regnames[] = {
-  "r0",  "r1",  "r2",  "r3",  "r4",  "r5",  "r6",
-  "r7",  "r8",  "r9",  "r10", "r11", "r12", "r13",
-  "r14", "r15", "r16", "r17", "r18", "r19", "r20",
-  "r21", "r22", "r23", "r24", "r25", "r26", "r27",
-  "r28", "r29", "r30", "r31", "cr11","p",   "",
-  "",    "",    "cr15", "cr19", "cr20",    "cr21", "cr22",
-  "",    "",    "",    "",    "",       "", "",
-  "",    "",    "cr0", "cr8", "cr9", "cr10","cr12",    "cr13",
-  "cr24",    "cr25",    "cr26",    "",    "",    "",    "",
-  "",    "",    "",    "",    "",       "",       "",    "",
-  "",    "",    "",    "",    "",       "",       "",    "",
-  "",    "",    "",    "",    "",       "",       "",    "",
-  "",    "",    "",    "",    "",       "",       "",    "",
-  "",    "",    "",    "",    "",       "",       "",    "",
-  "",    "",    "",    "",    "",       "",       "",    "",
-  "",    "",    "",    "",    "",       "",       "",    "",
-  "",    "",    "",    "",    "",       "",       "",    ""
+
+static char *op50n_regnames[NUM_REGS] =
+{
+  "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
+  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
+  "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+  "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
+  "cr11", "p", NULL, NULL, NULL, "cr15", "cr19", "cr20",
+  "cr21", "cr22", NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, "cr0", "cr8", "cr9", "cr10","cr12",
+  "cr13", "cr24", "cr25", "cr26",
 };
 
 /*
@@ -58,98 +51,73 @@ static char *op50n_regnames[] = {
  * strings. We also need a CR or LF on the end.
  */
 
-static struct target_ops op50n_ops =
-{
-  "op50n",
-  "Oki's debug monitor for the Op50n Eval board",
-
-  "Debug on a Oki OP50N eval board.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).",
-  op50n_open,
-  monitor_close, 
-  NULL,
-  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 */
-  0,                           /* to_stop */
-  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 */
-};
+static struct target_ops op50n_ops;
 
-static char *op50n_loadtype[] = {"none", "srec", "default", NULL};
+static char *op50n_loadtypes[] = {"none", "srec", "default", NULL};
 static char *op50n_loadprotos[] = {"none", NULL};
 
+static char *op50n_inits[] = {"\003.\n", NULL};
+
 static struct monitor_ops op50n_cmds =
 {
-  1,                                   /* 1 for ASCII, 0 for binary */
-  "\003.\n",                           /* monitor init string */
-  "g %x\n",                            /* execute or usually GO command */
-  "g\n",                               /* continue command */
-  "t\n",                               /* single step */
-  "b %x\n",                            /* set a breakpoint */
-  "bx %x\n",                           /* clear a breakpoint */
-  0,                                   /* 0 for number, 1 for address */
+  0,                           /* flags */
+  op50n_inits,                 /* Init strings */
+  "g\n",                       /* continue command */
+  "t\n",                       /* single step */
+  NULL,                                /* Interrupt char */
+  "b %x\n",                    /* set a breakpoint */
+  "bx %x\n",                   /* clear a breakpoint */
+  NULL,                                /* clear all breakpoints */
+  NULL,                                /* memory fill cmd */
   {
-    "sx %x %x;.\n",                    /* set memory */
-    "",                                        /* delimiter  */
-    "",                                        /* the result */
+    "sx %x %x;.\n",            /* setmem.cmdb (addr, value) */
+    NULL,                      /* setmem.cmdw (addr, value) */
+    NULL,                      /* setmem.cmdl (addr, value) */
+    NULL,                      /* setmem.cmdll (addr, value) */
+    NULL,                      /* setreg.resp_delim */
+    NULL,                      /* setreg.term */
+    NULL,                      /* setreg.term_cmd */
   },
   {
-    "sx %x\n",                         /* get memory */
-    ": ",                              /* delimiter */
-    " ",                               /* the result */
+    "sx %x\n",                 /* getmem.cmdb (addr, value) */
+    NULL,                      /* getmem.cmdw (addr, value) */
+    NULL,                      /* getmem.cmdl (addr, value) */
+    NULL,                      /* getmem.cmdll (addr, value) */
+    ": ",                      /* getmem.resp_delim */
+    NULL,                      /* getmem.term */
+    NULL,                      /* getmem.term_cmd */
   },
   {
-    "x %s %x\n",                       /* set a register */
-    "",                                        /* delimiter between registers */
-    "",                                        /* the result */
+    "x %s %x\n",               /* setreg.cmd (name, value) */
+    NULL,                      /* setreg.resp_delim */
+    NULL,                      /* setreg.term */
+    NULL,                      /* setreg.term_cmd */
   },
   {
-    "x %s\n",                          /* get a register */
-    "=",                               /* delimiter between registers */
-    "",                                        /* the result */
+    "x %s\n",                  /* getreg.cmd (name) */
+    "=",                       /* getreg.resp_delim */
+    NULL,                      /* getreg.term */
+    NULL,                      /* getreg.term_cmd */
   },
-  "r 0\n",                             /* download command */
-  "#",                                 /* monitor command prompt */
-  " ",                                 /* end-of-command delimitor */
-  ".\n",                               /* optional command terminator */
-  &op50n_ops,                          /* target operations */
+  NULL,                                /* dump_registers */
+  NULL,                                /* register_pattern */
+  NULL,                                /* supply_register */
+  "r 0\n",                     /* download command */
+  NULL,                                /* load response */
+  "#",                         /* monitor command prompt */
+  NULL,                                /* end-of-command delimitor */
+  NULL,                                /* optional command terminator */
+  &op50n_ops,                  /* target operations */
   op50n_loadtypes,             /* loadtypes */
   op50n_loadprotos,            /* loadprotos */
   "2400,4800,9600,19200,exta,38400,extb", /* supported baud rates */
   SERIAL_1_STOPBITS,           /* number of stop bits */
-  op50n_regnames
-};
+  op50n_regnames,              /* register names */
+  MONITOR_OPS_MAGIC            /* magic */
+  };
 
-void
-op50n_open(args, from_tty)
+static void
+op50n_open (args, from_tty)
      char *args;
      int from_tty;
 {
@@ -159,10 +127,13 @@ op50n_open(args, from_tty)
 void
 _initialize_op50n ()
 {
-  add_target (&op50n_ops);
+  init_monitor_ops (&op50n_ops);
 
-  /* this is the default, since it's that's how the board comes up after
-     power cycle. It can then be changed using set remotebaud
-   */
-  baud_rate = 9600;
+  op50n_ops.to_shortname = "op50n";
+  op50n_ops.to_longname = "Oki's debug monitor for the Op50n Eval board";
+  op50n_ops.to_doc = "Debug on a Oki OP50N eval board.\n\
+Specify the serial device it is connected to (e.g. /dev/ttya).";
+  op50n_ops.to_open = op50n_open;
+
+  add_target (&op50n_ops);
 }
index 64bc5fad887e09f429aa51c56724eb297363bb44..031eee297b0ac2ac44fbc0c6a8af0202e4120524 100644 (file)
@@ -1,5 +1,5 @@
 /* Remote target glue for the WinBond ROM monitor running on the "Cougar"
-W89k eval board.
+   W89k eval board.
 
    Copyright 1988, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
 
@@ -23,11 +23,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "gdbcore.h"
 #include "target.h"
 #include "monitor.h"
+#include "serial.h"
 
-extern int baud_rate;
-
-void w89k_open();
-void monitor_open();
+static void w89k_open PARAMS ((char *args, int from_tty));
 
 /*
  * this array of registers need to match the indexes used by GDB. The
@@ -35,22 +33,16 @@ void monitor_open();
  * different strings than GDB does, and doesn't support all the
  * registers either. So, typing "info reg sp" becomes a "r30".
  */
-static char *w89k_regnames[] = {
-  "r0",   "r1",    "r2",   "r3",   "r4",  "r5",  "r6",  "r7",  "r8",  "r9",
-  "r10",  "r11",   "r12",  "r13",  "r14", "r15", "r16", "r17", "r18", "r19",
-  "r20",  "r21",   "r22",  "r23",  "r24", "r25", "r26", "r27", "r28", "r29",
-  "r30",  "r31",   "sar",  "pc",   "",    "",    "",
-  "eiem", "iir",   "iva",  "ior",  "ipsw","",    "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "ccr", "",    "",
-  "tr0",  "tr1",   "",     "",     "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    "",
-  "",     "",      "",     "",     "",    "",    "",    ""
+static char *w89k_regnames[NUM_REGS] =
+{
+  "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
+  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
+  "r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23",
+  "r24", "r25", "r26", "r27", "r28", "r29", "r30", "r31",
+  "SAR", "PC", NULL, NULL, NULL, "EIEM", "IIR", "IVA",
+  "IOR", "IPSW", NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+  "CCR", NULL, NULL, "TR0", "TR1",
 };
 
 /*
@@ -59,94 +51,70 @@ static char *w89k_regnames[] = {
  * strings. We also need a CR or LF on the end.
  */
 
-static struct target_ops w89k_ops =
-{
-  "w89k",
-  "WinBond's debug monitor for the W89k Eval board",
-  "Debug on a WinBond W89K eval board.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).",
-  w89k_open,
-  monitor_close, 
-  NULL,
-  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 */
-  0,                           /* to_stop */
-  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 */
-};
+static struct target_ops w89k_ops;
+
+static char *w89k_loadtypes[] = {"none", "srec", "default", NULL};
+static char *w89k_loadprotos[] = {"none", "xmodem", NULL};
 
-static char *loadtypes[] = {"none", "srec", "default", NULL};
-static char *loadprotos[] = {"none", "xmodem", NULL};
+static char *w89k_inits[] = {"\r", NULL};
 
 static struct monitor_ops w89k_cmds =
 {
-  1,                                   /* 1 for ASCII, 0 for binary */
-  "\n",                                        /* monitor init string */
-  "g = %x\n",                          /* execute or usually GO command */
-  "g\n",                               /* continue command */
-  "t\n",                               /* single step */
-  "bp %x\n",                           /* set a breakpoint */
-  "bc %x\n",                           /* clear a breakpoint */
-  0,                                   /* 0 for number, 1 for address */
+  MO_GETMEM_NEEDS_RANGE,       /* flags */
+  w89k_inits,                  /* Init strings */
+  "g\r",                       /* continue command */
+  "t\r",                       /* single step */
+  NULL,                                /* Interrupt char */
+  "bp %x\r",                   /* set a breakpoint */
+  "bc %x\r",                   /* clear a breakpoint */
+  NULL,                                /* clear all breakpoints */
+  NULL,                                /* memory fill cmd */
   {
-    "e %x %x\n",                       /* set memory */
-    "",                                        /* delimiter */
-    "",                                        /* the result */
+    "eb %x %x\r",              /* setmem.cmdb (addr, value) */
+    "eh %x %x\r",              /* setmem.cmdw (addr, value) */
+    "ew %x %x\r",              /* setmem.cmdl (addr, value) */
+    NULL,                      /* setmem.cmdll (addr, value) */
+    NULL,                      /* setreg.resp_delim */
+    NULL,                      /* setreg.term */
+    NULL,                      /* setreg.term_cmd */
   },
   {
-    "db %x %x\n",                      /* get memory */
-    "",                                        /* delimiter */
-    "",                                        /* the result */
+    "db %x %x\r",              /* getmem.cmdb (startaddr, endaddr) */
+    "dh %x %x\r",              /* getmem.cmdw (startaddr, endaddr) */
+    "dw %x %x\r",              /* getmem.cmdl (startaddr, endaddr) */
+    NULL,                      /* getmem.cmdll (startaddr, endaddr) */
+    "  ",                      /* getmem.resp_delim */
+    NULL,                      /* getmem.term */
+    NULL,                      /* getmem.term_cmd */
   },
   {
-    "r %s %x\n",                       /* set a register */
-    "",                                        /* delimiter between registers */
-    "",                                        /* the result */
+    "r %s %x\r",               /* setreg.cmd (name, value) */
+    NULL,                      /* setreg.resp_delim */
+    NULL,                      /* setreg.term */
+    NULL,                      /* setreg.term_cmd */
   },
   {
-    "r %s\n",                          /* get a register */
-    "",                                        /* delimiter between registers */
-    "",                                        /* the result */
+    "r %s\r",                  /* getreg.cmd (name) */
+    "\r",                      /* getreg.resp_delim */
+    NULL,                      /* getreg.term */
+    NULL,                      /* getreg.term_cmd */
   },
-  "u\n",                               /* download command */
-  "ROM>",                              /* monitor command prompt */
-  "",                                  /* end-of-command delimitor */
-  "",                                  /* optional command terminator */
-  &w89k_ops,                           /* target operations */
+  NULL,                                /* dump_registers */
+  NULL,                                /* register_pattern */
+  NULL,                                /* supply_register */
+  "u\r",                       /* download command */
+  NULL,                                /* load response */
+  "ROM>",                      /* monitor command prompt */
+  NULL,                                /* end-of-command delimitor */
+  NULL,                                /* optional command terminator */
+  &w89k_ops,                   /* target operations */
   w89k_loadtypes,              /* loadtypes */
   w89k_loadprotos,             /* loadprotos */
-  "9600",                              /* supported baud rates */
+  "9600",                      /* supported baud rates */
   SERIAL_1_STOPBITS,           /* number of stop bits */
-  w89k_regnames                                /* registers names */
-};
+  w89k_regnames,               /* register names */
+  MONITOR_OPS_MAGIC            /* magic */
+  };
 
 void
 w89k_open(args, from_tty)
@@ -159,8 +127,13 @@ w89k_open(args, from_tty)
 void
 _initialize_w89k ()
 {
-  add_target (&w89k_ops);
+  init_monitor_ops (&w89k_ops);
 
-  /* this is the default, since it's the only baud rate supported by the hardware */
-  baud_rate = 9600;
+  w89k_ops.to_shortname = "w89k";
+  w89k_ops.to_longname = "WinBond's debug monitor for the W89k Eval board";
+  w89k_ops.to_doc = "Debug on a WinBond W89K eval board.\n\
+Specify the serial device it is connected to (e.g. /dev/ttya).";
+  w89k_ops.to_open = w89k_open;
+
+  add_target (&w89k_ops);
 }