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.
This commit is contained in:
Jim Blandy
2001-09-10 23:47:42 +00:00
parent bb36822663
commit c4b7e16dd9
4 changed files with 224 additions and 4 deletions

View File

@@ -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);
}