Browse Source
* op50-rom.c: Delete. * w89k-rom.c: Delete. * Makefile.in: Remove references.cagney_bigcore-20040122-branch
3 changed files with 6 additions and 453 deletions
@ -1,142 +0,0 @@ |
|||
/* Remote target glue for the Oki op50n based eval board.
|
|||
|
|||
Copyright 1995, 1998, 1999, 2000 Free Software Foundation, Inc. |
|||
|
|||
This file is part of GDB. |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 2 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 59 Temple Place - Suite 330, |
|||
Boston, MA 02111-1307, USA. */ |
|||
|
|||
#include "defs.h" |
|||
#include "gdbcore.h" |
|||
#include "target.h" |
|||
#include "monitor.h" |
|||
#include "serial.h" |
|||
|
|||
static void op50n_open (char *args, int from_tty); |
|||
|
|||
/*
|
|||
* 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 *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", |
|||
}; |
|||
|
|||
/*
|
|||
* 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. |
|||
*/ |
|||
|
|||
static struct target_ops op50n_ops; |
|||
|
|||
static char *op50n_inits[] = |
|||
{".\r", NULL}; |
|||
|
|||
static struct monitor_ops op50n_cmds; |
|||
|
|||
static void |
|||
init_op50n_cmds (void) |
|||
{ |
|||
op50n_cmds.flags = MO_CLR_BREAK_USES_ADDR /*| MO_GETMEM_READ_SINGLE */ ; /* flags */ |
|||
op50n_cmds.init = op50n_inits; /* Init strings */ |
|||
op50n_cmds.cont = "g\r"; /* continue command */ |
|||
op50n_cmds.step = "t\r"; /* single step */ |
|||
op50n_cmds.stop = "\003.\r"; /* Interrupt char */ |
|||
op50n_cmds.set_break = "b %x\r"; /* set a breakpoint */ |
|||
op50n_cmds.clr_break = "b %x;0\r"; /* clear breakpoint at addr */ |
|||
op50n_cmds.clr_all_break = "bx\r"; /* clear all breakpoints */ |
|||
op50n_cmds.fill = "fx %x s%x %x\r"; /* memory fill cmd (addr, len, val) */ |
|||
op50n_cmds.setmem.cmdb = "sx %x %x\r"; /* setmem.cmdb (addr, value) */ |
|||
op50n_cmds.setmem.cmdw = "sh %x %x\r"; /* setmem.cmdw (addr, value) */ |
|||
op50n_cmds.setmem.cmdl = "s %x %x\r"; /* setmem.cmdl (addr, value) */ |
|||
op50n_cmds.setmem.cmdll = NULL; /* setmem.cmdll (addr, value) */ |
|||
op50n_cmds.setmem.resp_delim = NULL; /* setmem.resp_delim */ |
|||
op50n_cmds.setmem.term = NULL; /* setmem.term */ |
|||
op50n_cmds.setmem.term_cmd = NULL; /* setmem.term_cmd */ |
|||
#if 0 |
|||
{ |
|||
"sx %x\r", /* getmem.cmdb (addr, len) */ |
|||
"sh %x\r", /* getmem.cmdw (addr, len) */ |
|||
"s %x\r", /* getmem.cmdl (addr, len) */ |
|||
NULL, /* getmem.cmdll (addr, len) */ |
|||
" : ", /* getmem.resp_delim */ |
|||
" ", /* getmem.term */ |
|||
".\r", /* getmem.term_cmd */ |
|||
}; |
|||
#else |
|||
op50n_cmds.getmem.cmdb = "dx %x s%x\r"; /* getmem.cmdb (addr, len) */ |
|||
op50n_cmds.getmem.cmdw = NULL; /* getmem.cmdw (addr, len) */ |
|||
op50n_cmds.getmem.cmdl = NULL; /* getmem.cmdl (addr, len) */ |
|||
op50n_cmds.getmem.cmdll = NULL; /* getmem.cmdll (addr, len) */ |
|||
op50n_cmds.getmem.resp_delim = " : "; /* getmem.resp_delim */ |
|||
op50n_cmds.getmem.term = NULL; /* getmem.term */ |
|||
op50n_cmds.getmem.term_cmd = NULL; /* getmem.term_cmd */ |
|||
#endif |
|||
op50n_cmds.setreg.cmd = "x %s %x\r"; /* setreg.cmd (name, value) */ |
|||
op50n_cmds.setreg.resp_delim = NULL; /* setreg.resp_delim */ |
|||
op50n_cmds.setreg.term = NULL; /* setreg.term */ |
|||
op50n_cmds.setreg.term_cmd = NULL; /* setreg.term_cmd */ |
|||
op50n_cmds.getreg.cmd = "x %s\r"; /* getreg.cmd (name) */ |
|||
op50n_cmds.getreg.resp_delim = "="; /* getreg.resp_delim */ |
|||
op50n_cmds.getreg.term = " "; /* getreg.term */ |
|||
op50n_cmds.getreg.term_cmd = ".\r"; /* getreg.term_cmd */ |
|||
op50n_cmds.dump_registers = NULL; /* dump_registers */ |
|||
op50n_cmds.register_pattern = NULL; /* register_pattern */ |
|||
op50n_cmds.supply_register = NULL; /* supply_register */ |
|||
op50n_cmds.load_routine = NULL; /* load routine */ |
|||
op50n_cmds.load = "r 0\r"; /* download command */ |
|||
op50n_cmds.loadresp = NULL; /* load response */ |
|||
op50n_cmds.prompt = "\n#"; /* monitor command prompt */ |
|||
op50n_cmds.line_term = "\r"; /* end-of-command delimitor */ |
|||
op50n_cmds.cmd_end = NULL; /* optional command terminator */ |
|||
op50n_cmds.target = &op50n_ops; /* target operations */ |
|||
op50n_cmds.stopbits = SERIAL_1_STOPBITS; /* number of stop bits */ |
|||
op50n_cmds.regnames = op50n_regnames; /* register names */ |
|||
op50n_cmds.magic = MONITOR_OPS_MAGIC; /* magic */ |
|||
}; |
|||
|
|||
static void |
|||
op50n_open (char *args, int from_tty) |
|||
{ |
|||
monitor_open (args, &op50n_cmds, from_tty); |
|||
} |
|||
|
|||
void |
|||
_initialize_op50n (void) |
|||
{ |
|||
init_op50n_cmds (); |
|||
init_monitor_ops (&op50n_ops); |
|||
|
|||
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); |
|||
} |
|||
@ -1,311 +0,0 @@ |
|||
/* Remote target glue for the WinBond ROM monitor running on the "Cougar"
|
|||
W89k eval board. |
|||
|
|||
Copyright 1995, 1998, 2000, 2001 Free Software Foundation, Inc. |
|||
|
|||
This file is part of GDB. |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; either version 2 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 59 Temple Place - Suite 330, |
|||
Boston, MA 02111-1307, USA. */ |
|||
|
|||
#include "defs.h" |
|||
#include "gdbcore.h" |
|||
#include "target.h" |
|||
#include "monitor.h" |
|||
#include "serial.h" |
|||
#include "xmodem.h" |
|||
#include "regcache.h" |
|||
|
|||
|
|||
static void w89k_open (char *args, int from_tty); |
|||
|
|||
/*
|
|||
* 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 *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", |
|||
}; |
|||
|
|||
static void |
|||
w89k_supply_register (char *regname, int regnamelen, char *val, int vallen) |
|||
{ |
|||
int numregs; |
|||
int regno; |
|||
|
|||
numregs = 1; |
|||
regno = -1; |
|||
|
|||
if (regnamelen == 2) |
|||
switch (regname[0]) |
|||
{ |
|||
case 'r': |
|||
numregs = 4; |
|||
switch (regname[1]) |
|||
{ |
|||
case '0': |
|||
regno = R0_REGNUM; |
|||
break; |
|||
case '4': |
|||
regno = R0_REGNUM + 4; |
|||
break; |
|||
case '8': |
|||
regno = R0_REGNUM + 8; |
|||
break; |
|||
} |
|||
break; |
|||
case 'P': |
|||
if (regname[1] == 'C') |
|||
regno = PC_REGNUM; |
|||
break; |
|||
} |
|||
else if (regnamelen == 3) |
|||
switch (regname[0]) |
|||
{ |
|||
case 'r': |
|||
numregs = 4; |
|||
if (regname[1] == '1' && regname[2] == '2') |
|||
regno = R0_REGNUM + 12; |
|||
else if (regname[1] == '1' && regname[2] == '6') |
|||
regno = R0_REGNUM + 16; |
|||
else if (regname[1] == '2' && regname[2] == '0') |
|||
regno = R0_REGNUM + 20; |
|||
else if (regname[1] == '2' && regname[2] == '4') |
|||
regno = R0_REGNUM + 24; |
|||
else if (regname[1] == '2' && regname[2] == '8') |
|||
regno = R0_REGNUM + 28; |
|||
break; |
|||
case 'R': |
|||
if (regname[1] == 'C' && regname[2] == 'R') |
|||
regno = RCR_REGNUM; |
|||
break; |
|||
case 'C': |
|||
if (regname[1] == 'C' && regname[2] == 'R') |
|||
regno = CCR_REGNUM; |
|||
break; |
|||
case 'S': |
|||
if (regname[1] == 'A' && regname[2] == 'R') |
|||
regno = SAR_REGNUM; |
|||
break; |
|||
case 'I': |
|||
if (regname[1] == 'I' && regname[2] == 'R') |
|||
regno = IIR_REGNUM; |
|||
else if (regname[1] == 'O' && regname[2] == 'R') |
|||
regno = IOR_REGNUM; |
|||
break; |
|||
case 'T': |
|||
numregs = 4; |
|||
if (regname[1] == 'R') |
|||
if (regname[2] == '0') |
|||
regno = TR0_REGNUM; |
|||
else if (regname[2] == '4') |
|||
regno = TR0_REGNUM + 4; |
|||
break; |
|||
} |
|||
else if (regnamelen == 4) |
|||
switch (regname[0]) |
|||
{ |
|||
case 'E': |
|||
if (regname[1] == 'I') |
|||
if (regname[2] == 'E' && regname[3] == 'M') |
|||
regno = EIEM_REGNUM; |
|||
break; |
|||
case 'I': |
|||
if (regname[1] == 'P' && regname[2] == 'S' && regname[3] == 'W') |
|||
regno = IPSW_REGNUM; |
|||
break; |
|||
} |
|||
else if (regnamelen == 5) |
|||
switch (regname[0]) |
|||
{ |
|||
case 'I': |
|||
if (regname[1] == 'A' |
|||
&& regname[2] == 'O' |
|||
&& regname[3] == 'Q' |
|||
&& regname[4] == 'B') |
|||
regno = PCOQ_TAIL_REGNUM; |
|||
break; |
|||
} |
|||
|
|||
if (regno >= 0) |
|||
while (numregs-- > 0) |
|||
val = monitor_supply_register (regno++, val); |
|||
} |
|||
|
|||
static int hashmark = 1; /* flag set by "set hash" */ |
|||
|
|||
extern struct monitor_ops w89k_cmds; /* fwd decl */ |
|||
|
|||
static void |
|||
w89k_load (struct serial *desc, char *file, int hashmark) |
|||
{ |
|||
bfd *abfd; |
|||
asection *s; |
|||
char *buffer; |
|||
int i; |
|||
|
|||
buffer = alloca (XMODEM_PACKETSIZE); |
|||
|
|||
abfd = bfd_openr (file, 0); |
|||
if (!abfd) |
|||
{ |
|||
printf_filtered ("Unable to open file %s\n", file); |
|||
return; |
|||
} |
|||
|
|||
if (bfd_check_format (abfd, bfd_object) == 0) |
|||
{ |
|||
printf_filtered ("File is not an object file\n"); |
|||
return; |
|||
} |
|||
|
|||
for (s = abfd->sections; s; s = s->next) |
|||
if (s->flags & SEC_LOAD) |
|||
{ |
|||
bfd_size_type section_size; |
|||
|
|||
printf_filtered ("%s\t: 0x%4x .. 0x%4x ", s->name, s->vma, |
|||
s->vma + s->_raw_size); |
|||
gdb_flush (gdb_stdout); |
|||
|
|||
monitor_printf (w89k_cmds.load, s->vma); |
|||
if (w89k_cmds.loadresp) |
|||
monitor_expect (w89k_cmds.loadresp, NULL, 0); |
|||
|
|||
xmodem_init_xfer (desc); |
|||
|
|||
section_size = bfd_section_size (abfd, s); |
|||
|
|||
for (i = 0; i < section_size; i += XMODEM_DATASIZE) |
|||
{ |
|||
int numbytes; |
|||
|
|||
numbytes = min (XMODEM_DATASIZE, section_size - i); |
|||
|
|||
bfd_get_section_contents (abfd, s, buffer + XMODEM_DATAOFFSET, i, |
|||
numbytes); |
|||
|
|||
xmodem_send_packet (desc, buffer, numbytes, hashmark); |
|||
|
|||
if (hashmark) |
|||
{ |
|||
putchar_unfiltered ('#'); |
|||
gdb_flush (gdb_stdout); |
|||
} |
|||
} /* Per-packet (or S-record) loop */ |
|||
|
|||
xmodem_finish_xfer (desc); |
|||
|
|||
monitor_expect_prompt (NULL, 0); |
|||
|
|||
putchar_unfiltered ('\n'); |
|||
} /* Loadable sections */ |
|||
|
|||
if (hashmark) |
|||
putchar_unfiltered ('\n'); |
|||
} |
|||
|
|||
/*
|
|||
* 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. |
|||
*/ |
|||
|
|||
static struct target_ops w89k_ops; |
|||
|
|||
static char *w89k_inits[] = |
|||
{"\n", NULL}; |
|||
|
|||
static struct monitor_ops w89k_cmds; |
|||
static void |
|||
init_w89k_cmds (void) |
|||
{ |
|||
w89k_cmds.flags = MO_GETMEM_NEEDS_RANGE | MO_FILL_USES_ADDR; /* flags */ |
|||
w89k_cmds.init = w89k_inits; /* Init strings */ |
|||
w89k_cmds.cont = "g\n"; /* continue command */ |
|||
w89k_cmds.step = "t\n"; /* single step */ |
|||
w89k_cmds.stop = "\003"; /* Interrupt char (^C) */ |
|||
w89k_cmds.set_break = "bp %x\n"; /* set a breakpoint */ |
|||
w89k_cmds.clr_break = "bc %x\n"; /* clear a breakpoint */ |
|||
w89k_cmds.clr_all_break = "bc *\n"; /* clear all breakpoints */ |
|||
w89k_cmds.fill = "f %x %x %x\n"; /* memory fill cmd */ |
|||
w89k_cmds.setmem.cmdb = "eb %x %x\n"; /* setmem.cmdb (addr, value) */ |
|||
w89k_cmds.setmem.cmdw = "eh %x %x\n"; /* setmem.cmdw (addr, value) */ |
|||
w89k_cmds.setmem.cmdl = "ew %x %x\n"; /* setmem.cmdl (addr, value) */ |
|||
w89k_cmds.setmem.cmdll = NULL; /* setmem.cmdll (addr, value) */ |
|||
w89k_cmds.setmem.resp_delim = NULL; /* setreg.resp_delim */ |
|||
w89k_cmds.setmem.term = NULL; /* setreg.term */ |
|||
w89k_cmds.setmem.term_cmd = NULL; /* setreg.term_cmd */ |
|||
w89k_cmds.getmem.cmdb = "db %x %x\n"; /* getmem.cmdb (startaddr, endaddr) */ |
|||
w89k_cmds.getmem.cmdw = "dh %x %x\n"; /* getmem.cmdw (startaddr, endaddr) */ |
|||
w89k_cmds.getmem.cmdl = "dw %x %x\n"; /* getmem.cmdl (startaddr, endaddr) */ |
|||
w89k_cmds.getmem.cmdll = NULL; /* getmem.cmdll (startaddr, endaddr) */ |
|||
w89k_cmds.getmem.resp_delim = " "; /* getmem.resp_delim */ |
|||
w89k_cmds.getmem.term = NULL; /* getmem.term */ |
|||
w89k_cmds.getmem.term_cmd = NULL; /* getmem.term_cmd */ |
|||
w89k_cmds.setreg.cmd = "r %s %x\n"; /* setreg.cmd (name, value) */ |
|||
w89k_cmds.setreg.resp_delim = NULL; /* setreg.resp_delim */ |
|||
w89k_cmds.setreg.term = NULL; /* setreg.term */ |
|||
w89k_cmds.setreg.term_cmd = NULL; /* setreg.term_cmd */ |
|||
w89k_cmds.getreg.cmd = "r %s\n"; /* getreg.cmd (name) */ |
|||
w89k_cmds.getreg.resp_delim = "\r"; /* getreg.resp_delim */ |
|||
w89k_cmds.getreg.term = NULL; /* getreg.term */ |
|||
w89k_cmds.getreg.term_cmd = NULL; /* getreg.term_cmd */ |
|||
w89k_cmds.dump_registers = "r\n"; /* dump_registers */ |
|||
w89k_cmds.register_pattern = "\\(\\w+\\)\\( +[0-9a-fA-F]+\\b\\)+"; |
|||
w89k_cmds.supply_register = w89k_supply_register; /* supply_register */ |
|||
w89k_cmds.load_routine = w89k_load; /* load routine */ |
|||
w89k_cmds.load = "u %x\n"; /* download command */ |
|||
w89k_cmds.loadresp = "\021"; /* load response (^Q) */ |
|||
w89k_cmds.prompt = "ROM>"; /* monitor command prompt */ |
|||
w89k_cmds.line_term = "\n"; /* end-of-line terminator */ |
|||
w89k_cmds.cmd_end = NULL; /* optional command terminator */ |
|||
w89k_cmds.target = &w89k_ops; /* target operations */ |
|||
w89k_cmds.stopbits = SERIAL_1_STOPBITS; /* number of stop bits */ |
|||
w89k_cmds.regnames = w89k_regnames; /* register names */ |
|||
w89k_cmds.magic = MONITOR_OPS_MAGIC; /* magic */ |
|||
} /* init_w89k_cmds */ |
|||
|
|||
static void |
|||
w89k_open (char *args, int from_tty) |
|||
{ |
|||
monitor_open (args, &w89k_cmds, from_tty); |
|||
} |
|||
|
|||
void |
|||
_initialize_w89k (void) |
|||
{ |
|||
init_w89k_cmds (); |
|||
init_monitor_ops (&w89k_ops); |
|||
|
|||
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); |
|||
} |
|||
Loading…
Reference in new issue