+
+u16 sci_timer;
+void serial_rti() { /* called every 6.6 ms */
+ if (sci_timer) sci_timer--;
+}
+
+/* for gdb compatibility */
+int serial_readchar(u8 timeout) {
+ sci_timer = timeout * 152;
+ while (sci_timer && sci_rx_buf_ptr_start == sci_rx_buf_ptr); /* spin */
+ if (sci_timer == 0) return SERIAL_TIMEOUT;
+ return sci_rx_buf[sci_rx_buf_ptr_start++];
+}
+
+void serial_write(const char *str, int len) {
+ char *c, *end;
+ end = (char*)(str + len);
+ for (c = (char*)str; c < end; c++) {
+ while (!(_io_ports[M6811_SCSR] & M6811_TDRE)); /* wait for TX ready */
+ _io_ports[M6811_SCDR] = *c; /* send byte */
+ }
+}