From ab12b5a5d4a637907bdf9ea91f1b23b726475484 Mon Sep 17 00:00:00 2001 From: Mahyar Koshkouei Date: Sat, 2 Apr 2022 12:00:40 +0100 Subject: [PATCH] GB: Add audio processing Signed-off-by: Mahyar Koshkouei --- CMakeLists.txt | 7 +++---- inc/peanut_gb.h | 5 ++++- src/main.c | 25 ++++++++++++++++++------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6e3493..b7dcd21 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,11 +8,10 @@ project(RP2040_GB C CXX) # Initialize the Raspberry Pi Pico SDK pico_sdk_init() -add_executable(RP2040_GB src/main.c src/rom.c src/mk_ili9225.c) -target_include_directories(RP2040_GB PRIVATE inc) +add_executable(RP2040_GB src/main.c src/rom.c src/mk_ili9225.c ext/minigb_apu/minigb_apu.c) +target_include_directories(RP2040_GB PRIVATE inc ext/minigb_apu) target_link_libraries(RP2040_GB - pico_stdlib pico_stdio pico_bootrom pico_multicore pico_stdio - pico_multicore + pico_stdlib pico_stdio pico_bootrom pico_multicore pico_stdio pico_multicore hardware_clocks hardware_pio hardware_vreg hardware_pio hardware_sync hardware_pll hardware_spi hardware_irq hardware_dma pico_binary_info) diff --git a/inc/peanut_gb.h b/inc/peanut_gb.h index de43b18..7dbd09d 100644 --- a/inc/peanut_gb.h +++ b/inc/peanut_gb.h @@ -31,6 +31,9 @@ #pragma once +#include "hedley.h" +#include "minigb_apu.h" + #include /* Required for int types */ #include /* Required for memset */ #include /* Required for tm struct */ @@ -3371,7 +3374,7 @@ void __gb_step_cpu(struct gb_s *gb) } /* Check serial transmission. */ - if(gb->gb_reg.SC & SERIAL_SC_TX_START) + if(HEDLEY_UNLIKELY(gb->gb_reg.SC & SERIAL_SC_TX_START)) { /* If new transfer, call TX function. */ if(gb->counter.serial_count == 0 && gb->gb_serial_tx != NULL) diff --git a/src/main.c b/src/main.c index 80e9cc0..8319543 100644 --- a/src/main.c +++ b/src/main.c @@ -1,8 +1,10 @@ -#include #define ENABLE_LCD 1 -#define ENABLE_SOUND 0 +#define ENABLE_SOUND 1 +#define ENABLE_HIPASS 0 #define USE_DMA 0 +//#define AUDIO_SAMPLE_RATE 8000.0 +//#define AUDIO_NSAMPLES 268 /** * Reducing VSYNC calculation to lower multiple. @@ -16,6 +18,7 @@ /* C Headers */ #include +#include #include /* RP2040 Headers */ @@ -29,7 +32,6 @@ #include #include #include -#include /* Project headers */ #include "hedley.h" @@ -310,10 +312,10 @@ int main(void) gpio_set_slew_rate(GPIO_SDA, GPIO_SLEW_RATE_FAST); /* Set SPI clock to use high frequency. */ - //clock_configure(clk_peri, 0, - // CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS, - // 125 * 1000 * 1000, 125 * 1000 * 1000); - spi_init(spi0, 24*1000*1000); + clock_configure(clk_peri, 0, + CLOCKS_CLK_PERI_CTRL_AUXSRC_VALUE_CLK_SYS, + 125 * 1000 * 1000, 125 * 1000 * 1000); + spi_init(spi0, 32*1000*1000); spi_set_format(spi0, 16, SPI_CPOL_0, SPI_CPHA_0, SPI_MSB_FIRST); /* Start Core1, which processes requests to the LCD. */ @@ -335,12 +337,18 @@ int main(void) gb_init_lcd(&gb, &lcd_draw_line); //gb.direct.interlace = 1; #endif +#if ENABLE_SOUND + audio_init(); +#endif uint_fast32_t frames = 0; uint64_t start_time = time_us_64(); while(1) { int input; +#if ENABLE_SOUND + static float stream[AUDIO_NSAMPLES]; +#endif gb.gb_frame = 0; @@ -350,6 +358,9 @@ int main(void) } while(HEDLEY_LIKELY(gb.gb_frame == 0)); frames++; +#if ENABLE_SOUND + audio_callback(NULL, stream, AUDIO_NSAMPLES); +#endif /* Required since we do not know whether a button remains * pressed over a serial connection. */