diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-02-17 09:56:03 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-02-17 09:56:03 +0100 |
commit | c00bb458f40dd8ab015a1b738c1c71e7f4893ed2 (patch) | |
tree | 1ce4bc26c290facb51ac037dd400a73a76d715ea /src | |
parent | 86610a003c0ae7ab88b67e3f275d97a78e605cb3 (diff) |
Support runtime speed scaling
Diffstat (limited to 'src')
-rw-r--r-- | src/ahoy/config.h | 6 | ||||
-rw-r--r-- | src/ahoy/gui.c | 14 | ||||
-rw-r--r-- | src/ahoy/main.c | 8 |
3 files changed, 17 insertions, 11 deletions
diff --git a/src/ahoy/config.h b/src/ahoy/config.h index 23d756f..4361d7d 100644 --- a/src/ahoy/config.h +++ b/src/ahoy/config.h @@ -3,14 +3,16 @@ #include <stdint.h> -#define VOLMAX 10'000 +#define FPS 60 +#define CPUHZMAX 10'000 +#define VOLMAX 10'000 struct config { bool scanls; bool seeded; uint16_t seed; - unsigned cpu_hz; int vol; + int cpu_hz; }; extern struct config cfg; diff --git a/src/ahoy/gui.c b/src/ahoy/gui.c index 5ec20f3..cd01bcb 100644 --- a/src/ahoy/gui.c +++ b/src/ahoy/gui.c @@ -143,18 +143,26 @@ readevnt(void) case SDLK_SPACE: estate = estate == ES_RUNNING ? ES_PAUSED : ES_RUNNING; break; + case SDLK_l: + cfg.scanls = !cfg.scanls; + windrw(); + break; case SDLK_p: estate = ES_RESET; break; + case SDLK_EQUALS: cfg.vol = MIN(cfg.vol + 500, VOLMAX); break; case SDLK_MINUS: cfg.vol = MAX(cfg.vol - 500, 0); break; - case SDLK_l: - cfg.scanls = !cfg.scanls; - windrw(); + + case SDLK_PERIOD: + cfg.cpu_hz = MIN(cfg.cpu_hz + 10, CPUHZMAX); + break; + case SDLK_COMMA: + cfg.cpu_hz = MAX(cfg.cpu_hz - 10, FPS); break; case SDLK_1: diff --git a/src/ahoy/main.c b/src/ahoy/main.c index 85db49e..f1feef5 100644 --- a/src/ahoy/main.c +++ b/src/ahoy/main.c @@ -33,8 +33,6 @@ # warning "ckd_*() not supported on the current platform" #endif -#define FPS 60 - #define STRTOX(T, SUF) \ static T strto##SUF(const char8_t *s, rune *ch) \ { \ @@ -51,7 +49,6 @@ } STRTOX(int, i) -STRTOX(unsigned, u) STRTOX(uint16_t, u16) [[noreturn]] static void usage(void); @@ -115,8 +112,7 @@ main(int argc, char **argv) execlp("man", "man", "1", argv[0], nullptr); die("execlp: man 1 %s", argv[0]); case 'c': - NUMERIC_ARG(unsigned, UINT_MAX, "u", strtou, cpu_hz, - "cpu clock speed"); + NUMERIC_ARG(int, CPUHZMAX, "d", strtoi, cpu_hz, "cpu clock speed"); if (cfg.cpu_hz < FPS) { warnx("cpu clock speed may not be lower than the framerate (%d " "FPS)", @@ -211,7 +207,7 @@ reset: } st = SDL_GetPerformanceCounter(); - for (unsigned i = 0; i < cfg.cpu_hz / FPS; i++) + for (int i = 0; i < cfg.cpu_hz / FPS; i++) emutick(); et = SDL_GetPerformanceCounter(); dt = (double)((et - st) * 1000) / SDL_GetPerformanceFrequency(); |