diff options
author | Bad Diode <bd@badd10de.dev> | 2022-10-27 19:54:50 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-10-27 19:54:50 +0200 |
commit | 3bcfebcaeddd73a1981bdd82bc4ce41e180e98a9 (patch) | |
tree | 5c48a6664a73854c95fdc9d957dd25c12f6e09f3 | |
parent | 6880fe7d0bef296b98420da6fc378204239b26bc (diff) | |
download | uxn64-3bcfebcaeddd73a1981bdd82bc4ce41e180e98a9.tar.gz uxn64-3bcfebcaeddd73a1981bdd82bc4ce41e180e98a9.zip |
Add datetime_dei
-rw-r--r-- | src/main.c | 24 |
1 files changed, 23 insertions, 1 deletions
@@ -68,6 +68,7 @@ typedef struct Mouse { | |||
68 | } Mouse; | 68 | } Mouse; |
69 | 69 | ||
70 | static Mouse mouse = {0}; | 70 | static Mouse mouse = {0}; |
71 | static size_t seconds = 0; | ||
71 | 72 | ||
72 | int | 73 | int |
73 | uxn_halt(Uxn *u, u8 error, u16 addr) { | 74 | uxn_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 | ||
91 | u8 | ||
92 | datetime_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 | |||
90 | static void | 107 | static void |
91 | nil_deo(Device *d, u8 port) { | 108 | nil_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 | ||