Beispiel #1
0
        private void RiseX24C01(int bit)
        {
            switch (mode)
            {
            case EpromMode.Addressing:

                if (cbit < 7)
                {
                    caddress &= ~(1 << cbit);
                    caddress |= bit << cbit++;
                }
                else if (cbit < 8)
                {
                    cbit = 8;

                    if (bit != 0)
                    {
                        nextmode = EpromMode.Read;
                        cdata    = data[caddress];
                    }
                    else
                    {
                        nextmode = EpromMode.Write;
                    }
                }
                break;

            case EpromMode.Ack:

                output = 0x00;
                break;

            case EpromMode.Read:

                if (cbit < 8)
                {
                    output = (cdata & 1 << cbit++) != 0 ? 0x10 : 0x00;
                }

                break;

            case EpromMode.Write:

                if (cbit < 8)
                {
                    cdata &= ~(1 << cbit);
                    cdata |= bit << cbit++;
                }
                break;

            case EpromMode.AckWait:

                if (bit == 0)
                {
                    nextmode = EpromMode.Idle;
                }

                break;
            }
        }
Beispiel #2
0
 public void HardReset()
 {
     pscl = false;
     psda = false;
     mode = EpromMode.Idle;
     nextmode = EpromMode.Idle;
     cbit = 0;
     caddress = 0;
     cdata = 0;
     isRead = false;
     output = 0x10;
 }
Beispiel #3
0
 public void HardReset()
 {
     pscl     = false;
     psda     = false;
     mode     = EpromMode.Idle;
     nextmode = EpromMode.Idle;
     cbit     = 0;
     caddress = 0;
     cdata    = 0;
     isRead   = false;
     output   = 0x10;
 }
Beispiel #4
0
 public void LoadState(System.IO.BinaryReader stream)
 {
     stream.Read(data, 0, data.Length);
     mode     = (EpromMode)stream.ReadInt32();
     nextmode = (EpromMode)stream.ReadInt32();
     psda     = stream.ReadBoolean();
     pscl     = stream.ReadBoolean();
     output   = stream.ReadInt32();
     cbit     = stream.ReadInt32();
     caddress = stream.ReadInt32();
     cdata    = stream.ReadInt32();
     isRead   = stream.ReadBoolean();
 }
Beispiel #5
0
        private void RiseX24C02(int bit)
        {
            switch (mode)
            {
            case EpromMode.Data:
                if (cbit < 8)
                {
                    cdata &= ~(1 << (7 - cbit));
                    cdata |= bit << (7 - cbit++);
                }
                break;

            case EpromMode.Addressing:
                if (cbit < 8)
                {
                    caddress &= ~(1 << (7 - cbit));
                    caddress |= bit << (7 - cbit++);
                }
                break;

            case EpromMode.Read:
                if (cbit < 8)
                {
                    output = (cdata & 1 << (7 - cbit++)) != 0 ? 0x10 : 0x00;
                }
                break;

            case EpromMode.Write:
                if (cbit < 8)
                {
                    cdata &= ~(1 << (7 - cbit));
                    cdata |= bit << (7 - cbit++);
                }
                break;

            case EpromMode.NotAck: output = 0x10; break;

            case EpromMode.Ack: output = 0x00; break;

            case EpromMode.AckWait:
                if (bit == 0)
                {
                    nextmode = EpromMode.Read;
                    cdata    = data[caddress];
                }
                break;
            }
        }
Beispiel #6
0
        private void Start()
        {
            switch (device)
            {
            case EpromDevice.X24C01:
                mode     = EpromMode.Addressing;
                cbit     = 0;
                caddress = 0;
                output   = 0x10;
                break;

            case EpromDevice.X24C02:
                mode   = EpromMode.Data;
                cbit   = 0;
                output = 0x10;
                break;
            }
        }
