]> Shamusworld >> Repos - virtualjaguar/blobdiff - src/eeprom.cpp
Virtual Jaguar GCC/SDL v1.0.3 import.
[virtualjaguar] / src / eeprom.cpp
index 1610e1cc2643b302564c3e588d514477438ed20e..197d2692a77583783cdd1ae6af47134f55f1f5b4 100644 (file)
@@ -1,3 +1,11 @@
+//
+// EEPROM handler
+//
+// by cal2
+// GCC/SDL port by Niels Wagenaar (Linux/WIN32) and Caz (BeOS)
+// Cleanups by James L. Hammons
+//
+
 #include "eeprom.h"
 
 #define eeprom_LOG
@@ -41,388 +49,279 @@ uint16 jerry_ee_direct_jump = 0;
 FILE * jerry_ee_fp;
 extern char * jaguar_boot_dir;
 
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 void eeprom_init(void)
 {
-       static char eeprom_filename[256];
-       sprintf(eeprom_filename,"%s\\%s%.8x.eep",jaguar_boot_dir,jaguar_eeproms_path,jaguar_mainRom_crc32);
-       jerry_ee_fp=fopen(eeprom_filename,"rb");
+       static char eeprom_filename[1024];
+
+       sprintf(eeprom_filename, "%s\\%s%08X.eep", jaguar_boot_dir, jaguar_eeproms_path, (unsigned int)jaguar_mainRom_crc32);
+       jerry_ee_fp = fopen(eeprom_filename, "rb");
        if (jerry_ee_fp)
        {
-               fread(eeprom_ram,1,128,jerry_ee_fp);
+               fread(eeprom_ram, 1, 128, jerry_ee_fp);
                fclose(jerry_ee_fp);
-               fprintf(log_get(),"eeprom: loaded from %s\n",eeprom_filename);
-               jerry_ee_fp=fopen(eeprom_filename,"wrb");
+               fprintf(log_get(), "eeprom: loaded from %s\n", eeprom_filename);
+               jerry_ee_fp = fopen(eeprom_filename, "wrb");
        }
        else
        {
-               fprintf(log_get(),"eeprom: creating %s\n",eeprom_filename);
-               jerry_ee_fp=fopen(eeprom_filename,"wb");
-               if (jerry_ee_fp==NULL)
-                       fprintf(log_get(),"eeprom: could not open/create %s\n",eeprom_filename);
+               fprintf(log_get(), "eeprom: creating %s\n", eeprom_filename);
+               jerry_ee_fp = fopen(eeprom_filename, "wb");
+               if (jerry_ee_fp == NULL)
+                       fprintf(log_get(), "EEPROM: Could not open/create %s\n", eeprom_filename);
        }
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 void eeprom_reset(void)
 {
-       if (jerry_ee_fp==NULL)
-               memset(eeprom_ram,0xff,64*2);
+       if (jerry_ee_fp == NULL)
+               memset(eeprom_ram, 0xFF, 64 * sizeof(uint16));
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 void eeprom_done(void)
 {
        if (jerry_ee_fp)
        {
-               fwrite(eeprom_ram,1,128,jerry_ee_fp);
+               fwrite(eeprom_ram, 1, 128, jerry_ee_fp);
                fclose(jerry_ee_fp);
        }
        else
                fprintf(log_get(),"eeprom: not saved\n");
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 void eeprom_byte_write(uint32 offset, uint8 data)
 {
        switch (offset)
        {
-       case 0xf14001: break;
-       case 0xf14801: eeprom_set_di(data&0x01); break;
-       case 0xf15001: eeprom_set_cs(1); break;
+       case 0xF14001:
+               break;
+       case 0xF14801:
+               eeprom_set_di(data & 0x01);
+               break;
+       case 0xF15001:
+               eeprom_set_cs(1);
+               break;
 //     default: fprintf(log_get(),"eeprom: unmapped 0x%.8x\n",offset); break;
        }
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 void eeprom_word_write(uint32 offset, uint16 data)
 {
-       eeprom_byte_write(offset+0,(data>>8)&0xff);
-       eeprom_byte_write(offset+1,(data&0xff));
+       eeprom_byte_write(offset+0, (data >> 8) & 0xFF);
+       eeprom_byte_write(offset+1, data & 0xFF);
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 uint8 eeprom_byte_read(uint32 offset)
 {
        switch (offset)
        {
-       case 0xf14001: return(eeprom_get_do());  break;
-       case 0xf14801: break;
-       case 0xf15001: eeprom_set_cs(1); break;
+       case 0xF14001:
+               return eeprom_get_do();
+       case 0xF14801:
+               break;
+       case 0xF15001:
+               eeprom_set_cs(1);
+               break;
 //     default: fprintf(log_get(),"eeprom: unmapped 0x%.8x\n",offset); break;
        }
-       return(0x00);
+
+       return 0x00;
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 uint16 eeprom_word_read(uint32 offset)
 {
-       uint16 data=eeprom_byte_read(offset+0);
-       data<<=8;
-       data|=eeprom_byte_read(offset+1);
-       return(data);
+       return ((uint16)eeprom_byte_read(offset+0) << 8) | eeprom_byte_read(offset+1);
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 void eeprom_set_di(uint32 data)
 {
 //     fprintf(log_get(),"eeprom: di=%i\n",data);
 //     fprintf(log_get(),"eeprom: state %i\n",jerry_ee_state);
        switch (jerry_ee_state)
        {
-       case EE_STATE_START: { 
-                                                       jerry_ee_state=EE_STATE_OP_A; 
-                                                       break;
-                                                }
-       case EE_STATE_OP_A:  { 
-                                                       jerry_ee_op=(data<<1); 
-                                                       jerry_ee_state=EE_STATE_OP_B; 
-                                                       break;
-                                                }
-       case EE_STATE_OP_B:  {
-                                                       jerry_ee_op|=data; 
-                                                       jerry_ee_direct_jump=0;
-//                                                     fprintf(log_get(),"eeprom: opcode %i\n",jerry_ee_op);
-                                                       switch (jerry_ee_op)
-                                                       {
-                                                       case 0: jerry_ee_state=EE_STATE_0; break;
-                                                       case 1: jerry_ee_state=EE_STATE_1; break;
-                                                       case 2: jerry_ee_state=EE_STATE_2; break;
-                                                       case 3: jerry_ee_state=EE_STATE_3; break;
-                                                       }
-                                                       eeprom_set_di(data);
-                                                       break;
-                                                }
-       case EE_STATE_0:        {
-                                                       jerry_ee_rstate=EE_STATE_0_0;
-                                                       jerry_ee_state=EE_READ_ADDRESS;
-                                                       jerry_ee_direct_jump=1;
-                                                       jerry_ee_address_cnt=6;
-                                                       jerry_ee_address_data=0;
-                                                       break;
-                                               }
-       case EE_STATE_0_0:      {
-                                                       switch ((jerry_ee_address_data>>4)&0x03)
-                                                       {
-                                                       case 0: jerry_ee_state=EE_STATE_0_0_0; break;
-                                                       case 1: jerry_ee_state=EE_STATE_0_0_1; break;
-                                                       case 2: jerry_ee_state=EE_STATE_0_0_2; break;
-                                                       case 3: jerry_ee_state=EE_STATE_0_0_3; break;
-                                                       }
-                                                       eeprom_set_di(data);
-                                                       break;
-                                               }
-       case EE_STATE_0_0_0:{
-                                                       // writes disable
-                                                       // fprintf(log_get(),"eeprom: read only\n");
-                                                       jerry_writes_enabled=0;
-                                                       jerry_ee_state=EE_STATE_START;
-                                                       break;
-                                               }
-       case EE_STATE_0_0_1:{
-                                                       // writes all
-                                                       jerry_ee_rstate=EE_STATE_0_0_1_0;
-                                                       jerry_ee_state=EE_READ_DATA;
-                                                       jerry_ee_data_cnt=16;
-                                                       jerry_ee_data=0;
-                                                       jerry_ee_direct_jump=1;
-                                                       break;
-                                               }
-       case EE_STATE_0_0_1_0:{
-                                                       // fprintf(log_get(),"eeprom: filling eeprom with 0x%.4x\n",data);
-                                                       if (jerry_writes_enabled)
-                                                       {
-                                                               for (int i=0;i<64;i++)
-                                                                       eeprom_ram[i]=jerry_ee_data;
-                                                       }
-                                                       //else 
-                                                       //      fprintf(log_get(),"eeprom: not writing because read only\n");
-                                                       jerry_ee_state=EE_STATE_BUSY;
-                                                       break;
-                                                 }
-       case EE_STATE_0_0_2:{
-                                                       // erase all
-                                                       //fprintf(log_get(),"eeprom: erasing eeprom\n");
-                                                       if (jerry_writes_enabled)
-                                                       {
-                                                               for (int i=0;i<64;i++)
-                                                                       eeprom_ram[i]=0xffff;
-                                                       }
-                                                       jerry_ee_state=EE_STATE_BUSY;
-                                                       break;
-                                               }
-       case EE_STATE_0_0_3:{
-                                                       // writes enable
-                                                       //fprintf(log_get(),"eeprom: read/write\n");
-                                                       jerry_writes_enabled=1;
-                                                       jerry_ee_state=EE_STATE_START;
-                                                       break;
-                                               }
-       case EE_STATE_1:        {
-                                                       jerry_ee_rstate=EE_STATE_1_0;
-                                                       jerry_ee_state=EE_READ_ADDRESS;
-                                                       jerry_ee_address_cnt=6;
-                                                       jerry_ee_address_data=0;
-                                                       jerry_ee_direct_jump=1;
-                                                       break;
-                                               }
-       case EE_STATE_1_0:      {
-                                                       jerry_ee_rstate=EE_STATE_1_1;
-                                                       jerry_ee_state=EE_READ_DATA;
-                                                       jerry_ee_data_cnt=16;
-                                                       jerry_ee_data=0;
-                                                       jerry_ee_direct_jump=1;
-                                                       break;
-                                               }
-       case EE_STATE_1_1:      {
-                                                       //fprintf(log_get(),"eeprom: writing 0x%.4x at 0x%.2x\n",jerry_ee_data,jerry_ee_address_data);
-                                                       if (jerry_writes_enabled)
-                                                               eeprom_ram[jerry_ee_address_data]=jerry_ee_data;
-                                                       jerry_ee_state=EE_STATE_BUSY;
-                                                       break;
-                                               }
-       case EE_STATE_2:        {
-                                                       jerry_ee_rstate=EE_STATE_2_0;
-                                                       jerry_ee_state=EE_READ_ADDRESS;
-                                                       jerry_ee_address_cnt=6;
-                                                       jerry_ee_address_data=0;
-                                                       jerry_ee_data_cnt=16;
-                                                       jerry_ee_data=0;
-                                                       break;
-                                               }
-       case EE_STATE_3:        {
-                                                       jerry_ee_rstate=EE_STATE_3_0;
-                                                       jerry_ee_state=EE_READ_ADDRESS;
-                                                       jerry_ee_address_cnt=6;
-                                                       jerry_ee_address_data=0;
-                                                       jerry_ee_direct_jump=1;
-                                                       break;
-                                               }
-       case EE_STATE_3_0:      {
-                                                       //fprintf(log_get(),"eeprom: erasing 0x%.2x\n",jerry_ee_address_data);
-                                                       if (jerry_writes_enabled)
-                                                               eeprom_ram[jerry_ee_address_data]=0xffff;
-                                                       jerry_ee_state=EE_STATE_BUSY;
-                                                       break;
-                                               }
+       case EE_STATE_START:
+               jerry_ee_state = EE_STATE_OP_A;
+               break;
+       case EE_STATE_OP_A:
+               jerry_ee_op = (data << 1);
+               jerry_ee_state = EE_STATE_OP_B;
+               break;
+       case EE_STATE_OP_B:
+               jerry_ee_op |= data;
+               jerry_ee_direct_jump = 0;
+//             fprintf(log_get(),"eeprom: opcode %i\n",jerry_ee_op);
+               switch (jerry_ee_op)
+               {
+               case 0: jerry_ee_state = EE_STATE_0; break;
+               case 1: jerry_ee_state = EE_STATE_1; break;
+               case 2: jerry_ee_state = EE_STATE_2; break;
+               case 3: jerry_ee_state = EE_STATE_3; break;
+               }
+               eeprom_set_di(data);
+               break;
+       case EE_STATE_0:
+               jerry_ee_rstate = EE_STATE_0_0;
+               jerry_ee_state = EE_READ_ADDRESS;
+               jerry_ee_direct_jump = 1;
+               jerry_ee_address_cnt = 6;
+               jerry_ee_address_data = 0;
+               break;
+       case EE_STATE_0_0:
+               switch ((jerry_ee_address_data >> 4) & 0x03)
+               {
+               case 0: jerry_ee_state=EE_STATE_0_0_0; break;
+               case 1: jerry_ee_state=EE_STATE_0_0_1; break;
+               case 2: jerry_ee_state=EE_STATE_0_0_2; break;
+               case 3: jerry_ee_state=EE_STATE_0_0_3; break;
+               }
+               eeprom_set_di(data);
+               break;
+       case EE_STATE_0_0_0:
+               // writes disable
+               // fprintf(log_get(),"eeprom: read only\n");
+               jerry_writes_enabled = 0;
+               jerry_ee_state = EE_STATE_START;
+               break;
+       case EE_STATE_0_0_1:
+               // writes all
+               jerry_ee_rstate = EE_STATE_0_0_1_0;
+               jerry_ee_state = EE_READ_DATA;
+               jerry_ee_data_cnt = 16;
+               jerry_ee_data = 0;
+               jerry_ee_direct_jump = 1;
+               break;
+       case EE_STATE_0_0_1_0:
+               // fprintf(log_get(),"eeprom: filling eeprom with 0x%.4x\n",data);
+               if (jerry_writes_enabled)
+                       for(int i=0; i<64; i++)
+                               eeprom_ram[i] = jerry_ee_data;
+               //else 
+               //      fprintf(log_get(),"eeprom: not writing because read only\n");
+               jerry_ee_state = EE_STATE_BUSY;
+               break;
+       case EE_STATE_0_0_2:
+               // erase all
+               //fprintf(log_get(),"eeprom: erasing eeprom\n");
+               if (jerry_writes_enabled)
+                       for(int i=0; i<64; i++)
+                               eeprom_ram[i] = 0xFFFF;
+
+               jerry_ee_state=EE_STATE_BUSY;
+               break;
+       case EE_STATE_0_0_3:
+               // writes enable
+               //fprintf(log_get(),"eeprom: read/write\n");
+               jerry_writes_enabled = 1;
+               jerry_ee_state = EE_STATE_START;
+               break;
+       case EE_STATE_1:
+               jerry_ee_rstate = EE_STATE_1_0;
+               jerry_ee_state = EE_READ_ADDRESS;
+               jerry_ee_address_cnt = 6;
+               jerry_ee_address_data = 0;
+               jerry_ee_direct_jump = 1;
+               break;
+       case EE_STATE_1_0:
+               jerry_ee_rstate = EE_STATE_1_1;
+               jerry_ee_state = EE_READ_DATA;
+               jerry_ee_data_cnt = 16;
+               jerry_ee_data = 0;
+               jerry_ee_direct_jump = 1;
+               break;
+       case EE_STATE_1_1:
+               //fprintf(log_get(),"eeprom: writing 0x%.4x at 0x%.2x\n",jerry_ee_data,jerry_ee_address_data);
+               if (jerry_writes_enabled)
+                       eeprom_ram[jerry_ee_address_data] = jerry_ee_data;
+               jerry_ee_state = EE_STATE_BUSY;
+               break;
+       case EE_STATE_2:
+               jerry_ee_rstate = EE_STATE_2_0;
+               jerry_ee_state = EE_READ_ADDRESS;
+               jerry_ee_address_cnt = 6;
+               jerry_ee_address_data = 0;
+               jerry_ee_data_cnt = 16;
+               jerry_ee_data = 0;
+               break;
+       case EE_STATE_3:
+               jerry_ee_rstate = EE_STATE_3_0;
+               jerry_ee_state = EE_READ_ADDRESS;
+               jerry_ee_address_cnt = 6;
+               jerry_ee_address_data = 0;
+               jerry_ee_direct_jump = 1;
+               break;
+       case EE_STATE_3_0:
+               //fprintf(log_get(),"eeprom: erasing 0x%.2x\n",jerry_ee_address_data);
+               if (jerry_writes_enabled)
+                       eeprom_ram[jerry_ee_address_data] = 0xFFFF;
+               jerry_ee_state = EE_STATE_BUSY;
+               break;
        case EE_READ_DATA: 
-                                               {
-                                                       //fprintf(log_get(),"eeprom:\t\t\t%i bit %i\n",data,jerry_ee_data_cnt-1);
-                                                       jerry_ee_data<<=1;
-                                                       jerry_ee_data|=data;
-                                                       jerry_ee_data_cnt--;
-                                                       if (!jerry_ee_data_cnt)
-                                                       {
-                                                               jerry_ee_state=jerry_ee_rstate;
-                                                               if (jerry_ee_direct_jump)
-                                                                       eeprom_set_di(data);
-                                                       }
-                                                       break;
-                                               }
+               //fprintf(log_get(),"eeprom:\t\t\t%i bit %i\n",data,jerry_ee_data_cnt-1);
+               jerry_ee_data <<= 1;
+               jerry_ee_data |= data;
+               jerry_ee_data_cnt--;
+               if (!jerry_ee_data_cnt)
+               {
+                       jerry_ee_state = jerry_ee_rstate;
+                       if (jerry_ee_direct_jump)
+                               eeprom_set_di(data);
+               }
+               break;
        case EE_READ_ADDRESS: 
-                                               {
-                                                       jerry_ee_address_data<<=1;
-                                                       jerry_ee_address_data|=data;
-                                                       jerry_ee_address_cnt--;
-//                                                     fprintf(log_get(),"eeprom:\t%i bits remaining\n",jerry_ee_address_cnt);
-                                                       if (!jerry_ee_address_cnt)
-                                                       {
-                                                               jerry_ee_state=jerry_ee_rstate;
-                                                               //fprintf(log_get(),"eeprom:\t\tread address 0x%.2x\n",jerry_ee_address_data);
-                                                               if (jerry_ee_direct_jump)
-                                                                       eeprom_set_di(data);
-                                                       }
-                                                       break;
-                                               }
-       default:                        { 
-                                                       jerry_ee_state=EE_STATE_OP_A; 
-                                                       break;
-                                                }
-                                               
+               jerry_ee_address_data <<= 1;
+               jerry_ee_address_data |= data;
+               jerry_ee_address_cnt--;
+//             fprintf(log_get(),"eeprom:\t%i bits remaining\n",jerry_ee_address_cnt);
+               if (!jerry_ee_address_cnt)
+               {
+                       jerry_ee_state = jerry_ee_rstate;
+                       //fprintf(log_get(),"eeprom:\t\tread address 0x%.2x\n",jerry_ee_address_data);
+                       if (jerry_ee_direct_jump)
+                               eeprom_set_di(data);
+               }
+               break;
+       default:
+               jerry_ee_state = EE_STATE_OP_A; 
        }
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 void eeprom_set_cs(uint32 state)
 {
 //     fprintf(log_get(),"eeprom: cs=%i\n",state);
-       jerry_ee_state=EE_STATE_START;
-       jerry_ee_op=0;
-       jerry_ee_rstate=0;
-       jerry_ee_address_data=0;
-       jerry_ee_address_cnt=6;
-       jerry_ee_data=0;
-       jerry_ee_data_cnt=16;
-       jerry_writes_enabled=1;
+       jerry_ee_state = EE_STATE_START;
+       jerry_ee_op = 0;
+       jerry_ee_rstate = 0;
+       jerry_ee_address_data = 0;
+       jerry_ee_address_cnt = 6;
+       jerry_ee_data = 0;
+       jerry_ee_data_cnt = 16;
+       jerry_writes_enabled = 1;
 }
-//////////////////////////////////////////////////////////////////////////////
-//
-//////////////////////////////////////////////////////////////////////////////
-//
-//
-//
-//
-//
-//
-//////////////////////////////////////////////////////////////////////////////
+
 uint32 eeprom_get_do(void)
 {
-       uint16 data=1;
+       uint16 data = 1;
+
        switch (jerry_ee_state)
        {
-       case EE_STATE_START: {
-                                                       data=1;
-                                                       break;
-                                                }
-       case EE_STATE_BUSY: {
-                                                       jerry_ee_state=EE_STATE_START;
-                                                       data=0;
-                                                       break;
-                                                }
-       case EE_STATE_2_0:      {
-                                                       jerry_ee_data_cnt--;
-                                                       data=((eeprom_ram[jerry_ee_address_data]&(1<<jerry_ee_data_cnt))>>jerry_ee_data_cnt);
-                                                       if (!jerry_ee_data_cnt)
-                                                       {
-                                                               //fprintf(log_get(),"eeprom: read 0x%.4x at 0x%.2x cpu %i pc=0x%.8x\n",eeprom_ram[jerry_ee_address_data],jerry_ee_address_data,jaguar_cpu_in_exec,s68000readPC());
-                                                               jerry_ee_state=EE_STATE_START;
-                                                       }
-                                                       break;
-                                               }
+       case EE_STATE_START:
+               data = 1;
+               break;
+       case EE_STATE_BUSY:
+               jerry_ee_state = EE_STATE_START;
+               data = 0;
+               break;
+       case EE_STATE_2_0:
+               jerry_ee_data_cnt--;
+               data = (eeprom_ram[jerry_ee_address_data] & (1 << jerry_ee_data_cnt)) >> jerry_ee_data_cnt;
+               if (!jerry_ee_data_cnt)
+               {
+                       //fprintf(log_get(),"eeprom: read 0x%.4x at 0x%.2x cpu %i pc=0x%.8x\n",eeprom_ram[jerry_ee_address_data],jerry_ee_address_data,jaguar_cpu_in_exec,s68000readPC());
+                       jerry_ee_state = EE_STATE_START;
+               }
+               break;
        }
+
 //     fprintf(log_get(),"eeprom: do=%i\n",data);
-       return(data);
+       return data;
 }