WARNING: Spacing updates.
git-svn-id: https://openemu.svn.sourceforge.net/svnroot/openemu/branches/iosurface@755 a16923d9-94c8-4a39-ae78-11df2d60a2ba
This commit is contained in:
+5
-5
@@ -35,12 +35,12 @@ extern NSString *GenesisButtonNameTable[];
|
||||
|
||||
@interface GenPlusGameCore : GameCore
|
||||
{
|
||||
unsigned char *videoBuffer;
|
||||
NSLock *soundLock;
|
||||
NSLock *bufLock;
|
||||
UInt16 *sndBuf;
|
||||
unsigned char *videoBuffer;
|
||||
NSLock *soundLock;
|
||||
NSLock *bufLock;
|
||||
UInt16 *sndBuf;
|
||||
int oldrun;
|
||||
int position;
|
||||
int position;
|
||||
BOOL paused;
|
||||
}
|
||||
|
||||
|
||||
+97
-156
@@ -51,46 +51,46 @@ extern void set_config_defaults(void);
|
||||
*/
|
||||
- (id)init
|
||||
{
|
||||
self = [super init];
|
||||
if(self != nil)
|
||||
{
|
||||
soundLock = [[NSLock alloc] init];
|
||||
bufLock = [[NSLock alloc] init];
|
||||
videoBuffer = malloc(720 * 576 * 4);
|
||||
|
||||
position = 0;
|
||||
sndBuf = malloc(SIZESOUNDBUFFER * sizeof(UInt16));
|
||||
memset(sndBuf, 0, SIZESOUNDBUFFER * sizeof(UInt16));
|
||||
//ringBuffer = [self ringBufferAtIndex:0];
|
||||
}
|
||||
return self;
|
||||
self = [super init];
|
||||
if(self != nil)
|
||||
{
|
||||
soundLock = [[NSLock alloc] init];
|
||||
bufLock = [[NSLock alloc] init];
|
||||
videoBuffer = malloc(720 * 576 * 4);
|
||||
|
||||
position = 0;
|
||||
sndBuf = malloc(SIZESOUNDBUFFER * sizeof(UInt16));
|
||||
memset(sndBuf, 0, SIZESOUNDBUFFER * sizeof(UInt16));
|
||||
//ringBuffer = [self ringBufferAtIndex:0];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
DLog(@"releasing/deallocating CrabEmu memory");
|
||||
free(sndBuf);
|
||||
[soundLock release];
|
||||
[bufLock release];
|
||||
free(videoBuffer);
|
||||
|
||||
[super dealloc];
|
||||
DLog(@"releasing/deallocating CrabEmu memory");
|
||||
free(sndBuf);
|
||||
[soundLock release];
|
||||
[bufLock release];
|
||||
free(videoBuffer);
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
- (void)executeFrame
|
||||
{
|
||||
system_frame(0);
|
||||
audio_update(snd.buffer_size);
|
||||
for(int i = 0 ; i < snd.buffer_size; i++)
|
||||
{
|
||||
[[self ringBufferAtIndex:0] write:&snd.buffer[0][i] maxLength:2];
|
||||
[[self ringBufferAtIndex:0] write:&snd.buffer[1][i] maxLength:2];
|
||||
}
|
||||
system_frame(0);
|
||||
audio_update(snd.buffer_size);
|
||||
for(int i = 0 ; i < snd.buffer_size; i++)
|
||||
{
|
||||
[[self ringBufferAtIndex:0] write:&snd.buffer[0][i] maxLength:2];
|
||||
[[self ringBufferAtIndex:0] write:&snd.buffer[1][i] maxLength:2];
|
||||
}
|
||||
}
|
||||
|
||||
void update_input()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
- (void)setupEmulation
|
||||
@@ -99,194 +99,135 @@ void update_input()
|
||||
|
||||
- (BOOL)loadFileAtPath:(NSString*)path
|
||||
{
|
||||
DLog(@"Loaded File");
|
||||
|
||||
set_config_defaults();
|
||||
|
||||
cart_rom = malloc(MAXROMSIZE);
|
||||
if( load_rom((char*)[path UTF8String]) )
|
||||
{
|
||||
/* allocate global work bitmap */
|
||||
memset (&bitmap, 0, sizeof (bitmap));
|
||||
bitmap.width = 720;
|
||||
bitmap.height = 576;
|
||||
bitmap.depth = 16;
|
||||
bitmap.granularity = 2;
|
||||
bitmap.pitch = bitmap.width * bitmap.granularity;
|
||||
bitmap.viewport.w = 256;
|
||||
bitmap.viewport.h = 224;
|
||||
bitmap.viewport.x = 0;
|
||||
bitmap.viewport.y = 0;
|
||||
bitmap.data =videoBuffer;
|
||||
|
||||
/* default system */
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
|
||||
system_init();
|
||||
audio_init(SAMPLERATE);
|
||||
system_reset();
|
||||
}
|
||||
//TODO: add choice NTSC/PAL
|
||||
//if(sms_init(SMS_VIDEO_NTSC, SMS_REGION_DOMESTIC))
|
||||
// return NO;
|
||||
|
||||
//if(sms_mem_load_rom([path UTF8String])) {
|
||||
// return NO;
|
||||
//}
|
||||
DLog(@"Loaded File");
|
||||
|
||||
set_config_defaults();
|
||||
|
||||
cart_rom = malloc(MAXROMSIZE);
|
||||
if( load_rom((char*)[path UTF8String]) )
|
||||
{
|
||||
/* allocate global work bitmap */
|
||||
memset (&bitmap, 0, sizeof (bitmap));
|
||||
bitmap.width = 720;
|
||||
bitmap.height = 576;
|
||||
bitmap.depth = 16;
|
||||
bitmap.granularity = 2;
|
||||
bitmap.pitch = bitmap.width * bitmap.granularity;
|
||||
bitmap.viewport.w = 256;
|
||||
bitmap.viewport.h = 224;
|
||||
bitmap.viewport.x = 0;
|
||||
bitmap.viewport.y = 0;
|
||||
bitmap.data =videoBuffer;
|
||||
|
||||
/* default system */
|
||||
input.system[0] = SYSTEM_GAMEPAD;
|
||||
input.system[1] = SYSTEM_GAMEPAD;
|
||||
|
||||
system_init();
|
||||
audio_init(SAMPLERATE);
|
||||
system_reset();
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
- (void)resetEmulation
|
||||
{
|
||||
system_reset();
|
||||
system_reset();
|
||||
}
|
||||
|
||||
- (void)stopEmulation
|
||||
{
|
||||
//sms_write_cartram_to_file();
|
||||
[super stopEmulation];
|
||||
[super stopEmulation];
|
||||
}
|
||||
|
||||
- (IBAction)pauseEmulation:(id)sender
|
||||
{
|
||||
// [bufLock lock];
|
||||
// sms_z80_nmi();
|
||||
// [bufLock unlock];
|
||||
}
|
||||
|
||||
- (CGRect)sourceRect
|
||||
{
|
||||
return CGRectMake( bitmap.viewport.x, bitmap.viewport.y, bitmap.viewport.w, bitmap.viewport.h );
|
||||
return CGRectMake( bitmap.viewport.x, bitmap.viewport.y, bitmap.viewport.w, bitmap.viewport.h );
|
||||
}
|
||||
|
||||
- (NSUInteger)bufferWidth
|
||||
{
|
||||
return bitmap.width;
|
||||
return bitmap.width;
|
||||
}
|
||||
|
||||
- (NSUInteger)bufferHeight
|
||||
{
|
||||
return bitmap.height;
|
||||
return bitmap.height;
|
||||
}
|
||||
|
||||
|
||||
- (NSUInteger)screenWidth
|
||||
{
|
||||
return 320;
|
||||
// if (sms_console != CONSOLE_GG)
|
||||
// return 256;
|
||||
// else
|
||||
// return 160;
|
||||
return 320;
|
||||
}
|
||||
|
||||
- (NSUInteger)screenHeight
|
||||
{
|
||||
return 240;
|
||||
// if (sms_console != CONSOLE_GG)
|
||||
// return smsvdp.lines;
|
||||
// else
|
||||
// return 144;
|
||||
return 240;
|
||||
}
|
||||
|
||||
- (const void *)videoBuffer
|
||||
{
|
||||
/* if (sms_console != CONSOLE_GG)
|
||||
return smsvdp.framebuffer;
|
||||
else
|
||||
for (int i = 0; i < 144; i++)
|
||||
//jump 24 lines, skip 48 pixels and capture for each line of the buffer 160 pixels
|
||||
// sizeof(unsigned char) is always equal to 1 by definition
|
||||
memcpy(tempBuffer + i * 160 * 4, smsvdp.framebuffer + 24 * 256 * 1 + 48 * 1 + i * 256 * 1, 160 * 4);*/
|
||||
return videoBuffer;
|
||||
return videoBuffer;
|
||||
}
|
||||
|
||||
- (GLenum)pixelFormat
|
||||
{
|
||||
return GL_RGB;
|
||||
return GL_RGB;
|
||||
}
|
||||
|
||||
- (GLenum)pixelType
|
||||
{
|
||||
return GL_UNSIGNED_SHORT_5_6_5;
|
||||
return GL_UNSIGNED_SHORT_5_6_5;
|
||||
}
|
||||
|
||||
- (GLenum)internalPixelFormat
|
||||
{
|
||||
return GL_RGB5;
|
||||
return GL_RGB5;
|
||||
}
|
||||
|
||||
- (NSUInteger)soundBufferSize
|
||||
{
|
||||
return SIZESOUNDBUFFER;
|
||||
return SIZESOUNDBUFFER;
|
||||
}
|
||||
|
||||
- (NSUInteger)frameSampleCount
|
||||
{
|
||||
return SAMPLEFRAME;
|
||||
return SAMPLEFRAME;
|
||||
}
|
||||
|
||||
- (NSUInteger)frameSampleRate
|
||||
{
|
||||
return SAMPLERATE;
|
||||
return SAMPLERATE;
|
||||
}
|
||||
|
||||
- (NSUInteger)channelCount
|
||||
{
|
||||
return 2;
|
||||
return 2;
|
||||
}
|
||||
/*
|
||||
static const NSUInteger buttonDirections[2][5] = {
|
||||
{ 0, SMS_PAD1_UP, SMS_PAD1_DOWN, SMS_PAD1_LEFT, SMS_PAD1_RIGHT },
|
||||
{ 0, SMS_PAD2_UP, SMS_PAD2_DOWN, SMS_PAD2_LEFT, SMS_PAD2_RIGHT }
|
||||
};
|
||||
static const NSUInteger buttonActions[2][2] = {
|
||||
{ SMS_PAD1_A, SMS_PAD1_B },
|
||||
{ SMS_PAD2_A, SMS_PAD2_B }
|
||||
};
|
||||
*/
|
||||
|
||||
- (void)player:(NSUInteger)thePlayer didChangeButtonState:(OEButton)gameButton toPressed:(BOOL)flag
|
||||
{
|
||||
/* if(thePlayer > 1) return;
|
||||
|
||||
void (*sms_button)(int) = (flag ? sms_button_pressed : sms_button_released);
|
||||
NSUInteger button = 0;
|
||||
|
||||
if(OEButton_Up <= gameButton && gameButton <= OEButton_Right)
|
||||
button = buttonDirections[thePlayer][gameButton];
|
||||
else if(gameButton == OEButton_Start)
|
||||
button = GG_START;
|
||||
else if(OEButton_1 <= gameButton)
|
||||
button = buttonActions[thePlayer][(gameButton - OEButton_1) % 2];
|
||||
|
||||
if(button != 0) sms_button(button);*/
|
||||
|
||||
}
|
||||
|
||||
- (void)player:(NSUInteger)thePlayer didPressButton:(OEButton)gameButton
|
||||
{
|
||||
[self player:thePlayer didChangeButtonState:gameButton toPressed:YES];
|
||||
[self player:thePlayer didChangeButtonState:gameButton toPressed:YES];
|
||||
}
|
||||
|
||||
- (void)player:(NSUInteger)thePlayer didReleaseButton:(OEButton)gameButton
|
||||
{
|
||||
[self player:thePlayer didChangeButtonState:gameButton toPressed:NO];
|
||||
[self player:thePlayer didChangeButtonState:gameButton toPressed:NO];
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
CrabEmu callbacks
|
||||
*/
|
||||
|
||||
NSString *GenesisButtonNameTable[] = { @"CONTROLLER@_UP", @"CONTROLLER@_DOWN", @"CONTROLLER@_LEFT", @"CONTROLLER@_RIGHT", @"CONTROLLER@_START", @"CONTROLLER@_A", @"CONTROLLER@_B", @"CONTROLLER@_C", @"CONTROLLER@_MODE", @"CONTROLLER@_X", @"CONTROLLER@_Y", @"CONTROLLER@_Z" };
|
||||
NSUInteger GenesisControlValues[] = { INPUT_UP, INPUT_DOWN, INPUT_LEFT, INPUT_RIGHT, INPUT_START, INPUT_A, INPUT_B, INPUT_C, INPUT_MODE, INPUT_X, INPUT_Y, INPUT_Z };
|
||||
|
||||
- (BOOL)shouldPauseForButton:(NSInteger)button
|
||||
{
|
||||
// if(button == GG_START && sms_console != CONSOLE_GG)
|
||||
//{
|
||||
// [self pauseEmulation:self];
|
||||
// return YES;
|
||||
//}
|
||||
return NO;
|
||||
}
|
||||
|
||||
@@ -297,40 +238,40 @@ NSUInteger GenesisControlValues[] = { INPUT_UP, INPUT_DOWN, INPUT_LEFT, INPUT_RI
|
||||
|
||||
- (void)pressEmulatorKey:(OEEmulatorKey)aKey
|
||||
{
|
||||
input.pad[aKey.player] |= aKey.key;
|
||||
input.pad[aKey.player] |= aKey.key;
|
||||
}
|
||||
|
||||
- (void)releaseEmulatorKey:(OEEmulatorKey)aKey
|
||||
{
|
||||
input.pad[aKey.player] &= ~aKey.key;
|
||||
input.pad[aKey.player] &= ~aKey.key;
|
||||
}
|
||||
|
||||
- (BOOL)saveStateToFileAtPath:(NSString *)fileName
|
||||
{
|
||||
FILE* f = fopen([fileName UTF8String],"w+b");
|
||||
if (f)
|
||||
{
|
||||
unsigned char buffer[STATE_SIZE];
|
||||
state_save(buffer);
|
||||
fwrite(&buffer, STATE_SIZE, 1, f);
|
||||
fclose(f);
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
FILE* f = fopen([fileName UTF8String],"w+b");
|
||||
if (f)
|
||||
{
|
||||
unsigned char buffer[STATE_SIZE];
|
||||
state_save(buffer);
|
||||
fwrite(&buffer, STATE_SIZE, 1, f);
|
||||
fclose(f);
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)loadStateFromFileAtPath:(NSString *)fileName
|
||||
{
|
||||
FILE* f = fopen([fileName UTF8String],"r+b");
|
||||
if (f)
|
||||
{
|
||||
unsigned char buffer[STATE_SIZE];
|
||||
fread(&buffer, STATE_SIZE, 1, f);
|
||||
state_load(buffer);
|
||||
fclose(f);
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
FILE *f = fopen([fileName UTF8String],"r+b");
|
||||
if (f)
|
||||
{
|
||||
unsigned char buffer[STATE_SIZE];
|
||||
fread(&buffer, STATE_SIZE, 1, f);
|
||||
state_load(buffer);
|
||||
fclose(f);
|
||||
return YES;
|
||||
}
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user