示例#1
0
        private bool RegisterAccessWrite(RegisterAccessType type, ushort address, ushort bank, uint data, bool print)
        {
            switch (type)
            {
            case RegisterAccessType.Mac:
                if (!WriteMacRegsiter(address, (uint)data, print))
                {
                    return(false);
                }
                break;

            case RegisterAccessType.MacBank:
                if (!WriteMacRegsiterBank(address, bank, (uint)data, print))
                {
                    return(false);
                }
                break;

            case RegisterAccessType.Bypass:
                if (!WriteBypassRegsiter(address, (ushort)data, print))
                {
                    return(false);
                }
                break;

            case RegisterAccessType.OEM:
                if (!WriteOemRegsiter(address, (uint)data, print))
                {
                    return(false);
                }

                break;

            default:
                System.Diagnostics.Debug.Assert(false, "Register Access Type");
                break;
            }

            return(true);
        }
        private bool RegisterAccessWrite(RegisterAccessType type, ushort address, ushort bank, uint data, bool print)
        {
            switch (type)
            {
                case RegisterAccessType.Mac:
                    if (!WriteMacRegsiter(address, (uint)data, print))
                    {
                        return false;
                    }
                    break;

                case RegisterAccessType.MacBank:
                    if (!WriteMacRegsiterBank(address, bank, (uint)data, print))
                    {
                        return false;
                    }
                    break;

                case RegisterAccessType.Bypass:
                    if (!WriteBypassRegsiter(address, (ushort)data, print))
                    {
                        return false;
                    }
                    break;

                case RegisterAccessType.OEM:
                    if (!WriteOemRegsiter(address, (uint)data, print))
                    {
                        return false;
                    }

                    break;

                default:
                    System.Diagnostics.Debug.Assert(false, "Register Access Type");
                    break;
            }

            return true;
        }
        /*
         *****************************************************************************
         *
         * Register Access
         *
         *****************************************************************************
         */
        private bool RegisterAccessRead(RegisterAccessType type, ushort address, ushort bank, uint count, bool print)
        {
            ushort registerAddress = 0;
            ushort endAddress      = 0;
            uint   data32          = 0;
            ushort data16          = 0;

            //clark 2011.8.17. If use count 0, show error message.
            if(count == 0)
                StatusUpdate(print, string.Format("Read Fail [{0:X4}]", address), TextUpdateType.Error);

            if (ushort.MaxValue >= (uint)(address + count - 1))
            {
                //If address is 0xFFFF and count is 1. endAddress = 0xFFFF + 1. => Over flow.
                //Let explorer read 0xFFFF, The condition of For Loop is "equal", not "greater".
                endAddress = (ushort)(address + count - 1);
            }
            else
            {
                endAddress = ushort.MaxValue;
            }

            //Let explorer read 0xFFFF, The condition of For Loop is "equal", not "greater".
            switch (type)
            {
                case RegisterAccessType.Mac:
                    for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                    {
                        if (!ReadMacRegsiter(registerAddress, out data32, print))
                        {
                            return false;
                        }
                    }
                    break;

                case RegisterAccessType.MacBank:
                    for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                    {
                        RegisterInfo registerInfo;

                        if (!GetMacRegsiterInfo(registerAddress, out registerInfo))
                        {
                            return false;
                        }

                        if (registerInfo.type == RegisterType.BANKED || (count == 1))
                        {
                            if (bank == ushort.MaxValue)
                            {
                                if (!ReadMacRegsiter(registerAddress, out data32, print))
                                {
                                    return false;
                                }

                                for (ushort index = 0; index < registerInfo.bankSize; index++)
                                {
                                    if (!ReadMacRegsiterBank(registerAddress, index, out data32, print))
                                    {
                                        return false;
                                    }
                                }
                            }
                            else
                            {
                                if (!ReadMacRegsiterBank(registerAddress, (ushort)bank, out data32, print))
                                {
                                    return false;
                                }
                            }
                        }
                        else
                        {
                            if (!ReadMacRegsiter(registerAddress, out data32, print))
                            {
                                return false;
                            }
                        }
                    }
                    break;

                case RegisterAccessType.Bypass:
                    for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                    {
                        if (!ReadBypassRegsiter(registerAddress, out data16, print))
                        {
                            return false;
                        }
                    }
                    break;

                case RegisterAccessType.OEM:
                    for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                    {
                        if (!ReadOemRegsiter(registerAddress, out data32, print))
                        {
                            return false;
                        }
                    }
                    break;

                default:
                    System.Diagnostics.Debug.Assert(false, "Register Access Type");
                    break;
            }

            return true;
        }
示例#4
0
        /*
         *****************************************************************************
         *
         * Register Access
         *
         *****************************************************************************
         */

        private bool RegisterAccessRead(RegisterAccessType type, ushort address, ushort bank, uint count, bool print)
        {
            ushort registerAddress = 0;
            ushort endAddress      = 0;
            uint   data32          = 0;
            ushort data16          = 0;

            //clark 2011.8.17. If use count 0, show error message.
            if (count == 0)
            {
                StatusUpdate(print, string.Format("Read Fail [{0:X4}]", address), TextUpdateType.Error);
            }

            if (ushort.MaxValue >= (uint)(address + count - 1))
            {
                //If address is 0xFFFF and count is 1. endAddress = 0xFFFF + 1. => Over flow.
                //Let explorer read 0xFFFF, The condition of For Loop is "equal", not "greater".
                endAddress = (ushort)(address + count - 1);
            }
            else
            {
                endAddress = ushort.MaxValue;
            }

            //Let explorer read 0xFFFF, The condition of For Loop is "equal", not "greater".
            switch (type)
            {
            case RegisterAccessType.Mac:
                for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                {
                    if (!ReadMacRegsiter(registerAddress, out data32, print))
                    {
                        return(false);
                    }
                }
                break;

            case RegisterAccessType.MacBank:
                for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                {
                    RegisterInfo registerInfo;

                    if (!GetMacRegsiterInfo(registerAddress, out registerInfo))
                    {
                        return(false);
                    }

                    if (registerInfo.type == RegisterType.BANKED || (count == 1))
                    {
                        if (bank == ushort.MaxValue)
                        {
                            if (!ReadMacRegsiter(registerAddress, out data32, print))
                            {
                                return(false);
                            }

                            for (ushort index = 0; index < registerInfo.bankSize; index++)
                            {
                                if (!ReadMacRegsiterBank(registerAddress, index, out data32, print))
                                {
                                    return(false);
                                }
                            }
                        }
                        else
                        {
                            if (!ReadMacRegsiterBank(registerAddress, (ushort)bank, out data32, print))
                            {
                                return(false);
                            }
                        }
                    }
                    else
                    {
                        if (!ReadMacRegsiter(registerAddress, out data32, print))
                        {
                            return(false);
                        }
                    }
                }
                break;

            case RegisterAccessType.Bypass:
                for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                {
                    if (!ReadBypassRegsiter(registerAddress, out data16, print))
                    {
                        return(false);
                    }
                }
                break;

            case RegisterAccessType.OEM:
                for (registerAddress = address; registerAddress <= endAddress; registerAddress++)
                {
                    if (!ReadOemRegsiter(registerAddress, out data32, print))
                    {
                        return(false);
                    }
                }
                break;

            default:
                System.Diagnostics.Debug.Assert(false, "Register Access Type");
                break;
            }

            return(true);
        }