- Fixed Game Mode Speaker Simulation

This commit is contained in:
tudnai 2020-06-23 22:59:20 -07:00
parent ec2617c7ae
commit 72930227f4
4 changed files with 83 additions and 72 deletions

View File

@ -976,9 +976,7 @@ class ViewController: NSViewController {
cpuMode = cpuMode_eco
fps = DEFAULT_FPS
spkr_fps = DEFAULT_FPS
video_fps_divider = DEF_VIDEO_DIV
break
case "Game":
@ -986,9 +984,7 @@ class ViewController: NSViewController {
cpuState = cpuState_running
fps = GAME_FPS
spkr_fps = GAME_FPS
video_fps_divider = GAME_VIDEO_DIV
break
default:
@ -996,13 +992,14 @@ class ViewController: NSViewController {
cpuState = cpuState_running
fps = DEFAULT_FPS
spkr_fps = DEFAULT_FPS
video_fps_divider = DEF_VIDEO_DIV
break
}
spkr_buf_size = spkr_sample_rate * 2 / spkr_fps
spkr_fps_divider = fps / spkr_fps
spkr_play_timeout = 8 * spkr_fps_divider
// spkr_buf_size = spkr_sample_rate * 2 / spkr_fps
newUpdateTimer( timeInterval: 1 / Double(fps) )
setCPUClockSpeed(freq: MHz_6502)

View File

@ -179,6 +179,7 @@ extern double mhz;
#define DEFAULT_FPS 30U
#define DEF_VIDEO_DIV 1U
#define DEF_SPKR_DIV 1U
#define GAME_FPS 600U
#define GAME_VIDEO_DIV 10U

View File

@ -74,7 +74,11 @@ ALuint spkr_disk_arm_buf = 0;
ALuint spkr_disk_ioerr_buf = 0;
unsigned spkr_fps = DEFAULT_FPS;
const unsigned spkr_fps = DEFAULT_FPS;
unsigned spkr_fps_divider = 1;
unsigned spkr_frame_cntr = 0;
unsigned spkr_clk = 0;
const unsigned spkr_seconds = 1;
const unsigned spkr_sample_rate = 44100;
const unsigned sfx_sample_rate = 22050; // original sample rate
@ -274,7 +278,7 @@ void spkr_toggle() {
// push a click into the speaker buffer
// (we will play the entire buffer at the end of the frame)
spkr_sample_idx = (clkfrm / ( MHZ(default_MHz_6502) / spkr_sample_rate)) * 2;
spkr_sample_idx = ( (spkr_clk + clkfrm) / ( MHZ(default_MHz_6502) / spkr_sample_rate)) * 2;
if ( spkr_state ) {
// down edge
@ -342,7 +346,11 @@ int spkr_unqueue( ALuint src ) {
int playDelay = 4;
void spkr_update() {
if ( ++spkr_frame_cntr >= spkr_fps_divider ) {
spkr_frame_cntr = 0;
if ( spkr_play_time ) {
// free up unused buffers
freeBuffers += spkr_unqueue( spkr_src[SPKR_SRC_GAME_SFX] );
@ -350,7 +358,6 @@ void spkr_update() {
if ( freeBuffers ) {
if ( --spkr_play_time == 0 ) {
float fadeLevel = spkr_level - SPKR_LEVEL_ZERO;
@ -418,6 +425,11 @@ void spkr_update() {
}
spkr_clk = 0;
}
else {
spkr_clk += clkfrm;
}
}

View File

@ -35,7 +35,8 @@
extern const unsigned spkr_sample_rate;
extern const unsigned spkr_buf_alloc_size;
extern unsigned spkr_buf_size;
extern unsigned spkr_fps;
extern const unsigned spkr_fps;
extern unsigned spkr_fps_divider;
extern int16_t spkr_samples [];
extern unsigned spkr_sample_idx;
extern int spkr_level;