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:
@@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user