diff --git a/include/bwio.h b/include/bwio.h
index 8319f8659f6065943a006831e717a49d7f84799b..f435f040a864ce2c90cbf056bfc0ab65c2e1601b 100644
--- a/include/bwio.h
+++ b/include/bwio.h
@@ -1,5 +1,8 @@
+#ifndef __BWIO_H__
+#define __BWIO_H__
 /*
  * bwio.h
+ * Copied from Bill Cowan /u/wbcowan/cs452/io/include/bwio.h
  */
 
 typedef char *va_list;
@@ -37,3 +40,4 @@ int bwputr( int channel, unsigned int reg );
 void bwputw( int channel, int n, char fc, char *bf );
 
 void bwprintf( int channel, char *format, ... );
+#endif
diff --git a/include/cmd.h b/include/cmd.h
new file mode 100644
index 0000000000000000000000000000000000000000..089a981cb5b34895191caf82e9df5fde156ab3a4
--- /dev/null
+++ b/include/cmd.h
@@ -0,0 +1,6 @@
+#ifndef __CMD_H__
+#define __CMD_H__
+
+#define CMD_HALT 0
+int ListenCommand();
+#endif
diff --git a/include/mycanvas.h b/include/mycanvas.h
index 3fd60cfdc7915c00859f91b3a9dad0d1bc384c49..fd609fcf82bbec2b2613203a50ac817f1bdf8edd 100644
--- a/include/mycanvas.h
+++ b/include/mycanvas.h
@@ -1,6 +1,24 @@
 #ifndef __CANVAS_H__
 #define __CANVAS_H__
+#include <bwio.h>
+#include <myclock.h>
+/*
+ * The Cursor Addressing Macro is provided by
+ * courseweb.stthomas.edu/tpsturm/private/notes/qm300/ANSI.html
+ */
 
-void DrawClock(int* ClockCount);
+#define ESC_CANVAS 27
+#define CLEAR_SCREEN bwprintf(COM2, "%c[2J", ESC_CANVAS)
+
+#define MOVE_UP(Num) bwprintf(COM2, "%c[%dA", ESC_CANVAS)
+#define MOVE_DOWN(Num) bwprintf(COM2, "%c[%dB", ESC_CANVAS)
+#define MOVE_LEFT(Num) bwprintf(COM2, "%c[%dD", ESC_CANVAS,Num)
+#define MOVE_RIGHT(Num) bwprintf(COM2, "%c[%dC", ESC_CANVAS,Num)
+#define CURSOR_POS(Row, Col) bwprintf(COM2, "%c[%d;%dH",ESC_CANVAS, Row, Col)
+
+void DrawLine_H(const char Element, const int Length);
+void DrawLine_V(const char Element, const int Length);
+void DrawPanel();
+void DrawClock(Clock* MyClock);
 
 #endif
diff --git a/include/mycanvas.h~ b/include/mycanvas.h~
deleted file mode 100644
index 956253e0fdf362447af970826105bb637980a5f3..0000000000000000000000000000000000000000
--- a/include/mycanvas.h~
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef __CANVAS_H__
-#define __CANVAS_H__
-
-void DrawClock();
-
-#endif
diff --git a/include/myclock.h b/include/myclock.h
index ce312c32e62daacc65279ef1f361f7f38219ee93..35d3a9a14374833e6465aa7d6aea9550eefbf1fc 100644
--- a/include/myclock.h
+++ b/include/myclock.h
@@ -3,8 +3,16 @@
 
 #define CLOCK_LOAD_VALUE 50800
 
+typedef struct
+{
+  unsigned int ClockCount;
+  unsigned int LastTimerValue;
+  char bChanged;
+} Clock;
+
+
 // initialize the global time to 0
-void InitClockCount(int *ClockCount, int* LastTimerValue);
+void InitClockCount(Clock* MyClock);
 // update the time count from start of the program
-void UpdateClock(int* ClockCount, int* LastTimerValue);
+void UpdateClock(Clock* MyClock);
 #endif
diff --git a/include/myclock.h~ b/include/myclock.h~
deleted file mode 100644
index 81ba61ed1efa71f391b4e7bef3ee31b4098061fa..0000000000000000000000000000000000000000
--- a/include/myclock.h~
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef __MY_CLOCK_H__
-#define __MY_CLOCK_H__
-
-#define CLOCK_LOAD_VALUE 50800
-
-volatile static unsigned int ClockCount;
-// initialize the global time to 0
-void InitClockCount(int *ClockCount, int* LastTimerValue);
-// update the time count from start of the program
-void UpdateClock(int* ClockCount, int* LastTimerValue);
-#endif
diff --git a/src/Makefile b/src/Makefile
index f20846a487da456fcbedbf93508f32b5fa835b41..38247bfea852eec5b72beca7ebec86213022717c 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -19,7 +19,7 @@ ARFLAGS = rcs
 
 LDFLAGS = -init main -Map first.map -N -T orex.ld -L/u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2 -L../lib
 
-all: startup.elf #first.elf
+all: startup.elf clocktest.elf
 
 startup.s: startup.c
 	$(XCC) -S $(CFLAGS) startup.c
@@ -28,8 +28,27 @@ startup.o: startup.s
 	$(AS) $(ASFLAGS) -o startup.o startup.s
 
 startup.elf: startup.o
-	$(LD) $(LDFLAGS) -o $@ startup.o -lmycanvas -lmyclock -lbwio -lgcc
+	$(LD) $(LDFLAGS) -o $@ startup.o -lmycanvas -lmyclock -lcmd -lbwio -lgcc
+
+clocktest.s: clocktest.c
+	$(XCC) -S $(CFLAGS) clocktest.c
+
+clocktest.o: clocktest.s
+	$(AS) $(ASFLAGS) -o clocktest.o clocktest.s
+
+clocktest.elf: clocktest.o
+	$(LD) $(LDFLAGS) -o $@ clocktest.o -lbwio -lgcc
+
+
+getc.s: getc.c
+	$(XCC) -S $(CFLAGS) getc.c
+
+getc.o: getc.s
+	$(AS) $(ASFLAGS) -o getc.o getc.s
+
+getc.elf: getc.o
+	$(LD) $(LDFLAGS) -o $@ getc.o -lbwio -lgcc
 
 clean:
-	-rm -f first.elf *.s *.o startup.map *.a *~
+	-rm -f *.elf *.s *.o startup.map *.a *~
 
diff --git a/src/clocktest.c b/src/clocktest.c
new file mode 100644
index 0000000000000000000000000000000000000000..6cf1c36887813b4b6fd9b055bd57c8566f854a23
--- /dev/null
+++ b/src/clocktest.c
@@ -0,0 +1,19 @@
+#include <bwio.h>
+#include <ts7200.h>
+
+int main(){
+  bwsetfifo(COM2,OFF);
+  bwsetspeed(COM2, 115200);  
+  volatile unsigned int Count;
+  unsigned int * load= (unsigned int *) (TIMER3_BASE + LDR_OFFSET);
+  unsigned int * control= (unsigned int *) (TIMER3_BASE + CRTL_OFFSET);
+  unsigned int * read = (unsigned int *) (TIMER3_BASE + VAL_OFFSET);
+  *load = 508000;
+  *control = ENABLE_MASK | (MODE_MASK | CLKSEL_MASK);
+  while(1){
+    Count = *read;
+    //bwprintf(COM2,"LOAD: %d\n\r", *load);
+    bwprintf(COM2,"VAL: %d\n\r", Count);
+   }
+  return 0;
+}
diff --git a/src/first.map b/src/first.map
index 3ea6cb0ac14eec8c3247e9c9e0bca4d5f0a2c6d5..90c606acfa84f38dded0457cbbf9e99b081e28f7 100644
--- a/src/first.map
+++ b/src/first.map
@@ -1,10 +1,6 @@
 Archive member included because of file (symbol)
 
-../lib/libmycanvas.a(mycanvas.o)
-                              startup.o (DrawClock)
-../lib/libmyclock.a(myclock.o)
-                              startup.o (InitClockCount)
-../lib/libbwio.a(bwio.o)      startup.o (bwsetfifo)
+../lib/libbwio.a(bwio.o)      clocktest.o (bwsetfifo)
 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
                               ../lib/libbwio.a(bwio.o) (__udivsi3)
 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
@@ -32,66 +28,53 @@ bss             0x0000000000000000        0x0
  *(.bss)
                 0x0000000000000000                _BssEnd = .
 
-text            0x0000000000000000     0x133c
+text            0x0000000000000000      0xef0
  *(.text)
