]> git.sur5r.net Git - c128-kasse/blobdiff - src/c128time.c
itemz: fix int16_t -> uint8_t truncation
[c128-kasse] / src / c128time.c
index d9d680b50f50250da68d695b27743572b55eca28..9e5e45805e8107464bf71b0d18cce071f21ffa86 100644 (file)
@@ -1,6 +1,6 @@
-/* 
+/*
  * RGB2R-C128-Kassenprogramm
- * (c) 2007 phil_fry, sECuRE, sur5r
+ * © 2007-2009 phil_fry, sECuRE, sur5r
  * See LICENSE for license information
  *
  */
@@ -8,25 +8,32 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include "general.h"
+#include <stdint.h>
 
-char *get_time() {
-       long int h = PEEK(0x00A0) * 65536,
-               m = PEEK(0x00A1) * 256,
-               s = PEEK(0x00A2);
-       static char buffer[9];
-       BYTE hrs, min;
-       h = (h + m + s) / 60;
-       hrs = (h / 3600);
-       h -= (hrs * 3600);
-       min = (h / 60);
-       h -= (min * 60);
-       sprintf(buffer, "%02d:%02d:%02d", hrs, min, (int)h);
-       return buffer;
+char *get_time(void) {
+  uint32_t h = PEEK(0x00A0) * 65536, m = PEEK(0x00A1) * 256, s = PEEK(0x00A2);
+  static char buffer[9];
+  BYTE hrs, min;
+
+  h = (h + m + s) / 60;
+  hrs = (h / 3600);
+  h -= ((uint32_t)hrs * (uint32_t)3600);
+  min = (h / 60);
+  h -= (min * 60);
+
+  sprintf(buffer, "%02d:%02d:%02d", hrs, min, (BYTE)h);
+  return buffer;
 }
 
-void set_time(BYTE hrs, min, sec) {
-       long int added = ((long int)sec + ((long int)min * (long int)60) + ((long int)hrs * (long int)3600)) * (long int)60;
-       POKE(0x00A0, (BYTE)(added / 65536));
-       POKE(0x00A1, (BYTE)(added / 256));
-       POKE(0x00A2, (BYTE)added);
+void set_time(BYTE hrs, BYTE min, BYTE sec) {
+  uint32_t added = ((uint32_t)sec + ((uint32_t)min * (uint32_t)60) +
+                    ((uint32_t)hrs * (uint32_t)3600)) *
+                   (uint32_t)60;
+  uint32_t lowbit = (added & 0xFF);
+  uint32_t middlebit = (added >> 8) & 0xFF;
+  uint32_t highbit = (added >> 16) & 0xFF;
+
+  POKE(0x00A0, (BYTE)highbit);
+  POKE(0x00A1, (BYTE)middlebit);
+  POKE(0x00A2, (BYTE)lowbit);
 }