diff options
author | Ben Bridle <ben@derelict.engineering> | 2024-11-22 16:01:31 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2024-11-22 16:07:48 +1300 |
commit | e05888d141bc64e92d81859af0d87627e6fbc477 (patch) | |
tree | 8d4008de05045c5721cfa6ba49aa4c39cb12cf2f | |
parent | 2acaa6cb6c54c246b7f152f91d0428325c5b3ebd (diff) | |
download | bedrock-nds-e05888d141bc64e92d81859af0d87627e6fbc477.zip |
Simplify clock device implementation
Two pairs of generic get/set functions now do the role of the previous
pair of custom get/set functions for each timer.
-rw-r--r-- | arm9/source/core.c | 32 | ||||
-rw-r--r-- | arm9/source/devices/clock.c | 42 | ||||
-rw-r--r-- | arm9/source/devices/clock.h | 25 |
3 files changed, 28 insertions, 71 deletions
diff --git a/arm9/source/core.c b/arm9/source/core.c index 66bd204..a1f9ec1 100644 --- a/arm9/source/core.c +++ b/arm9/source/core.c @@ -107,14 +107,14 @@ u8 dev_read(Bedrock *br, u8 port) { case 0x35: return SECOND(get_datetime()); case 0x36: return HIGH(get_uptime()-br->clk.start); case 0x37: return LOW(get_uptime()-br->clk.start); - case 0x38: return get_timer1_high(&br->clk); - case 0x39: return get_timer1_low( &br->clk); - case 0x3A: return get_timer2_high(&br->clk); - case 0x3B: return get_timer2_low( &br->clk); - case 0x3C: return get_timer3_high(&br->clk); - case 0x3D: return get_timer3_low( &br->clk); - case 0x3E: return get_timer4_high(&br->clk); - case 0x3F: return get_timer4_low( &br->clk); + case 0x38: return get_timer_high(&br->clk.t1); + case 0x39: return get_timer_low( &br->clk.t1); + case 0x3A: return get_timer_high(&br->clk.t2); + case 0x3B: return get_timer_low( &br->clk.t2); + case 0x3C: return get_timer_high(&br->clk.t3); + case 0x3D: return get_timer_low( &br->clk.t3); + case 0x3E: return get_timer_high(&br->clk.t4); + case 0x3F: return get_timer_low( &br->clk.t4); // INPUT DEVICE case 0x40: return BOOL(br->inp.pointer); case 0x41: return br->inp.pointer << 7; @@ -169,14 +169,14 @@ Signal dev_write(Bedrock *br, u8 port, u8 v) { case 0x23: set_op2_low( &br->math,v); return 0; // CLOCK DEVICE // TODO: Set time and date - case 0x38: set_timer1_high(&br->clk,v); return 0; - case 0x39: set_timer1_low( &br->clk,v); return 0; - case 0x3A: set_timer2_high(&br->clk,v); return 0; - case 0x3B: set_timer2_low( &br->clk,v); return 0; - case 0x3C: set_timer3_high(&br->clk,v); return 0; - case 0x3D: set_timer3_low( &br->clk,v); return 0; - case 0x3E: set_timer4_high(&br->clk,v); return 0; - case 0x3F: set_timer4_low( &br->clk,v); return 0; + case 0x38: set_timer_high(&br->clk.t1,v); return 0; + case 0x39: set_timer_low( &br->clk.t1,v); return 0; + case 0x3A: set_timer_high(&br->clk.t2,v); return 0; + case 0x3B: set_timer_low( &br->clk.t2,v); return 0; + case 0x3C: set_timer_high(&br->clk.t3,v); return 0; + case 0x3D: set_timer_low( &br->clk.t3,v); return 0; + case 0x3E: set_timer_high(&br->clk.t4,v); return 0; + case 0x3F: set_timer_low( &br->clk.t4,v); return 0; // SCREEN DEVICE case 0x54: SET_HIGH(br->scr.x,v); return 0; case 0x55: SET_LOW( br->scr.x,v); return 0; diff --git a/arm9/source/devices/clock.c b/arm9/source/devices/clock.c index 6f3ce85..6ecee1d 100644 --- a/arm9/source/devices/clock.c +++ b/arm9/source/devices/clock.c @@ -11,22 +11,10 @@ void uptime_handler(void) { uptime++; } // Check if any timer has expired. bool check_timers(ClockDevice *clk) { bool output = FALSE; - if (clk->t1.end && clk->t1.end <= uptime) { - clk->t1.end = 0; - output = TRUE; - } - if (clk->t2.end && clk->t2.end <= uptime) { - clk->t2.end = 0; - output = TRUE; - } - if (clk->t3.end && clk->t3.end <= uptime) { - clk->t3.end = 0; - output = TRUE; - } - if (clk->t4.end && clk->t4.end <= uptime) { - clk->t4.end = 0; - output = TRUE; - } + if (clk->t1.end && clk->t1.end <= uptime) { clk->t1.end = 0; output = TRUE; } + if (clk->t2.end && clk->t2.end <= uptime) { clk->t2.end = 0; output = TRUE; } + if (clk->t3.end && clk->t3.end <= uptime) { clk->t3.end = 0; output = TRUE; } + if (clk->t4.end && clk->t4.end <= uptime) { clk->t4.end = 0; output = TRUE; } return output; } @@ -34,8 +22,7 @@ u8 get_timer_high(ClockTimer *t) { if (t->end > uptime) { t->read = t->end - uptime; } else { - t->end = 0; - t->read = 0; + t->end = 0; t->read = 0; } return HIGH(t->read); } @@ -56,25 +43,6 @@ void set_timer_low(ClockTimer *t, u8 low) { } } -u8 get_timer1_high(ClockDevice *clock) { return get_timer_high(&clock->t1); } -u8 get_timer1_low( ClockDevice *clock) { return get_timer_low( &clock->t1); } -u8 get_timer2_high(ClockDevice *clock) { return get_timer_high(&clock->t2); } -u8 get_timer2_low( ClockDevice *clock) { return get_timer_low( &clock->t2); } -u8 get_timer3_high(ClockDevice *clock) { return get_timer_high(&clock->t3); } -u8 get_timer3_low( ClockDevice *clock) { return get_timer_low( &clock->t3); } -u8 get_timer4_high(ClockDevice *clock) { return get_timer_high(&clock->t4); } -u8 get_timer4_low( ClockDevice *clock) { return get_timer_low( &clock->t4); } - -void set_timer1_high(ClockDevice *clock, u8 high) { set_timer_high(&clock->t1, high); } -void set_timer1_low( ClockDevice *clock, u8 low) { set_timer_low( &clock->t1, low); } -void set_timer2_high(ClockDevice *clock, u8 high) { set_timer_high(&clock->t2, high); } -void set_timer2_low( ClockDevice *clock, u8 low) { set_timer_low( &clock->t2, low); } -void set_timer3_high(ClockDevice *clock, u8 high) { set_timer_high(&clock->t3, high); } -void set_timer3_low( ClockDevice *clock, u8 low) { set_timer_low( &clock->t3, low); } -void set_timer4_high(ClockDevice *clock, u8 high) { set_timer_high(&clock->t4, high); } -void set_timer4_low( ClockDevice *clock, u8 low) { set_timer_low( &clock->t4, low); } - - void init_clock(void) { // Start a 256Hz timer to increment the uptime value. timerStart(0, ClockDivider_1024, TIMER_FREQ_1024(256), uptime_handler); diff --git a/arm9/source/devices/clock.h b/arm9/source/devices/clock.h index 892479f..04c4d5d 100644 --- a/arm9/source/devices/clock.h +++ b/arm9/source/devices/clock.h @@ -1,8 +1,8 @@ +#include <time.h> + #ifndef CLOCK_H_ #define CLOCK_H_ - #include <time.h> - typedef struct { u32 end; // real end time u16 read, write; // read write caches @@ -27,20 +27,9 @@ bool check_timers(ClockDevice *clk); - u8 get_timer1_high(ClockDevice *clock); - u8 get_timer1_low( ClockDevice *clock); - u8 get_timer2_high(ClockDevice *clock); - u8 get_timer2_low( ClockDevice *clock); - u8 get_timer3_high(ClockDevice *clock); - u8 get_timer3_low( ClockDevice *clock); - u8 get_timer4_high(ClockDevice *clock); - u8 get_timer4_low( ClockDevice *clock); - void set_timer1_high(ClockDevice *clock, u8 high); - void set_timer1_low( ClockDevice *clock, u8 low); - void set_timer2_high(ClockDevice *clock, u8 high); - void set_timer2_low( ClockDevice *clock, u8 low); - void set_timer3_high(ClockDevice *clock, u8 high); - void set_timer3_low( ClockDevice *clock, u8 low); - void set_timer4_high(ClockDevice *clock, u8 high); - void set_timer4_low( ClockDevice *clock, u8 low); + u8 get_timer_high(ClockTimer *t); + u8 get_timer_low( ClockTimer *t); + void set_timer_high(ClockTimer *t, u8 high); + void set_timer_low( ClockTimer *t, u8 low); + #endif |