Beispiel #7
0
        private void FallX24C01()
        {
            switch (mode)
            {
            case EpromMode.Addressing:

                if (cbit == 8)
                {
                    mode   = EpromMode.Ack;
                    output = 0x10;
                }
                break;

            case EpromMode.Ack:

                mode   = nextmode;
                cbit   = 0;
                output = 0x10;
                break;

            case EpromMode.Read:

                if (cbit == 8)
                {
                    mode     = EpromMode.AckWait;
                    caddress = (caddress + 1) & 0x7F;
                }
                break;

            case EpromMode.Write:

                if (cbit == 8)
                {
                    mode           = EpromMode.Ack;
                    nextmode       = EpromMode.Idle;
                    data[caddress] = (byte)cdata;
                    caddress       = (caddress + 1) & 0x7F;
                }
                break;
            }
        }
Beispiel #8
0
 public void LoadState(System.IO.BinaryReader stream)
 {
     stream.Read(data, 0, data.Length);
     mode = (EpromMode)stream.ReadInt32();
     nextmode = (EpromMode)stream.ReadInt32();
     psda = stream.ReadBoolean();
     pscl = stream.ReadBoolean();
     output = stream.ReadInt32();
     cbit = stream.ReadInt32();
     caddress = stream.ReadInt32();
     cdata = stream.ReadInt32();
     isRead = stream.ReadBoolean();
 }
Beispiel #9
0
        private void FallX24C02()
        {
            switch (mode)
            {
                case EpromMode.Data:

                    if (cbit == 8)
                    {
                        if ((cdata & 0xA0) == 0xA0)
                        {
                            cbit = 0;
                            mode = EpromMode.Ack;
                            isRead = (cdata & 0x01) == 1;
                            output = 0x10;

                            if (isRead)
                            {
                                nextmode = EpromMode.Read;
                                cdata = data[caddress];
                            }
                            else
                            {
                                nextmode = EpromMode.Addressing;
                            }
                        }
                        else
                        {
                            mode = EpromMode.NotAck;
                            nextmode = EpromMode.Idle;
                            output = 0x10;
                        }
                    }
                    break;

                case EpromMode.Addressing:

                    if (cbit == 8)
                    {
                        cbit = 0;
                        mode = EpromMode.Ack;
                        nextmode = (isRead ? EpromMode.Idle : EpromMode.Write);
                        output = 0x10;
                    }
                    break;

                case EpromMode.Read:

                    if (cbit == 8)
                    {
                        mode = EpromMode.AckWait;
                        caddress = (caddress + 1) & 0xFF;
                    }
                    break;

                case EpromMode.Write:

                    if (cbit == 8)
                    {
                        cbit = 0;
                        mode = EpromMode.Ack;
                        nextmode = EpromMode.Write;
                        data[caddress] = (byte)cdata;
                        caddress = (caddress + 1) & 0xFF;
                    }
                    break;

                case EpromMode.NotAck:

                    mode = EpromMode.Idle;
                    cbit = 0;
                    output = 0x10;
                    break;

                case EpromMode.Ack:
                case EpromMode.AckWait:

                    mode = nextmode;
                    cbit = 0;
                    output = 0x10;
                    break;
            }
        }
Beispiel #10
0
        private void FallX24C01()
        {
            switch (mode)
            {
                case EpromMode.Addressing:

                    if (cbit == 8)
                    {
                        mode = EpromMode.Ack;
                        output = 0x10;
                    }
                    break;

                case EpromMode.Ack:

                    mode = nextmode;
                    cbit = 0;
                    output = 0x10;
                    break;

                case EpromMode.Read:

                    if (cbit == 8)
                    {
                        mode = EpromMode.AckWait;
                        caddress = (caddress + 1) & 0x7F;
                    }
                    break;

                case EpromMode.Write:

                    if (cbit == 8)
                    {
                        mode = EpromMode.Ack;
                        nextmode = EpromMode.Idle;
                        data[caddress] = (byte)cdata;
                        caddress = (caddress + 1) & 0x7F;
                    }
                    break;
            }
        }
