32 lines
890 B
C
32 lines
890 B
C
|
|
// Commander X16 Emulator
|
||
|
|
// Copyright (c) 2020 Frank van den Hoef
|
||
|
|
// All rights reserved. License: 2-clause BSD
|
||
|
|
|
||
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <stdint.h>
|
||
|
|
#include <stdbool.h>
|
||
|
|
|
||
|
|
struct VERA_PCM {
|
||
|
|
uint8_t fifo[4096 - 1]; // Actual hardware FIFO is 4kB, but you can only use 4095 bytes.
|
||
|
|
unsigned fifo_wridx;
|
||
|
|
unsigned fifo_rdidx;
|
||
|
|
unsigned fifo_cnt;
|
||
|
|
|
||
|
|
uint8_t ctrl;
|
||
|
|
uint8_t rate;
|
||
|
|
|
||
|
|
int16_t cur_l, cur_r;
|
||
|
|
uint8_t phase;
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
void pcm_reset(struct VERA_PCM* pcm);
|
||
|
|
void pcm_write_ctrl(struct VERA_PCM* pcm, uint8_t val);
|
||
|
|
uint8_t pcm_read_ctrl(struct VERA_PCM* pcm);
|
||
|
|
void pcm_write_rate(struct VERA_PCM* pcm, uint8_t val);
|
||
|
|
uint8_t pcm_read_rate(struct VERA_PCM* pcm);
|
||
|
|
void pcm_write_fifo(struct VERA_PCM* pcm, uint8_t val);
|
||
|
|
void pcm_render(struct VERA_PCM* pcm, int16_t* buf_l, int16_t* buf_r, unsigned num_samples);
|
||
|
|
bool pcm_is_fifo_almost_empty(struct VERA_PCM* pcm);
|