From 38a4e075d521713f4f323393c6402c26ce1f7919 Mon Sep 17 00:00:00 2001
From: Bingzheng Feng <b26feng@uwaterloo.ca>
Date: Sun, 6 May 2018 18:39:57 -0400
Subject: [PATCH] clock does not work with q at the same time

---
 include/bwio.h        |   4 ++
 include/cmd.h         |   6 +++
 include/mycanvas.h    |  20 +++++++++-
 include/mycanvas.h~   |   6 ---
 include/myclock.h     |  12 +++++-
 include/myclock.h~    |  11 -----
 src/Makefile          |  25 ++++++++++--
 src/clocktest.c       |  19 +++++++++
 src/first.map         |  91 +++++++++++++++++-------------------------
 src/getc.c            |  14 +++++++
 src/libsrc/Makefile   |  15 +++++--
 src/libsrc/cmd.c      |  15 +++++++
 src/libsrc/mycanvas.c |  58 ++++++++++++++++++++++-----
 src/libsrc/myclock.c  |  37 ++++++++---------
 src/libsrc/test       | Bin 0 -> 8728 bytes
 src/libsrc/test.c     |  52 ++++++++++++++++++++++++
 src/startup.c         |  21 +++++-----
 src/upload            |   2 +-
 18 files changed, 290 insertions(+), 118 deletions(-)
 create mode 100644 include/cmd.h
 delete mode 100644 include/mycanvas.h~
 delete mode 100644 include/myclock.h~
 create mode 100644 src/clocktest.c
 create mode 100644 src/getc.c
 create mode 100644 src/libsrc/cmd.c
 create mode 100755 src/libsrc/test
 create mode 100644 src/libsrc/test.c

diff --git a/include/bwio.h b/include/bwio.h
index 8319f86..f435f04 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 0000000..089a981
--- /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 3fd60cf..fd609fc 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 956253e..0000000
--- 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 ce312c3..35d3a9a 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 81ba61e..0000000
--- 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 f20846a..38247bf 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 0000000..6cf1c36
--- /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 3ea6cb0..90c606a 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 0000000..a595620
--- /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 a932d94..774204d 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 0000000..22ade43
--- /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 1f92bd4..dda800d 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 b76cdeb..47bdf58 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
GIT binary patch
literal 8728
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
TI6t}V`FJN?WbLpRx7Pn}Vo(tp

literal 0
HcmV?d00001

diff --git a/src/libsrc/test.c b/src/libsrc/test.c
new file mode 100644
index 0000000..6374727
--- /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 aa42206..313ba42 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 5ff7c25..0563148 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/
-- 
GitLab