diff --git a/driver.h b/driver.h
new file mode 100644
index 0000000000..36773176d8
--- /dev/null
+++ b/driver.h
@@ -0,0 +1,69 @@
+/* SSNES - A Super Ninteno Entertainment System (SNES) Emulator frontend for libsnes.
+ * Copyright (C) 2010 - Hans-Kristian Arntzen
+ *
+ * Some code herein may be based on code found in BSNES.
+ *
+ * SSNES is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * SSNES is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with SSNES.
+ * If not, see .
+ */
+
+
+#ifndef __DRIVER__H
+#define __DRIVER__H
+
+#include
+#include
+#include
+
+struct snes_keybind
+{
+ int id;
+ int key;
+ int joykey;
+};
+
+typedef struct audio_driver
+{
+ void* (*init)(const char* device, int rate, int latency);
+ ssize_t (*write)(void* data, const void* buf, size_t size);
+ bool (*stop)(void* data);
+ bool (*start)(void* data);
+ void (*free)(void* data);
+} audio_driver_t;
+
+typedef struct input_driver
+{
+ void* (*init)(void);
+ void (*poll)(void* data);
+ int16_t (*input_state)(void* data, const struct snes_keybind *snes_keybinds, bool port, unsigned device, unsigned index, unsigned id);
+ void (*free)(void* data);
+} input_driver_t;
+
+typedef struct video_driver
+{
+ void* (*init)(int width, int height, bool fullscreen, bool vsync, bool force_aspect, input_driver_t **input);
+ // Should the video driver act as an input driver as well? :)
+ bool (*frame)(void* data, const uint16_t* frame, int width, int height);
+ void (*free)(void* data);
+} video_driver_t;
+
+
+typedef struct driver
+{
+ const audio_driver_t *audio;
+ const video_driver_t *video;
+ const input_driver_t *input;
+ void *audio_data;
+ void *video_data;
+ void *input_data;
+} driver_t;
+
+#endif