OpenEmu: Remove upstream core

This is maintained downstream and not synchronized back upstream
This commit is contained in:
Vicki Pfau 2024-04-22 00:52:26 -07:00
parent fa2fe8eed4
commit d422cbe65d
5 changed files with 1 additions and 435 deletions

View File

@ -68,9 +68,6 @@ if(NOT LIBMGBA_ONLY)
set(BUILD_QT ON CACHE BOOL "Build Qt frontend")
set(BUILD_SDL ON CACHE BOOL "Build SDL frontend")
set(BUILD_LIBRETRO OFF CACHE BOOL "Build libretro core")
if(APPLE)
set(BUILD_OPENEMU OFF CACHE BOOL "Build OpenEmu core")
endif()
set(BUILD_PERF OFF CACHE BOOL "Build performance profiling tool")
set(BUILD_TEST OFF CACHE BOOL "Build testing harness")
set(BUILD_SUITE OFF CACHE BOOL "Build test suite")
@ -80,7 +77,7 @@ if(NOT LIBMGBA_ONLY)
set(BUILD_PYTHON OFF CACHE BOOL "Build Python bindings")
set(BUILD_STATIC OFF CACHE BOOL "Build a static library")
set(BUILD_SHARED ON CACHE BOOL "Build a shared library")
set(SKIP_LIBRARY OFF CACHE BOOL "Skip building the library (useful for only building libretro or OpenEmu cores)")
set(SKIP_LIBRARY OFF CACHE BOOL "Skip building the library (useful for only building libretro core)")
set(BUILD_GL ON CACHE BOOL "Build with OpenGL")
set(BUILD_GLES2 ON CACHE BOOL "Build with OpenGL|ES 2")
set(BUILD_GLES3 ON CACHE BOOL "Build with OpenGL|ES 3")
@ -144,11 +141,6 @@ if (BUILD_LIBRETRO)
mark_as_advanced(LIBRETRO_LIBDIR)
endif()
if (BUILD_OPENEMU)
set(OE_LIBDIR "${LIBDIR}" CACHE PATH "Installed library directory (OpenEmu)")
mark_as_advanced(OE_LIBDIR)
endif()
if (DISTBUILD)
set(EXTRA_LICENSES "" CACHE FILEPATH "Extra licenses to include in distribution packaages")
mark_as_advanced(EXTRA_LICENSES)
@ -1001,22 +993,6 @@ if(BUILD_LIBRETRO)
endif()
endif()
if(BUILD_OPENEMU)
find_library(FOUNDATION Foundation)
find_library(OPENEMUBASE OpenEmuBase)
file(GLOB OE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/openemu/*.m)
add_library(${BINARY_NAME}-openemu MODULE ${CORE_SRC} ${OS_SRC})
set_target_properties(${BINARY_NAME}-openemu PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/src/platform/openemu/Info.plist.in
BUNDLE TRUE
BUNDLE_EXTENSION oecoreplugin
OUTPUT_NAME ${PROJECT_NAME}
COMPILE_OPTIONS "-fobjc-arc"
COMPILE_DEFINITIONS "DISABLE_THREADING;MGBA_STANDALONE;${OS_DEFINES};${FUNCTION_DEFINES};MINIMAL_CORE=1")
target_link_libraries(${BINARY_NAME}-openemu ${OS_LIB} ${FOUNDATION} ${OPENEMUBASE})
install(TARGETS ${BINARY_NAME}-openemu LIBRARY DESTINATION ${OE_LIBDIR} COMPONENT ${BINARY_NAME}.oecoreplugin NAMELINK_SKIP)
endif()
if(BUILD_QT AND (WIN32 OR APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Linux"))
set(BUILD_UPDATER ON)
endif()
@ -1345,9 +1321,6 @@ if(NOT QUIET AND NOT LIBMGBA_ONLY)
message(STATUS " ROM tester: ${BUILD_ROM_TEST}")
message(STATUS "Cores:")
message(STATUS " Libretro core: ${BUILD_LIBRETRO}")
if(APPLE)
message(STATUS " OpenEmu core: ${BUILD_OPENEMU}")
endif()
message(STATUS "Libraries:")
message(STATUS " Static: ${BUILD_STATIC}")
message(STATUS " Shared: ${BUILD_SHARED}")

View File

@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>${PROJECT_NAME}</string>
<key>CFBundleIconFile</key>
<string>mGBA</string>
<key>CFBundleIdentifier</key>
<string>com.endrift.mgba</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>${VERSION_STRING}</string>
<key>NSPrincipalClass</key>
<string>OEGameCoreController</string>
<key>OEGameCoreClass</key>
<string>mGBAGameCore</string>
<key>OEGameCoreOptions</key>
<dict>
<key>openemu.system.gba</key>
<dict>
<key>OEGameCoreRewindBufferSeconds</key>
<integer>60</integer>
<key>OEGameCoreRewindInterval</key>
<integer>0</integer>
<key>OEGameCoreSupportsRewinding</key>
<true/>
<key>OEGameCoreSupportsCheatCode</key>
<true/>
</dict>
</dict>
<key>OEGameCorePlayerCount</key>
<string>1</string>
<key>OEProjectURL</key>
<string>https://mgba.io/</string>
<key>OESystemIdentifiers</key>
<array>
<string>openemu.system.gba</string>
</array>
<key>SUEnableAutomaticChecks</key>
<string>1</string>
<key>SUFeedURL</key>
<string>https://raw.github.com/OpenEmu/OpenEmu-Update/master/mgba_appcast.xml</string>
</dict>
</plist>

View File

@ -1,51 +0,0 @@
/*
Copyright (c) 2011, OpenEmu Team
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the OpenEmu Team nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#import <Cocoa/Cocoa.h>
@protocol OESystemResponderClient;
typedef enum _OEGBAButton
{
OEGBAButtonUp,
OEGBAButtonDown,
OEGBAButtonLeft,
OEGBAButtonRight,
OEGBAButtonA,
OEGBAButtonB,
OEGBAButtonL,
OEGBAButtonR,
OEGBAButtonStart,
OEGBAButtonSelect,
OEGBAButtonCount
} OEGBAButton;
@protocol OEGBASystemResponderClient <OESystemResponderClient, NSObject>
- (oneway void)didPushGBAButton:(OEGBAButton)button forPlayer:(NSUInteger)player;
- (oneway void)didReleaseGBAButton:(OEGBAButton)button forPlayer:(NSUInteger)player;
@end

View File

@ -1,6 +0,0 @@
#import <Cocoa/Cocoa.h>
#import <OpenEmuBase/OEGameCore.h>
OE_EXPORTED_CLASS
@interface mGBAGameCore : OEGameCore
@end

View File

@ -1,298 +0,0 @@
/*
Copyright (c) 2016, Jeffrey Pfau
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS''
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
#import "mGBAGameCore.h"
#include <mgba-util/common.h>
#include <mgba/core/blip_buf.h>
#include <mgba/core/core.h>
#include <mgba/core/cheats.h>
#include <mgba/core/serialize.h>
#include <mgba/gba/core.h>
#include <mgba/internal/gba/cheats.h>
#include <mgba/internal/gba/input.h>
#include <mgba-util/circle-buffer.h>
#include <mgba-util/memory.h>
#include <mgba-util/vfs.h>
#import <OpenEmuBase/OERingBuffer.h>
#import "OEGBASystemResponderClient.h"
#import <OpenGL/gl.h>
#define SAMPLES 1024
@interface mGBAGameCore () <OEGBASystemResponderClient>
{
struct mCore* core;
void* outputBuffer;
NSMutableDictionary *cheatSets;
}
@end
@implementation mGBAGameCore
- (id)init
{
if ((self = [super init]))
{
core = GBACoreCreate();
mCoreInitConfig(core, nil);
struct mCoreOptions opts = {
.useBios = true,
};
mCoreConfigLoadDefaults(&core->config, &opts);
core->init(core);
outputBuffer = nil;
unsigned width, height;
core->baseVideoSize(core, &width, &height);
outputBuffer = malloc(width * height * BYTES_PER_PIXEL);
core->setVideoBuffer(core, outputBuffer, width);
core->setAudioBufferSize(core, SAMPLES);
cheatSets = [[NSMutableDictionary alloc] init];
}
return self;
}
- (void)dealloc
{
mCoreConfigDeinit(&core->config);
core->deinit(core);
free(outputBuffer);
}
#pragma mark - Execution
- (BOOL)loadFileAtPath:(NSString *)path error:(NSError **)error
{
NSString *batterySavesDirectory = [self batterySavesDirectoryPath];
[[NSFileManager defaultManager] createDirectoryAtURL:[NSURL fileURLWithPath:batterySavesDirectory]
withIntermediateDirectories:YES
attributes:nil
error:nil];
if (core->dirs.save) {
core->dirs.save->close(core->dirs.save);
}
core->dirs.save = VDirOpen([batterySavesDirectory fileSystemRepresentation]);
if (!mCoreLoadFile(core, [path fileSystemRepresentation])) {
*error = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotLoadROMError userInfo:nil];
return NO;
}
mCoreAutoloadSave(core);
core->reset(core);
return YES;
}
- (void)executeFrame
{
core->runFrame(core);
int16_t samples[SAMPLES * 2];
size_t available = 0;
available = blip_samples_avail(core->getAudioChannel(core, 0));
blip_read_samples(core->getAudioChannel(core, 0), samples, available, true);
blip_read_samples(core->getAudioChannel(core, 1), samples + 1, available, true);
[[self ringBufferAtIndex:0] write:samples maxLength:available * 4];
}
- (void)resetEmulation
{
core->reset(core);
}
- (void)setupEmulation
{
blip_set_rates(core->getAudioChannel(core, 0), core->frequency(core), 32768);
blip_set_rates(core->getAudioChannel(core, 1), core->frequency(core), 32768);
}
#pragma mark - Video
- (OEIntSize)aspectSize
{
return OEIntSizeMake(3, 2);
}
- (OEIntRect)screenRect
{
unsigned width, height;
core->currentVideoSize(core, &width, &height);
return OEIntRectMake(0, 0, width, height);
}
- (OEIntSize)bufferSize
{
unsigned width, height;
core->baseVideoSize(core, &width, &height);
return OEIntSizeMake(width, height);
}
- (const void *)getVideoBufferWithHint:(void *)hint
{
OEIntSize bufferSize = [self bufferSize];
if (!hint) {
hint = outputBuffer;
}
outputBuffer = hint;
core->setVideoBuffer(core, hint, bufferSize.width);
return hint;
}
- (GLenum)pixelFormat
{
return GL_RGBA;
}
- (GLenum)pixelType
{
return GL_UNSIGNED_INT_8_8_8_8_REV;
}
- (NSTimeInterval)frameInterval
{
return core->frequency(core) / (double) core->frameCycles(core);
}
#pragma mark - Audio
- (NSUInteger)channelCount
{
return 2;
}
- (double)audioSampleRate
{
return 32768;
}
#pragma mark - Save State
- (NSData *)serializeStateWithError:(NSError **)outError
{
struct VFile* vf = VFileMemChunk(nil, 0);
if (!mCoreSaveStateNamed(core, vf, SAVESTATE_SAVEDATA)) {
*outError = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotLoadStateError userInfo:nil];
vf->close(vf);
return nil;
}
size_t size = vf->size(vf);
void* data = vf->map(vf, size, MAP_READ);
NSData *nsdata = [NSData dataWithBytes:data length:size];
vf->unmap(vf, data, size);
vf->close(vf);
return nsdata;
}
- (BOOL)deserializeState:(NSData *)state withError:(NSError **)outError
{
struct VFile* vf = VFileFromConstMemory(state.bytes, state.length);
if (!mCoreLoadStateNamed(core, vf, SAVESTATE_SAVEDATA)) {
*outError = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotLoadStateError userInfo:nil];
vf->close(vf);
return NO;
}
vf->close(vf);
return YES;
}
- (void)saveStateToFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block
{
struct VFile* vf = VFileOpen([fileName fileSystemRepresentation], O_CREAT | O_TRUNC | O_RDWR);
block(mCoreSaveStateNamed(core, vf, 0), nil);
vf->close(vf);
}
- (void)loadStateFromFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block
{
struct VFile* vf = VFileOpen([fileName fileSystemRepresentation], O_RDONLY);
block(mCoreLoadStateNamed(core, vf, 0), nil);
vf->close(vf);
}
#pragma mark - Input
const int GBAMap[] = {
GBA_KEY_UP,
GBA_KEY_DOWN,
GBA_KEY_LEFT,
GBA_KEY_RIGHT,
GBA_KEY_A,
GBA_KEY_B,
GBA_KEY_L,
GBA_KEY_R,
GBA_KEY_START,
GBA_KEY_SELECT
};
- (oneway void)didPushGBAButton:(OEGBAButton)button forPlayer:(NSUInteger)player
{
UNUSED(player);
core->addKeys(core, 1 << GBAMap[button]);
}
- (oneway void)didReleaseGBAButton:(OEGBAButton)button forPlayer:(NSUInteger)player
{
UNUSED(player);
core->clearKeys(core, 1 << GBAMap[button]);
}
#pragma mark - Cheats
- (void)setCheat:(NSString *)code setType:(NSString *)type setEnabled:(BOOL)enabled
{
code = [code stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
code = [code stringByReplacingOccurrencesOfString:@" " withString:@""];
NSString *codeId = [code stringByAppendingFormat:@"/%@", type];
struct mCheatSet* cheatSet = [[cheatSets objectForKey:codeId] pointerValue];
if (cheatSet) {
cheatSet->enabled = enabled;
return;
}
struct mCheatDevice* cheats = core->cheatDevice(core);
cheatSet = cheats->createSet(cheats, [codeId UTF8String]);
size_t size = mCheatSetsSize(&cheats->cheats);
if (size) {
cheatSet->copyProperties(cheatSet, *mCheatSetsGetPointer(&cheats->cheats, size - 1));
}
int codeType = GBA_CHEAT_AUTODETECT;
NSArray *codeSet = [code componentsSeparatedByString:@"+"];
for (id c in codeSet) {
mCheatAddLine(cheatSet, [c UTF8String], codeType);
}
cheatSet->enabled = enabled;
[cheatSets setObject:[NSValue valueWithPointer:cheatSet] forKey:codeId];
mCheatAddSet(cheats, cheatSet);
}
@end