+Fri Apr 7 17:43:01 1995 Stu Grossman (grossman@andros.cygnus.com)
+
+ * monitor.c: make_xmodem_packet and print_xmodem_packet go away.
+ send_xmodem_packet shows up to do the obvious. Lots of fixes to
+ xmodem downloads including resetting of block number at start of
+ new transfers, fix for buffer overrun problem, addition of CRC
+ generation code.
+ * (monitor_open): loadtype_str and loadproto_str now default to
+ first entry in monitor_ops->loadtypes.
+ * (monitor_wait): Lengthen register dump buf, because of verbose
+ Winbond monitor.
+ * (monitor_fetch_register): Report unimplemented registers as 0.
+ * (monitor_read_memory): Only do 16 byte aligned transfers
+ because of formatting weirdness with the Winbond monitor. Also,
+ ignore non-hex, non-whitespace formatting between bytes (same
+ monitor).
+ * (monitor_load): Clean up logic.
+ * (monitor_load_srec): Re-do xmodem support. Move lots of it
+ into send_xmodem_packet.
+ * (getacknak): Get rid of polls and timeouts. Handle CRC
+ requests from receiver.
+ * (monitor_make_srec): Efficiency improvements. Don't call
+ sprintf to output two digit hex numbers.
+ * (crcinit, docrc): New, CRC-16 support routines.
+ * (send_xmodem_packet): New routine to generate either CRC-16 or
+ checksummed xmodem packets.
+
+ * remote-est.c (est_loadtypes), rom68k-rom.c (rom68k_loadtypes):
+ Reduce tables down to only the load types supported by each
+ monitor.
+
+ * w89k-rom.c (w89k_supply_register): Parses output of Winbond
+ register dumps.
+ * (w89k_loadtypes, w89k_loadprotos): Reduce to just srec/xmodem.
+ * (w89k_cmds): Add clear all breakpoints, memory fill, and dump
+ registers commands.
+
Thu Apr 6 17:00:46 1995 Michael Meissner <meissner@tiktok.cygnus.com>
* Makefile.in (X11_INCLUDES): Define as empty.
"CCR", NULL, NULL, "TR0", "TR1",
};
+static void
+w89k_supply_register (regname, regnamelen, val, vallen)
+ 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);
+}
+
/*
* Define the monitor command strings. Since these are passed directly
* through to a printf style function, we need can include formatting
static struct target_ops w89k_ops;
-static char *w89k_loadtypes[] = {"none", "srec", "default", NULL};
-static char *w89k_loadprotos[] = {"none", "xmodem", NULL};
+static char *w89k_loadtypes[] = {"srec", NULL};
+static char *w89k_loadprotos[] = {"xmodem", NULL};
static char *w89k_inits[] = {"\r", NULL};
static struct monitor_ops w89k_cmds =
{
- MO_GETMEM_NEEDS_RANGE, /* flags */
+ MO_GETMEM_NEEDS_RANGE|MO_FILL_USES_ADDR, /* 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 */
+ "bc *\r", /* clear all breakpoints */
+ "f %x %x %x\r", /* memory fill cmd */
{
"eb %x %x\r", /* setmem.cmdb (addr, value) */
"eh %x %x\r", /* setmem.cmdw (addr, value) */
NULL, /* getreg.term */
NULL, /* getreg.term_cmd */
},
- NULL, /* dump_registers */
- NULL, /* register_pattern */
- NULL, /* supply_register */
+ "r\r", /* dump_registers */
+ "\\(\\w+\\)\\( +[0-9a-fA-F]+\\b\\)+",
+ w89k_supply_register, /* supply_register */
"u\r", /* download command */
- NULL, /* load response */
+ "u\n\r", /* load response */
"ROM>", /* monitor command prompt */
NULL, /* end-of-command delimitor */
NULL, /* optional command terminator */