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"