- .text          0x0000000000000000      0x17c startup.o
-                0x000000000000010c                main
-                0x0000000000000000                initialize
-                0x00000000000000b0                runloop
- .text          0x000000000000017c      0x174 ../lib/libmycanvas.a(mycanvas.o)
-                0x000000000000017c                DrawClock
- .text          0x00000000000002f0      0x140 ../lib/libmyclock.a(myclock.o)
-                0x00000000000002f0                InitClockCount
-                0x0000000000000394                UpdateClock
- .text          0x0000000000000430      0xc54 ../lib/libbwio.a(bwio.o)
-                0x00000000000007a8                bwputr
-                0x0000000000000d14                bwi2a
-                0x0000000000000430                bwsetfifo
-                0x0000000000000604                bwputc
-                0x0000000000000a64                bwa2d
-                0x00000000000004f8                bwsetspeed
-                0x00000000000006c8                c2x
-                0x0000000000000b0c                bwa2i
-                0x00000000000009ac                bwgetc
-                0x0000000000000bd0                bwui2a
-                0x0000000000000d78                bwformat
-                0x00000000000008a4                bwputw
-                0x000000000000104c                bwprintf
-                0x0000000000000728                bwputx
-                0x0000000000000828                bwputstr
- .text          0x0000000000001084      0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
-                0x0000000000001084                __udivsi3
-                0x000000000000117c                __aeabi_uidivmod
- .text          0x0000000000001194       0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
-                0x0000000000001194                __umodsi3
- .text          0x0000000000001260        0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
-                0x0000000000001260                __aeabi_ldiv0
-                0x0000000000001260                __div0
-                0x0000000000001260                __aeabi_idiv0
+ .text          0x0000000000000000       0xa4 clocktest.o
+                0x0000000000000000                main
+ .text          0x00000000000000a4      0xc54 ../lib/libbwio.a(bwio.o)
+                0x000000000000041c                bwputr
+                0x0000000000000988                bwi2a
+                0x00000000000000a4                bwsetfifo
+                0x0000000000000278                bwputc
+                0x00000000000006d8                bwa2d
+                0x000000000000016c                bwsetspeed
+                0x000000000000033c                c2x
+                0x0000000000000780                bwa2i
+                0x0000000000000620                bwgetc
+                0x0000000000000844                bwui2a
+                0x00000000000009ec                bwformat
+                0x0000000000000518                bwputw
+                0x0000000000000cc0                bwprintf
+                0x000000000000039c                bwputx
+                0x000000000000049c                bwputstr
+ .text          0x0000000000000cf8      0x110 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
+                0x0000000000000cf8                __udivsi3
+                0x0000000000000df0                __aeabi_uidivmod
+ .text          0x0000000000000e08       0xcc /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_umodsi3.o)
+                0x0000000000000e08                __umodsi3
+ .text          0x0000000000000ed4        0x4 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_dvmd_tls.o)
+                0x0000000000000ed4                __aeabi_ldiv0
+                0x0000000000000ed4                __div0
+                0x0000000000000ed4                __aeabi_idiv0
  *(.got)
  *(.got.plt)
- .got.plt       0x0000000000001264        0xc startup.o
-                0x0000000000001264                _GLOBAL_OFFSET_TABLE_
+ .got.plt       0x0000000000000ed8        0xc clocktest.o
+                0x0000000000000ed8                _GLOBAL_OFFSET_TABLE_
  *(.rodata)
- .rodata        0x0000000000001270       0x10 startup.o
- .rodata        0x0000000000001280       0x58 ../lib/libmycanvas.a(mycanvas.o)
- .rodata        0x00000000000012d8       0x64 ../lib/libmyclock.a(myclock.o)
+ .rodata        0x0000000000000ee4        0xc clocktest.o
  *(.glue_7)
  *(.glue_7t)
 
 .rel.dyn
-LOAD startup.o
-LOAD ../lib/libmycanvas.a
-LOAD ../lib/libmyclock.a
+LOAD clocktest.o
 LOAD ../lib/libbwio.a
 LOAD /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a
-OUTPUT(startup.elf elf32-littlearm)
+OUTPUT(clocktest.elf elf32-littlearm)
 
-.comment        0x0000000000000000       0x48
- .comment       0x0000000000000000       0x12 startup.o
- .comment       0x0000000000000012       0x12 ../lib/libmycanvas.a(mycanvas.o)
- .comment       0x0000000000000024       0x12 ../lib/libmyclock.a(myclock.o)
- .comment       0x0000000000000036       0x12 ../lib/libbwio.a(bwio.o)
+.comment        0x0000000000000000       0x24
+ .comment       0x0000000000000000       0x12 clocktest.o
+ .comment       0x0000000000000012       0x12 ../lib/libbwio.a(bwio.o)
 
 .debug_line     0x0000000000000000      0x14f
  .debug_line    0x0000000000000000       0x86 /u/wbcowan/gnuarm-4.0.2/lib/gcc/arm-elf/4.0.2/libgcc.a(_udivsi3.o)
