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