diff options
author | Juan J. Martinez <jjm@usebox.net> | 2023-06-01 23:51:05 +0100 |
---|---|---|
committer | Juan J. Martinez <jjm@usebox.net> | 2023-06-01 23:51:05 +0100 |
commit | 74daa7b891486fdd92cce0c67d076e29b93aeb1c (patch) | |
tree | 97ce20fb058a798c0d6c48250301fd56f6d9eba5 /src/timer.c | |
parent | afc7ea1e4f667c16100677a3fe6d9b27278a8635 (diff) | |
download | gold-mine-run-74daa7b891486fdd92cce0c67d076e29b93aeb1c.tar.gz gold-mine-run-74daa7b891486fdd92cce0c67d076e29b93aeb1c.zip |
Add timer to count ticks
Diffstat (limited to 'src/timer.c')
-rw-r--r-- | src/timer.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/timer.c b/src/timer.c new file mode 100644 index 0000000..73675dc --- /dev/null +++ b/src/timer.c @@ -0,0 +1,28 @@ +#include <stdio.h> +#include <stdint.h> +#include <go32.h> +#include <dpmi.h> + +/* updates 18.2 times per second by default */ +volatile uint32_t ticks = 0; + +static _go32_dpmi_seginfo old_handler, new_handler; + +static void timer_handler() +{ + ticks++; +} + +void timer_init() +{ + _go32_dpmi_get_protected_mode_interrupt_vector(0x1c, &old_handler); + new_handler.pm_offset = (unsigned long)timer_handler; + new_handler.pm_selector = _go32_my_cs(); + _go32_dpmi_chain_protected_mode_interrupt_vector(0x1c, &new_handler); +} + +void timer_free() +{ + if (_go32_dpmi_set_protected_mode_interrupt_vector(0x1c, &old_handler) == -1) + fprintf(stderr, "Failed to free the timer :(\n"); +} |