* monitor.h: Add MO_GETMEM_NEEDS_RANGE flag.
[binutils-gdb.git] / gdb / w89k-rom.c
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);
 }