mirror of
https://github.com/d0k3/GodMode9.git
synced 2025-06-26 13:42:47 +00:00
Use timer for continuous scrolling
This commit is contained in:
parent
0aae5408b8
commit
c010efb236
@ -1,14 +1,16 @@
|
|||||||
#include "hid.h"
|
#include "hid.h"
|
||||||
|
#include "timer.h"
|
||||||
|
|
||||||
u32 InputWait() {
|
u32 InputWait() {
|
||||||
u32 pad_state_old = HID_STATE;
|
u32 pad_state_old = HID_STATE;
|
||||||
|
timer_start();
|
||||||
while (true) {
|
while (true) {
|
||||||
u32 pad_state = HID_STATE;
|
u32 pad_state = HID_STATE;
|
||||||
if (!(~pad_state & BUTTON_ANY)) { // no buttons pressed
|
if (!(~pad_state & BUTTON_ANY)) { // no buttons pressed
|
||||||
pad_state_old = pad_state;
|
pad_state_old = pad_state;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (pad_state == pad_state_old)
|
if ((pad_state == pad_state_old) && (!(pad_state & BUTTON_ARROW) || timer_msec() < 120))
|
||||||
continue;
|
continue;
|
||||||
//Make sure the key is pressed
|
//Make sure the key is pressed
|
||||||
u32 t_pressed = 0;
|
u32 t_pressed = 0;
|
||||||
|
@ -17,5 +17,6 @@
|
|||||||
#define BUTTON_X (1 << 10)
|
#define BUTTON_X (1 << 10)
|
||||||
#define BUTTON_Y (1 << 11)
|
#define BUTTON_Y (1 << 11)
|
||||||
#define BUTTON_ANY 0x00000FFF
|
#define BUTTON_ANY 0x00000FFF
|
||||||
|
#define BUTTON_ARROW (BUTTON_RIGHT|BUTTON_LEFT|BUTTON_UP|BUTTON_DOWN)
|
||||||
|
|
||||||
u32 InputWait();
|
u32 InputWait();
|
||||||
|
36
source/timer.c
Normal file
36
source/timer.c
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#include "timer.h"
|
||||||
|
|
||||||
|
void timer_start( void ) {
|
||||||
|
// reset / deactivate timers
|
||||||
|
*TIMER_CNT0 = 0;
|
||||||
|
*TIMER_CNT1 = *TIMER_CNT2 = *TIMER_CNT3 = TIMER_COUNT_UP;
|
||||||
|
*TIMER_VAL0 = *TIMER_VAL1 = *TIMER_VAL2 = *TIMER_VAL3 = 0;
|
||||||
|
|
||||||
|
// start timers
|
||||||
|
*TIMER_CNT0 = TIMER_ACTIVE;
|
||||||
|
*TIMER_CNT1 = *TIMER_CNT2 = *TIMER_CNT3 = TIMER_ACTIVE | TIMER_COUNT_UP;
|
||||||
|
}
|
||||||
|
|
||||||
|
void timer_stop( void ) {
|
||||||
|
*TIMER_CNT0 &= ~TIMER_ACTIVE;
|
||||||
|
*TIMER_CNT1 &= ~TIMER_ACTIVE;
|
||||||
|
*TIMER_CNT2 &= ~TIMER_ACTIVE;
|
||||||
|
*TIMER_CNT3 &= ~TIMER_ACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 timer_ticks( void ) {
|
||||||
|
u64 ticks = 0;
|
||||||
|
ticks |= (u64) *TIMER_VAL0 << 0;
|
||||||
|
ticks |= (u64) *TIMER_VAL1 << 16;
|
||||||
|
ticks |= (u64) *TIMER_VAL2 << 32;
|
||||||
|
ticks |= (u64) *TIMER_VAL3 << 48;
|
||||||
|
return ticks;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 timer_msec( void ) {
|
||||||
|
return (timer_ticks() * 1000) / TICKS_PER_SEC;
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 timer_sec( void ) {
|
||||||
|
return timer_ticks() / TICKS_PER_SEC;
|
||||||
|
}
|
23
source/timer.h
Normal file
23
source/timer.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
// see: https://www.3dbrew.org/wiki/TIMER_Registers
|
||||||
|
#define TIMER_VAL0 ((vu16*)0x10003000)
|
||||||
|
#define TIMER_VAL1 ((vu16*)0x10003004)
|
||||||
|
#define TIMER_VAL2 ((vu16*)0x10003008)
|
||||||
|
#define TIMER_VAL3 ((vu16*)0x1000300C)
|
||||||
|
#define TIMER_CNT0 ((vu16*)0x10003002)
|
||||||
|
#define TIMER_CNT1 ((vu16*)0x10003006)
|
||||||
|
#define TIMER_CNT2 ((vu16*)0x1000300A)
|
||||||
|
#define TIMER_CNT3 ((vu16*)0x1000300E)
|
||||||
|
|
||||||
|
#define TIMER_COUNT_UP 0x0004
|
||||||
|
#define TIMER_ACTIVE 0x0080
|
||||||
|
#define TICKS_PER_SEC 67027964ULL
|
||||||
|
|
||||||
|
void timer_start( void );
|
||||||
|
void timer_stop( void );
|
||||||
|
u64 timer_ticks( void );
|
||||||
|
u64 timer_msec( void );
|
||||||
|
u64 timer_sec( void );
|
Loading…
x
Reference in New Issue
Block a user