* op50-rom.c, w89k-rom.c, monitor.c: Modify to use two variables
[external/binutils.git] / gdb / w89k-rom.c
1 /* Remote target glue for the WinBond ROM monitor running on the "Cougar"
2 W89k eval board.
3
4    Copyright 1988, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
21
22 #include "defs.h"
23 #include "gdbcore.h"
24 #include "target.h"
25 #include "monitor.h"
26
27 extern int baud_rate;
28
29 void w89k_open();
30 void monitor_open();
31
32 /*
33  * this array of registers need to match the indexes used by GDB. The
34  * whole reason this exists is cause the various ROM monitors use
35  * different strings than GDB does, and doesn't support all the
36  * registers either. So, typing "info reg sp" becomes a "r30".
37  */
38 static char *w89k_regnames[] = {
39   "r0",   "r1",    "r2",   "r3",   "r4",  "r5",  "r6",  "r7",  "r8",  "r9",
40   "r10",  "r11",   "r12",  "r13",  "r14", "r15", "r16", "r17", "r18", "r19",
41   "r20",  "r21",   "r22",  "r23",  "r24", "r25", "r26", "r27", "r28", "r29",
42   "r30",  "r31",   "sar",  "pc",   "",    "",    "",
43   "eiem", "iir",   "iva",  "ior",  "ipsw","",    "",    "",    "",    "",
44   "",     "",      "",     "",     "",    "",    "",    "ccr", "",    "",
45   "tr0",  "tr1",   "",     "",     "",    "",    "",
46   "",     "",      "",     "",     "",    "",    "",    "",
47   "",     "",      "",     "",     "",    "",    "",    "",
48   "",     "",      "",     "",     "",    "",    "",    "",
49   "",     "",      "",     "",     "",    "",    "",    "",
50   "",     "",      "",     "",     "",    "",    "",    "",
51   "",     "",      "",     "",     "",    "",    "",    "",
52   "",     "",      "",     "",     "",    "",    "",    "",
53   "",     "",      "",     "",     "",    "",    "",    ""
54 };
55
56 /*
57  * Define the monitor command strings. Since these are passed directly
58  * through to a printf style function, we need can include formatting
59  * strings. We also need a CR or LF on the end.
60  */
61
62 struct target_ops w89k_ops = {
63   "w89k",
64   "WinBond's debug monitor for the W89k Eval board",
65   "Debug on a WinBond W89K eval board.\n\
66 Specify the serial device it is connected to (e.g. /dev/ttya).",
67   w89k_open,
68   monitor_close, 
69   monitor_attach,
70   monitor_detach,
71   monitor_resume,
72   monitor_wait,
73   monitor_fetch_register,
74   monitor_store_register,
75   monitor_prepare_to_store,
76   monitor_xfer_inferior_memory,
77   monitor_files_info,
78   monitor_insert_breakpoint,
79   monitor_remove_breakpoint,    /* Breakpoints */
80   0,
81   0,
82   0,
83   0,
84   0,                            /* Terminal handling */
85   monitor_kill,
86   monitor_load,                 /* load */
87   0,                            /* lookup_symbol */
88   monitor_create_inferior,
89   monitor_mourn_inferior,
90   0,                            /* can_run */
91   0,                            /* notice_signals */
92   0,                            /* to_stop */
93   process_stratum,
94   0,                            /* next */
95   1,
96   1,
97   1,
98   1,
99   1,                            /* all mem, mem, stack, regs, exec */
100   0,
101   0,                            /* Section pointers */
102   OPS_MAGIC,                    /* Always the last thing */
103 };
104
105 struct monitor_ops w89k_cmds = {
106   1,                                    /* 1 for ASCII, 0 for binary */
107   "\n",                                 /* monitor init string */
108   "g = %x\n",                           /* execute or usually GO command */
109   "g\n",                                /* continue command */
110   "t\n",                                /* single step */
111   "bp %x\n",                            /* set a breakpoint */
112   "bc %x\n",                            /* clear a breakpoint */
113   0,                                    /* 0 for number, 1 for address */
114   {
115     "e %x %x\n",                        /* set memory */
116     "",                                 /* delimiter */
117     "",                                 /* the result */
118   },
119   {
120     "db %x %x\n",                       /* get memory */
121     "",                                 /* delimiter */
122     "",                                 /* the result */
123   },
124   {
125     "r %s %x\n",                        /* set a register */
126     "",                                 /* delimiter between registers */
127     "",                                 /* the result */
128   },
129   {
130     "r %s\n",                           /* get a register */
131     "",                                 /* delimiter between registers */
132     "",                                 /* the result */
133   },
134   "u\n",                                /* download command */
135   "ROM>",                               /* monitor command prompt */
136   "",                                   /* end-of-command delimitor */
137   "",                                   /* optional command terminator */
138   &w89k_ops,                            /* target operations */
139   "none,srec,default",                  /* load types */
140   "none,xmodem",                        /* load protocols */
141   w89k_regnames                         /* registers names */
142 };
143
144 void
145 w89k_open(args, from_tty)
146      char *args;
147      int from_tty;
148 {
149   target_preopen(from_tty);
150   push_target  (&w89k_ops);
151   push_monitor (&w89k_cmds);
152   monitor_open (args, "w89k", from_tty);
153 }
154
155 void
156 _initialize_w89k ()
157 {
158   add_target (&w89k_ops);
159
160   /* this is the default, since it's the only baud rate supported by the hardware */
161   baud_rate = 9600;
162 }