X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=simavr%2Fsim%2Favr_uart.c;h=8adfe546f036cc6f417a04a2640e83968d974364;hb=1b14bdb55e8dd1bdbcc410f16a500802c741741c;hp=9fc5611c3df5f854117be8645a70b4e7ebc88f19;hpb=e14455579a7ff3e3d17c79bb5aa62c13d3c4a8ed;p=simavr diff --git a/simavr/sim/avr_uart.c b/simavr/sim/avr_uart.c index 9fc5611..8adfe54 100644 --- a/simavr/sim/avr_uart.c +++ b/simavr/sim/avr_uart.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "avr_uart.h" #include "sim_hex.h" @@ -156,13 +157,14 @@ static void avr_uart_write(struct avr_t * avr, avr_io_addr_t addr, uint8_t v, vo p->usec_per_byte, avr_uart_txc_raise, p); // should be uart speed dependent if (p->flags & AVR_UART_FLAG_STDIO) { - static char buf[128]; - static int l = 0; - buf[l++] = v < ' ' ? '.' : v; - buf[l] = 0; - if (v == '\n' || l == 127) { - l = 0; - printf( FONT_GREEN "%s\n" FONT_DEFAULT, buf); + const int maxsize = 256; + if (!p->stdio_out) + p->stdio_out = malloc(maxsize); + p->stdio_out[p->stdio_len++] = v < ' ' ? '.' : v; + p->stdio_out[p->stdio_len] = 0; + if (v == '\n' || p->stdio_len == maxsize) { + p->stdio_len = 0; + printf( FONT_GREEN "%s\n" FONT_DEFAULT, p->stdio_out); } } TRACE(printf("UDR%c(%02x) = %02x\n", p->name, addr, v);)