]> git.sur5r.net Git - c128-kasse/commitdiff
track day of event and increment it when clock wraps
authorMaik Fischer <maikf@qu.cx>
Thu, 2 Nov 2017 10:44:01 +0000 (11:44 +0100)
committerMaik Fischer <maikf@qu.cx>
Sun, 23 Sep 2018 11:32:25 +0000 (13:32 +0200)
include/c128time.h
include/globals.h
src/c128time.c
src/globals.c
src/kasse.c

index af76f84ff6b59e736378e5e2cf3dfc13af40996c..e962912462cc44ba8a0146452d4d8bf3553f84e5 100644 (file)
@@ -2,7 +2,15 @@
 #define TIME_H
 #include <stdint.h>
 
-void set_time(uint8_t hrs, uint8_t min, uint8_t sec);
+void set_time(uint8_t day, uint8_t hrs, uint8_t min, uint8_t sec);
 char *get_time(void);
+void update_time(void);
+
+struct daytime_t {
+  uint8_t day;
+  uint8_t hour;
+  uint8_t min;
+  uint8_t sec;
+};
 
 #endif /* TIME_H */
index 8a64063260cc34aa9d7462a7f72f897c7883c319..9f98e111ed51a7bc3e453f680e5dbdcd8dc077b8 100644 (file)
@@ -2,6 +2,7 @@
 #define GLOBALS_H
 
 #include <stdint.h>
+#include "c128time.h"
 
 #ifdef IS_GLOBALS_C
 #define GLOBAL
@@ -12,5 +13,6 @@
 void init_globals(void);
 
 GLOBAL uint8_t printing;
+GLOBAL struct daytime_t daytime;
 
 #endif /*  GLOBALS_H */
index e268133a86d22f881e4d15a47343237be8570aeb..f4b1e4ae87df06209a10851d895c0d9fc6cc0570 100644 (file)
@@ -14,9 +14,8 @@
 #include "general.h"
 #include "globals.h"
 
-char *get_time(void) {
-  static char buffer[9];
-  uint8_t bcd_hour, hour, bcd_min, bcd_sec, tenth;
+void update_time(void) {
+  uint8_t bcd_hour, hour, min, sec, tenth;
 
   /* Read the hour register first to stop the clock from updating the external
    * registers from the internal (still ticking!) CIA registers. */
@@ -34,20 +33,32 @@ char *get_time(void) {
     hour = bcd2dec(bcd_hour);
   }
 
-  bcd_sec = CIA1.tod_sec;
-  bcd_min = CIA1.tod_min;
+  sec = bcd2dec(CIA1.tod_sec);
+  min = bcd2dec(CIA1.tod_min);
 
   /* MUST read tod_10 to enable the clock latch again */
   tenth = CIA1.tod_10;
 
-  sprintf(buffer, "%02d:%02x:%02x", hour, bcd_min, bcd_sec);
+  if (daytime.hour > hour) {
+    daytime.day++;
+  }
+
+  daytime.hour = hour;
+  daytime.min = min;
+  daytime.sec = sec;
+}
+
+char *get_time(void) {
+  static char buffer[9];
+  update_time();
+  sprintf(buffer, "%02d:%02d:%02d", daytime.hour, daytime.min, daytime.sec);
   return buffer;
 }
 
 /* divide by 10; put quotient in high nibble, reminder in low nibble */
 uint8_t dec2bcd(uint8_t dec) { return (((dec / 10) << 4) | (dec % 10)); }
 
-void set_time(uint8_t hour, uint8_t min, uint8_t sec) {
+void set_time(uint8_t day, uint8_t hour, uint8_t min, uint8_t sec) {
   uint8_t bcd_hour;
 
   /* CIA TOD will always flip the pm bit
@@ -64,6 +75,11 @@ void set_time(uint8_t hour, uint8_t min, uint8_t sec) {
     bcd_hour = dec2bcd(hour);
   }
 
+  daytime.day = day;
+  daytime.hour = hour;
+  daytime.min = min;
+  daytime.sec = sec;
+
   CIA1.tod_hour = bcd_hour;
   CIA1.tod_min = dec2bcd(min);
   CIA1.tod_sec = dec2bcd(sec);
index c1032e2cc551276c7c0054ab29a1e2d842c11d47..51533ead0c05098b36c20f033ec055517e8a702e 100644 (file)
@@ -3,5 +3,7 @@
 
 void init_globals(void) {
   printing = 1;
+  /* initialize daytime global, start the CIA TOD */
+  set_time(0, 0, 0, 0);
   return;
 }
index f063a97dd3eeb5068d6acbcc5aa40df90563bc57..41a7a7d5db2eb439fe3da0b23d371c8ef661bd1f 100644 (file)
@@ -269,21 +269,24 @@ void buy_custom(void) {
 }
 
 void set_time_interactive(void) {
-  BYTE part[3] = {'0', '0', '\0'};
-  BYTE tp1, tp2, tp3;
+  char part[3] = {'\0', '\0', '\0'};
+  uint8_t day, tp1, tp2, tp3;
   char *time_input, *time;
-  cprintf("Gib die aktuelle Uhrzeit ein (Format HHMMSS):\r\n");
+  cprintf("Gib den aktuellen Tag des Events und Uhrzeit ein\r\n"
+          "(Format DHHMMSS):\r\n");
   time_input = get_input();
   part[0] = time_input[0];
-  part[1] = time_input[1];
+  day = atoi(part);
+  part[0] = time_input[1];
+  part[1] = time_input[2];
   tp1 = atoi(part);
-  part[0] = time_input[2];
-  part[1] = time_input[3];
+  part[0] = time_input[3];
+  part[1] = time_input[4];
   tp2 = atoi(part);
-  part[0] = time_input[4];
-  part[1] = time_input[5];
+  part[0] = time_input[5];
+  part[1] = time_input[6];
   tp3 = atoi(part);
-  set_time(tp1, tp2, tp3);
+  set_time(day, tp1, tp2, tp3);
 
   time = get_time();
   cprintf("\r\nZeit gesetzt: %s\r\n", time);