Ejemplo n.º 1
0
        public static int binAddressCorrected(int bankNum, int address, ref SADBin sadBin, int addressBin)
        {
            if (sadBin == null)
            {
                return(addressBin);
            }
            if (!sadBin.isLoaded || !sadBin.isValid)
            {
                return(addressBin);
            }

            SADBank sadBank       = null;
            int     newAddressBin = 0;

            switch (bankNum)
            {
            case 8:
                sadBank = sadBin.Bank8;
                break;

            case 1:
                sadBank = sadBin.Bank1;
                break;

            case 9:
                sadBank = sadBin.Bank9;
                break;

            case 0:
                sadBank = sadBin.Bank0;
                break;
            }

            if (sadBank == null)
            {
                return(newAddressBin);
            }
            if (address < sadBank.Size)
            {
                newAddressBin = sadBank.AddressBinInt + address;
            }
            sadBank = null;
            return(newAddressBin);
        }
Ejemplo n.º 2
0
        private void Search()
        {
            if (sadBin == null)
            {
                return;
            }

            bool       invalidSignature = false;
            SortedList slResult         = new SortedList();
            string     cleanedSignature = searchTextBox.Text;

            searchTreeViewInit();

            if (cleanedSignature != null && cleanedSignature != string.Empty)
            {
                //Signature Parameters management
                while (cleanedSignature.Contains(SADDef.SignatureParamBytePrefixSuffix))
                {
                    // Parameter is always #XX, a group of 1 byte (..) is created in regular expression to get it later on
                    int startPos = -1;
                    int length   = -1;
                    startPos = cleanedSignature.IndexOf(SADDef.SignatureParamBytePrefixSuffix);
                    if (startPos <= cleanedSignature.Length - 2)
                    {
                        if (cleanedSignature.Substring(startPos + 1).Contains(SADDef.SignatureParamBytePrefixSuffix))
                        {
                            length = cleanedSignature.Substring(startPos + 1).IndexOf(SADDef.SignatureParamBytePrefixSuffix) + 2;
                        }
                    }
                    if (startPos >= 0 && length > 0)
                    {
                        string sParam = cleanedSignature.Substring(startPos, length);
                        cleanedSignature = cleanedSignature.Replace(sParam, "(..)");
                    }
                    else if (startPos > 0)
                    {
                        cleanedSignature = cleanedSignature.Replace(SADDef.SignatureParamBytePrefixSuffix, "Z");
                    }
                }

                try
                {
                    SADBank sadBank = sadBin.Bank8;
                    while (sadBank != null)
                    {
                        object[] oMatches = sadBank.getBytesFromSignature(cleanedSignature);
                        foreach (object[] oMatch in oMatches)
                        {
                            int      matchingStartAddress = (int)oMatch[0];
                            string   matchingBytes        = oMatch[1].ToString();
                            string[] matchingParams       = (string[])oMatch[2];

                            if (!slResult.ContainsKey(Tools.UniqueAddress(sadBank.Num, matchingStartAddress)))
                            {
                                slResult.Add(Tools.UniqueAddress(sadBank.Num, matchingStartAddress), new int[] { sadBank.Num, matchingStartAddress });
                            }
                        }
                        oMatches = null;

                        if (sadBank.Num == 0)
                        {
                            sadBank = null;
                        }
                        else if (sadBank.Num == 9)
                        {
                            sadBank = sadBin.Bank0;
                        }
                        else if (sadBank.Num == 1)
                        {
                            sadBank = sadBin.Bank9;
                        }
                        else if (sadBank.Num == 8)
                        {
                            sadBank = sadBin.Bank1;
                        }
                    }
                }
                catch
                {
                    invalidSignature = true;
                }
            }

            foreach (int[] arrMatches in slResult.Values)
            {
                TreeNode parentNode = searchTreeView.Nodes[arrMatches[0].ToString()];
                if (parentNode == null)
                {
                    parentNode             = new TreeNode();
                    parentNode.Name        = arrMatches[0].ToString();
                    parentNode.Text        = "Bank " + parentNode.Name;
                    parentNode.ToolTipText = parentNode.Text;
                    searchTreeView.Nodes.Add(parentNode);
                }

                string uniqueAddress = Tools.UniqueAddress(arrMatches[0], arrMatches[1]);
                if (parentNode.Nodes.ContainsKey(uniqueAddress))
                {
                    continue;
                }

                string address = string.Format("{0:x4}", SADDef.EecBankStartAddress + arrMatches[1]);

                TreeNode tnNode = new TreeNode();
                tnNode.Name        = uniqueAddress;
                tnNode.Text        = address;
                tnNode.ToolTipText = address;
                parentNode.Nodes.Add(tnNode);
            }

            searchTreeViewCount();

            if (invalidSignature)
            {
                MessageBox.Show("Signature is not valid.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }