diff pico_pcm.h @ 2431:61c0bfe10887

Somewhat busted support for Pico ADPCM
author Michael Pavone <pavone@retrodev.com>
date Tue, 06 Feb 2024 21:47:11 -0800
parents
children e8eba0cd5444
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pico_pcm.h	Tue Feb 06 21:47:11 2024 -0800
@@ -0,0 +1,38 @@
+#ifndef PICO_PCM_H_
+#define PICO_PCM_H_
+
+#include <stdint.h>
+#include "render_audio.h"
+#include "oscilloscope.h"
+
+typedef struct {
+	audio_source *audio;
+	oscilloscope *scope;
+	uint32_t     clock_inc;
+	uint32_t     cycle;
+	uint16_t     ctrl;
+	
+	uint16_t     counter;
+	uint16_t     rate;
+	uint16_t     samples;
+	int16_t      output;
+	
+	uint8_t      fifo[0x40];
+	uint8_t      fifo_read;
+	uint8_t      fifo_write;
+	uint8_t      adpcm_state;
+	uint8_t      nibble_store;
+	uint8_t      scope_channel;
+} pico_pcm;
+
+void pico_pcm_init(pico_pcm *pcm, uint32_t master_clock, uint32_t divider);
+void pico_pcm_free(pico_pcm *pcm);
+void pico_pcm_enable_scope(pico_pcm *pcm, oscilloscope *scope, uint32_t master_clock);
+void pico_pcm_run(pico_pcm *pcm, uint32_t cycle);
+void pico_pcm_ctrl_write(pico_pcm *pcm, uint16_t value);
+void pico_pcm_data_write(pico_pcm *pcm, uint16_t value);
+uint16_t pico_pcm_ctrl_read(pico_pcm *pcm);
+uint16_t pico_pcm_data_read(pico_pcm *pcm);
+uint32_t pico_pcm_next_int(pico_pcm *pcm);
+
+#endif //PICO_PCM_H_