aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2022-10-21 18:40:02 +0200
committerBad Diode <bd@badd10de.dev>2022-10-21 18:40:02 +0200
commit5114c90e30406c6fb570c4246a806e63528338a9 (patch)
tree74c3bc7cd959352427582a53bdf4273ddf28b506
parent357d401d00e560e8834f79e271ccad047f85a4da (diff)
downloaduxn64-5114c90e30406c6fb570c4246a806e63528338a9.tar.gz
uxn64-5114c90e30406c6fb570c4246a806e63528338a9.zip
Minor cleanup
-rw-r--r--.gitignore1
-rw-r--r--src/main.c38
2 files changed, 20 insertions, 19 deletions
diff --git a/.gitignore b/.gitignore
index d83b253..fcebb32 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
1build 1build
2dist
2a.out 3a.out
diff --git a/src/main.c b/src/main.c
index b84ace6..ab788a5 100644
--- a/src/main.c
+++ b/src/main.c
@@ -41,13 +41,14 @@ OSPiHandle *rom_handle;
41 41
42#include "rom.c" 42#include "rom.c"
43 43
44#define N_AUDIO_BUF 3 44#define N_AUDIO_BUF 4
45#define AUDIO_RATE 44100 45#define AUDIO_RATE 44100
46#define MAX_AUDIO_LENGTH KB(1) 46#define AUDIO_BUF_SIZE (KB(2) * 2)
47#define AUDIO_BUF_SIZE (MAX_AUDIO_LENGTH * sizeof(s32))
48static s16 audio_buffers[N_AUDIO_BUF][AUDIO_BUF_SIZE] __attribute__((aligned(64))); 47static s16 audio_buffers[N_AUDIO_BUF][AUDIO_BUF_SIZE] __attribute__((aligned(64)));
49static s32 active_audio = 0; 48static s32 active_audio = 0;
50static s32 pause_audio = 0; 49static s32 pause_audio = 0;
50static OSMesg audio_msg_buf;
51static OSMesgQueue audio_msg_queue;
51 52
52#define CLAMP(X, MIN, MAX) ((X) <= (MIN) ? (MIN) : (X) > (MAX) ? (MAX): (X)) 53#define CLAMP(X, MIN, MAX) ((X) <= (MIN) ? (MIN) : (X) > (MAX) ? (MAX): (X))
53 54
@@ -126,10 +127,10 @@ system_deo(Device *d, u8 port) {
126 case 0x3: d->u->rst.ptr = d->dat[port]; break; 127 case 0x3: d->u->rst.ptr = d->dat[port]; break;
127 case 0xe: break; 128 case 0xe: break;
128 default: { 129 default: {
129 if(port > 0x7 && port < 0xe) { 130 if(port > 0x7 && port < 0xe) {
130 screen_palette(d); 131 screen_palette(d);
131 } 132 }
132 } break; 133 } break;
133 } 134 }
134} 135}
135 136
@@ -376,7 +377,6 @@ init_uxn(Uxn *u) {
376 uxn_boot(u, uxn_ram); 377 uxn_boot(u, uxn_ram);
377 378
378 // Copy rom to VM. 379 // Copy rom to VM.
379 // memcpy(u->ram + PAGE_PROGRAM, uxn_rom, sizeof(uxn_rom));
380 u8 *dst = u->ram + PAGE_PROGRAM; 380 u8 *dst = u->ram + PAGE_PROGRAM;
381 u8 *src = (u8*)uxn_rom; 381 u8 *src = (u8*)uxn_rom;
382 for (size_t i = 0; i < sizeof(uxn_rom); i++) { 382 for (size_t i = 0; i < sizeof(uxn_rom); i++) {
@@ -410,13 +410,13 @@ init_audio(void) {
410} 410}
411 411
412void 412void
413handle_audio(void) { 413sound_mix(void) {
414 int running = 0;
415 s16 *samples = (s16*)&audio_buffers[active_audio]; 414 s16 *samples = (s16*)&audio_buffers[active_audio];
416 for (size_t i = 0; i < AUDIO_BUF_SIZE; i++) { 415 for (size_t i = 0; i < AUDIO_BUF_SIZE; i++) {
417 samples[i] = 0; 416 samples[i] = 0;
418 } 417 }
419 if (!pause_audio) { 418 if (!pause_audio) {
419 int running = 0;
420 for(int channel = 0; channel < POLYPHONY; channel++) { 420 for(int channel = 0; channel < POLYPHONY; channel++) {
421 running += audio_render(channel, samples, samples + AUDIO_BUF_SIZE / 2); 421 running += audio_render(channel, samples, samples + AUDIO_BUF_SIZE / 2);
422 } 422 }
@@ -424,11 +424,6 @@ handle_audio(void) {
424 pause_audio = 1; 424 pause_audio = 1;
425 } 425 }
426 } 426 }
427 osAiSetNextBuffer(audio_buffers[active_audio], AUDIO_BUF_SIZE);
428 active_audio++;
429 if (active_audio == N_AUDIO_BUF) {
430 active_audio = 0;
431 }
432} 427}
433 428
434static void 429static void
@@ -444,12 +439,10 @@ main_proc(void *arg) {
444 uxn_eval(&u, GETVECTOR(devscreen)); 439 uxn_eval(&u, GETVECTOR(devscreen));
445 blit_framebuffer(); 440 blit_framebuffer();
446 swap_buffers(); 441 swap_buffers();
442 osYieldThread();
447 } 443 }
448} 444}
449 445
450static OSMesg audio_msg_buf;
451static OSMesgQueue audio_msg_queue;
452
453static void 446static void
454audio_proc(void *arg) { 447audio_proc(void *arg) {
455 (void)arg; 448 (void)arg;
@@ -457,10 +450,17 @@ audio_proc(void *arg) {
457 osSetEventMesg(OS_EVENT_AI, &audio_msg_queue, &audio_msg_buf); 450 osSetEventMesg(OS_EVENT_AI, &audio_msg_queue, &audio_msg_buf);
458 init_audio(); 451 init_audio();
459 while (true) { 452 while (true) {
460 handle_audio(); 453 sound_mix();
454 osAiSetNextBuffer(audio_buffers[active_audio], AUDIO_BUF_SIZE);
455 active_audio++;
456 if (active_audio == N_AUDIO_BUF) {
457 active_audio = 0;
458 }
461 u32 status = osAiGetStatus(); 459 u32 status = osAiGetStatus();
462 if ((status & AI_STATUS_FIFO_FULL) > 0) { 460 if ((status & AI_STATUS_FIFO_FULL) > 0) {
463 osRecvMesg(&audio_msg_queue, NULL, OS_MESG_BLOCK); 461 osRecvMesg(&audio_msg_queue, NULL, OS_MESG_BLOCK);
462 } else {
463 osYieldThread();
464 } 464 }
465 } 465 }
466} 466}