mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-09-27 09:56:08 +00:00
Audio codepaths now always enabled
- Supported platforms: - Mac/iOS (OpenAL) - Desktop Linux/POSIX (OpenAL) - Android (OpenSLES) - TODO : for POSIX builds we should provide our own "null" audio backend if OpenAL/OpenSL not found by build script
This commit is contained in:
parent
06f8015959
commit
cc9a164bec
@ -40,7 +40,7 @@ APPLE2_MAIN_SRC = \
|
|||||||
jnihooks.c androidkeys.c
|
jnihooks.c androidkeys.c
|
||||||
|
|
||||||
APPLE2_OPTIM_CFLAGS := -Os
|
APPLE2_OPTIM_CFLAGS := -Os
|
||||||
APPLE2_BASE_CFLAGS := -DAPPLE2IX=1 -DINTERFACE_TOUCH=1 -DMOBILE_DEVICE=1 -DVIDEO_OPENGL=1 -DDEBUGGER=1 -DAUDIO_ENABLED=1 -std=gnu11 -fPIC $(APPLE2_OPTIM_CFLAGS) -I$(APPLE2_SRC_PATH)
|
APPLE2_BASE_CFLAGS := -DAPPLE2IX=1 -DINTERFACE_TOUCH=1 -DMOBILE_DEVICE=1 -DVIDEO_OPENGL=1 -DDEBUGGER=1 -std=gnu11 -fPIC $(APPLE2_OPTIM_CFLAGS) -I$(APPLE2_SRC_PATH)
|
||||||
APPLE2_BASE_LDLIBS := -Wl,-z,text -Wl,-z,noexecstack -llog -landroid -lGLESv2 -lz -lOpenSLES -latomic
|
APPLE2_BASE_LDLIBS := -Wl,-z,text -Wl,-z,noexecstack -llog -landroid -lGLESv2 -lz -lOpenSLES -latomic
|
||||||
|
|
||||||
LOCAL_WHOLE_STATIC_LIBRARIES += cpufeatures
|
LOCAL_WHOLE_STATIC_LIBRARIES += cpufeatures
|
||||||
|
@ -2777,7 +2777,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_CPU=1",
|
"TEST_CPU=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
@ -2815,7 +2814,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_CPU=1",
|
"TEST_CPU=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestCPU-Info.plist";
|
||||||
@ -2856,7 +2854,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_VM=1",
|
"TEST_VM=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
@ -2894,7 +2891,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_VM=1",
|
"TEST_VM=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestVM-Info.plist";
|
||||||
@ -2938,7 +2934,6 @@
|
|||||||
"DISK_TRACING=1",
|
"DISK_TRACING=1",
|
||||||
"VM_TRACING=1",
|
"VM_TRACING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
@ -2979,7 +2974,6 @@
|
|||||||
"DISK_TRACING=1",
|
"DISK_TRACING=1",
|
||||||
"VM_TRACING=1",
|
"VM_TRACING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisk-Info.plist";
|
||||||
@ -3020,7 +3014,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_DISPLAY=1",
|
"TEST_DISPLAY=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
@ -3058,7 +3051,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_DISPLAY=1",
|
"TEST_DISPLAY=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2MacTests/Apple2iOSTestDisplay-Info.plist";
|
||||||
@ -3096,7 +3088,6 @@
|
|||||||
"DISK_TRACING=1",
|
"DISK_TRACING=1",
|
||||||
"VM_TRACING=1",
|
"VM_TRACING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -3129,7 +3120,6 @@
|
|||||||
"DISK_TRACING=1",
|
"DISK_TRACING=1",
|
||||||
"VM_TRACING=1",
|
"VM_TRACING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
@ -3160,7 +3150,6 @@
|
|||||||
"TEST_VM=1",
|
"TEST_VM=1",
|
||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -3190,7 +3179,6 @@
|
|||||||
"TEST_VM=1",
|
"TEST_VM=1",
|
||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
@ -3330,7 +3318,6 @@
|
|||||||
"APPLE2IX=1",
|
"APPLE2IX=1",
|
||||||
"DEBUGGER=1",
|
"DEBUGGER=1",
|
||||||
"KEYPAD_JOYSTICK=1",
|
"KEYPAD_JOYSTICK=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
@ -3360,7 +3347,6 @@
|
|||||||
"APPLE2IX=1",
|
"APPLE2IX=1",
|
||||||
"DEBUGGER=1",
|
"DEBUGGER=1",
|
||||||
"KEYPAD_JOYSTICK=1",
|
"KEYPAD_JOYSTICK=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
@ -3394,7 +3380,6 @@
|
|||||||
"TEST_CPU=1",
|
"TEST_CPU=1",
|
||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -3424,7 +3409,6 @@
|
|||||||
"TEST_CPU=1",
|
"TEST_CPU=1",
|
||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
@ -3455,7 +3439,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_DISPLAY=1",
|
"TEST_DISPLAY=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
@ -3485,7 +3468,6 @@
|
|||||||
"TESTING=1",
|
"TESTING=1",
|
||||||
"TEST_DISPLAY=1",
|
"TEST_DISPLAY=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
@ -3520,7 +3502,6 @@
|
|||||||
"MOBILE_DEVICE=1",
|
"MOBILE_DEVICE=1",
|
||||||
"DEBUGGER=1",
|
"DEBUGGER=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||||
@ -3556,7 +3537,6 @@
|
|||||||
"MOBILE_DEVICE=1",
|
"MOBILE_DEVICE=1",
|
||||||
"DEBUGGER=1",
|
"DEBUGGER=1",
|
||||||
"VIDEO_OPENGL=1",
|
"VIDEO_OPENGL=1",
|
||||||
"AUDIO_ENABLED=1",
|
|
||||||
"NDEBUG=1",
|
"NDEBUG=1",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/Apple2iOS/Apple2iOS-Info.plist";
|
||||||
|
@ -256,7 +256,6 @@ AC_ARG_ENABLE([audio], AS_HELP_STRING([--disable-audio], [Disable emulator audio
|
|||||||
AC_SEARCH_LIBS(alcOpenDevice, openal, [
|
AC_SEARCH_LIBS(alcOpenDevice, openal, [
|
||||||
dnl found OpenAL ...
|
dnl found OpenAL ...
|
||||||
openal_supported='yes'
|
openal_supported='yes'
|
||||||
AC_DEFINE(AUDIO_ENABLED, 1, [Enable sound module])
|
|
||||||
AUDIO_GLUE_C="src/audio/speaker.c src/audio/mockingboard.c src/audio/playqueue.c"
|
AUDIO_GLUE_C="src/audio/speaker.c src/audio/mockingboard.c src/audio/playqueue.c"
|
||||||
AUDIO_O="src/audio/soundcore.o src/audio/soundcore-openal.o src/audio/speaker.o src/audio/playqueue.o src/audio/alhelpers.o src/audio/mockingboard.o src/audio/AY8910.o"
|
AUDIO_O="src/audio/soundcore.o src/audio/soundcore-openal.o src/audio/speaker.o src/audio/playqueue.o src/audio/alhelpers.o src/audio/mockingboard.o src/audio/AY8910.o"
|
||||||
dnl HACK there's gotta be a better way ... without this verbosity, CFLAGS are not correct (lacking -DTESTING=1 , etc) if we don't specify specific obj files for test binaries
|
dnl HACK there's gotta be a better way ... without this verbosity, CFLAGS are not correct (lacking -DTESTING=1 , etc) if we don't specify specific obj files for test binaries
|
||||||
@ -267,19 +266,19 @@ AC_ARG_ENABLE([audio], AS_HELP_STRING([--disable-audio], [Disable emulator audio
|
|||||||
testtrace_AUDIO_O="src/audio/testtrace-soundcore.o src/audio/testtrace-soundcore-openal.o src/audio/testtrace-speaker.o src/audio/testtrace-playqueue.o src/audio/testtrace-alhelpers.o src/audio/testtrace-mockingboard.o src/audio/testtrace-AY8910.o"
|
testtrace_AUDIO_O="src/audio/testtrace-soundcore.o src/audio/testtrace-soundcore-openal.o src/audio/testtrace-speaker.o src/audio/testtrace-playqueue.o src/audio/testtrace-alhelpers.o src/audio/testtrace-mockingboard.o src/audio/testtrace-AY8910.o"
|
||||||
testvm_AUDIO_O="src/audio/testvm-soundcore.o src/audio/testvm-soundcore-openal.o src/audio/testvm-speaker.o src/audio/testvm-playqueue.o src/audio/testvm-alhelpers.o src/audio/testvm-mockingboard.o src/audio/testvm-AY8910.o"
|
testvm_AUDIO_O="src/audio/testvm-soundcore.o src/audio/testvm-soundcore-openal.o src/audio/testvm-speaker.o src/audio/testvm-playqueue.o src/audio/testvm-alhelpers.o src/audio/testvm-mockingboard.o src/audio/testvm-AY8910.o"
|
||||||
], [
|
], [
|
||||||
AC_MSG_WARN([Could not find OpenAL libraries, sound will be disabled])
|
AC_MSG_ERROR([Could not find OpenAL libraries ... todo fixme ... implement a null sound backend])
|
||||||
], [])
|
], [])
|
||||||
], [
|
], [
|
||||||
AC_MSG_WARN([Could not find OpenAL headers, sound will be disabled])
|
AC_MSG_ERROR([Could not find OpenAL headers ... todo fixme ... implement a null sound backend])
|
||||||
], [
|
], [
|
||||||
#include <AL/al.h>
|
#include <AL/al.h>
|
||||||
#include <AL/alc.h>
|
#include <AL/alc.h>
|
||||||
])
|
])
|
||||||
], [
|
], [
|
||||||
AC_MSG_WARN([Could not find OpenAL headers, sound will be disabled])
|
AC_MSG_ERROR([Could not find OpenAL headers ... todo fixme ... implement a null sound backend])
|
||||||
])
|
])
|
||||||
], [
|
], [
|
||||||
AC_MSG_WARN([Could not find OpenAL headers, sound will be disabled])
|
AC_MSG_ERROR([Could not find OpenAL headers ... todo fixme ... implement a null sound backend])
|
||||||
])
|
])
|
||||||
])
|
])
|
||||||
AC_SUBST(AUDIO_GLUE_C)
|
AC_SUBST(AUDIO_GLUE_C)
|
||||||
|
@ -104,15 +104,11 @@ static inline GLenum safeGLGetError(void) {
|
|||||||
#define glGetError() 0
|
#define glGetError() 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUGGER
|
|
||||||
#include "meta/debug.h"
|
#include "meta/debug.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
#include "audio/soundcore.h"
|
#include "audio/soundcore.h"
|
||||||
#include "audio/speaker.h"
|
#include "audio/speaker.h"
|
||||||
#include "audio/mockingboard.h"
|
#include "audio/mockingboard.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
# include "../Android/jni/android_globals.h"
|
# include "../Android/jni/android_globals.h"
|
||||||
|
40
src/timing.c
40
src/timing.c
@ -71,11 +71,9 @@ bool alt_speed_enabled = false;
|
|||||||
|
|
||||||
// misc
|
// misc
|
||||||
volatile uint8_t emul_reinitialize = 1;
|
volatile uint8_t emul_reinitialize = 1;
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
static bool emul_reinitialize_audio = false;
|
static bool emul_reinitialize_audio = false;
|
||||||
static bool emul_pause_audio = false;
|
static bool emul_pause_audio = false;
|
||||||
static bool emul_resume_audio = false;
|
static bool emul_resume_audio = false;
|
||||||
#endif
|
|
||||||
static bool cpu_shutting_down = false;
|
static bool cpu_shutting_down = false;
|
||||||
pthread_t cpu_thread_id = 0;
|
pthread_t cpu_thread_id = 0;
|
||||||
pthread_mutex_t interface_mutex = PTHREAD_MUTEX_INITIALIZER;
|
pthread_mutex_t interface_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
@ -136,10 +134,8 @@ static void _timing_initialize(double scale) {
|
|||||||
if (!is_fullspeed) {
|
if (!is_fullspeed) {
|
||||||
cycles_persec_target = CLK_6502 * scale;
|
cycles_persec_target = CLK_6502 * scale;
|
||||||
}
|
}
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
speaker_reset();
|
speaker_reset();
|
||||||
//TIMING_LOG("ClockRate:%0.2lf ClockCyclesPerSpeakerSample:%0.2lf", cycles_persec_target, speaker_cyclesPerSample());
|
//TIMING_LOG("ClockRate:%0.2lf ClockCyclesPerSpeakerSample:%0.2lf", cycles_persec_target, speaker_cyclesPerSample());
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !TESTING
|
#if !TESTING
|
||||||
@ -162,9 +158,7 @@ void reinitialize(void) {
|
|||||||
|
|
||||||
timing_initialize();
|
timing_initialize();
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
MB_Reset();
|
MB_Reset();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void timing_initialize(void) {
|
void timing_initialize(void) {
|
||||||
@ -184,8 +178,7 @@ void timing_toggleCPUSpeed(void) {
|
|||||||
timing_initialize();
|
timing_initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
static void timing_reinitializeAudio(void) {
|
||||||
void timing_reinitializeAudio(void) {
|
|
||||||
SPINLOCK_ACQUIRE(&_pause_spinLock);
|
SPINLOCK_ACQUIRE(&_pause_spinLock);
|
||||||
assert(pthread_self() != cpu_thread_id);
|
assert(pthread_self() != cpu_thread_id);
|
||||||
#if !TESTING
|
#if !TESTING
|
||||||
@ -196,7 +189,6 @@ void timing_reinitializeAudio(void) {
|
|||||||
emul_resume_audio = false;
|
emul_resume_audio = false;
|
||||||
SPINLOCK_RELINQUISH(&_pause_spinLock);
|
SPINLOCK_RELINQUISH(&_pause_spinLock);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
void cpu_pause(void) {
|
void cpu_pause(void) {
|
||||||
assert(pthread_self() != cpu_thread_id);
|
assert(pthread_self() != cpu_thread_id);
|
||||||
@ -209,11 +201,9 @@ void cpu_pause(void) {
|
|||||||
|
|
||||||
// CPU thread will be paused when it next tries to acquire interface_mutex
|
// CPU thread will be paused when it next tries to acquire interface_mutex
|
||||||
LOG("PAUSING CPU...");
|
LOG("PAUSING CPU...");
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
if (!emul_reinitialize_audio) {
|
if (!emul_reinitialize_audio) {
|
||||||
emul_pause_audio = true;
|
emul_pause_audio = true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
pthread_mutex_lock(&interface_mutex);
|
pthread_mutex_lock(&interface_mutex);
|
||||||
is_paused = true;
|
is_paused = true;
|
||||||
} while (0);
|
} while (0);
|
||||||
@ -230,11 +220,9 @@ void cpu_resume(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CPU thread will be unblocked to acquire interface_mutex
|
// CPU thread will be unblocked to acquire interface_mutex
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
if (!emul_reinitialize_audio) {
|
if (!emul_reinitialize_audio) {
|
||||||
emul_resume_audio = true;
|
emul_resume_audio = true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
LOG("RESUMING CPU...");
|
LOG("RESUMING CPU...");
|
||||||
pthread_mutex_unlock(&interface_mutex);
|
pthread_mutex_unlock(&interface_mutex);
|
||||||
is_paused = false;
|
is_paused = false;
|
||||||
@ -279,15 +267,12 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
unsigned long dbg_cycles_executed = 0;
|
unsigned long dbg_cycles_executed = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
audio_init();
|
audio_init();
|
||||||
speaker_init();
|
speaker_init();
|
||||||
MB_Initialize();
|
MB_Initialize();
|
||||||
#endif
|
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
LOG("CPUTHREAD %lu LOCKING FOR MAYBE INITIALIZING AUDIO ...", cpu_thread_id);
|
LOG("CPUTHREAD %lu LOCKING FOR MAYBE INITIALIZING AUDIO ...", cpu_thread_id);
|
||||||
pthread_mutex_lock(&interface_mutex);
|
pthread_mutex_lock(&interface_mutex);
|
||||||
if (emul_reinitialize_audio) {
|
if (emul_reinitialize_audio) {
|
||||||
@ -305,7 +290,6 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
}
|
}
|
||||||
pthread_mutex_unlock(&interface_mutex);
|
pthread_mutex_unlock(&interface_mutex);
|
||||||
LOG("UNLOCKING FOR MAYBE INITIALIZING AUDIO ...");
|
LOG("UNLOCKING FOR MAYBE INITIALIZING AUDIO ...");
|
||||||
#endif
|
|
||||||
|
|
||||||
if (emul_reinitialize) {
|
if (emul_reinitialize) {
|
||||||
reinitialize();
|
reinitialize();
|
||||||
@ -323,19 +307,15 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
do {
|
do {
|
||||||
SCOPE_TRACE_CPU("CPU mainloop");
|
SCOPE_TRACE_CPU("CPU mainloop");
|
||||||
// -LOCK----------------------------------------------------------------------------------------- SAMPLE ti
|
// -LOCK----------------------------------------------------------------------------------------- SAMPLE ti
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
if (UNLIKELY(emul_pause_audio)) {
|
if (UNLIKELY(emul_pause_audio)) {
|
||||||
emul_pause_audio = false;
|
emul_pause_audio = false;
|
||||||
audio_pause();
|
audio_pause();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
pthread_mutex_lock(&interface_mutex);
|
pthread_mutex_lock(&interface_mutex);
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
if (UNLIKELY(emul_resume_audio)) {
|
if (UNLIKELY(emul_resume_audio)) {
|
||||||
emul_resume_audio = false;
|
emul_resume_audio = false;
|
||||||
audio_resume();
|
audio_resume();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &ti);
|
clock_gettime(CLOCK_MONOTONIC, &ti);
|
||||||
|
|
||||||
deltat = timespec_diff(t0, ti, &negative);
|
deltat = timespec_diff(t0, ti, &negative);
|
||||||
@ -360,9 +340,7 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
cpu65_cycles_to_execute = 0;
|
cpu65_cycles_to_execute = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
MB_StartOfCpuExecute();
|
MB_StartOfCpuExecute();
|
||||||
#endif
|
|
||||||
if (is_debugging) {
|
if (is_debugging) {
|
||||||
debugging_cycles0 = cpu65_cycles_to_execute;
|
debugging_cycles0 = cpu65_cycles_to_execute;
|
||||||
debugging_cycles = cpu65_cycles_to_execute;
|
debugging_cycles = cpu65_cycles_to_execute;
|
||||||
@ -402,21 +380,15 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
#endif
|
#endif
|
||||||
g_dwCyclesThisFrame += cpu65_cycle_count;
|
g_dwCyclesThisFrame += cpu65_cycle_count;
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
MB_UpdateCycles(); // update 6522s (NOTE: do this before updating cycles_count_total)
|
MB_UpdateCycles(); // update 6522s (NOTE: do this before updating cycles_count_total)
|
||||||
#endif
|
|
||||||
|
|
||||||
timing_checkpoint_cycles();
|
timing_checkpoint_cycles();
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
speaker_flush(); // play audio
|
speaker_flush(); // play audio
|
||||||
#endif
|
|
||||||
|
|
||||||
if (g_dwCyclesThisFrame >= dwClksPerFrame) {
|
if (g_dwCyclesThisFrame >= dwClksPerFrame) {
|
||||||
g_dwCyclesThisFrame -= dwClksPerFrame;
|
g_dwCyclesThisFrame -= dwClksPerFrame;
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
MB_EndOfVideoFrame();
|
MB_EndOfVideoFrame();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC, &tj);
|
clock_gettime(CLOCK_MONOTONIC, &tj);
|
||||||
@ -428,9 +400,7 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
disk_motor_time = timespec_diff(disk6.motor_time, tj, &negative);
|
disk_motor_time = timespec_diff(disk6.motor_time, tj, &negative);
|
||||||
assert(!negative);
|
assert(!negative);
|
||||||
if (!is_fullspeed &&
|
if (!is_fullspeed &&
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
!speaker_isActive() &&
|
!speaker_isActive() &&
|
||||||
#endif
|
|
||||||
!video_isDirty(A2_DIRTY_FLAG) && (!disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS)) )
|
!video_isDirty(A2_DIRTY_FLAG) && (!disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS)) )
|
||||||
{
|
{
|
||||||
TIMING_LOG("auto switching to full speed");
|
TIMING_LOG("auto switching to full speed");
|
||||||
@ -503,9 +473,7 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
#if !MOBILE_DEVICE
|
#if !MOBILE_DEVICE
|
||||||
if (timing_shouldAutoAdjustSpeed()) {
|
if (timing_shouldAutoAdjustSpeed()) {
|
||||||
if (is_fullspeed && (
|
if (is_fullspeed && (
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
speaker_isActive() ||
|
speaker_isActive() ||
|
||||||
#endif
|
|
||||||
video_isDirty(A2_DIRTY_FLAG) || (disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS))) )
|
video_isDirty(A2_DIRTY_FLAG) || (disk6.motor_off && (disk_motor_time.tv_sec || disk_motor_time.tv_nsec > DISK_MOTOR_QUIET_NSECS))) )
|
||||||
{
|
{
|
||||||
double speed = alt_speed_enabled ? cpu_altscale_factor : cpu_scale_factor;
|
double speed = alt_speed_enabled ? cpu_altscale_factor : cpu_scale_factor;
|
||||||
@ -521,11 +489,9 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
if (UNLIKELY(emul_reinitialize_audio)) {
|
if (UNLIKELY(emul_reinitialize_audio)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (UNLIKELY(cpu_shutting_down)) {
|
if (UNLIKELY(cpu_shutting_down)) {
|
||||||
break;
|
break;
|
||||||
@ -537,11 +503,9 @@ static void *cpu_thread(void *dummyptr) {
|
|||||||
}
|
}
|
||||||
} while (1);
|
} while (1);
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
speaker_destroy();
|
speaker_destroy();
|
||||||
MB_Destroy();
|
MB_Destroy();
|
||||||
audio_shutdown();
|
audio_shutdown();
|
||||||
#endif
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -613,7 +577,6 @@ static void vm_prefsChanged(const char *domain) {
|
|||||||
if (cpu_altscale_factor > CPU_SCALE_FASTEST_PIVOT) {
|
if (cpu_altscale_factor > CPU_SCALE_FASTEST_PIVOT) {
|
||||||
cpu_altscale_factor = CPU_SCALE_FASTEST;
|
cpu_altscale_factor = CPU_SCALE_FASTEST;
|
||||||
}
|
}
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
|
|
||||||
static float audioLatency = 0.f;
|
static float audioLatency = 0.f;
|
||||||
float latency = prefs_parseFloatValue(PREF_DOMAIN_AUDIO, PREF_AUDIO_LATENCY, &fVal) ? fVal : 0.25f;
|
float latency = prefs_parseFloatValue(PREF_DOMAIN_AUDIO, PREF_AUDIO_LATENCY, &fVal) ? fVal : 0.25f;
|
||||||
@ -632,7 +595,6 @@ static void vm_prefsChanged(const char *domain) {
|
|||||||
MB_SetEnabled(enabled);
|
MB_SetEnabled(enabled);
|
||||||
timing_reinitializeAudio();
|
timing_reinitializeAudio();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static __attribute__((constructor)) void _init_vm(void) {
|
static __attribute__((constructor)) void _init_vm(void) {
|
||||||
|
@ -95,13 +95,6 @@ bool timing_shouldAutoAdjustSpeed(void);
|
|||||||
*/
|
*/
|
||||||
void timing_initialize(void);
|
void timing_initialize(void);
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
/*
|
|
||||||
* force audio reinitialization
|
|
||||||
*/
|
|
||||||
void timing_reinitializeAudio(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pause timing/CPU thread.
|
* Pause timing/CPU thread.
|
||||||
*
|
*
|
||||||
|
26
src/vm.c
26
src/vm.c
@ -872,14 +872,15 @@ GLUE_C_READ(iie_cxrom_peripheral)
|
|||||||
{
|
{
|
||||||
softswitches &= ~SS_CXROM;
|
softswitches &= ~SS_CXROM;
|
||||||
base_cxrom = apple_ii_64k[0];
|
base_cxrom = apple_ii_64k[0];
|
||||||
#ifdef AUDIO_ENABLED
|
// FIXME TODO : implement pluggable peripheral API
|
||||||
|
//if (mockingboard_inserted) {
|
||||||
extern VMFunc MB_Read;
|
extern VMFunc MB_Read;
|
||||||
base_c4rom = (void*)MB_Read;
|
base_c4rom = (void*)MB_Read;
|
||||||
base_c5rom = (void*)MB_Read;
|
base_c5rom = (void*)MB_Read;
|
||||||
#else
|
//} else {
|
||||||
base_c4rom = (void*)ram_nop;
|
base_c4rom = (void*)ram_nop;
|
||||||
base_c5rom = (void*)ram_nop;
|
base_c5rom = (void*)ram_nop;
|
||||||
#endif
|
//}
|
||||||
if (!(softswitches & SS_C3ROM)) {
|
if (!(softswitches & SS_C3ROM)) {
|
||||||
base_c3rom = apple_ii_64k[0];
|
base_c3rom = apple_ii_64k[0];
|
||||||
}
|
}
|
||||||
@ -1194,9 +1195,10 @@ static void _initialize_tables(void) {
|
|||||||
|
|
||||||
// HACK TODO FIXME : this needs to be tied to the UI/configuration system (once we have more/conflicting options)
|
// HACK TODO FIXME : this needs to be tied to the UI/configuration system (once we have more/conflicting options)
|
||||||
|
|
||||||
#ifdef AUDIO_ENABLED
|
// FIXME TODO : implement pluggable peripheral API
|
||||||
|
//if (mockingboard_inserted) {
|
||||||
mb_io_initialize(4, 5); /* Mockingboard(s) and/or Phasor in slots 4 & 5 */
|
mb_io_initialize(4, 5); /* Mockingboard(s) and/or Phasor in slots 4 & 5 */
|
||||||
#endif
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -1213,12 +1215,7 @@ void vm_initialize(void) {
|
|||||||
|
|
||||||
void vm_reinitializeAudio(void) {
|
void vm_reinitializeAudio(void) {
|
||||||
for (unsigned int i = 0xC030; i < 0xC040; i++) {
|
for (unsigned int i = 0xC030; i < 0xC040; i++) {
|
||||||
cpu65_vmem_r[i] = cpu65_vmem_w[i] =
|
cpu65_vmem_r[i] = cpu65_vmem_w[i] = speaker_toggle;
|
||||||
#ifdef AUDIO_ENABLED
|
|
||||||
speaker_toggle;
|
|
||||||
#else
|
|
||||||
ram_nop;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#warning TODO FIXME ... should unset MB/Phasor hooks if volume is zero ...
|
#warning TODO FIXME ... should unset MB/Phasor hooks if volume is zero ...
|
||||||
}
|
}
|
||||||
@ -1492,14 +1489,15 @@ bool vm_loadState(StateHelper_s *helper) {
|
|||||||
LOG("LOAD base_cxrom = %d", state);
|
LOG("LOAD base_cxrom = %d", state);
|
||||||
if (state == 0) {
|
if (state == 0) {
|
||||||
base_cxrom = apple_ii_64k[0];
|
base_cxrom = apple_ii_64k[0];
|
||||||
#ifdef AUDIO_ENABLED
|
// FIXME TODO : implement pluggable peripheral API
|
||||||
|
//if (mockingboard_inserted) {
|
||||||
extern VMFunc MB_Read;
|
extern VMFunc MB_Read;
|
||||||
base_c4rom = (void *)MB_Read;
|
base_c4rom = (void *)MB_Read;
|
||||||
base_c5rom = (void *)MB_Read;
|
base_c5rom = (void *)MB_Read;
|
||||||
#else
|
//} else {
|
||||||
base_c4rom = (void *)ram_nop;
|
base_c4rom = (void *)ram_nop;
|
||||||
base_c5rom = (void *)ram_nop;
|
base_c5rom = (void *)ram_nop;
|
||||||
#endif
|
//}
|
||||||
} else {
|
} else {
|
||||||
base_cxrom = apple_ii_64k[1];
|
base_cxrom = apple_ii_64k[1];
|
||||||
base_c4rom = apple_ii_64k[1];
|
base_c4rom = apple_ii_64k[1];
|
||||||
|
Loading…
Reference in New Issue
Block a user