diff --git a/ROM2/main_basic.c b/ROM2/main_basic.c
index 3e886485b45430fe4f6b7d6b99706a1f832dd8ce..888932e5908dd182150a342a38d2f7c00764b97d 100644
--- a/ROM2/main_basic.c
+++ b/ROM2/main_basic.c
@@ -123,18 +123,14 @@ void ping_pong() {
 	/* make sure it's really a ping */
 	if (sci_rx_buf[1] != 'I' ||
 		sci_rx_buf[2] != 'N' ||
-		sci_rx_buf[3] != 'G') {
+		sci_rx_buf[3] != 'G' ||
+		sci_rx_buf[4] != '\0') {
 		send_nack();
 		return;
 	}
 	/* respond with ack & pong */
 	wait_for_tx_free();
-	sci_tx_buf[0] = 'P';
-	sci_tx_buf[1] = 'O';
-	sci_tx_buf[2] = 'N';
-	sci_tx_buf[3] = 'G';
-	sci_tx_buf[4] = '\n';
-	sci_tx_buf[5] = 0;
+	my_strncpy(sci_tx_buf, "PONG\n", BUFFER_LEN);
 	send_packet();
 }
 
diff --git a/ROM2/sci.c b/ROM2/sci.c
index 2346b28569b60332f84f04c28feb2feda1a9cb04..739d706069a49c0ca5a061f06c9a3f4040947164 100644
--- a/ROM2/sci.c
+++ b/ROM2/sci.c
@@ -40,7 +40,9 @@ void sci_rx_int() {
 		return;
 	}
 	sci_rx_buf[sci_rx_buf_ptr] = _io_ports[M6811_SCDR];
-	if (sci_rx_buf[sci_rx_buf_ptr] == '\n') {
+	if (sci_rx_buf[sci_rx_buf_ptr] == '\n' ||
+			sci_rx_buf[sci_rx_buf_ptr] == '\r') {
+		if (sci_rx_buf_ptr == 0) return; /* we've read a blank packet in */
 		sci_rx_buf[sci_rx_buf_ptr] = '\0';
 		sci_have_packet = 1;
 		sci_rx_buf_ptr = 0;
@@ -68,15 +70,11 @@ void msg_clr() {
 }
 
 void send_ack() {
-	sci_tx_buf[0] = '!';
-	sci_tx_buf[1] = '\n';
-	sci_tx_buf[2] = '\0';
+	my_strncpy(sci_tx_buf, "!\n", BUFFER_LEN);
 	send_packet();
 }
 
 void send_nack() {
-	sci_tx_buf[0] = '?';
-	sci_tx_buf[1] = '\n';
-	sci_tx_buf[2] = '\0';
+	my_strncpy(sci_tx_buf, "?\n", BUFFER_LEN);
 	send_packet();
 }