diff --git a/include/cmd.h b/include/cmd.h
index 089a981cb5b34895191caf82e9df5fde156ab3a4..8c6b69819cafa0db41adee1e546a25931cb9c730 100644
--- a/include/cmd.h
+++ b/include/cmd.h
@@ -2,5 +2,6 @@
 #define __CMD_H__
 
 #define CMD_HALT 0
+#define CMD_NOINPUT 1
 int ListenCommand();
 #endif
diff --git a/include/myio.h b/include/myio.h
new file mode 100644
index 0000000000000000000000000000000000000000..fec4dfc9380011dbe382e9850aa381b1ba83e9f7
--- /dev/null
+++ b/include/myio.h
@@ -0,0 +1,8 @@
+#ifndef __MYIO_H__
+#define __MYIO_H__
+
+#define COM1 0
+#define COM2 1
+
+int mygetc(int Channel,char* Char);
+#endif
diff --git a/src/Makefile b/src/Makefile
index 38247bfea852eec5b72beca7ebec86213022717c..e58a8ea4828530a8933c83cb3acfee5a26a62cfe 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -28,7 +28,7 @@ startup.o: startup.s
 	$(AS) $(ASFLAGS) -o startup.o startup.s
 
 startup.elf: startup.o
-	$(LD) $(LDFLAGS) -o $@ startup.o -lmycanvas -lmyclock -lcmd -lbwio -lgcc
+	$(LD) $(LDFLAGS) -o $@ startup.o -lmycanvas -lmyclock -lcmd -lmyio -lbwio -lgcc
 
 clocktest.s: clocktest.c
 	$(XCC) -S $(CFLAGS) clocktest.c
diff --git a/src/libsrc/Makefile b/src/libsrc/Makefile
index 774204df11bc7cf8514bdca9e2df8a61a0d5187b..83c4cc15d7929f0333bffe6a6f753939bd96a03c 100644
--- a/src/libsrc/Makefile
+++ b/src/libsrc/Makefile
@@ -29,6 +29,8 @@ mycanvas.s: mycanvas.c
 myclock.s: myclock.c
 	$(XCC) -S $(CFLAGS) myclock.c
 
+myio.s: myio.c
+	$(XCC) -S $(CFLAGS) myio.c
 
 bwio.o: bwio.s
 	$(AS) $(ASFLAGS) -o bwio.o bwio.s
@@ -42,6 +44,9 @@ mycanvas.o: mycanvas.s
 myclock.o: myclock.s
 	$(AS) $(ASFLAGS) -o myclock.o myclock.s
 
+myio.o: myio.s
+	$(AS) $(ASFLAGS) -o myio.o myio.s
+
 bwio.a: bwio.o
 	$(AR) $(ARFLAGS) $@ bwio.o
 
@@ -53,12 +58,15 @@ mycanvas.a: mycanvas.o
 
 myclock.a: myclock.o
 	$(AR) $(ARFLAGS) $@ myclock.o
+myio.a: myio.o
+	$(AR) $(ARFLAGS) $@ myio.o
 
-install: bwio.a mycanvas.a myclock.a cmd.a
+install: bwio.a mycanvas.a myclock.a cmd.a myio.a
 	mv bwio.a ../../lib/libbwio.a
 	mv cmd.a ../../lib/libcmd.a
 	mv mycanvas.a ../../lib/libmycanvas.a
 	mv myclock.a ../../lib/libmyclock.a
+	mv myio.a ../../lib/libmyio.a
 
 clean:
 	-rm -f *.s *.o *.a *~ ../../lib/*.a
diff --git a/src/libsrc/cmd.c b/src/libsrc/cmd.c
index 22ade437a17aca15134b805b910699e7aff9bc6d..2aa0f8dd79096bd53248d72257ecef502cfa992c 100644
--- a/src/libsrc/cmd.c
+++ b/src/libsrc/cmd.c
@@ -1,15 +1,18 @@
-#include <bwio.h>
+#include <myio.h>
 #include <cmd.h>
 #include <mycanvas.h>
 
 int ListenCommand()
 {
   CURSOR_POS(20,1);
-  char FirstChar = bwgetc(COM2);
-  switch(FirstChar){
-  case 'q':
-    return CMD_HALT;
-  default:
-    break;
-  }
+  char FirstChar;
+  if(mygetc(COM2, &FirstChar)){ 
+    switch(FirstChar){
+    case 'q':
+      return CMD_HALT;
+    default:
+      break;
+    }
+  } 
+  return CMD_NOINPUT;
 }
diff --git a/src/libsrc/myio.c b/src/libsrc/myio.c
new file mode 100644
index 0000000000000000000000000000000000000000..17c293ae5e0b62ac1de53f22b998bedf5f6ae101
--- /dev/null
+++ b/src/libsrc/myio.c
@@ -0,0 +1,24 @@
+#include <myio.h>
+#include <ts7200.h>
+
+int mygetc(int Channel, char *Char){
+  int *flag, *data;
+  switch (Channel){
+  case COM1:
+    flag = (int *)(UART1_BASE + UART_FLAG_OFFSET);
+    data = (int *)(UART1_BASE + UART_DATA_OFFSET);
+    break;
+  case COM2:
+    flag = (int *)(UART2_BASE + UART_FLAG_OFFSET);
+    data = (int *)(UART2_BASE + UART_DATA_OFFSET);
+    break;
+  default:
+    break;
+  }
+  if( *flag & RXFF_MASK){
+    *Char = (char) *data;
+    return 1;
+  }else{
+    return 0;
+  }
+}