Beispiel #11
0
 private void RiseX24C02(int bit)
 {
     switch (mode)
     {
         case EpromMode.Data:
             if (cbit < 8)
             {
                 cdata &= ~(1 << (7 - cbit));
                 cdata |= bit << (7 - cbit++);
             }
             break;
         case EpromMode.Addressing:
             if (cbit < 8)
             {
                 caddress &= ~(1 << (7 - cbit));
                 caddress |= bit << (7 - cbit++);
             }
             break;
         case EpromMode.Read:
             if (cbit < 8)
                 output = (cdata & 1 << (7 - cbit++)) != 0 ? 0x10 : 0x00;
             break;
         case EpromMode.Write:
             if (cbit < 8)
             {
                 cdata &= ~(1 << (7 - cbit));
                 cdata |= bit << (7 - cbit++);
             }
             break;
         case EpromMode.NotAck: output = 0x10; break;
         case EpromMode.Ack: output = 0x00; break;
         case EpromMode.AckWait:
             if (bit == 0)
             {
                 nextmode = EpromMode.Read;
                 cdata = data[caddress];
             }
             break;
     }
 }
Beispiel #12
0
        private void RiseX24C01(int bit)
        {
            switch (mode)
            {
                case EpromMode.Addressing:

                    if (cbit < 7)
                    {
                        caddress &= ~(1 << cbit);
                        caddress |= bit << cbit++;
                    }
                    else if (cbit < 8)
                    {
                        cbit = 8;

                        if (bit != 0)
                        {
                            nextmode = EpromMode.Read;
                            cdata = data[caddress];
                        }
                        else
                        {
                            nextmode = EpromMode.Write;
                        }
                    }
                    break;

                case EpromMode.Ack:

                    output = 0x00;
                    break;

                case EpromMode.Read:

                    if (cbit < 8)
                        output = (cdata & 1 << cbit++) != 0 ? 0x10 : 0x00;

                    break;

                case EpromMode.Write:

                    if (cbit < 8)
                    {
                        cdata &= ~(1 << cbit);
                        cdata |= bit << cbit++;
                    }
                    break;

                case EpromMode.AckWait:

                    if (bit == 0)
                        nextmode = EpromMode.Idle;

                    break;
            }
        }
Beispiel #13
0
 private void Stop()
 {
     mode = EpromMode.Idle;
     output = 0x10;
 }
Beispiel #14
0
 private void Start()
 {
     switch (device)
     {
         case EpromDevice.X24C01:
             mode = EpromMode.Addressing;
             cbit = 0;
             caddress = 0;
             output = 0x10;
             break;
         case EpromDevice.X24C02:
             mode = EpromMode.Data;
             cbit = 0;
             output = 0x10;
             break;
     }
 }
Beispiel #15
0
        private void FallX24C02()
        {
            switch (mode)
            {
            case EpromMode.Data:

                if (cbit == 8)
                {
                    if ((cdata & 0xA0) == 0xA0)
                    {
                        cbit   = 0;
                        mode   = EpromMode.Ack;
                        isRead = (cdata & 0x01) == 1;
                        output = 0x10;

                        if (isRead)
                        {
                            nextmode = EpromMode.Read;
                            cdata    = data[caddress];
                        }
                        else
                        {
                            nextmode = EpromMode.Addressing;
                        }
                    }
                    else
                    {
                        mode     = EpromMode.NotAck;
                        nextmode = EpromMode.Idle;
                        output   = 0x10;
                    }
                }
                break;

            case EpromMode.Addressing:

                if (cbit == 8)
                {
                    cbit     = 0;
                    mode     = EpromMode.Ack;
                    nextmode = (isRead ? EpromMode.Idle : EpromMode.Write);
                    output   = 0x10;
                }
                break;

            case EpromMode.Read:

                if (cbit == 8)
                {
                    mode     = EpromMode.AckWait;
                    caddress = (caddress + 1) & 0xFF;
                }
                break;

            case EpromMode.Write:

                if (cbit == 8)
                {
                    cbit           = 0;
                    mode           = EpromMode.Ack;
                    nextmode       = EpromMode.Write;
                    data[caddress] = (byte)cdata;
                    caddress       = (caddress + 1) & 0xFF;
                }
                break;

            case EpromMode.NotAck:

                mode   = EpromMode.Idle;
                cbit   = 0;
                output = 0x10;
                break;

            case EpromMode.Ack:
            case EpromMode.AckWait:

                mode   = nextmode;
                cbit   = 0;
                output = 0x10;
                break;
            }
        }
Beispiel #16
0
 private void Stop()
 {
     mode   = EpromMode.Idle;
     output = 0x10;
 }