1 ////////////////////////////////////////////////////////////////////////////// 2 // Lynx 3wire EEPROM class header file // 3 ////////////////////////////////////////////////////////////////////////////// 4 5 6 #ifndef EEPROM_H 7 #define EEPROM_H 8 9 #ifndef __min 10 #define __min(a,b) \ 11 ({ __typeof__ (a) _a = (a); \ 12 __typeof__ (b) _b = (b); \ 13 _a > _b ? _b : _a; }) 14 #endif 15 16 enum {EE_NONE=0, EE_START, EE_DATA, EE_BUSY, EE_WAIT}; 17 18 class CEEPROM : public CLynxBase 19 { 20 // Function members 21 22 public: 23 CEEPROM(); 24 ~CEEPROM(); 25 26 bool ContextSave(LSS_FILE *fp); 27 bool ContextLoad(LSS_FILE *fp); 28 void Reset(void); 29 Available(void)30 bool Available(void){ return type!=0;}; 31 void ProcessEepromIO(UBYTE iodir,UBYTE iodat); 32 void ProcessEepromCounter(UWORD cnt); 33 void ProcessEepromBusy(void); OutputBit(void)34 bool OutputBit(void) 35 { 36 return mAUDIN_ext; 37 }; 38 void SetEEPROMType(UBYTE b); 39 int Size(void); InitFrom(char * data,int count)40 void InitFrom(char *data,int count){ memcpy(romdata,data,__min(count,Size()));}; 41 Poke(ULONG addr,UBYTE data)42 void Poke(ULONG addr,UBYTE data) { }; Peek(ULONG addr)43 UBYTE Peek(ULONG addr) 44 { 45 return(0); 46 }; 47 SetFilename(char * f)48 void SetFilename(char* f){strcpy(filename,f);}; GetFilename(void)49 char* GetFilename(void){ return filename;}; 50 51 void Load(void); 52 void Save(void); 53 54 private: 55 char filename[1024]; 56 57 void UpdateEeprom(UWORD cnt); 58 UBYTE type; // 0 ... no eeprom 59 60 UWORD ADDR_MASK; 61 UBYTE CMD_BITS; 62 UBYTE ADDR_BITS; 63 ULONG DONE_MASK; 64 65 UBYTE iodir, iodat; 66 UWORD counter; 67 int busy_count; 68 int state; 69 UWORD readdata; 70 71 ULONG data; 72 UWORD romdata[1024];// 128, 256, 512, 1024 WORDS bzw 128 bytes fuer byte zugriff 73 UWORD addr; 74 int sendbits; 75 bool readonly; 76 77 bool mAUDIN_ext;// OUTPUT 78 79 public: 80 }; 81 82 #endif 83