summaryrefslogtreecommitdiff
path: root/pcr/reicast-git/loungekatt_rm-nonfree-fp.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pcr/reicast-git/loungekatt_rm-nonfree-fp.patch')
-rw-r--r--pcr/reicast-git/loungekatt_rm-nonfree-fp.patch1451
1 files changed, 1451 insertions, 0 deletions
diff --git a/pcr/reicast-git/loungekatt_rm-nonfree-fp.patch b/pcr/reicast-git/loungekatt_rm-nonfree-fp.patch
new file mode 100644
index 000000000..9d0b588d9
--- /dev/null
+++ b/pcr/reicast-git/loungekatt_rm-nonfree-fp.patch
@@ -0,0 +1,1451 @@
+diff -Nur a/core/deps/libpng/fp.h b/core/deps/libpng/fp.h
+--- a/core/deps/libpng/fp.h 2015-10-06 21:43:53.002336114 -0300
++++ b/core/deps/libpng/fp.h 1969-12-31 21:00:00.000000000 -0300
+@@ -1,62 +0,0 @@
+-/*
+-* Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+-*
+-* @APPLE_LICENSE_HEADER_START@
+-*
+-* The contents of this file constitute Original Code as defined in and
+-* are subject to the Apple Public Source License Version 1.1 (the
+-* "License"). You may not use this file except in compliance with the
+-* License. Please obtain a copy of the License at
+-* http://www.apple.com/publicsource and read it before using this file.
+-*
+-* This Original Code and all software distributed under the License are
+-* distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+-* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
+-* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
+-* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
+-* License for the specific language governing rights and limitations
+-* under the License.
+-*
+-* @APPLE_LICENSE_HEADER_END@
+-*/
+-/* Copyright (c) 1992, NeXT Computer, Inc. All rights reserved.
+-*
+-* File: libc/m98k/gen/fp.h
+-* Author: Derek B Clegg, NeXT Computer, Inc.
+-*
+-* HISTORY
+-* 11-Nov-92 Derek B Clegg (dclegg@next.com)
+-* Created.
+-*
+-* Common definitions for floating-point numbers.
+-*/
+-
+-/* The following definitions for for double precision IEEE format numbers. */
+-
+-#define EXPONENT_BIAS 1023
+-
+-#define SIGN_BITS 1
+-#define EXPONENT_BITS 11
+-#define FRACTION_BITS 52
+-#define HI_FRACTION_BITS 20
+-#define LO_FRACTION_BITS 32
+-
+-struct double_format {
+-unsigned sign: SIGN_BITS;
+-unsigned exponent: EXPONENT_BITS;
+-unsigned hi_fraction: HI_FRACTION_BITS;
+-unsigned lo_fraction: LO_FRACTION_BITS;
+-};
+-
+-union dbl {
+-struct double_format s;
+-unsigned int u[2];
+-double value;
+-};
+-
+-#define PlusInfinity (1.0/0.0)
+-#define MinusInfinity (-1.0/0.0)
+-
+-#define not_a_number(x) ((x) != (x))
+-#define positive_infinity(x) ((x) == PlusInfinity)
+-#define negative_infinity(x) ((x) == MinusInfinity)
+Binary files a/shell/apple/emulator-ios/emulator/assets/Icon@2x.png and b/shell/apple/emulator-ios/emulator/assets/Icon@2x.png differ
+Binary files a/shell/apple/emulator-ios/emulator/assets/Icon-72@2x.png and b/shell/apple/emulator-ios/emulator/assets/Icon-72@2x.png differ
+Binary files a/shell/apple/emulator-ios/emulator/assets/Icon-72.png and b/shell/apple/emulator-ios/emulator/assets/Icon-72.png differ
+Binary files a/shell/apple/emulator-ios/emulator/assets/Icon.png and b/shell/apple/emulator-ios/emulator/assets/Icon.png differ
+diff -Nur a/shell/apple/emulator-ios/emulator/DiskViewCell.h b/shell/apple/emulator-ios/emulator/DiskViewCell.h
+--- a/shell/apple/emulator-ios/emulator/DiskViewCell.h 1969-12-31 21:00:00.000000000 -0300
++++ b/shell/apple/emulator-ios/emulator/DiskViewCell.h 2015-10-06 22:10:31.206968127 -0300
+@@ -0,0 +1,8 @@
++#import <UIKit/UIKit.h>
++
++@interface DiskViewCell : UITableViewCell
++
++@property (nonatomic, retain) IBOutlet UIImageView *diskImage;
++@property (nonatomic, retain) IBOutlet UILabel *nameLabel;
++
++@end
+diff -Nur a/shell/apple/emulator-ios/emulator/DiskViewCell.m b/shell/apple/emulator-ios/emulator/DiskViewCell.m
+--- a/shell/apple/emulator-ios/emulator/DiskViewCell.m 1969-12-31 21:00:00.000000000 -0300
++++ b/shell/apple/emulator-ios/emulator/DiskViewCell.m 2015-10-06 22:10:31.206968127 -0300
+@@ -0,0 +1,26 @@
++#import "DiskViewCell.h"
++
++@implementation DiskViewCell
++
++- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
++{
++ self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
++ if (self) {
++ // Initialization code
++ }
++ return self;
++}
++
++- (void)awakeFromNib
++{
++ // Initialization code
++}
++
++- (void)setSelected:(BOOL)selected animated:(BOOL)animated
++{
++ [super setSelected:selected animated:animated];
++
++ // Configure the view for the selected state
++}
++
++@end
+diff -Nur a/shell/apple/emulator-ios/emulator/EmulatorViewController.h b/shell/apple/emulator-ios/emulator/EmulatorViewController.h
+--- a/shell/apple/emulator-ios/emulator/EmulatorViewController.h 2015-10-06 21:43:53.121336967 -0300
++++ b/shell/apple/emulator-ios/emulator/EmulatorViewController.h 2015-10-06 22:10:31.206968127 -0300
+@@ -10,10 +10,18 @@
+ #import <GLKit/GLKit.h>
+ #import <GameController/GameController.h>
+ #import "iCadeReaderView.h"
++#import "PadViewController.h"
++#import "EmulatorView.h"
+
+-@interface ViewController : GLKViewController <iCadeEventDelegate>
++@interface EmulatorViewController : GLKViewController <iCadeEventDelegate>
+
++@property NSString* diskImage;
+ @property (nonatomic) iCadeReaderView* iCadeReader;
+ @property (nonatomic) GCController *gController __attribute__((weak_import));
++@property (nonatomic, strong) id connectObserver;
++@property (nonatomic, strong) id disconnectObserver;
++@property (nonatomic, strong) EmulatorView *emuView;
++
++@property (nonatomic, strong) PadViewController *controllerView;
+
+ @end
+diff -Nur a/shell/apple/emulator-ios/emulator/EmulatorViewController.mm b/shell/apple/emulator-ios/emulator/EmulatorViewController.mm
+--- a/shell/apple/emulator-ios/emulator/EmulatorViewController.mm 2015-10-06 21:43:53.121336967 -0300
++++ b/shell/apple/emulator-ios/emulator/EmulatorViewController.mm 2015-10-06 22:10:31.206968127 -0300
+@@ -16,7 +16,7 @@
+ #include "hw/maple/maple_devs.h"
+ #include "hw/maple/maple_if.h"
+
+-@interface ViewController () {
++@interface EmulatorViewController () {
+ }
+
+ @property (strong, nonatomic) EAGLContext *context;
+@@ -35,25 +35,34 @@
+ extern "C" int reicast_main(int argc, char* argv[]);
+
+
+-@implementation ViewController
++@implementation EmulatorViewController
+
+ -(void)emuThread
+ {
+ install_prof_handler(1);
+-
+
+- //This looks like the right place, rite?
+- char text[2]="";
+-
+- char* prms[2];
+- prms[0]=text;
+-
+- reicast_main(1, prms);
++ char *Args[3];
++ const char *P;
++
++ P = (const char *)[self.diskImage UTF8String];
++ Args[0] = "dc";
++ Args[1] = "-config";
++ Args[2] = P&&P[0]? (char *)malloc(strlen(P)+32):0;
++
++ if(Args[2])
++ {
++ strcpy(Args[2],"config:image=");
++ strcat(Args[2],P);
++ }
++
++ reicast_main(Args[2]? 3:1,Args);
+ }
+
+ - (void)viewDidLoad
+ {
+ [super viewDidLoad];
++
++ self.controllerView = [[PadViewController alloc] initWithNibName:@"PadViewController" bundle:nil];
+
+ self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
+
+@@ -61,15 +70,33 @@
+ NSLog(@"Failed to create ES context");
+ }
+
+- GLKView *view = (GLKView *)self.view;
+- view.context = self.context;
+- view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
++ self.emuView = (EmulatorView *)self.view;
++ self.emuView.context = self.context;
++ self.emuView.drawableDepthFormat = GLKViewDrawableDepthFormat24;
+
+- self.iCadeReader = [[iCadeReaderView alloc] init];
+- [self.view addSubview:self.iCadeReader];
+- self.iCadeReader.delegate = self;
+- self.iCadeReader.active = YES;
++ [self.controllerView setControlOutput:self.emuView];
+
++ self.connectObserver = [[NSNotificationCenter defaultCenter] addObserverForName:GCControllerDidConnectNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
++ if ([[GCController controllers] count] == 1) {
++ [self toggleHardwareController:YES];
++ }
++ }];
++ self.disconnectObserver = [[NSNotificationCenter defaultCenter] addObserverForName:GCControllerDidDisconnectNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
++ if (![[GCController controllers] count]) {
++ [self toggleHardwareController:NO];
++ }
++ }];
++
++ if ([[GCController controllers] count]) {
++ [self toggleHardwareController:YES];
++ }
++ [self.controllerView showController:self.view];
++
++ self.iCadeReader = [[iCadeReaderView alloc] init];
++ [self.view addSubview:self.iCadeReader];
++ self.iCadeReader.delegate = self;
++ self.iCadeReader.active = YES;
++
+ [self setupGL];
+
+ if (!gles_init())
+@@ -82,7 +109,7 @@
+ }
+
+ - (void)dealloc
+-{
++{
+ [self tearDownGL];
+
+ if ([EAGLContext currentContext] == self.context) {
+@@ -127,6 +154,126 @@
+
+ }
+
++- (void)toggleHardwareController:(BOOL)useHardware {
++ if (useHardware) {
++// [self.controllerView hideController];
++ self.gController = [GCController controllers][0];
++ if (self.gController.gamepad) {
++ [self.gController.gamepad.buttonA setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_a];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_a];
++ }
++ }];
++ [self.gController.gamepad.buttonB setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_b];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_b];
++ }
++ }];
++ [self.gController.gamepad.buttonX setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_x];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_x];
++ }
++ }];
++ [self.gController.gamepad.buttonY setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_y];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_y];
++ }
++ }];
++ [self.gController.gamepad.dpad setValueChangedHandler:^(GCControllerDirectionPad *dpad, float xValue, float yValue){
++ if (xValue >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_r];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_r];
++ }
++ if (xValue <= -0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_l];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_l];
++ }
++ if (yValue >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_u];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_u];
++ }
++ if (yValue <= -0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_d];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_d];
++ }
++ }];
++ //Add controller pause handler here
++ }
++ if (self.gController.extendedGamepad) {
++ [self.gController.extendedGamepad.buttonA setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_a];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_a];
++ }
++ }];
++ [self.gController.extendedGamepad.buttonB setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_b];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_b];
++ }
++ }];
++ [self.gController.extendedGamepad.buttonX setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_x];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_x];
++ }
++ }];
++ [self.gController.extendedGamepad.buttonY setValueChangedHandler:^(GCControllerButtonInput *button, float value, BOOL pressed) {
++ if (pressed && value >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_abxy_y];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_abxy_y];
++ }
++ }];
++ [self.gController.extendedGamepad.dpad setValueChangedHandler:^(GCControllerDirectionPad *dpad, float xValue, float yValue){
++ if (xValue >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_r];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_r];
++ }
++ if (xValue <= -0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_l];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_l];
++ }
++ if (yValue >= 0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_u];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_u];
++ }
++ if (yValue <= -0.1) {
++ [self.emuView handleKeyDown:self.controllerView.img_dpad_d];
++ } else {
++ [self.emuView handleKeyUp:self.controllerView.img_dpad_d];
++ }
++ }];
++ [self.gController.extendedGamepad.leftThumbstick.xAxis setValueChangedHandler:^(GCControllerAxisInput *axis, float value){
++
++ }];
++ [self.gController.extendedGamepad.leftThumbstick.yAxis setValueChangedHandler:^(GCControllerAxisInput *axis, float value){
++
++ }];
++ }
++ } else {
++ self.gController = nil;
++// [self.controllerView showController:self.view];
++ }
++}
+
+ - (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
+ {
+diff -Nur a/shell/apple/emulator-ios/emulator/EmulatorView.h b/shell/apple/emulator-ios/emulator/EmulatorView.h
+--- a/shell/apple/emulator-ios/emulator/EmulatorView.h 2015-10-06 21:43:53.121336967 -0300
++++ b/shell/apple/emulator-ios/emulator/EmulatorView.h 2015-10-06 22:10:31.206968127 -0300
+@@ -10,4 +10,9 @@
+
+ @interface EmulatorView : GLKView
+
++- (void)handleKeyDown:(UIButton*)button;
++- (void)handleKeyUp:(UIButton*)button;
++
++@property (nonatomic, strong) UIViewController *controllerView;
++
+ @end
+diff -Nur a/shell/apple/emulator-ios/emulator/EmulatorView.mm b/shell/apple/emulator-ios/emulator/EmulatorView.mm
+--- a/shell/apple/emulator-ios/emulator/EmulatorView.mm 2015-10-06 21:43:53.121336967 -0300
++++ b/shell/apple/emulator-ios/emulator/EmulatorView.mm 2015-10-06 22:10:31.206968127 -0300
+@@ -7,6 +7,7 @@
+ //
+
+ #import "EmulatorView.h"
++#import "PadViewController.h"
+
+ #include "types.h"
+
+@@ -15,11 +16,27 @@
+ extern s8 joyx[4],joyy[4];
+ extern u8 rt[4],lt[4];
+
+-#define key_CONT_A (1 << 2)
+-#define key_CONT_START (1 << 3)
+-#define key_CONT_DPAD_LEFT (1 << 6)
+-
+-int dpad_or_btn = 0;
++#define DC_BTN_C (1)
++#define DC_BTN_B (1<<1)
++#define DC_BTN_A (1<<2)
++#define DC_BTN_START (1<<3)
++#define DC_DPAD_UP (1<<4)
++#define DC_DPAD_DOWN (1<<5)
++#define DC_DPAD_LEFT (1<<6)
++#define DC_DPAD_RIGHT (1<<7)
++#define DC_BTN_Z (1<<8)
++#define DC_BTN_Y (1<<9)
++#define DC_BTN_X (1<<10)
++#define DC_BTN_D (1<<11)
++#define DC_DPAD2_UP (1<<12)
++#define DC_DPAD2_DOWN (1<<13)
++#define DC_DPAD2_LEFT (1<<14)
++#define DC_DPAD2_RIGHT (1<<15)
++
++#define DC_AXIS_LT (0X10000)
++#define DC_AXIS_RT (0X10001)
++#define DC_AXIS_X (0X20000)
++#define DC_AXIS_Y (0X20001)
+
+ @implementation EmulatorView
+
+@@ -31,23 +48,85 @@
+ }
+ */
+
+--(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
+-
+- if (dpad_or_btn &1)
+- kcode[0] &= ~(key_CONT_START|key_CONT_A);
+- else
+- kcode[0] &= ~(key_CONT_DPAD_LEFT);
++- (void)setControlInput:(PadViewController *)input
++{
++ self.controllerView = input;
++}
++
++- (void)handleKeyDown:(UIButton*)button
++{
++ PadViewController * controller = (PadViewController *)self.controllerView;
++ if (button == controller.img_dpad_l) {
++ kcode[0] &= ~(DC_DPAD_LEFT);
++ }
++ if (button == controller.img_dpad_r) {
++ kcode[0] &= ~(DC_DPAD_RIGHT);
++ }
++ if (button == controller.img_dpad_u) {
++ kcode[0] &= ~(DC_DPAD_UP);
++ }
++ if (button == controller.img_dpad_d) {
++ kcode[0] &= ~(DC_DPAD_DOWN);
++ }
++ if (button == controller.img_abxy_a) {
++ kcode[0] &= ~(DC_BTN_A);
++ }
++ if (button == controller.img_abxy_b) {
++ kcode[0] &= ~(DC_BTN_B);
++ }
++ if (button == controller.img_abxy_x) {
++ kcode[0] &= ~(DC_BTN_X);
++ }
++ if (button == controller.img_abxy_y) {
++ kcode[0] &= ~(DC_BTN_Y);
++ }
++ if (button == controller.img_lt) {
++ kcode[0] &= ~(DC_AXIS_LT);
++ }
++ if (button == controller.img_rt) {
++ kcode[0] &= ~(DC_AXIS_RT);
++ }
++ if (button == controller.img_start) {
++ kcode[0] &= ~(DC_BTN_START);
++ }
+ }
+
+--(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
+-
+- // [event allTouches];
+-
+- if (dpad_or_btn &1)
+- kcode[0] |= (key_CONT_START|key_CONT_A);
+- else
+- kcode[0] |= (key_CONT_DPAD_LEFT);
+-
+- dpad_or_btn++;
++- (void)handleKeyUp:(UIButton*)button
++{
++ PadViewController * controller = (PadViewController *)self.controllerView;
++ if (button == controller.img_dpad_l) {
++ kcode[0] |= ~(DC_DPAD_LEFT);
++ }
++ if (button == controller.img_dpad_r) {
++ kcode[0] |= ~(DC_DPAD_RIGHT);
++ }
++ if (button == controller.img_dpad_u) {
++ kcode[0] |= ~(DC_DPAD_UP);
++ }
++ if (button == controller.img_dpad_d) {
++ kcode[0] |= ~(DC_DPAD_DOWN);
++ }
++ if (button == controller.img_abxy_a) {
++ kcode[0] |= (DC_BTN_A);
++ }
++ if (button == controller.img_abxy_b) {
++ kcode[0] |= (DC_BTN_B);
++ }
++ if (button == controller.img_abxy_x) {
++ kcode[0] |= (DC_BTN_X);
++ }
++ if (button == controller.img_abxy_y) {
++ kcode[0] |= (DC_BTN_Y);
++ }
++ if (button == controller.img_lt) {
++ kcode[0] |= (DC_AXIS_LT);
++ }
++ if (button == controller.img_rt) {
++ kcode[0] |= (DC_AXIS_RT);
++ }
++ if (button == controller.img_start) {
++ kcode[0] |= (DC_BTN_START);
++ }
+ }
++
+ @end
+Binary files a/shell/apple/emulator-ios/emulator/Images/disk_unknown.png and b/shell/apple/emulator-ios/emulator/Images/disk_unknown.png differ
+diff -Nur a/shell/apple/emulator-ios/emulator/MainStoryboard.storyboard b/shell/apple/emulator-ios/emulator/MainStoryboard.storyboard
+--- a/shell/apple/emulator-ios/emulator/MainStoryboard.storyboard 2015-10-06 21:43:53.123336981 -0300
++++ b/shell/apple/emulator-ios/emulator/MainStoryboard.storyboard 2015-10-06 22:10:31.207968135 -0300
+@@ -1,32 +1,100 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6250" systemVersion="13F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="WRM-pR-XCP">
++<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="mSg-lr-0DL">
+ <dependencies>
+- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
++ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
+ </dependencies>
+ <scenes>
+- <!--View Controller-->
++ <!--Root View Controller-->
++ <scene sceneID="q8K-fk-uPf">
++ <objects>
++ <tableViewController id="ZcT-ex-GUK" customClass="PathsViewController" sceneMemberID="viewController">
++ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="LNG-KY-d6N">
++ <rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
++ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
++ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
++ <prototypes>
++ <tableViewCell contentMode="scaleToFill" selectionStyle="default" accessoryType="disclosureIndicator" indentationWidth="10" reuseIdentifier="Cell" rowHeight="80" id="mMa-C3-VYu" customClass="DiskViewCell">
++ <rect key="frame" x="0.0" y="22" width="320" height="80"/>
++ <autoresizingMask key="autoresizingMask"/>
++ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="mMa-C3-VYu" id="snt-ku-Aaq">
++ <rect key="frame" x="0.0" y="0.0" width="287" height="79.5"/>
++ <autoresizingMask key="autoresizingMask"/>
++ <subviews>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="disk_unknown.png" id="6Qh-mW-Z9j">
++ <rect key="frame" x="8" y="4" width="72" height="72"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Epl-iu-f5s">
++ <rect key="frame" x="88" y="24" width="199" height="32"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <fontDescription key="fontDescription" type="system" pointSize="17"/>
++ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
++ <nil key="highlightedColor"/>
++ </label>
++ </subviews>
++ </tableViewCellContentView>
++ <connections>
++ <outlet property="diskImage" destination="6Qh-mW-Z9j" id="b3r-L8-LS3"/>
++ <outlet property="nameLabel" destination="Epl-iu-f5s" id="i0S-JF-deT"/>
++ </connections>
++ </tableViewCell>
++ </prototypes>
++ <connections>
++ <outlet property="dataSource" destination="ZcT-ex-GUK" id="TGz-Qe-tBz"/>
++ <outlet property="delegate" destination="ZcT-ex-GUK" id="LAp-Yu-Mwb"/>
++ </connections>
++ </tableView>
++ <navigationItem key="navigationItem" title="Root View Controller" id="5jN-Uj-bBb"/>
++ <simulatedOrientationMetrics key="simulatedOrientationMetrics"/>
++ <connections>
++ <segue destination="WRM-pR-XCP" kind="modal" identifier="emulatorView" id="b10-sb-xpr"/>
++ </connections>
++ </tableViewController>
++ <placeholder placeholderIdentifier="IBFirstResponder" id="mdD-bX-Gqc" userLabel="First Responder" sceneMemberID="firstResponder"/>
++ </objects>
++ <point key="canvasLocation" x="-88" y="-692"/>
++ </scene>
++ <!--Navigation Controller-->
++ <scene sceneID="VLz-J1-2XD">
++ <objects>
++ <navigationController navigationBarHidden="YES" id="mSg-lr-0DL" sceneMemberID="viewController">
++ <navigationBar key="navigationBar" contentMode="scaleToFill" id="vT9-en-Ct5">
++ <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
++ <autoresizingMask key="autoresizingMask"/>
++ </navigationBar>
++ <connections>
++ <segue destination="ZcT-ex-GUK" kind="relationship" relationship="rootViewController" id="fhp-zt-Xhh"/>
++ </connections>
++ </navigationController>
++ <placeholder placeholderIdentifier="IBFirstResponder" id="i7I-Ys-F6b" userLabel="First Responder" sceneMemberID="firstResponder"/>
++ </objects>
++ <point key="canvasLocation" x="-692" y="-692"/>
++ </scene>
++ <!--Emulator View Controller-->
+ <scene sceneID="h6I-2s-MCy">
+ <objects>
+- <viewController storyboardIdentifier="emulatorView" wantsFullScreenLayout="YES" id="WRM-pR-XCP" customClass="ViewController" sceneMemberID="viewController">
+- <view key="view" contentMode="scaleToFill" id="JQE-db-ZiC" customClass="EmulatorView">
++ <viewController storyboardIdentifier="emulatorView" wantsFullScreenLayout="YES" id="WRM-pR-XCP" customClass="EmulatorViewController" sceneMemberID="viewController">
++ <view key="view" multipleTouchEnabled="YES" contentMode="scaleToFill" id="JQE-db-ZiC" customClass="EmulatorView">
+ <rect key="frame" x="0.0" y="0.0" width="568" height="320"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+- <color key="backgroundColor" cocoaTouchSystemColor="darkTextColor"/>
++ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
++ <accessibility key="accessibilityConfiguration">
++ <accessibilityTraits key="traits" none="YES" notEnabled="YES"/>
++ </accessibility>
+ <gestureRecognizers/>
+ </view>
++ <navigationItem key="navigationItem" id="FmO-Yo-nVN"/>
+ <nil key="simulatedStatusBarMetrics"/>
+ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="ioY-OH-Jev" userLabel="First Responder" sceneMemberID="firstResponder"/>
+- <pongPressGestureRecognizer delaysTouchesEnded="NO" allowableMovement="10" minimumPressDuration="0.5" id="J8w-PT-eHl">
+- <connections>
+- <action selector="doSaveState:" destination="WRM-pR-XCP" id="6ND-tU-CZE"/>
+- </connections>
+- </pongPressGestureRecognizer>
+ </objects>
+ <point key="canvasLocation" x="486" y="-692"/>
+ </scene>
+ </scenes>
++ <resources>
++ <image name="disk_unknown.png" width="95" height="95"/>
++ </resources>
+ <simulatedMetricsContainer key="defaultSimulatedMetrics">
+ <simulatedStatusBarMetrics key="statusBar"/>
+ <simulatedOrientationMetrics key="orientation"/>
+diff -Nur a/shell/apple/emulator-ios/emulator/PadViewController.h b/shell/apple/emulator-ios/emulator/PadViewController.h
+--- a/shell/apple/emulator-ios/emulator/PadViewController.h 1969-12-31 21:00:00.000000000 -0300
++++ b/shell/apple/emulator-ios/emulator/PadViewController.h 2015-10-06 22:10:31.207968135 -0300
+@@ -0,0 +1,34 @@
++//
++// PadViewController.h
++// reicast-ios
++//
++// Created by Lounge Katt on 8/25/15.
++// Copyright (c) 2015 reicast. All rights reserved.
++//
++
++#import <UIKit/UIKit.h>
++#import "EmulatorView.h"
++
++@interface PadViewController : UIViewController
++
++@property (nonatomic, strong) IBOutlet UIButton* img_dpad_l;
++@property (nonatomic, strong) IBOutlet UIButton* img_dpad_r;
++@property (nonatomic, strong) IBOutlet UIButton* img_dpad_u;
++@property (nonatomic, strong) IBOutlet UIButton* img_dpad_d;
++@property (nonatomic, strong) IBOutlet UIButton* img_abxy_a;
++@property (nonatomic, strong) IBOutlet UIButton* img_abxy_b;
++@property (nonatomic, strong) IBOutlet UIButton* img_abxy_x;
++@property (nonatomic, strong) IBOutlet UIButton* img_abxy_y;
++@property (nonatomic, strong) IBOutlet UIButton* img_vjoy;
++@property (nonatomic, strong) IBOutlet UIButton* img_lt;
++@property (nonatomic, strong) IBOutlet UIButton* img_rt;
++@property (nonatomic, strong) IBOutlet UIButton* img_start;
++
++@property (nonatomic, strong) EmulatorView *handler;
++
++- (void) showController:(UIView *)parentView;
++- (void) hideController;
++- (BOOL) isControllerVisible;
++- (void) setControlOutput:(EmulatorView *)output;
++
++@end
+diff -Nur a/shell/apple/emulator-ios/emulator/PadViewController.m b/shell/apple/emulator-ios/emulator/PadViewController.m
+--- a/shell/apple/emulator-ios/emulator/PadViewController.m 1969-12-31 21:00:00.000000000 -0300
++++ b/shell/apple/emulator-ios/emulator/PadViewController.m 2015-10-06 22:10:31.207968135 -0300
+@@ -0,0 +1,78 @@
++//
++// PadViewController.m
++// reicast-ios
++//
++// Created by Lounge Katt on 8/25/15.
++// Copyright (c) 2015 reicast. All rights reserved.
++//
++
++#import "PadViewController.h"
++#import "EmulatorView.h"
++
++@interface PadViewController ()
++
++@end
++
++@implementation PadViewController
++
++- (void)viewDidLoad {
++ [super viewDidLoad];
++}
++
++- (void)didReceiveMemoryWarning {
++ [super didReceiveMemoryWarning];
++ // Dispose of any resources that can be recreated.
++}
++
++- (void)showController:(UIView *)parentView
++{
++ [parentView addSubview:self.view];
++}
++
++- (void)hideController
++{
++ [self.view removeFromSuperview];
++}
++
++- (BOOL)isControllerVisible {
++ if (self.view.window != nil) {
++ return YES;
++ }
++ return NO;
++}
++
++- (void)setControlOutput:(EmulatorView *)output
++{
++ self.handler = output;
++}
++
++- (IBAction)keycodeDown:(id)sender
++{
++ [self.handler handleKeyDown:(UIButton*)sender];
++}
++
++- (IBAction)keycodeUp:(id)sender
++{
++ [self.handler handleKeyUp:(UIButton*)sender];
++}
++
++- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
++{
++ self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
++ if (self) {
++ // Custom initialization
++ }
++ return self;
++}
++
++/*
++#pragma mark - Navigation
++
++// In a storyboard-based application, you will often want to do a little preparation before navigation
++- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
++ // Get the new view controller using [segue destinationViewController].
++ // Pass the selected object to the new view controller.
++}
++*/
++
++@end
+diff -Nur a/shell/apple/emulator-ios/emulator/PadViewController.xib b/shell/apple/emulator-ios/emulator/PadViewController.xib
+--- a/shell/apple/emulator-ios/emulator/PadViewController.xib 1969-12-31 21:00:00.000000000 -0300
++++ b/shell/apple/emulator-ios/emulator/PadViewController.xib 2015-10-06 22:10:31.207968135 -0300
+@@ -0,0 +1,197 @@
++<?xml version="1.0" encoding="UTF-8" standalone="no"?>
++<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
++ <dependencies>
++ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
++ </dependencies>
++ <objects>
++ <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PadViewController">
++ <connections>
++ <outlet property="img_abxy_a" destination="iKO-3z-Ias" id="ENi-No-2tP"/>
++ <outlet property="img_abxy_b" destination="7LB-OY-vh3" id="pGH-6d-IgP"/>
++ <outlet property="img_abxy_x" destination="iwO-7q-c8H" id="ZhP-Zp-Qnj"/>
++ <outlet property="img_abxy_y" destination="hGZ-v7-VA5" id="5qv-nJ-V1w"/>
++ <outlet property="img_dpad_d" destination="s7g-nq-lRU" id="9MP-1k-eUW"/>
++ <outlet property="img_dpad_l" destination="rp6-Nd-1qa" id="LNo-9e-3og"/>
++ <outlet property="img_dpad_r" destination="CVH-hw-R8F" id="vbf-4S-SBb"/>
++ <outlet property="img_dpad_u" destination="WMD-Fv-ibu" id="1kE-zb-8gR"/>
++ <outlet property="img_lt" destination="8Gl-Iv-u8L" id="4R8-pf-PYz"/>
++ <outlet property="img_rt" destination="V8J-vG-dlF" id="Bn6-Zm-Ojo"/>
++ <outlet property="img_start" destination="VtI-tC-PSX" id="o3u-Cb-G2g"/>
++ <outlet property="view" destination="3M7-1s-N5r" id="Tac-YU-UYE"/>
++ </connections>
++ </placeholder>
++ <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
++ <view multipleTouchEnabled="YES" contentMode="scaleToFill" id="3M7-1s-N5r">
++ <rect key="frame" x="0.0" y="0.0" width="568" height="320"/>
++ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
++ <subviews>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="LTrigger.png" id="H57-MD-elm">
++ <rect key="frame" x="0.0" y="0.0" width="80" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="8Gl-Iv-u8L" userLabel="LT-Button">
++ <rect key="frame" x="0.0" y="0.0" width="80" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="34L-sO-g81"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="iDv-U3-6OX"/>
++ </connections>
++ </button>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="RTrigger.png" id="Cjn-zx-eSs">
++ <rect key="frame" x="488" y="0.0" width="80" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="V8J-vG-dlF" userLabel="RT-Button">
++ <rect key="frame" x="488" y="0.0" width="80" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="vPf-qF-m13"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="hQh-8f-5jG"/>
++ </connections>
++ </button>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="JoystickButton.png" id="ivh-8r-bw3" userLabel="JoystickThumbpad.png">
++ <rect key="frame" x="20" y="206" width="100" height="100"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="JoystickBackground.png" id="OMP-L6-n0A">
++ <rect key="frame" x="6" y="192" width="128" height="128"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="DPad.png" id="FLe-Gr-hny">
++ <rect key="frame" x="0.0" y="44" width="140" height="140"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="rp6-Nd-1qa" userLabel="L-Button">
++ <rect key="frame" x="0.0" y="94" width="46" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="3Yw-AP-xVf"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="5gI-j0-ANf"/>
++ </connections>
++ </button>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="CVH-hw-R8F" userLabel="R-Button">
++ <rect key="frame" x="94" y="94" width="46" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="2Dv-zb-f8V"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="woi-3Y-IfD"/>
++ </connections>
++ </button>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="WMD-Fv-ibu" userLabel="U-Button">
++ <rect key="frame" x="50" y="44" width="40" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="kT6-yy-ZtY"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="R0R-dl-GAG"/>
++ </connections>
++ </button>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="s7g-nq-lRU" userLabel="D-Button">
++ <rect key="frame" x="50" y="144" width="40" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="Wck-mk-4Py"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="Qox-hz-p3A"/>
++ </connections>
++ </button>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ABXYPad.png" id="xbP-E4-fCE">
++ <rect key="frame" x="408" y="159" width="160" height="161"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="iwO-7q-c8H" userLabel="X-Button">
++ <rect key="frame" x="408" y="210" width="60" height="60"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="IBH-TK-vfV"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="dhr-NT-lcF"/>
++ </connections>
++ </button>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="7LB-OY-vh3" userLabel="B-Button">
++ <rect key="frame" x="508" y="210" width="60" height="60"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="dhg-58-L8C"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="zqg-KK-Wxb"/>
++ </connections>
++ </button>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="hGZ-v7-VA5" userLabel="Y-Button">
++ <rect key="frame" x="458" y="159" width="60" height="60"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="tyb-H4-TqJ"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="oai-Xb-scl"/>
++ </connections>
++ </button>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="iKO-3z-Ias" userLabel="A-Button">
++ <rect key="frame" x="458" y="260" width="60" height="60"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="Ysa-m4-KnN"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="MTf-ND-WNy"/>
++ </connections>
++ </button>
++ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Start.png" id="9K0-cV-7zu">
++ <rect key="frame" x="244" y="272" width="80" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ </imageView>
++ <button opaque="NO" multipleTouchEnabled="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="VtI-tC-PSX" userLabel="S-Button">
++ <rect key="frame" x="257" y="272" width="54" height="40"/>
++ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
++ <state key="normal">
++ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
++ </state>
++ <connections>
++ <action selector="keycodeDown:" destination="-1" eventType="touchDown" id="kwd-jB-5Wn"/>
++ <action selector="keycodeUp:" destination="-1" eventType="touchUpInside" id="gHx-tA-QlF"/>
++ </connections>
++ </button>
++ </subviews>
++ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
++ <simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
++ <point key="canvasLocation" x="325" y="329"/>
++ </view>
++ </objects>
++ <resources>
++ <image name="ABXYPad.png" width="120" height="120"/>
++ <image name="DPad.png" width="120" height="120"/>
++ <image name="JoystickBackground.png" width="120" height="120"/>
++ <image name="JoystickButton.png" width="56" height="56"/>
++ <image name="LTrigger.png" width="67" height="44"/>
++ <image name="RTrigger.png" width="67" height="44"/>
++ <image name="Start.png" width="48" height="26"/>
++ </resources>
++ <simulatedMetricsContainer key="defaultSimulatedMetrics">
++ <simulatedStatusBarMetrics key="statusBar"/>
++ <simulatedOrientationMetrics key="orientation"/>
++ <simulatedScreenMetrics key="destination" type="retina4"/>
++ </simulatedMetricsContainer>
++</document>
+diff -Nur a/shell/apple/emulator-ios/emulator/PathsViewController.h b/shell/apple/emulator-ios/emulator/PathsViewController.h
+--- a/shell/apple/emulator-ios/emulator/PathsViewController.h 2015-10-06 21:43:53.123336981 -0300
++++ b/shell/apple/emulator-ios/emulator/PathsViewController.h 2015-10-06 22:10:31.207968135 -0300
+@@ -8,7 +8,9 @@
+
+ #import <UIKit/UIKit.h>
+
+-@interface PathsViewController : UITableViewController
++@interface PathsViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>
+ @property (weak, nonatomic) IBOutlet UIBarButtonItem *sidebarButton;
+
++@property (nonatomic, strong) NSMutableArray* diskImages;
++
+ @end
+diff -Nur a/shell/apple/emulator-ios/emulator/PathsViewController.m b/shell/apple/emulator-ios/emulator/PathsViewController.m
+--- a/shell/apple/emulator-ios/emulator/PathsViewController.m 2015-10-06 21:43:53.123336981 -0300
++++ b/shell/apple/emulator-ios/emulator/PathsViewController.m 2015-10-06 22:10:31.207968135 -0300
+@@ -7,7 +7,9 @@
+ //
+
+ #import "PathsViewController.h"
+-#import "SWRevealViewController.h"
++//#import "SWRevealViewController.h"
++#import "EmulatorViewController.h"
++#import "DiskViewCell.h"
+
+ @interface PathsViewController ()
+
+@@ -24,22 +26,32 @@
+ return self;
+ }
+
++- (NSURL *)documents
++{
++ return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
++}
++
+ - (void)viewDidLoad
+ {
+ [super viewDidLoad];
+ self.title = @"Paths";
+
+ // Set the side bar button action. When it's tapped, it'll show up the sidebar.
+- _sidebarButton.target = self.revealViewController;
+- _sidebarButton.action = @selector(revealToggle:);
+-
++// _sidebarButton.target = self.revealViewController;
++// _sidebarButton.action = @selector(revealToggle:);
++
+ // Set the gesture
+- [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
++// [self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
+ // Uncomment the following line to preserve selection between presentations.
+ // self.clearsSelectionOnViewWillAppear = NO;
+
+ // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
+ // self.navigationItem.rightBarButtonItem = self.editButtonItem;
++
++ self.diskImages = [[NSMutableArray alloc] init];
++ NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self documents].path error:NULL];
++ NSPredicate *diskPredicate = [NSPredicate predicateWithFormat:@"self ENDSWITH '.chd' || self ENDSWITH '.gdi' || self ENDSWITH '.cdi' || self ENDSWITH '.CHD' || self ENDSWITH '.GDI' || self ENDSWITH '.CDI'"];
++ self.diskImages = [NSMutableArray arrayWithArray:[files filteredArrayUsingPredicate:diskPredicate]];
+ }
+
+ - (void)didReceiveMemoryWarning
+@@ -50,6 +62,52 @@
+
+ #pragma mark - Table view data source
+
+-// TODO: paths view controller logic
++-(NSInteger)numberOfSectionsInTableView: (UITableView*)tableView
++{
++ return 1;
++}
++
++-(NSInteger)tableView: (UITableView *)tableView numberOfRowsInSection: (NSInteger)section
++{
++ return [self.diskImages count];
++}
++
++-(NSString*)tableView: (UITableView*)tableView titleForHeaderInSection: (NSInteger)section
++{
++ return @"";
++}
++
++- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
++ return 80;
++ // Assign the specific cell height to prevent issues with custom size
++}
++
++-(UITableViewCell*)tableView: (UITableView*)tableView cellForRowAtIndexPath: (NSIndexPath*)indexPath
++{
++ static NSString *CellIdentifier = @"Cell";
++
++ DiskViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
++ NSString* imagePath = [self.diskImages objectAtIndex: indexPath.row];
++
++ cell.nameLabel.text = [[imagePath lastPathComponent] stringByDeletingPathExtension];
++
++ return cell;
++}
++
++-(void)prepareForSegue: (UIStoryboardSegue*)segue sender: (id)sender
++{
++ if ([segue.identifier isEqualToString:@"emulatorView"]) {
++ NSIndexPath* indexPath = self.tableView.indexPathForSelectedRow;
++ NSString* filePath = [self.diskImages objectAtIndex: indexPath.row];
++ NSString* diskPath = [[self documents].path stringByAppendingPathComponent: filePath];
++ EmulatorViewController* emulatorView = segue.destinationViewController;
++ emulatorView.diskImage = diskPath;
++ }
++}
++
++-(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath
++{
++ [self performSegueWithIdentifier: @"emulatorView" sender: self];
++}
+
+ @end
+diff -Nur a/shell/apple/emulator-ios/emulator/reicast-ios-Info.plist b/shell/apple/emulator-ios/emulator/reicast-ios-Info.plist
+--- a/shell/apple/emulator-ios/emulator/reicast-ios-Info.plist 2015-10-06 21:43:53.124336988 -0300
++++ b/shell/apple/emulator-ios/emulator/reicast-ios-Info.plist 2015-10-06 22:10:31.207968135 -0300
+@@ -8,13 +8,6 @@
+ <string>Reicast</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+- <key>CFBundleIconFiles</key>
+- <array>
+- <string>emulator/assets/Icon-72.png</string>
+- <string>emulator/assets/Icon-72@2x.png</string>
+- <string>emulator/assets/Icon.png</string>
+- <string>emulator/assets/Icon@2x.png</string>
+- </array>
+ <key>CFBundleIdentifier</key>
+ <string>com.reicast.$(PRODUCT_NAME:rfc1034identifier)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+diff -Nur a/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Contents.json b/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Contents.json
+--- a/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Contents.json 1969-12-31 21:00:00.000000000 -0300
++++ b/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Contents.json 2015-10-06 22:10:31.209968149 -0300
+@@ -0,0 +1,60 @@
++{
++ "images" : [
++ {
++ "idiom" : "iphone",
++ "size" : "29x29",
++ "scale" : "2x"
++ },
++ {
++ "idiom" : "iphone",
++ "size" : "40x40",
++ "scale" : "2x"
++ },
++ {
++ "size" : "60x60",
++ "idiom" : "iphone",
++ "filename" : "Icon-60@2x.png",
++ "scale" : "2x"
++ },
++ {
++ "idiom" : "iphone",
++ "size" : "60x60",
++ "scale" : "3x"
++ },
++ {
++ "idiom" : "ipad",
++ "size" : "29x29",
++ "scale" : "1x"
++ },
++ {
++ "idiom" : "ipad",
++ "size" : "29x29",
++ "scale" : "2x"
++ },
++ {
++ "idiom" : "ipad",
++ "size" : "40x40",
++ "scale" : "1x"
++ },
++ {
++ "idiom" : "ipad",
++ "size" : "40x40",
++ "scale" : "2x"
++ },
++ {
++ "idiom" : "ipad",
++ "size" : "76x76",
++ "scale" : "1x"
++ },
++ {
++ "size" : "76x76",
++ "idiom" : "ipad",
++ "filename" : "Icon-76@2x.png",
++ "scale" : "2x"
++ }
++ ],
++ "info" : {
++ "version" : 1,
++ "author" : "xcode"
++ }
++}
+\ No newline at end of file
+Binary files a/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png and b/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png differ
+Binary files a/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png and b/shell/apple/emulator-ios/reicast-ios/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png differ
+diff -Nur a/shell/apple/emulator-ios/reicast-ios/Images.xcassets/LaunchImage.launchimage/Contents.json b/shell/apple/emulator-ios/reicast-ios/Images.xcassets/LaunchImage.launchimage/Contents.json
+--- a/shell/apple/emulator-ios/reicast-ios/Images.xcassets/LaunchImage.launchimage/Contents.json 1969-12-31 21:00:00.000000000 -0300
++++ b/shell/apple/emulator-ios/reicast-ios/Images.xcassets/LaunchImage.launchimage/Contents.json 2015-10-06 22:10:31.209968149 -0300
+@@ -0,0 +1,49 @@
++{
++ "images" : [
++ {
++ "orientation" : "portrait",
++ "idiom" : "ipad",
++ "minimum-system-version" : "7.0",
++ "extent" : "full-screen",
++ "scale" : "2x"
++ },
++ {
++ "orientation" : "landscape",
++ "idiom" : "ipad",
++ "minimum-system-version" : "7.0",
++ "extent" : "full-screen",
++ "scale" : "1x"
++ },
++ {
++ "orientation" : "landscape",
++ "idiom" : "ipad",
++ "minimum-system-version" : "7.0",
++ "extent" : "full-screen",
++ "scale" : "2x"
++ },
++ {
++ "orientation" : "portrait",
++ "idiom" : "iphone",
++ "minimum-system-version" : "7.0",
++ "scale" : "2x"
++ },
++ {
++ "orientation" : "portrait",
++ "idiom" : "iphone",
++ "minimum-system-version" : "7.0",
++ "subtype" : "retina4",
++ "scale" : "2x"
++ },
++ {
++ "orientation" : "portrait",
++ "idiom" : "ipad",
++ "minimum-system-version" : "7.0",
++ "extent" : "full-screen",
++ "scale" : "1x"
++ }
++ ],
++ "info" : {
++ "version" : 1,
++ "author" : "xcode"
++ }
++}
+\ No newline at end of file
+diff -Nur a/shell/apple/emulator-ios/reicast-ios.xcodeproj/project.pbxproj b/shell/apple/emulator-ios/reicast-ios.xcodeproj/project.pbxproj
+--- a/shell/apple/emulator-ios/reicast-ios.xcodeproj/project.pbxproj 2015-10-06 21:43:53.125336995 -0300
++++ b/shell/apple/emulator-ios/reicast-ios.xcodeproj/project.pbxproj 2015-10-06 22:10:31.209968149 -0300
+@@ -50,6 +50,9 @@
+ 877652C61B6157BD00437F10 /* audiostream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 877652BF1B6157BD00437F10 /* audiostream.cpp */; };
+ 877652C91B6157FC00437F10 /* ngen_arm.S in Sources */ = {isa = PBXBuildFile; fileRef = 877652C71B6157FC00437F10 /* ngen_arm.S */; };
+ 877652CA1B6157FC00437F10 /* rec_arm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 877652C81B6157FC00437F10 /* rec_arm.cpp */; };
++ 878B0CFC1B8BB5B400A8D1C5 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 878B0CFB1B8BB5B400A8D1C5 /* Images.xcassets */; };
++ 878B0D001B8BFE6200A8D1C5 /* disk_unknown.png in Resources */ = {isa = PBXBuildFile; fileRef = 878B0CFF1B8BFE6200A8D1C5 /* disk_unknown.png */; };
++ 8794D9C31B88F3D600B1B3A3 /* DiskViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8794D9C21B88F3D600B1B3A3 /* DiskViewCell.m */; };
+ 87C208D71B7A4BFA00638BDD /* AboutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 87C208C61B7A4BFA00638BDD /* AboutViewController.m */; };
+ 87C208D81B7A4BFA00638BDD /* BrowserTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 87C208C81B7A4BFA00638BDD /* BrowserTableViewController.m */; };
+ 87C208D91B7A4BFA00638BDD /* CloudVMUViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 87C208CA1B7A4BFA00638BDD /* CloudVMUViewController.m */; };
+@@ -87,10 +90,8 @@
+ 87D92F4E1B7A1B5700D8FD9E /* GameController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87D92F4D1B7A1B5700D8FD9E /* GameController.framework */; };
+ 87D92F541B7A1BB100D8FD9E /* iCadeReaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D92F511B7A1BB100D8FD9E /* iCadeReaderView.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+ 87D92F551B7A1BB100D8FD9E /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 87D92F531B7A1BB100D8FD9E /* LICENSE */; };
+- 87DCDB251B7EE57D0054D67C /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = 8703BC371A44B8DA00E7E939 /* Icon-72.png */; };
+- 87DCDB261B7EE5850054D67C /* Icon-72@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8703BC381A44B8DA00E7E939 /* Icon-72@2x.png */; };
+- 87DCDB271B7EE5850054D67C /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 8703BC391A44B8DA00E7E939 /* Icon.png */; };
+- 87DCDB281B7EE5850054D67C /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8703BC3A1A44B8DA00E7E939 /* Icon@2x.png */; };
++ 87FA52E91B8CE18600CEFC32 /* PadViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 87FA52E71B8CE18600CEFC32 /* PadViewController.m */; };
++ 87FA52EA1B8CE18600CEFC32 /* PadViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 87FA52E81B8CE18600CEFC32 /* PadViewController.xib */; };
+ 9C7A393318C804A80070BB5F /* reicast.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = 9C7A393218C804A80070BB5F /* reicast.entitlements */; };
+ 9C7A3AA218C806E00070BB5F /* cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C7A395118C806DE0070BB5F /* cfg.cpp */; };
+ 9C7A3AA318C806E00070BB5F /* cl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9C7A395318C806DE0070BB5F /* cl.cpp */; };
+@@ -244,7 +245,6 @@
+ 84967C751B8F492C005F1140 /* filter_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = filter_neon.S; sourceTree = "<group>"; };
+ 84967C761B8F492C005F1140 /* filter_neon_intrinsics.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filter_neon_intrinsics.c; sourceTree = "<group>"; };
+ 84967C771B8F492C005F1140 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
+- 84967C781B8F492C005F1140 /* fp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fp.h; sourceTree = "<group>"; };
+ 84967C791B8F492C005F1140 /* png.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = png.c; sourceTree = "<group>"; };
+ 84967C7A1B8F492C005F1140 /* png.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = "<group>"; };
+ 84967C7B1B8F492C005F1140 /* pngconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = "<group>"; };
+@@ -282,10 +282,6 @@
+ 849C0D6A1B072D14008BAAA4 /* gdrom_hle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gdrom_hle.h; path = reios/gdrom_hle.h; sourceTree = "<group>"; };
+ 849C0D6B1B072D14008BAAA4 /* reios_elf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = reios_elf.cpp; path = reios/reios_elf.cpp; sourceTree = "<group>"; };
+ 849C0D6C1B072D14008BAAA4 /* reios_elf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = reios_elf.h; path = reios/reios_elf.h; sourceTree = "<group>"; };
+- 8703BC371A44B8DA00E7E939 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "emulator/assets/Icon-72.png"; sourceTree = "<group>"; };
+- 8703BC381A44B8DA00E7E939 /* Icon-72@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72@2x.png"; path = "emulator/assets/Icon-72@2x.png"; sourceTree = "<group>"; };
+- 8703BC391A44B8DA00E7E939 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = emulator/assets/Icon.png; sourceTree = "<group>"; };
+- 8703BC3A1A44B8DA00E7E939 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "emulator/assets/Icon@2x.png"; sourceTree = "<group>"; };
+ 87078A8318A47FE90034C7A0 /* reicast-ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "reicast-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 87078A8618A47FE90034C7A0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+ 87078A8818A47FE90034C7A0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
+@@ -316,6 +312,10 @@
+ 877652C11B6157BD00437F10 /* oslib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oslib.h; sourceTree = "<group>"; };
+ 877652C71B6157FC00437F10 /* ngen_arm.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = ngen_arm.S; sourceTree = "<group>"; };
+ 877652C81B6157FC00437F10 /* rec_arm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rec_arm.cpp; sourceTree = "<group>"; };
++ 878B0CFB1B8BB5B400A8D1C5 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "../reicast-ios/Images.xcassets"; sourceTree = "<group>"; };
++ 878B0CFF1B8BFE6200A8D1C5 /* disk_unknown.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = disk_unknown.png; path = emulator/Images/disk_unknown.png; sourceTree = "<group>"; };
++ 8794D9C11B88F3D600B1B3A3 /* DiskViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DiskViewCell.h; path = emulator/DiskViewCell.h; sourceTree = "<group>"; };
++ 8794D9C21B88F3D600B1B3A3 /* DiskViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DiskViewCell.m; path = emulator/DiskViewCell.m; sourceTree = "<group>"; };
+ 87C208C51B7A4BFA00638BDD /* AboutViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AboutViewController.h; path = emulator/AboutViewController.h; sourceTree = "<group>"; };
+ 87C208C61B7A4BFA00638BDD /* AboutViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AboutViewController.m; path = emulator/AboutViewController.m; sourceTree = "<group>"; };
+ 87C208C71B7A4BFA00638BDD /* BrowserTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BrowserTableViewController.h; path = emulator/BrowserTableViewController.h; sourceTree = "<group>"; };
+@@ -364,6 +364,9 @@
+ 87D92F511B7A1BB100D8FD9E /* iCadeReaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = iCadeReaderView.m; sourceTree = "<group>"; };
+ 87D92F521B7A1BB100D8FD9E /* iCadeState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iCadeState.h; sourceTree = "<group>"; };
+ 87D92F531B7A1BB100D8FD9E /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
++ 87FA52E61B8CE18600CEFC32 /* PadViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PadViewController.h; path = emulator/PadViewController.h; sourceTree = "<group>"; };
++ 87FA52E71B8CE18600CEFC32 /* PadViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PadViewController.m; path = emulator/PadViewController.m; sourceTree = "<group>"; };
++ 87FA52E81B8CE18600CEFC32 /* PadViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PadViewController.xib; path = emulator/PadViewController.xib; sourceTree = "<group>"; };
+ 9C7A393218C804A80070BB5F /* reicast.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = reicast.entitlements; sourceTree = "<group>"; };
+ 9C7A393A18C806DE0070BB5F /* arm_coding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arm_coding.h; sourceTree = "<group>"; };
+ 9C7A393B18C806DE0070BB5F /* arm_disasm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arm_disasm.h; sourceTree = "<group>"; };
+@@ -382,7 +385,6 @@
+ 9C7A394818C806DE0070BB5F /* E_VLoadStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = E_VLoadStore.h; sourceTree = "<group>"; };
+ 9C7A394918C806DE0070BB5F /* E_VRegXfer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = E_VRegXfer.h; sourceTree = "<group>"; };
+ 9C7A394A18C806DE0070BB5F /* H_Branches.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = H_Branches.h; sourceTree = "<group>"; };
+- 9C7A394B18C806DE0070BB5F /* H_fp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = H_fp.h; sourceTree = "<group>"; };
+ 9C7A394C18C806DE0070BB5F /* H_LoadStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = H_LoadStore.h; sourceTree = "<group>"; };
+ 9C7A394D18C806DE0070BB5F /* H_psuedo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = H_psuedo.h; sourceTree = "<group>"; };
+ 9C7A394E18C806DE0070BB5F /* H_state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = H_state.h; sourceTree = "<group>"; };
+@@ -722,17 +724,6 @@
+ name = reios;
+ sourceTree = "<group>";
+ };
+- 8703BC361A44B8DA00E7E939 /* assets */ = {
+- isa = PBXGroup;
+- children = (
+- 8703BC371A44B8DA00E7E939 /* Icon-72.png */,
+- 8703BC381A44B8DA00E7E939 /* Icon-72@2x.png */,
+- 8703BC391A44B8DA00E7E939 /* Icon.png */,
+- 8703BC3A1A44B8DA00E7E939 /* Icon@2x.png */,
+- );
+- name = assets;
+- sourceTree = "<group>";
+- };
+ 87078A7A18A47FE90034C7A0 = {
+ isa = PBXGroup;
+ children = (
+@@ -769,6 +760,7 @@
+ 87078A9018A47FE90034C7A0 /* reicast */ = {
+ isa = PBXGroup;
+ children = (
++ 878B0CFB1B8BB5B400A8D1C5 /* Images.xcassets */,
+ 9C7A3BC318C84EA10070BB5F /* MainStoryboard.storyboard */,
+ 87078A9918A47FE90034C7A0 /* AppDelegate.h */,
+ 87078A9A18A47FE90034C7A0 /* AppDelegate.m */,
+@@ -790,7 +782,6 @@
+ 87078A9118A47FE90034C7A0 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+- 8703BC361A44B8DA00E7E939 /* assets */,
+ 87078A9218A47FE90034C7A0 /* reicast-ios-Info.plist */,
+ 87078A9618A47FE90034C7A0 /* main.m */,
+ 87078A9818A47FE90034C7A0 /* reicast-ios-Prefix.pch */,
+@@ -823,6 +814,11 @@
+ 9C7A393618C805F70070BB5F /* View Controller Subclasses */ = {
+ isa = PBXGroup;
+ children = (
++ 87FA52E61B8CE18600CEFC32 /* PadViewController.h */,
++ 87FA52E71B8CE18600CEFC32 /* PadViewController.m */,
++ 87FA52E81B8CE18600CEFC32 /* PadViewController.xib */,
++ 8794D9C11B88F3D600B1B3A3 /* DiskViewCell.h */,
++ 8794D9C21B88F3D600B1B3A3 /* DiskViewCell.m */,
+ 87C208C51B7A4BFA00638BDD /* AboutViewController.h */,
+ 87C208C61B7A4BFA00638BDD /* AboutViewController.m */,
+ 87C208C71B7A4BFA00638BDD /* BrowserTableViewController.h */,
+@@ -860,6 +856,7 @@
+ 87D92F291B7A1B4800D8FD9E /* JoystickBackground.png */,
+ 87D92F2A1B7A1B4800D8FD9E /* JoystickBackground@2x.png */,
+ 87D92F2B1B7A1B4800D8FD9E /* JoystickButton.png */,
++ 878B0CFF1B8BFE6200A8D1C5 /* disk_unknown.png */,
+ 87D92F2C1B7A1B4800D8FD9E /* JoystickButton@2x.png */,
+ 87D92F2D1B7A1B4800D8FD9E /* LTrigger.png */,
+ 87D92F2E1B7A1B4800D8FD9E /* LTrigger@2x.png */,
+@@ -924,7 +921,6 @@
+ 9C7A394818C806DE0070BB5F /* E_VLoadStore.h */,
+ 9C7A394918C806DE0070BB5F /* E_VRegXfer.h */,
+ 9C7A394A18C806DE0070BB5F /* H_Branches.h */,
+- 9C7A394B18C806DE0070BB5F /* H_fp.h */,
+ 9C7A394C18C806DE0070BB5F /* H_LoadStore.h */,
+ 9C7A394D18C806DE0070BB5F /* H_psuedo.h */,
+ 9C7A394E18C806DE0070BB5F /* H_state.h */,
+@@ -1007,7 +1003,6 @@
+ children = (
+ 84967C731B8F492C005F1140 /* arm */,
+ 84967C771B8F492C005F1140 /* config.h */,
+- 84967C781B8F492C005F1140 /* fp.h */,
+ 84967C791B8F492C005F1140 /* png.c */,
+ 84967C7A1B8F492C005F1140 /* png.h */,
+ 84967C7B1B8F492C005F1140 /* pngconf.h */,
+@@ -1506,10 +1501,6 @@
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+- 87DCDB251B7EE57D0054D67C /* Icon-72.png in Resources */,
+- 87DCDB261B7EE5850054D67C /* Icon-72@2x.png in Resources */,
+- 87DCDB271B7EE5850054D67C /* Icon.png in Resources */,
+- 87DCDB281B7EE5850054D67C /* Icon@2x.png in Resources */,
+ 87D92F461B7A1B4800D8FD9E /* menuback@2x.png in Resources */,
+ 87D92F491B7A1B4800D8FD9E /* RTrigger.png in Resources */,
+ 87D92F4B1B7A1B4800D8FD9E /* Start.png in Resources */,
+@@ -1517,6 +1508,7 @@
+ 87D92F391B7A1B4800D8FD9E /* 210-twitterbird.png in Resources */,
+ 87D92F3A1B7A1B4800D8FD9E /* 210-twitterbird@2x.png in Resources */,
+ 87D92F3D1B7A1B4800D8FD9E /* DPad.png in Resources */,
++ 878B0CFC1B8BB5B400A8D1C5 /* Images.xcassets in Resources */,
+ 87D92F3C1B7A1B4800D8FD9E /* ABXYPad@2x.png in Resources */,
+ 87D92F401B7A1B4800D8FD9E /* JoystickBackground@2x.png in Resources */,
+ 9C7A3AA418C806E00070BB5F /* core.mk in Resources */,
+@@ -1535,7 +1527,9 @@
+ 87D92F441B7A1B4800D8FD9E /* LTrigger@2x.png in Resources */,
+ 87D92F551B7A1BB100D8FD9E /* LICENSE in Resources */,
+ 87D92F451B7A1B4800D8FD9E /* menuback.png in Resources */,
++ 87FA52EA1B8CE18600CEFC32 /* PadViewController.xib in Resources */,
+ 87078AA518A47FE90034C7A0 /* Shader.vsh in Resources */,
++ 878B0D001B8BFE6200A8D1C5 /* disk_unknown.png in Resources */,
+ 87D92F3B1B7A1B4800D8FD9E /* ABXYPad.png in Resources */,
+ 87D92F481B7A1B4800D8FD9E /* menuicon@2x.png in Resources */,
+ 87D92F371B7A1B4800D8FD9E /* 210-octocat.png in Resources */,
+@@ -1601,6 +1595,7 @@
+ 9C7A3B2318C806E00070BB5F /* sh4_opcodes.cpp in Sources */,
+ 84967C951B8F492C005F1140 /* pngmem.c in Sources */,
+ 9C7A3ADA18C806E00070BB5F /* zip_name_locate.c in Sources */,
++ 8794D9C31B88F3D600B1B3A3 /* DiskViewCell.m in Sources */,
+ 9C7A3B1B18C806E00070BB5F /* ta_ctx.cpp in Sources */,
+ 9C7A3AE018C806E00070BB5F /* zip_set_archive_flag.c in Sources */,
+ 9C7A3B3518C806E00070BB5F /* cdi.cpp in Sources */,
+@@ -1635,6 +1630,7 @@
+ 9C7A3B5918C81A4F0070BB5F /* SWRevealViewController.m in Sources */,
+ 9C7A3B0F18C806E00070BB5F /* maple_cfg.cpp in Sources */,
+ 9C7A3AF318C806E00070BB5F /* crc32.c in Sources */,
++ 87FA52E91B8CE18600CEFC32 /* PadViewController.m in Sources */,
+ 8497BCC01A41A0E900EFB9ED /* nixprof.cpp in Sources */,
+ 9C7A3AE118C806E00070BB5F /* zip_set_file_comment.c in Sources */,
+ 84967C9A1B8F492C005F1140 /* pngrutil.c in Sources */,
+@@ -1840,6 +1836,8 @@
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = armv7;
++ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
++ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+@@ -1875,6 +1873,8 @@
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = armv7;
++ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
++ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+diff -Nur a/shell/apple/reicast.xcworkspace/xcshareddata/xcschemes/reicast-ios.xcscheme b/shell/apple/reicast.xcworkspace/xcshareddata/xcschemes/reicast-ios.xcscheme
+--- a/shell/apple/reicast.xcworkspace/xcshareddata/xcschemes/reicast-ios.xcscheme 2015-10-06 21:43:53.127337010 -0300
++++ b/shell/apple/reicast.xcworkspace/xcshareddata/xcschemes/reicast-ios.xcscheme 2015-10-06 22:10:31.210968157 -0300
+@@ -62,7 +62,8 @@
+ ignoresPersistentStateOnLaunch = "NO"
+ debugDocumentVersioning = "YES"
+ allowLocationSimulation = "YES">
+- <BuildableProductRunnable>
++ <BuildableProductRunnable
++ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "87078A8218A47FE90034C7A0"
+@@ -80,7 +81,8 @@
+ useCustomWorkingDirectory = "NO"
+ buildConfiguration = "Release"
+ debugDocumentVersioning = "YES">
+- <BuildableProductRunnable>
++ <BuildableProductRunnable
++ runnableDebuggingMode = "0">
+ <BuildableReference
+ BuildableIdentifier = "primary"
+ BlueprintIdentifier = "87078A8218A47FE90034C7A0"