Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 173913b654 | |||
| 15c0cc9958 | |||
| 54fd07c851 | |||
| 5b9f56f708 | |||
| a10a8925f5 | |||
| 77dc525a88 | |||
| e473aede19 | |||
| 944046bb60 | |||
| 2d0805aa3f | |||
| de6fb8dd22 | |||
| b122f3d3cc | |||
| 57c375d9e6 | |||
| 5091dab464 | |||
| a5ed7abb1f | |||
| 4a3079c7b5 | |||
| 0487d834b0 | |||
| 619e01001e | |||
| baec92eba7 | |||
| a023f2d7a3 | |||
| cf1d704910 | |||
| e1ab96e4a5 | |||
| 3b5d9b3b98 | |||
| 2e13867b45 | |||
| 0550075d97 | |||
| 138d4349ef |
+1
-1
@@ -12,7 +12,7 @@ build
|
||||
xcuserdata
|
||||
profile
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
DerivedData/
|
||||
.idea/
|
||||
*.hmap
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
[submodule "deps/mame"]
|
||||
path = deps/mame
|
||||
url = https://github.com/stuartcarnie/mame.git
|
||||
branch = mame0209-headless
|
||||
branch = mame0225-headless
|
||||
|
||||
+13
-13
@@ -19,23 +19,11 @@
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>0.215.0</string>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>OEGameCoreController</string>
|
||||
<key>OEGameCoreClass</key>
|
||||
<string>MAMEGameCore</string>
|
||||
<key>OEGameCorePlayerCount</key>
|
||||
<string>8</string>
|
||||
<key>OEProjectURL</key>
|
||||
<string>http://mamedev.org</string>
|
||||
<key>OESystemIdentifiers</key>
|
||||
<array>
|
||||
<string>openemu.system.arcade</string>
|
||||
</array>
|
||||
<key>SUEnableAutomaticChecks</key>
|
||||
<string>1</string>
|
||||
<key>SUFeedURL</key>
|
||||
<string>https://raw.github.com/OpenEmu/OpenEmu-Update/master/mame_appcast.xml</string>
|
||||
<key>OEGameCoreOptions</key>
|
||||
<dict>
|
||||
<key>openemu.system.arcade</key>
|
||||
@@ -50,5 +38,17 @@
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>OEGameCorePlayerCount</key>
|
||||
<string>8</string>
|
||||
<key>OEProjectURL</key>
|
||||
<string>http://mamedev.org</string>
|
||||
<key>OESystemIdentifiers</key>
|
||||
<array>
|
||||
<string>openemu.system.arcade</string>
|
||||
</array>
|
||||
<key>SUEnableAutomaticChecks</key>
|
||||
<string>1</string>
|
||||
<key>SUFeedURL</key>
|
||||
<string>https://raw.github.com/OpenEmu/OpenEmu-Update/master/mame_appcast.xml</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 51;
|
||||
objectVersion = 53;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXAggregateTarget section */
|
||||
@@ -70,7 +70,7 @@
|
||||
D00A069F17637AB600C99008 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
|
||||
D00A06A417637E9100C99008 /* MAMEGameCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAMEGameCore.h; sourceTree = "<group>"; };
|
||||
D00A06A517637E9100C99008 /* MAMEGameCore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MAMEGameCore.m; sourceTree = "<group>"; };
|
||||
D00A06A717637EB500C99008 /* OEArcadeSystemResponderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OEArcadeSystemResponderClient.h; path = ../OpenEmu/Arcade/OEArcadeSystemResponderClient.h; sourceTree = "<group>"; };
|
||||
D00A06A717637EB500C99008 /* OEArcadeSystemResponderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OEArcadeSystemResponderClient.h; path = ../OpenEmu/SystemPlugins/Arcade/OEArcadeSystemResponderClient.h; sourceTree = "<group>"; };
|
||||
D0AADE2F176381FB00759E26 /* MAME_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAME_Prefix.pch; sourceTree = "<group>"; };
|
||||
D0AADE30176382F900759E26 /* OpenEmuBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OpenEmuBase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
D0AADE331763838A00759E26 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
||||
@@ -97,7 +97,7 @@
|
||||
D00A06A317637BDD00C99008 /* Classes */,
|
||||
D0AADE2E176381E900759E26 /* Other Sources */,
|
||||
D00A06931763763000C99008 /* Resources */,
|
||||
D00A068C1763763000C99008 /* Frameworks and Libraries */,
|
||||
D00A068C1763763000C99008 /* Frameworks */,
|
||||
D00A068B1763763000C99008 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
@@ -110,7 +110,7 @@
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D00A068C1763763000C99008 /* Frameworks and Libraries */ = {
|
||||
D00A068C1763763000C99008 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0510AA1D2300825D002028C1 /* mamearcade_headless.dylib */,
|
||||
@@ -118,7 +118,7 @@
|
||||
D00A068F1763763000C99008 /* Linked Frameworks */,
|
||||
D0AADE321763833600759E26 /* Other Frameworks */,
|
||||
);
|
||||
name = "Frameworks and Libraries";
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D00A068F1763763000C99008 /* Linked Frameworks */ = {
|
||||
@@ -138,7 +138,6 @@
|
||||
D00A069F17637AB600C99008 /* Info.plist */,
|
||||
);
|
||||
name = Resources;
|
||||
path = MAME;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D00A06A317637BDD00C99008 /* Classes */ = {
|
||||
@@ -211,7 +210,8 @@
|
||||
D00A06821763762F00C99008 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 1100;
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1330;
|
||||
ORGANIZATIONNAME = OpenEmu;
|
||||
};
|
||||
buildConfigurationList = D00A06851763762F00C99008 /* Build configuration list for PBXProject "MAME" */;
|
||||
@@ -299,6 +299,7 @@
|
||||
D00A069A1763763000C99008 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = x86_64;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "c++14";
|
||||
CLANG_CXX_LIBRARY = "compiler-default";
|
||||
@@ -317,6 +318,7 @@
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
@@ -326,7 +328,7 @@
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = NO;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu89;
|
||||
GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES;
|
||||
GCC_INPUT_FILETYPE = sourcecode.cpp.cpp;
|
||||
@@ -346,7 +348,7 @@
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VALUE = NO;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
||||
SDKROOT = macosx;
|
||||
@@ -356,6 +358,7 @@
|
||||
D00A069B1763763000C99008 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = x86_64;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "c++14";
|
||||
CLANG_CXX_LIBRARY = "compiler-default";
|
||||
@@ -374,6 +377,7 @@
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
@@ -399,7 +403,7 @@
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VALUE = NO;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.14;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
@@ -409,6 +413,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 0.250.0.1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||
@@ -435,6 +440,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
CURRENT_PROJECT_VERSION = 0.250.0.1;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = NO;
|
||||
|
||||
+67
-9
@@ -67,9 +67,9 @@
|
||||
|
||||
@end
|
||||
|
||||
static uint32_t joystick_get_state(void *device_internal, void *item_internal)
|
||||
static int32_t joystick_get_state(void *device_internal, void *item_internal)
|
||||
{
|
||||
return *(uint32_t *)item_internal;
|
||||
return *(int32_t *)item_internal;
|
||||
}
|
||||
|
||||
static os_log_t OE_CORE_LOG, OE_CORE_AUDIT_LOG;
|
||||
@@ -174,6 +174,49 @@ static os_log_t OE_CORE_LOG, OE_CORE_AUDIT_LOG;
|
||||
|
||||
#pragma mark - Execution
|
||||
|
||||
BOOL driverIsNotWorking(GameDriverOptions o)
|
||||
{
|
||||
if ((o & GameDriverMachineNotWorking) == GameDriverMachineNotWorking) {
|
||||
return YES;
|
||||
}
|
||||
|
||||
if ((o & GameDriverMachineIsSkeleton) == GameDriverMachineIsSkeleton) {
|
||||
return YES;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)validateGameDriver:(GameDriver *)driver error:(NSError **)error
|
||||
{
|
||||
GameDriverOptions o = driver.flags;
|
||||
|
||||
if (o & (GameDriverMachineClickableArtwork | GameDriverMachineRequiresArtwork | GameDriverMachineMechanical))
|
||||
{
|
||||
if (error != nil)
|
||||
{
|
||||
*error = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotLoadROMError userInfo:@{
|
||||
NSLocalizedDescriptionKey : @"Unable to load ROM.",
|
||||
NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:@"\"%@\" (%@).\n\nMechanical systems or systems which require artwork to operate are not supported.", driver.fullName, driver.name],
|
||||
}];
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (driverIsNotWorking(o)) {
|
||||
if (error != nil)
|
||||
{
|
||||
*error = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotLoadROMError userInfo:@{
|
||||
NSLocalizedDescriptionKey : @"Unable to load ROM.",
|
||||
NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:@"\"%@\" (%@).\n\nThis machine does not work and the emulation is not yet complete. There is nothing you can do to fix this problem except wait for the MAME developers to improve the emulation.", driver.fullName, driver.name],
|
||||
}];
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL)loadFileAtPath:(NSString *)path error:(NSError **)error
|
||||
{
|
||||
NSString *romDir = [path stringByDeletingLastPathComponent];
|
||||
@@ -195,14 +238,28 @@ static os_log_t OE_CORE_LOG, OE_CORE_AUDIT_LOG;
|
||||
|
||||
NSString *rom = [[path lastPathComponent] stringByDeletingPathExtension];
|
||||
AuditResult *ar;
|
||||
BOOL success = [_osd loadGame:rom withAuditResult:&ar error:error];
|
||||
BOOL success = [_osd setDriver:rom withAuditResult:&ar error:error];
|
||||
if (!success)
|
||||
{
|
||||
if (error != nil && ar != nil)
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (![self validateGameDriver:_osd.driver error:error])
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (ar.summary == AuditSummaryIncorrect || ar.summary == AuditSummaryNotFound)
|
||||
{
|
||||
if (error != nil)
|
||||
{
|
||||
*error = [self processAuditResult:ar forRomDir:romDir];
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
if (![_osd initializeWithError:error])
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
@@ -217,7 +274,8 @@ static os_log_t OE_CORE_LOG, OE_CORE_AUDIT_LOG;
|
||||
|
||||
- (NSError *)processAuditResult:(AuditResult *)ar forRomDir:(NSString *)romDir
|
||||
{
|
||||
NSString *gameDriverName = _osd.driverName;
|
||||
GameDriver *driver = _osd.driver;
|
||||
NSString *gameDriverName = driver.name;
|
||||
NSMutableOrderedSet<MAMEAuditResult *> *results = [NSMutableOrderedSet new];
|
||||
|
||||
for (AuditRecord *rec in ar.records) {
|
||||
@@ -281,7 +339,7 @@ static os_log_t OE_CORE_LOG, OE_CORE_AUDIT_LOG;
|
||||
}
|
||||
|
||||
// Give an audit report to the user
|
||||
NSString *game = [NSString stringWithFormat:@"%@ (%@.zip)", _osd.driverFullName, _osd.driverName];
|
||||
NSString *game = [NSString stringWithFormat:@"%@ (%@.zip)", driver.fullName, gameDriverName];
|
||||
NSString *versionRequired = [[[[[self owner] bundle] infoDictionary] objectForKey:@"CFBundleVersion"] substringToIndex:5];
|
||||
|
||||
NSError *outErr = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotLoadROMError userInfo:@{
|
||||
@@ -394,7 +452,7 @@ static os_log_t OE_CORE_LOG, OE_CORE_AUDIT_LOG;
|
||||
else
|
||||
{
|
||||
err = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotSaveStateError userInfo:@{
|
||||
NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Game \"%@\" does not not support save states.", _osd.driverFullName],
|
||||
NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Game \"%@\" does not not support save states.", _osd.driver.fullName],
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -413,7 +471,7 @@ static os_log_t OE_CORE_LOG, OE_CORE_AUDIT_LOG;
|
||||
else
|
||||
{
|
||||
err = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotSaveStateError userInfo:@{
|
||||
NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Game \"%@\" does not not support save states.", _osd.driverFullName],
|
||||
NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Game \"%@\" does not not support save states.", _osd.driver.fullName],
|
||||
}];
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,8 @@ You must build the `mamearcade_headless.dylib` dynamic library before building t
|
||||
|
||||
```sh
|
||||
$ cd deps/mame
|
||||
$ make macosx_x64_clang OSD="headless" verbose=1 TARGETOS="macosx" CONFIG="headless-rel" TARGET=mame SUBTARGET=arcade -j8
|
||||
$ make macosx_x64_clang OSD="headless" verbose=1 TARGETOS="macosx" CONFIG="release" TARGET=mame SUBTARGET=arcade MACOSX_DEPLOYMENT_TARGET=12.4 -j8
|
||||
$ install_name_tool -id mamearcade_headless.dylib mamearcade_headless.dylib
|
||||
```
|
||||
|
||||
Depending on your hardware, this could take a _long_ time, but if successful, you will have a file named `mamearcade_headless.dylib` in the current directory.
|
||||
|
||||
Vendored
+1
-1
Submodule deps/mame updated: 822ae8c825...4fc1f9f16b
Reference in New Issue
Block a user