aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2022-10-27 19:54:50 +0200
committerBad Diode <bd@badd10de.dev>2022-10-27 19:54:50 +0200
commit3bcfebcaeddd73a1981bdd82bc4ce41e180e98a9 (patch)
tree5c48a6664a73854c95fdc9d957dd25c12f6e09f3
parent6880fe7d0bef296b98420da6fc378204239b26bc (diff)
downloaduxn64-3bcfebcaeddd73a1981bdd82bc4ce41e180e98a9.tar.gz
uxn64-3bcfebcaeddd73a1981bdd82bc4ce41e180e98a9.zip
Add datetime_dei
-rw-r--r--src/main.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/main.c b/src/main.c
index ab788a5..84dc684 100644
--- a/src/main.c
+++ b/src/main.c
@@ -68,6 +68,7 @@ typedef struct Mouse {
68} Mouse; 68} Mouse;
69 69
70static Mouse mouse = {0}; 70static Mouse mouse = {0};
71static size_t seconds = 0;
71 72
72int 73int
73uxn_halt(Uxn *u, u8 error, u16 addr) { 74uxn_halt(Uxn *u, u8 error, u16 addr) {
@@ -87,6 +88,22 @@ nil_dei(Device *d, u8 port) {
87 return d->dat[port]; 88 return d->dat[port];
88} 89}
89 90
91u8
92datetime_dei(Device *d, u8 port) {
93 (void)port;
94 size_t minutes = seconds / 60;
95 size_t hours = minutes / 60;
96 DEVPOKE16(0x0, 0);
97 d->dat[0x2] = 0;
98 d->dat[0x3] = 0;
99 d->dat[0x4] = hours;
100 d->dat[0x5] = minutes;
101 d->dat[0x6] = seconds % 60;
102 d->dat[0x7] = 0;
103 DEVPOKE16(0x08, 0);
104 d->dat[0xa] = 0;
105}
106
90static void 107static void
91nil_deo(Device *d, u8 port) { 108nil_deo(Device *d, u8 port) {
92 (void)d; 109 (void)d;
@@ -396,7 +413,7 @@ init_uxn(Uxn *u) {
396 /* mouse */ devmouse = uxn_port(u, 0x9, nil_dei, nil_deo); 413 /* mouse */ devmouse = uxn_port(u, 0x9, nil_dei, nil_deo);
397 /* file0 */ uxn_port(u, 0xa, nil_dei, nil_deo); 414 /* file0 */ uxn_port(u, 0xa, nil_dei, nil_deo);
398 /* file1 */ uxn_port(u, 0xb, nil_dei, nil_deo); 415 /* file1 */ uxn_port(u, 0xb, nil_dei, nil_deo);
399 /* datetime */ uxn_port(u, 0xc, nil_dei, nil_deo); 416 /* datetime */ uxn_port(u, 0xc, datetime_dei, nil_deo);
400 /* unused */ uxn_port(u, 0xd, nil_dei, nil_deo); 417 /* unused */ uxn_port(u, 0xd, nil_dei, nil_deo);
401 /* unused */ uxn_port(u, 0xe, nil_dei, nil_deo); 418 /* unused */ uxn_port(u, 0xe, nil_dei, nil_deo);
402 /* unused */ uxn_port(u, 0xf, nil_dei, nil_deo); 419 /* unused */ uxn_port(u, 0xf, nil_dei, nil_deo);
@@ -434,12 +451,17 @@ main_proc(void *arg) {
434 init_uxn(&u); 451 init_uxn(&u);
435 452
436 // Main loop. 453 // Main loop.
454 u8 frame_counter = 0;
437 while (true) { 455 while (true) {
438 poll_input(); 456 poll_input();
439 uxn_eval(&u, GETVECTOR(devscreen)); 457 uxn_eval(&u, GETVECTOR(devscreen));
440 blit_framebuffer(); 458 blit_framebuffer();
441 swap_buffers(); 459 swap_buffers();
442 osYieldThread(); 460 osYieldThread();
461 if (frame_counter == 60) {
462 seconds++;
463 frame_counter = 0;
464 }
443 } 465 }
444} 466}
445 467