diff --git a/src/getc.c b/src/getc.c
new file mode 100644
index 0000000000000000000000000000000000000000..a5956203cc0174fac6495c5e212e1abdfe0e3d98
--- /dev/null
+++ b/src/getc.c
@@ -0,0 +1,14 @@
+#include <bwio.h>
+#include <mycanvas.h>
+int main()
+{
+  bwsetfifo(COM2, OFF);
+  bwsetspeed(COM2, 115200);
+  int i = 0;
+  char display;
+  for(;i<10;i++){
+    display=bwgetc(COM2);
+    bwputc(COM2, display);
+    MOVE_RIGHT(1);
+  }
+}
diff --git a/src/libsrc/Makefile b/src/libsrc/Makefile
index a932d94b058242f772d7453b11383fa563e9c274..774204df11bc7cf8514bdca9e2df8a61a0d5187b 100644
--- a/src/libsrc/Makefile
+++ b/src/libsrc/Makefile
@@ -1,4 +1,3 @@
-#
 # Makefile for busy-wait IO tests
 #
 XCC     = /u/wbcowan/gnuarm-4.0.2/arm-elf/bin/gcc
@@ -16,11 +15,14 @@ ASFLAGS	= -mcpu=arm920t -mapcs-32
 
 ARFLAGS = rcs
 
-all:  bwio.a 
+all: bwio.a
 
 bwio.s: bwio.c
 	$(XCC) -S $(CFLAGS) bwio.c
 
+cmd.s: cmd.c
+	$(XCC) -S $(CFLAGS) cmd.c
+
 mycanvas.s: mycanvas.c
 	$(XCC) -S $(CFLAGS) mycanvas.c
 
@@ -31,6 +33,9 @@ myclock.s: myclock.c
 bwio.o: bwio.s
 	$(AS) $(ASFLAGS) -o bwio.o bwio.s
 
+cmd.o: cmd.s
+	$(AS) $(ASFLAGS) -o cmd.o cmd.s
+
 mycanvas.o: mycanvas.s
 	$(AS) $(ASFLAGS) -o mycanvas.o mycanvas.s
 
@@ -40,14 +45,18 @@ myclock.o: myclock.s
 bwio.a: bwio.o
 	$(AR) $(ARFLAGS) $@ bwio.o
 
+cmd.a: cmd.o
+	$(AR) $(ARFLAGS) $@ cmd.o
+
 mycanvas.a: mycanvas.o
 	$(AR) $(ARFLAGS) $@ mycanvas.o
 
 myclock.a: myclock.o
 	$(AR) $(ARFLAGS) $@ myclock.o
 
-install: bwio.a mycanvas.a myclock.a
+install: bwio.a mycanvas.a myclock.a cmd.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
 
diff --git a/src/libsrc/cmd.c b/src/libsrc/cmd.c
new file mode 100644
index 0000000000000000000000000000000000000000..22ade437a17aca15134b805b910699e7aff9bc6d
--- /dev/null
+++ b/src/libsrc/cmd.c
@@ -0,0 +1,15 @@
+#include <bwio.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;
+  }
+}
diff --git a/src/libsrc/mycanvas.c b/src/libsrc/mycanvas.c
index 1f92bd4abd4dcb18b61518cfd0b506bb362e206f..dda800da913a35ebede50ca3e7767c2c93f9011a 100644
--- a/src/libsrc/mycanvas.c
+++ b/src/libsrc/mycanvas.c
@@ -1,14 +1,52 @@
-#include <bwio.h>
 #include <mycanvas.h>
-#include <myclock.h>
 
