Added emulator detection (#651)

* Added emulator detection

* Fixed missing assignments

* Disable interrupts around the count factor test

* Added more comments to emutest

* Changed PJ64 enum values so the versions work as a bitfield

* Updated README

* Fixed comments

* Updated enum values so you can safely AND and OR all emulator version flags together

* Remove redundant gIsConsole, gIsVC, and gCacheEmulated global variables

* Changed console check to be more future proof against Ares

* Use assembly file instead of casting to a function pointer

* Moved round_double_to_float back to its own compilation unit

* Moved the ParallelN64 check before the Ares check for better future-proofing

* Align pj64_get_count_factor_asm with cache lines... not that it actually matters for pj64

* Adjusted some comments

* Made emulator check thread-safe on emulators that emulate PI timings

* Added gIsConsole macro for backwards compatibility

* Added cen64 to INSTANT_INPUT_BLACKLIST

* Updated comment
This commit is contained in:
Matt Pharoah
2023-08-28 18:03:26 -04:00
committed by GitHub
parent 0138b8ea53
commit febcb71ea3
20 changed files with 278 additions and 92 deletions

View File

@@ -6,9 +6,8 @@
#include "synthesis.h"
#include "seqplayer.h"
#include "effects.h"
#include "game/game_init.h"
#include "game/emutest.h"
#include "game/puppyprint.h"
#include "game/vc_check.h"
#include "game/debug.h"
#include "string.h"
@@ -1171,7 +1170,7 @@ void audio_reset_session(s32 reverbPresetId) {
if (gAudioLoadLock != AUDIO_LOCK_UNINITIALIZED) {
gAudioLoadLock = AUDIO_LOCK_LOADING;
if (!gIsVC) {
if (!(gEmulator & EMU_WIIVC)) {
gAudioFrameCount = 0;
while (gAudioFrameCount < 1) {
// spin
@@ -1325,7 +1324,7 @@ void audio_reset_session(void) {
gAudioBufferParameters.minAiBufferLength *= gAudioBufferParameters.presetUnk4;
gAudioBufferParameters.updatesPerFrame *= gAudioBufferParameters.presetUnk4;
if (gIsConsole)
if (gEmulator & EMU_CONSOLE)
gMaxSimultaneousNotes = MAX_SIMULTANEOUS_NOTES_CONSOLE;
else
gMaxSimultaneousNotes = MAX_SIMULTANEOUS_NOTES_EMULATOR;
@@ -1352,7 +1351,7 @@ void audio_reset_session(void) {
gMinAiBufferLength = gSamplesPerFrameTarget - 0x10;
gAudioUpdatesPerFrame = updatesPerFrame = gSamplesPerFrameTarget / 160 + 1;
if (gIsConsole)
if (gEmulator & EMU_CONSOLE)
gMaxSimultaneousNotes = MAX_SIMULTANEOUS_NOTES_CONSOLE;
else
gMaxSimultaneousNotes = MAX_SIMULTANEOUS_NOTES_EMULATOR;