diff --git a/src/Config.cpp b/src/Config.cpp
new file mode 100644
index 00000000..9cf6a501
--- /dev/null
+++ b/src/Config.cpp
@@ -0,0 +1,132 @@
+/*
+    Copyright 2016-2017 StapleButter
+
+    This file is part of melonDS.
+
+    melonDS 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 Foundation, either version 3 of the License, or (at your option)
+    any later version.
+
+    melonDS 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 melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "Config.h"
+
+
+namespace Config
+{
+
+int KeyMapping[12];
+int JoyMapping[12];
+
+typedef struct
+{
+    char Name[16];
+    int Type;
+    void* Value;
+    int DefaultInt;
+    char* DefaultStr;
+    int StrLength;
+
+} ConfigEntry;
+
+ConfigEntry ConfigFile[] =
+{
+    {"Key_A",      0, &KeyMapping[0],  15, NULL, 0},
+    {"Key_B",      0, &KeyMapping[1],  54, NULL, 0},
+    {"Key_Select", 0, &KeyMapping[2],  44, NULL, 0},
+    {"Key_Start",  0, &KeyMapping[3],  40, NULL, 0},
+    {"Key_Right",  0, &KeyMapping[4],  22, NULL, 0},
+    {"Key_Left",   0, &KeyMapping[5],  4,  NULL, 0},
+    {"Key_Up",     0, &KeyMapping[6],  26, NULL, 0},
+    {"Key_Down",   0, &KeyMapping[7],  29, NULL, 0},
+    {"Key_R",      0, &KeyMapping[8],  19, NULL, 0},
+    {"Key_L",      0, &KeyMapping[9],  20, NULL, 0},
+    {"Key_X",      0, &KeyMapping[10], 18, NULL, 0},
+    {"Key_Y",      0, &KeyMapping[11], 14, NULL, 0},
+
+    {"", -1, NULL, 0, NULL, 0}
+};
+
+
+void Load()
+{
+    ConfigEntry* entry = &ConfigFile[0];
+    for (;;)
+    {
+        if (!entry->Value) break;
+
+        if (entry->Type == 0)
+            *(int*)entry->Value = entry->DefaultInt;
+        else
+            strncpy((char*)entry->Value, entry->DefaultStr, entry->StrLength);
+
+        entry++;
+    }
+
+    FILE* f = fopen("melonDS.ini", "r");
+    if (!f) return;
+
+    char linebuf[1024];
+    char entryname[16];
+    char entryval[1024];
+    while (!feof(f))
+    {
+        fgets(linebuf, 1024, f);
+        int ret = sscanf(linebuf, "%15[A-Za-z_0-9]=%[^\t\n]", entryname, entryval);
+        if (ret < 2) continue;
+
+        ConfigEntry* entry = &ConfigFile[0];
+        for (;;)
+        {
+            if (!entry->Value) break;
+
+            if (!strncmp(entry->Name, entryname, 15))
+            {
+                if (entry->Type == 0)
+                    *(int*)entry->Value = strtol(entryval, NULL, 10);
+                else
+                    strncpy((char*)entry->Value, entryval, entry->StrLength);
+
+                break;
+            }
+
+            entry++;
+        }
+    }
+
+    fclose(f);
+}
+
+void Save()
+{
+    FILE* f = fopen("melonDS.ini", "w");
+    if (!f) return;
+
+    ConfigEntry* entry = &ConfigFile[0];
+    for (;;)
+    {
+        if (!entry->Value) break;
+
+        if (entry->Type == 0)
+            fprintf(f, "%s=%d\n", entry->Name, *(int*)entry->Value);
+        else
+            fprintf(f, "%s=%s\n", entry->Name, entry->Value);
+
+        entry++;
+    }
+
+    fclose(f);
+}
+
+
+}
diff --git a/src/Config.h b/src/Config.h
new file mode 100644
index 00000000..16561f66
--- /dev/null
+++ b/src/Config.h
@@ -0,0 +1,35 @@
+/*
+    Copyright 2016-2017 StapleButter
+
+    This file is part of melonDS.
+
+    melonDS 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 Foundation, either version 3 of the License, or (at your option)
+    any later version.
+
+    melonDS 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 melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "types.h"
+
+namespace Config
+{
+
+void Load();
+void Save();
+
+extern int KeyMapping[12];
+extern int JoyMapping[12];
+
+}
+
+#endif // CONFIG_H