-void DrawClock(int* ClockCount)
+void DrawLine_H(const char Element, const int Length)
 {
-  bwprintf(COM2,"DrawClock, ClockCount %d\n\r", *ClockCount);
-  unsigned int TenthSecond = (*ClockCount) % 10;
-  bwprintf(COM2,"DrawClock, Tenth %d\n\r", TenthSecond);
-  unsigned int Second = ((*ClockCount - TenthSecond) % 600)/10;
-  bwprintf(COM2,"DrawClock, Second %d\n\r", Second);
-  unsigned int Minute = (*ClockCount)/600;
-  bwprintf(COM2,"%d:%d:%d\n\r",Minute,Second,TenthSecond);
+  int i = 0;
+  for(; i<Length; i++){
+    bwputc(COM2,Element);
+  }
+}
+
+void DrawLine_V(const char Element, const int Length)
+{
+  int i = 0;
+  for(; i<Length; i++){
+    bwputc(COM2,Element);
+    MOVE_LEFT(1);
+    MOVE_DOWN(1);
+  }
+}
+
+void DrawClock(Clock *MyClock){
+  if(MyClock->bChanged !=0){
+    unsigned int Count = MyClock->ClockCount;
+    unsigned int Tenth = Count % 10;
+    unsigned int Seconds = (Count % 100 )/ 10;
+    unsigned int Tens = (Count % 600) /100;
+    unsigned int Minute = Count/600;
+    CURSOR_POS(10, 66);
+    bwprintf(COM2,"%d:%d%d:%d\n\r",Minute,Tens,Seconds,Tenth);
+  }
+}
+
+void DrawPanel()
+{
+  CURSOR_POS(1,1);
+  //DrawLine_H('#',80);
+  CURSOR_POS(2,60);
+  DrawLine_V('|', 20);
+  CURSOR_POS(32,1);
+  //DrawLine_H('#', 79);
+  CURSOR_POS(2,80);
+  DrawLine_V('#', 25);
+  CURSOR_POS(2,1);
+  DrawLine_V('#', 25);
+  CURSOR_POS(23,3);
+  DrawLine_V('>', 3);
+  CURSOR_POS(23,4);
+  DrawLine_V('>', 3);
+  CURSOR_POS(26,1);
+  //DrawLine_H('#', 79);
+
 }
diff --git a/src/libsrc/myclock.c b/src/libsrc/myclock.c
index b76cdeb842fcf7f1d656c222d5d83c3a85eebcd6..47bdf582ddaa45c133f61b4262ed0dc8c22297b7 100644
--- a/src/libsrc/myclock.c
+++ b/src/libsrc/myclock.c
@@ -1,29 +1,30 @@
-#include <bwio.h>
 #include <myclock.h>
 #include <ts7200.h>
 
-
-void InitClockCount(int* ClockCount, int* LastTimerValue)
+void InitClockCount(Clock *MyClock)
 {
-  *ClockCount = 0;
-  *LastTimerValue = CLOCK_LOAD_VALUE;
-  int* Clock3LoadRegister = (int *) TIMER3_BASE;
-  int* Clock3ControlRegister = (int *) TIMER3_BASE + CRTL_OFFSET;
-  // int ClearMode = MODE_MASK | CLKSEL_MASK;
-  // clear clock
-  // *Clock3ControlRegister = ClearMode;
+  MyClock->ClockCount = 0;
+  MyClock->LastTimerValue = CLOCK_LOAD_VALUE;
+  unsigned int* Clock3LoadRegister = (unsigned int *) (TIMER3_BASE + LDR_OFFSET);
+  unsigned int* Clock3ControlRegister = (unsigned int *) (TIMER3_BASE + CRTL_OFFSET);
+  unsigned int ClockConfig = MODE_MASK | CLKSEL_MASK;
   // set interval
   *Clock3LoadRegister = CLOCK_LOAD_VALUE;
   // enable clock
-  *Clock3ControlRegister = ENABLE_MASK;
-  bwprintf(COM2,"InitClock, ClockCount %d, LastTimerValue: %d\n\r",*ClockCount, *LastTimerValue);
+  *Clock3ControlRegister = ENABLE_MASK | ClockConfig;
 }
 
-void UpdateClock(int* ClockCount, int* LastTimerValue)
+void UpdateClock(Clock *MyClock)
 {
-  int* TimerValueRegister = (int *) TIMER3_BASE + VAL_OFFSET;
-  int CurrentTimerValue = *TimerValueRegister;
-  bwprintf(COM2, "UpdateClock, LastTimerVlaue: %d, ClockCount:%d\n\r",*LastTimerValue,*ClockCount);
-  if(CurrentTimerValue >= *LastTimerValue) ClockCount++;
-  *LastTimerValue = CurrentTimerValue;
+  unsigned int* TimerValueRegister = (unsigned int *) (TIMER3_BASE + VAL_OFFSET);
+  unsigned int CurrentTimerValue = *TimerValueRegister;
+
+  if(CurrentTimerValue > MyClock->LastTimerValue){
+    MyClock->ClockCount = MyClock->ClockCount + 1;
+    MyClock->bChanged = 1;
+  } else {
+    MyClock->bChanged = 0;
+  }
+  
+  MyClock->LastTimerValue = CurrentTimerValue;
 }
