diff options
author | Bad Diode <bd@badd10de.dev> | 2022-10-21 18:40:02 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2022-10-21 18:40:02 +0200 |
commit | 5114c90e30406c6fb570c4246a806e63528338a9 (patch) | |
tree | 74c3bc7cd959352427582a53bdf4273ddf28b506 | |
parent | 357d401d00e560e8834f79e271ccad047f85a4da (diff) | |
download | uxn64-5114c90e30406c6fb570c4246a806e63528338a9.tar.gz uxn64-5114c90e30406c6fb570c4246a806e63528338a9.zip |
Minor cleanup
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | src/main.c | 38 |
2 files changed, 20 insertions, 19 deletions
@@ -1,2 +1,3 @@ | |||
1 | build | 1 | build |
2 | dist | ||
2 | a.out | 3 | a.out |
@@ -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)) | ||
48 | static s16 audio_buffers[N_AUDIO_BUF][AUDIO_BUF_SIZE] __attribute__((aligned(64))); | 47 | static s16 audio_buffers[N_AUDIO_BUF][AUDIO_BUF_SIZE] __attribute__((aligned(64))); |
49 | static s32 active_audio = 0; | 48 | static s32 active_audio = 0; |
50 | static s32 pause_audio = 0; | 49 | static s32 pause_audio = 0; |
50 | static OSMesg audio_msg_buf; | ||
51 | static 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 | ||
412 | void | 412 | void |
413 | handle_audio(void) { | 413 | sound_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 | ||
434 | static void | 429 | static 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 | ||
450 | static OSMesg audio_msg_buf; | ||
451 | static OSMesgQueue audio_msg_queue; | ||
452 | |||
453 | static void | 446 | static void |
454 | audio_proc(void *arg) { | 447 | audio_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 | } |