mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-28 12:11:50 +01:00
f2a7b4cb8a
--------------- * added support for CUE files * added CD-DA tracks emulation (needs CUE+BIN or ISO+WAV images) * added CD fader emulation * added CDD "Fast FW" & "Fast RW" commands emulation * improved CDD TOC emulation (random freezes in Sonic CD, Switch/Panic, Final Fight CD and probably many others) * improved PCM chip synchronization with SUB-CPU (missing speeches in Willy Beamish) * fixed PCM chip emulation (random hangs in Snatcher, missing sound effects in Switch/Panic, Final Fight CD, Wonderdog...) * fixed Word-RAM memory mode on soft-reset (missing logo gfx effects) * fixed SUB-CPU access to unused areas when using PC-relative instructions (Final Fight CD first boss random crash) * fixed CPU idle loop detection on memory mode register access (Pugsy CD first boss slowdown) * fixed Mode 1 emulation (cartridge boot mode) [Core/Sound] --------------- * replaced FIR resampler by Blip Buffer for FM resampling * modified SN76489 core for use of Blip Buffer * improved PSG & FM chips synchronization using Blip Buffer * added Game Gear PSG stereo support * fixed SG-1000 specific PSG noise * fixed YM2612 LFO AM waveform (California Games surfing event) * fixed YM2612 phase precision * minor optimizations to YM2612 core [Core/Game Gear] --------------- * added support for CJ Elephant Fugitive (recently released by SMS Power) * added Game Gear extended screen option [Core/Genesis] --------------- * added support for a few recently dumped (but unreleased) games [Core/General] --------------- * improved ROM & CD image file loading * various code cleanup [Gamecube/Wii] --------------- * added automatic disc swap feature * removed automatic frameskipping (no use) * improved general audio/video sync * various code cleanup & bugfixes
75 lines
2.8 KiB
C
75 lines
2.8 KiB
C
/** Sample buffer that resamples from input clock rate to output sample rate \file */
|
|
|
|
/* blip_buf $vers */
|
|
#ifndef BLIP_BUF_H
|
|
#define BLIP_BUF_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** First parameter of most functions is blip_t*, or const blip_t* if nothing
|
|
is changed. */
|
|
typedef struct blip_t blip_t;
|
|
|
|
/** Creates new buffer that can hold at most sample_count samples. Sets rates
|
|
so that there are blip_max_ratio clocks per sample. Returns pointer to new
|
|
buffer, or NULL if insufficient memory. */
|
|
blip_t* blip_new( int sample_count );
|
|
|
|
/** Sets approximate input clock rate and output sample rate. For every
|
|
clock_rate input clocks, approximately sample_rate samples are generated. */
|
|
void blip_set_rates( blip_t*, double clock_rate, double sample_rate );
|
|
|
|
enum { /** Maximum clock_rate/sample_rate ratio. For a given sample_rate,
|
|
clock_rate must not be greater than sample_rate*blip_max_ratio. */
|
|
blip_max_ratio = 1 << 20 };
|
|
|
|
/** Clears entire buffer. Afterwards, blip_samples_avail() == 0. */
|
|
void blip_clear( blip_t* );
|
|
|
|
/** Adds positive/negative delta into buffer at specified clock time. */
|
|
void blip_add_delta( blip_t*, unsigned int clock_time, int delta );
|
|
|
|
/** Same as blip_add_delta(), but uses faster, lower-quality synthesis. */
|
|
void blip_add_delta_fast( blip_t*, unsigned int clock_time, int delta );
|
|
|
|
/** Length of time frame, in clocks, needed to make sample_count additional
|
|
samples available. */
|
|
int blip_clocks_needed( const blip_t*, int sample_count );
|
|
|
|
enum { /** Maximum number of samples that can be generated from one time frame. */
|
|
blip_max_frame = 4000 };
|
|
|
|
/** Makes input clocks before clock_duration available for reading as output
|
|
samples. Also begins new time frame at clock_duration, so that clock time 0 in
|
|
the new time frame specifies the same clock as clock_duration in the old time
|
|
frame specified. Deltas can have been added slightly past clock_duration (up to
|
|
however many clocks there are in two output samples). */
|
|
void blip_end_frame( blip_t*, unsigned int clock_duration );
|
|
|
|
/** Number of buffered samples available for reading. */
|
|
int blip_samples_avail( const blip_t* );
|
|
|
|
/** Reads and removes at most 'count' samples and writes them to to every other
|
|
element of 'out', allowing easy interleaving of two buffers into a stereo sample
|
|
stream. Outputs 16-bit signed samples. Returns number of samples actually read. */
|
|
int blip_read_samples( blip_t*, short out [], int count);
|
|
|
|
/* Same as above function except sample is added to output buffer previous value */
|
|
/* This allows easy mixing of different blip buffers into a single output stream */
|
|
int blip_mix_samples( blip_t* m, short out [], int count);
|
|
|
|
/** Frees buffer. No effect if NULL is passed. */
|
|
void blip_delete( blip_t* );
|
|
|
|
|
|
/* Deprecated */
|
|
typedef blip_t blip_buffer_t;
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|