mirror of https://github.com/stella-emu/stella.git
OSystem for rtstella
This commit is contained in:
parent
405397d1fa
commit
341dbb2b6f
|
@ -31,6 +31,8 @@
|
|||
#if defined(RETRON77)
|
||||
#include "SettingsR77.hxx"
|
||||
#include "OSystemR77.hxx"
|
||||
#elif defined(RTSTELLA)
|
||||
#include "OSystemRTStella.hxx"
|
||||
#else
|
||||
#include "OSystemUNIX.hxx"
|
||||
#endif
|
||||
|
@ -92,6 +94,8 @@ class MediaFactory
|
|||
#if defined(BSPF_UNIX)
|
||||
#if defined(RETRON77)
|
||||
return make_unique<OSystemR77>();
|
||||
#elif defined(RTSTELLA)
|
||||
return make_unique<OSystemRTStella>();
|
||||
#else
|
||||
return make_unique<OSystemUNIX>();
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
#include "OSystemRTStella.hxx"
|
||||
|
||||
#include <sstream>
|
||||
#include <sched.h>
|
||||
#include <sys/sysinfo.h>
|
||||
|
||||
#include "Logger.hxx"
|
||||
|
||||
namespace {
|
||||
void configureScheduler() {
|
||||
const int cores = get_nprocs();
|
||||
if (cores < 2) {
|
||||
Logger::error("failed to set scheduling affinity on main thread - not enough cores");
|
||||
return;
|
||||
}
|
||||
|
||||
cpu_set_t cpuset;
|
||||
CPU_ZERO(&cpuset);
|
||||
for (int i = 0; i < cores - 1; i++) CPU_SET(i, &cpuset);
|
||||
|
||||
if (sched_setaffinity(0, sizeof(cpuset), &cpuset) < 0){
|
||||
ostringstream ss;
|
||||
ss << "failed to pin main and auxiliary thread: " << errno;
|
||||
|
||||
Logger::error(ss.str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool OSystemRTStella::initialize(const Settings::Options& options)
|
||||
{
|
||||
configureScheduler();
|
||||
|
||||
return OSystemStandalone::initialize(options);
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
//============================================================================
|
||||
//
|
||||
// SSSS tt lll lll
|
||||
// SS SS tt ll ll
|
||||
// SS tttttt eeee ll ll aaaa
|
||||
// SSSS tt ee ee ll ll aa
|
||||
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
||||
// SS SS tt ee ll ll aa aa
|
||||
// SSSS ttt eeeee llll llll aaaaa
|
||||
//
|
||||
// Copyright (c) 1995-2023 by Bradford W. Mott, Stephen Anthony
|
||||
// and the Stella Team
|
||||
//
|
||||
// See the file "License.txt" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//============================================================================
|
||||
|
||||
#ifndef OSYSTEM_RTSTELLA_HXX
|
||||
#define OSYSTEM_RTSTELLA_HXX
|
||||
|
||||
#include "OSystemStandalone.hxx"
|
||||
|
||||
class OSystemRTStella: public OSystemStandalone {
|
||||
public:
|
||||
bool initialize(const Settings::Options& options) override;
|
||||
};
|
||||
|
||||
#endif // OSYSTEM_RTSTELLA_HXX
|
|
@ -34,7 +34,7 @@ namespace {
|
|||
|
||||
const int cores = get_nprocs();
|
||||
if (cores < 2) {
|
||||
Logger::error("failed to set scheduling affinity - not enough cores");
|
||||
Logger::error("failed to set scheduling affinity on emulation worker - not enough cores");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -44,7 +44,7 @@ namespace {
|
|||
|
||||
if (sched_setaffinity(0, sizeof(cpuset), &cpuset) < 0){
|
||||
ostringstream ss;
|
||||
ss << "failed to pin thread: " << errno;
|
||||
ss << "failed to pin worker thread: " << errno;
|
||||
|
||||
Logger::error(ss.str());
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
MODULE := src/os/rtstella
|
||||
|
||||
MODULE_OBJS := \
|
||||
src/os/rtstella/Spinlock.o src/os/rtstella/RTEmulationWorker.o
|
||||
src/os/rtstella/Spinlock.o \
|
||||
src/os/rtstella/RTEmulationWorker.o \
|
||||
src/os/rtstella/OSystemRTStella.o
|
||||
|
||||
MODULE_DIRS += \
|
||||
src/os/rtstella
|
||||
|
|
Loading…
Reference in New Issue