eeprom.h
 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(UBYTE type);
24     ~CEEPROM();
25  
26     bool ContextSave(LSS_FILE *fp);
27     bool ContextLoad(LSS_FILE *fp);
28     void Reset(void);
29  
30     bool Available(void){ return type!=0;};
31     void ProcessEepromIO(UBYTE iodir,UBYTE iodat);
32     void ProcessEepromCounter(UWORD cnt);
33     void ProcessEepromBusy(void);
34     bool OutputBit(void)
35     {
36        return mAUDIN_ext;
37     };
38     void SetEEPROMType(UBYTE b);
39     int Size(void);
40     void InitFrom(char *data,int count){ memcpy(romdata,data,__min(count,Size()));};
41  
42     void Poke(ULONG addr,UBYTE data) { };
43     UBYTE Peek(ULONG addr)
44     {
45        return(0);
46     };
47  
48     void SetFilename(char* f){strcpy(filename,f);};
49     char* GetFilename(void){ return filename;};
50  
51     void Load(void);
52     void Save(void);
53  
54  private:
55     char filename[256];
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