Cocoa OpenEmu Plug-in:

- Ensure that the OpenEmu data directory exists before ROM loading.
- Add future support for changing the DS display mode. (Not yet implemented.)
- A lot of general code cleanup.
This commit is contained in:
rogerman 2012-03-07 02:25:22 +00:00
parent 5b11947f77
commit e214a9b6c7
3 changed files with 84 additions and 25 deletions

View File

@ -17,21 +17,25 @@
#import <Cocoa/Cocoa.h>
#import <OpenEmuBase/OEGameCore.h>
#import <OpenEmuBase/OERingBuffer.h>
#import "OENDSSystemResponderClient.h"
#include "../ringbuffer.h"
#include <libkern/OSAtomic.h>
@class CocoaDSFirmware;
@class CocoaDSMic;
@interface NDSGameCore : OEGameCore
{
bool *input;
CocoaDSFirmware *firmware;
CocoaDSMic *microphone;
NSInteger displayMode;
OEIntRect displayRect;
OSSpinLock spinlockDisplayMode;
}
@property (retain) CocoaDSFirmware *firmware;
@property (retain) CocoaDSMic *microphone;
@property (assign) NSInteger displayMode;
@end

View File

@ -23,9 +23,9 @@
#import "cocoa_mic.h"
#import "cocoa_output.h"
#import "OESoundInterface.h"
#import "OENDSSystemResponderClient.h"
#include <OpenGL/gl.h>
#include "../../path.h"
#include "../../NDSSystem.h"
#include "../../render3D.h"
#undef BOOL
@ -34,26 +34,30 @@
@synthesize firmware;
@synthesize microphone;
@dynamic displayMode;
- (id)init
{
self = [super init];
if(self == nil)
{
if(self == nil)
{
return self;
}
// Set up input handling
input = (bool *)calloc(sizeof(bool), OENDSButtonCount);
microphone = [[CocoaDSMic alloc] init];
microphone.mode = MICMODE_INTERNAL_NOISE;
// Set up the emulation core
CommonSettings.advanced_timing = true;
[CocoaDSCore startupCore];
// Set up the DS firmware using the internal firmware
firmware = [[CocoaDSFirmware alloc] init];
[firmware update];
// Set up the 3D renderer
NSUInteger numberCores = [[NSProcessInfo processInfo] activeProcessorCount];
if (numberCores >= 4)
{
@ -71,10 +75,9 @@
CommonSettings.num_cores = numberCores;
NDS_3D_ChangeCore(CORE3DLIST_SWRASTERIZE);
// Set up the sound core
CommonSettings.spu_advanced = true;
CommonSettings.spuInterpolationMode = SPUInterpolation_Cosine;
// Set up the sound core
openEmuSoundInterfaceBuffer = [self ringBufferAtIndex:0];
NSInteger result = SPU_ChangeSoundCore(SNDCORE_OPENEMU, (int)SPU_BUFFER_BYTES);
@ -86,6 +89,11 @@
SPU_SetSynchMode(SPU_SYNC_MODE_SYNCHRONOUS, SPU_SYNC_METHOD_P);
SPU_SetVolume(100);
// Set up the DS display
displayMode = DS_DISPLAY_TYPE_COMBO;
displayRect = OERectMake(0, 0, GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT * 2);
spinlockDisplayMode = OS_SPINLOCK_INIT;
return self;
}
@ -103,6 +111,44 @@
[super dealloc];
}
- (NSInteger) displayMode
{
OSSpinLockLock(&spinlockDisplayMode);
NSInteger theMode = displayMode;
OSSpinLockUnlock(&spinlockDisplayMode);
return theMode;
}
- (void) setDisplayMode:(NSInteger)theMode
{
OEIntRect newDisplayRect;
switch (theMode)
{
case DS_DISPLAY_TYPE_MAIN:
newDisplayRect = OERectMake(0, 0, GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT);
break;
case DS_DISPLAY_TYPE_TOUCH:
newDisplayRect = OERectMake(0, GPU_DISPLAY_HEIGHT + 1, GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT);
break;
case DS_DISPLAY_TYPE_COMBO:
newDisplayRect = OERectMake(0, 0, GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT * 2);
break;
default:
return;
break;
}
OSSpinLockLock(&spinlockDisplayMode);
displayMode = theMode;
displayRect = newDisplayRect;
OSSpinLockUnlock(&spinlockDisplayMode);
}
#pragma mark -
#pragma mark Execution
@ -135,8 +181,9 @@
}
- (BOOL)loadFileAtPath:(NSString*)path
{
NSURL *openEmuDataURL = [NSURL fileURLWithPath:[self batterySavesDirectoryPath]];
{
NSString *openEmuDataPath = [self batterySavesDirectoryPath];
NSURL *openEmuDataURL = [NSURL fileURLWithPath:openEmuDataPath];
[CocoaDSFile addURLToURLDictionary:openEmuDataURL groupKey:@PATH_OPEN_EMU fileKind:@"ROM"];
[CocoaDSFile addURLToURLDictionary:openEmuDataURL groupKey:@PATH_OPEN_EMU fileKind:@"ROM Save"];
@ -150,6 +197,11 @@
[CocoaDSFile setupAllFilePathsWithURLDictionary:@PATH_OPEN_EMU];
// Ensure that the OpenEmu data directory exists before loading the ROM.
NSFileManager *fileManager = [[NSFileManager alloc] init];
[fileManager createDirectoryAtPath:openEmuDataPath withIntermediateDirectories:YES attributes:nil error:NULL];
[fileManager release];
return [CocoaDSFile loadRom:[NSURL fileURLWithPath:path]];
}
@ -157,17 +209,21 @@
- (OEIntRect)screenRect
{
return (OEIntRect){{}, [self bufferSize]};
OSSpinLockLock(&spinlockDisplayMode);
OEIntRect theRect = displayRect;
OSSpinLockUnlock(&spinlockDisplayMode);
return theRect;
}
- (OEIntSize)bufferSize
{
return OESizeMake(256, 384);
return OESizeMake(GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT * 2);
}
- (const void *)videoBuffer
{
return GPU_screen;
return GPU_screen;
}
- (GLenum)pixelFormat
@ -209,7 +265,7 @@
- (NSUInteger)channelCountForBuffer:(NSUInteger)buffer
{
return [self channelCount];
return [self channelCount];
}
- (NSUInteger)audioBufferSizeForBuffer:(NSUInteger)buffer
@ -219,7 +275,7 @@
- (double)audioSampleRateForBuffer:(NSUInteger)buffer
{
return [self audioSampleRate];
return [self audioSampleRate];
}
@ -295,26 +351,25 @@
- (NSTrackingAreaOptions)mouseTrackingOptions
{
return 0;
return 0;
}
- (void)settingWasSet:(id)aValue forKey:(NSString *)keyName
{
DLog(@"keyName = %@", keyName);
//[self doesNotImplementSelector:_cmd];
DLog(@"keyName = %@", keyName);
//[self doesNotImplementSelector:_cmd];
}
#pragma mark Save State
- (BOOL)saveStateToFileAtPath:(NSString *)fileName
{
return [CocoaDSFile saveState:[NSURL fileURLWithPath:fileName]];
return [CocoaDSFile saveState:[NSURL fileURLWithPath:fileName]];
}
- (BOOL)loadStateFromFileAtPath:(NSString *)fileName
{
return [CocoaDSFile loadState:[NSURL fileURLWithPath:fileName]];
return [CocoaDSFile loadState:[NSURL fileURLWithPath:fileName]];
}
@end

View File

@ -15,9 +15,10 @@
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#include "OESoundInterface.h"
#import "OESoundInterface.h"
#import "cocoa_globals.h"
#include "cocoa_globals.h"
OERingBuffer *openEmuSoundInterfaceBuffer = nil;
@ -43,7 +44,6 @@ SoundInterface_struct *SNDCoreList[] = {
int SNDOpenEmuInit(int buffer_size)
{
// Do nothing. The OpenEmu frontend will take care of this.
[openEmuSoundInterfaceBuffer setLength:buffer_size];
return 0;