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:
Remy Demarest
2010-04-16 07:49:11 +00:00
parent 2c6d5c1c2f
commit b0af151a41
2 changed files with 102 additions and 161 deletions
+5 -5
View File
@@ -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
View File
@@ -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