-#define eeprom_LOG
-
-static uint16 eeprom_ram[64];
-
-void eeprom_set_di(uint32 state);
-void eeprom_set_cs(uint32 state);
-uint32 eeprom_get_do(void);
-
-#define EE_STATE_START 1
-#define EE_STATE_OP_A 2
-#define EE_STATE_OP_B 3
-#define EE_STATE_0 4
-#define EE_STATE_1 5
-#define EE_STATE_2 6
-#define EE_STATE_3 7
-#define EE_STATE_0_0 8
-#define EE_READ_ADDRESS 9
-#define EE_STATE_0_0_0 10
-#define EE_STATE_0_0_1 11
-#define EE_STATE_0_0_2 12
-#define EE_STATE_0_0_3 13
-#define EE_STATE_0_0_1_0 14
-#define EE_READ_DATA 15
-#define EE_STATE_BUSY 16
-#define EE_STATE_1_0 17
-#define EE_STATE_1_1 18
-#define EE_STATE_2_0 19
-#define EE_STATE_3_0 20
-
-uint16 jerry_ee_state = EE_STATE_START;
-uint16 jerry_ee_op = 0;
-uint16 jerry_ee_rstate = 0;
-uint16 jerry_ee_address_data = 0;
-uint16 jerry_ee_address_cnt = 6;
-uint16 jerry_ee_data = 0;
-uint16 jerry_ee_data_cnt = 16;
-uint16 jerry_writes_enabled = 0;
-uint16 jerry_ee_direct_jump = 0;
-FILE * jerry_ee_fp;
-extern char * jaguar_boot_dir;
-
-
-void eeprom_init(void)
+#include <stdlib.h>
+#include <string.h> // For memset
+#include "jaguar.h"
+#include "log.h"
+#include "settings.h"
+
+//#define eeprom_LOG
+
+static uint16_t eeprom_ram[64];
+static uint16_t cdromEEPROM[64];
+
+//
+// Private function prototypes
+//
+
+static void EEPROMSave(void);
+static void eeprom_set_di(uint32_t state);
+static void eeprom_set_cs(uint32_t state);
+static uint32_t eeprom_get_do(void);
+void ReadEEPROMFromFile(FILE * file, uint16_t * ram);
+void WriteEEPROMToFile(FILE * file, uint16_t * ram);
+
+
+enum { EE_STATE_START = 1, EE_STATE_OP_A, EE_STATE_OP_B, EE_STATE_0, EE_STATE_1,
+ EE_STATE_2, EE_STATE_3, EE_STATE_0_0, EE_READ_ADDRESS, EE_STATE_0_0_0,
+ EE_STATE_0_0_1, EE_STATE_0_0_2, EE_STATE_0_0_3, EE_STATE_0_0_1_0, EE_READ_DATA,
+ EE_STATE_BUSY, EE_STATE_1_0, EE_STATE_1_1, EE_STATE_2_0, EE_STATE_3_0 };
+
+// Local global variables
+
+static uint16_t jerry_ee_state = EE_STATE_START;
+static uint16_t jerry_ee_op = 0;
+static uint16_t jerry_ee_rstate = 0;
+static uint16_t jerry_ee_address_data = 0;
+static uint16_t jerry_ee_address_cnt = 6;
+static uint16_t jerry_ee_data = 0;
+static uint16_t jerry_ee_data_cnt = 16;
+static uint16_t jerry_writes_enabled = 0;
+static uint16_t jerry_ee_direct_jump = 0;
+
+static char eeprom_filename[MAX_PATH];
+static char cdromEEPROMFilename[MAX_PATH];
+static bool haveEEPROM = false;
+static bool haveCDROMEEPROM = false;
+
+
+void EepromInit(void)