diff --git a/src/sexpots/sexpots.c b/src/sexpots/sexpots.c
index 306ee44879a6b36aa6a4e8b8ef6a6cb14aef2b3d..aa411eb5b1dd1026cd9b3eb981f766fed0b60824 100644
--- a/src/sexpots/sexpots.c
+++ b/src/sexpots/sexpots.c
@@ -935,10 +935,22 @@ SOCKET connect_socket(const char* host, ushort port)
 BOOL call_terminated;
 BOOL input_thread_terminated;
 
+char* chr(BYTE ch, char* str, size_t size)
+{
+	if(ch < ' ')
+		snprintf(str, size, "^%c   (%d)", '@' + ch, ch);
+	else if(ch > '~')
+		snprintf(str, size, "0x%02X (%d)", ch, ch);
+	else
+		snprintf(str, size, "'%c'  (%d)", ch, ch);
+	return str;
+}
+
 /****************************************************************************/
 /****************************************************************************/
 void input_thread(void* arg)
 {
+	char		dbg[32];
 	BYTE		ch;
 
 	lprintf(LOG_DEBUG,"Input thread started");
@@ -948,7 +960,7 @@ void input_thread(void* arg)
 			continue;
 		}
 		if(com_debug)
-			lprintf(LOG_DEBUG, "Received char from COM port (%s): 0x%02x (%d)", com_dev, ch, ch);
+			lprintf(LOG_DEBUG, "Received char from COM port (%s): %s", com_dev, chr(ch, dbg, sizeof(dbg)));
 		if(telnet && ch==TELNET_IAC)
 			sendsocket(sock, &ch, sizeof(ch));	/* escape Telnet IAC char (255) when in telnet mode */
 		sendsocket(sock, &ch, sizeof(ch));
@@ -1227,6 +1239,17 @@ BYTE* telnet_interpret(BYTE* inbuf, int inlen, BYTE* outbuf, int *outlen)
     return(outbuf);
 }
 
+void debug_log_com_write(BYTE* buf, int len)
+{
+	int i;
+
+	for(i=0; i < len; ++i) {
+		char dbg[32];
+		BYTE ch = buf[i];
+		lprintf(LOG_DEBUG, "Writing char to COM port (%s): %s", com_dev, chr(ch, dbg, sizeof(dbg)));
+	}
+}
+
 /****************************************************************************/
 /****************************************************************************/
 BOOL handle_call(void)
@@ -1306,8 +1329,11 @@ BOOL handle_call(void)
 		else
 			p=buf;
 
-		if((wr=comWriteBuf(com_handle, p, rd)) != COM_ERROR)
+		if((wr=comWriteBuf(com_handle, p, rd)) != COM_ERROR) {
+			if(com_debug)
+				debug_log_com_write(p, wr);
 			bytes_sent += wr;
+		}
 	}
 
 	call_terminated=TRUE;	/* terminate input_thread() */