mirror of
https://github.com/ogoguel/activegs-ios.git
synced 2024-12-22 00:29:17 +00:00
99 lines
1.8 KiB
Plaintext
99 lines
1.8 KiB
Plaintext
/*
|
|
ActiveGS, Copyright 2004-2016 Olivier Goguel, https://github.com/ogoguel/ActiveGS
|
|
Based on Kegs, Copyright 2004 Kent Dickey, https://kegs.sourceforge.net
|
|
This code is covered by the GNU GPL licence
|
|
*/
|
|
|
|
#include "../Src/defc.h"
|
|
#include "../Src/video.h"
|
|
#include "../Src/sim65816.h"
|
|
#import "emulatorView.h"
|
|
|
|
|
|
int x_frame_rate = -1;
|
|
|
|
@implementation emulatorView
|
|
|
|
|
|
-(void)activateEmulatorRefresh:(int)_frameRate
|
|
{
|
|
if (displayLink)
|
|
[self deactivateEmulatorRefresh];
|
|
|
|
displayLink = [[CADisplayLink displayLinkWithTarget:self selector:@selector(directDraw:)] retain];
|
|
|
|
x_frame_rate = _frameRate;
|
|
switch(_frameRate)
|
|
{
|
|
case 30:
|
|
[displayLink setFrameInterval:2];
|
|
g_video.g_screen_redraw_skip_amt = 1;
|
|
break;
|
|
case 60:
|
|
[displayLink setFrameInterval:1];
|
|
g_video.g_screen_redraw_skip_amt = -1;
|
|
break;
|
|
case 15:
|
|
[displayLink setFrameInterval:4];
|
|
g_video.g_screen_redraw_skip_amt = 3;
|
|
break;
|
|
case 20:
|
|
default: // 20FPS
|
|
[displayLink setFrameInterval:3];
|
|
g_video.g_screen_redraw_skip_amt = 2;
|
|
break;
|
|
}
|
|
// OG utiliser NSRunLoopCommonModes pour que le rendu ne s'arrete pas durant un uiscrollview
|
|
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
|
|
}
|
|
|
|
-(void)deactivateEmulatorRefresh
|
|
{
|
|
displayLink=nil;
|
|
|
|
}
|
|
|
|
int x_video_need_to_be_refreshed = 0;
|
|
extern int x_vbl_count ;
|
|
|
|
void x_invalidrect()
|
|
{
|
|
x_video_need_to_be_refreshed = 1;
|
|
}
|
|
|
|
- (void)directDraw:(CADisplayLink *)sender
|
|
{
|
|
|
|
x_vbl_count++;
|
|
addFrameRate(4);
|
|
|
|
if (x_video_need_to_be_refreshed)
|
|
{
|
|
x_video_need_to_be_refreshed = 0;
|
|
addFrameRate(3);
|
|
[self setNeedsDisplay];
|
|
|
|
}
|
|
/*
|
|
#ifdef ACTIVEGS
|
|
extern void x_update_framerate();
|
|
x_update_framerate();
|
|
#endif
|
|
*/
|
|
}
|
|
|
|
-(void) drawRect:(CGRect) rect
|
|
{
|
|
|
|
CGContextRef g = UIGraphicsGetCurrentContext();
|
|
x_async_refresh(g,rect);
|
|
|
|
}
|
|
|
|
|
|
|
|
@end
|
|
|
|
|
|
|