diff --git a/src/libsrc/test b/src/libsrc/test
new file mode 100755
index 0000000000000000000000000000000000000000..aaa0251e30ba4f7c5d80991c798999c6c55dc6b5
Binary files /dev/null and b/src/libsrc/test differ
diff --git a/src/libsrc/test.c b/src/libsrc/test.c
new file mode 100644
index 0000000000000000000000000000000000000000..6374727c77281c395534d049ad5ee71ad9172dfc
--- /dev/null
+++ b/src/libsrc/test.c
@@ -0,0 +1,52 @@
+#include <stdio.h>
+
+#define ESC 27
+#define CSI_LEFT printf("%c[1D",27)
+#define CLEAR_SCREEN printf("%c[2J",27)
+#define pos(row,col) printf("%c[%d;%dH",ESC,row,col)
+
+void DrawLine(char elem, int len)
+{
+  for(int i = 0; i<len; i++){
+    printf("%c",elem);
+  }
+}
+
+void DrawLine_V(char elem, int len)
+{
+  for(int i = 0; i<len; i++){
+    printf("%c",elem);
+    printf("%c[1B",ESC);
+    CSI_LEFT;
+  }
+}
+    
+
+int main()
+{
+  CLEAR_SCREEN;
+  pos(1,1);
+  DrawLine('#',80);
+  pos(2,60);
+  DrawLine_V('|', 30);
+  pos(32,1);
+  DrawLine('#', 79);
+  pos(2,80);
+  DrawLine_V('#', 35);
+  pos(2,1);
+  DrawLine_V('#', 35);
+  pos(33,3);
+  DrawLine_V('>', 3);
+  pos(33,4);
+  DrawLine_V('>', 3);
+  pos(36,1);
+  DrawLine('#', 79);
+  printf("\n");
+
+
+  while(1){
+    pos(10, 66);
+    printf("00:00:0");
+  }
+  return 0;
+}
diff --git a/src/startup.c b/src/startup.c
index aa4220682bc908c1a2cbbcbc73abe0d37448fa28..313ba4268bf55470b2206befba4b5d921ceca9a1 100644
--- a/src/startup.c
+++ b/src/startup.c
@@ -1,30 +1,33 @@
 #include <bwio.h>
+#include <cmd.h>
 #include <error.h>
 #include <mycanvas.h>
 #include <myclock.h>
 
-int initialize(int* ClockCount, int* LastTimerValue)
+int initialize(Clock* MyClock)
 {
   if(bwsetfifo(COM2, OFF)) return ERR_INIT_IO;
   if(bwsetspeed(COM1, 2400)) return ERR_INIT_IO;
   if(bwsetspeed(COM2, 115200)) return ERR_INIT_IO;
-  InitClockCount(ClockCount, LastTimerValue);
+  InitClockCount(MyClock);
   return 0;
 }
 
-int runloop(int* ClockCount, int* LastTimerValue)
+int runloop(Clock* MyClock)
 {
   while(1){
-    UpdateClock(ClockCount, LastTimerValue);
-    bwprintf(COM2, "ClockCount %d\n\r", *ClockCount);
-    DrawClock(ClockCount);
+    UpdateClock(MyClock);
+    DrawClock(MyClock);
+    if(ListenCommand() == CMD_HALT) break;
   }
   return 0;
 }
 
 int main(){
-  unsigned int ClockCount, LastTimerValue;
-  unsigned int InitCode = initialize(&ClockCount, &LastTimerValue);
+  volatile Clock MyClock = {0,0,0};
+  unsigned int InitCode = initialize(&MyClock);
   if(InitCode) return InitCode;
-  return runloop(&ClockCount, &LastTimerValue);
+  CLEAR_SCREEN;
+  // DrawPanel();
+  return runloop(&MyClock);
 }
diff --git a/src/upload b/src/upload
index 5ff7c25dc8a83eaafad3d6e0a2bafe7544ffde19..0563148bc872a316c366e66b78465bf815741898 100755
--- a/src/upload
+++ b/src/upload
@@ -1,3 +1,3 @@
 #! /bin/bash
 
-mv $1 /u/cs452/tftp/ARM/b26feng/
+cp $1 /u/cs452/tftp/ARM/b26feng/