diff --git a/sysdata/libraries/stn/src/string.hb b/sysdata/libraries/stn/src/string.hb
index ab4e5fe..8abed24 100644
--- a/sysdata/libraries/stn/src/string.hb
+++ b/sysdata/libraries/stn/src/string.hb
@@ -7,8 +7,7 @@ length := fn(ptr: ^u8): int {
     return len;
 }
 
-display_int := fn(num: int): ^u8 {
-    p := page;
+display_int := fn(num: int, p: ^u8): ^u8 {
     i := 0;
     if num == 0 {
         set(p, 48);
diff --git a/sysdata/programs/time_driver/src/main.hb b/sysdata/programs/time_driver/src/main.hb
index 78a2496..91d2d7e 100644
--- a/sysdata/programs/time_driver/src/main.hb
+++ b/sysdata/programs/time_driver/src/main.hb
@@ -1,64 +1,21 @@
 stn := @use("../../../libraries/stn/src/lib.hb");
 log := stn.log;
 mem := stn.memory;
+s := stn.string;
 page := 0
 
 main := fn(): void {
     page += mem.request_page(1);
-    port_str := "\0\{46}\0";
+    port_str := "\0\{47}\0";
     a := @eca(u8, 3, 3, port_str, 2);
-    log.debug(&a);
+    
     n := 5000000;
     loop {
         if n == 0 break;
         n -= 1;
         stack_reclamation_edge_case := 0;
     }
-    td := display_int(100);
+    td := s.display_int(a, page);
     log.debug(td);
     return;
 }
-
-display_int := fn(num: int): ^u8 {
-    p := page;
-    i := 0;
-    if num == 0 {
-        set(p, 48);
-        return p;
-    }
-    loop {
-        if num == 0 break;
-        set(p + i, num % 10 + 48);
-        num /= 10;
-        i += 1;
-    }
-    reverse(p);
-    //null terminate
-    set(p + i, 0);
-    return p;
-}
-
-reverse := fn(s: ^u8): void {
-    //reverse a string, don't remove digits
-    len := 0;
-    loop {
-        if *(s + len) == 0 break;
-        len += 1;
-    }
-    i := 0;
-    j := len - 1;
-    loop {
-        if i >= j break;
-        temp := *(s + i);
-        *(s + i) = *(s + j);
-        *(s + j) = temp;
-        i += 1;
-        j -= 1;
-    }
-    return;
-}
-
-set := fn(change: ^int, new: int): void {
-    *(change) = new;
-    return;
-}