diff options
author | Jim Blandy <jimb@codesourcery.com> | 2001-09-10 23:47:42 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2001-09-10 23:47:42 +0000 |
commit | c4b7e16dd99c068b307da9115497df5dd8b7fb9a (patch) | |
tree | 0ced3a627a1c38439a673c7d3c669da26622898c /libgloss/m68k/idp-outbyte.c | |
parent | bb36822663aeb8e82a3c0c6dd7aa0ad287b6fb65 (diff) | |
download | cygnal-c4b7e16dd99c068b307da9115497df5dd8b7fb9a.tar.gz cygnal-c4b7e16dd99c068b307da9115497df5dd8b7fb9a.tar.bz2 cygnal-c4b7e16dd99c068b307da9115497df5dd8b7fb9a.zip |
Add support for GDB monitor-style I/O.
* m68k/idp-outbyte.c (raw_outbyte): Renamed from outbyte; made
static.
(outbyte): Call raw_outbyte; if GDB_MONITOR_OUTPUT is #defined,
precede the byte with a ^O character.
* m68k/idpgdb.ld: New linker script.
* m68k/Makefile.in (IDPGDB_LDFLAGS, IDPGDB_BSP, IDPGDB_OBJS): New
variables.
(all): Add ${IDPGDB_BSP} to the list of things to build.
(${IDPGDB_BSP}, idp-gdb-outbyte.o, idpgdb-test.x,
idpgdb-test.srec, idpgdb-test.dis, idpgdb-test): New rules.
(install): Install the IDPGDB stuff, too.
Diffstat (limited to 'libgloss/m68k/idp-outbyte.c')
-rw-r--r-- | libgloss/m68k/idp-outbyte.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/libgloss/m68k/idp-outbyte.c b/libgloss/m68k/idp-outbyte.c index d09ae89cd..a95dc0c53 100644 --- a/libgloss/m68k/idp-outbyte.c +++ b/libgloss/m68k/idp-outbyte.c @@ -28,15 +28,47 @@ #define WRITEREG(x, y) (*((char *) DUART_ADDR + (x * 4) + 3) = y) /* - * outbyte -- send a byte to the DUART buffer. This only sends + * raw_outbyte -- send a byte to the DUART buffer. This only sends * to channel A. */ -void -_DEFUN (outbyte, (byte), +static void +_DEFUN (raw_outbyte, (byte), char byte) { + /* First, wait for the UART to finish clocking out the last + character we sent, if any. Then, give it the next character to + work on. By waiting first, then handing off a new character, we + allow the UART to work while the processor (perhaps) does other + things; if we waited after sending each character, there'd be no + opportunity for parallelism. */ while ((READREG (DUART_SRA) & 0x04) == 0x00) ; WRITEREG (DUART_TBA, byte); /* write the byte */ } + + +/* + * outbyte -- send BYTE out the DUART's channel A, for display to + * the user. + * + * Normally, this is identical to raw_outbyte, but if + * GDB_MONITOR_OUTPUT is #defined, we prefix each byte we send + * with a ^O character (ASCII 15). This is a signal to GDB's + * `rom68k' target to pass the character directly on to the user; + * it allows programs to do console output under GDB. + * + * We compile this file twice: once with GDB_MONITOR_OUTPUT + * #defined, and once without. The former .o file we put in + * libidpgdb.a, which is included in the link by idpgdb.ld; the + * latter we put in libidp.a, which is selected by idp.ld. + */ +void +_DEFUN (outbyte, (byte), + char byte) +{ +#ifdef GDB_MONITOR_OUTPUT + raw_outbyte (0x0f); +#endif + raw_outbyte (byte); +} |