Example #1
0
        private void table_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            int row = e.RowIndex + viewOffset;

            if (row >= Data.GetROMSize())
            {
                return;
            }
            switch (e.ColumnIndex)
            {
            case 0: e.Value = Data.GetLabel(Util.ConvertPCtoSNES(row)); break;

            case 1: e.Value = Util.NumberToBaseString(Util.ConvertPCtoSNES(row), Util.NumberBase.Hexadecimal, 6); break;

            case 2: e.Value = (char)Data.GetROMByte(row); break;

            case 3: e.Value = Util.NumberToBaseString(Data.GetROMByte(row), DisplayBase); break;

            case 4: e.Value = Util.PointToString(Data.GetInOutPoint(row)); break;

            case 5:
                int len = Manager.GetInstructionLength(row);
                if (row + len <= Data.GetROMSize())
                {
                    e.Value = Util.GetInstruction(row);
                }
                else
                {
                    e.Value = "";
                }
                break;

            case 6:
                int ia = Util.GetIntermediateAddressOrPointer(row);
                if (ia >= 0)
                {
                    e.Value = Util.NumberToBaseString(ia, Util.NumberBase.Hexadecimal, 6);
                }
                else
                {
                    e.Value = "";
                }
                break;

            case 7: e.Value = Util.TypeToString(Data.GetFlag(row)); break;

            case 8: e.Value = Util.NumberToBaseString(Data.GetDataBank(row), Util.NumberBase.Hexadecimal, 2); break;

            case 9: e.Value = Util.NumberToBaseString(Data.GetDirectPage(row), Util.NumberBase.Hexadecimal, 4); break;

            case 10: e.Value = Util.BoolToSize(Data.GetMFlag(row)); break;

            case 11: e.Value = Util.BoolToSize(Data.GetXFlag(row)); break;

            case 12: e.Value = Data.GetComment(Util.ConvertPCtoSNES(row)); break;
            }
        }
        private void buttonScan_Click(object sender, EventArgs e)
        {
            textLog.Text = "";
            int found = 0, offset = 0;

            while (found < 500 && offset < Data.GetROMSize())
            {
                Data.FlagType flag = Data.GetFlag(offset), check = flag == Data.FlagType.Opcode ? Data.FlagType.Operand : flag;
                int           step = flag == Data.FlagType.Opcode ? Manager.GetInstructionLength(offset) : Util.TypeStepSize(flag);

                if (flag == Data.FlagType.Operand)
                {
                    found++;
                    textLog.Text += string.Format("{0} (0x{1}): Operand without Opcode\r\n",
                                                  Util.NumberToBaseString(Util.ConvertPCtoSNES(offset), Util.NumberBase.Hexadecimal, 6, true),
                                                  Util.NumberToBaseString(offset, Util.NumberBase.Hexadecimal, 0));
                }
                else if (step > 1)
                {
                    for (int i = 1; i < step; i++)
                    {
                        if (Data.GetFlag(offset + i) != check)
                        {
                            found++;
                            textLog.Text += string.Format("{0} (0x{1}): {2} is not {3}\r\n",
                                                          Util.NumberToBaseString(Util.ConvertPCtoSNES(offset + i), Util.NumberBase.Hexadecimal, 6, true),
                                                          Util.NumberToBaseString(offset + i, Util.NumberBase.Hexadecimal, 0),
                                                          Util.TypeToString(Data.GetFlag(offset + i)),
                                                          Util.TypeToString(check));
                        }
                    }
                }

                offset += step;
            }

            if (found == 0)
            {
                textLog.Text = "No misaligned flags found!";
            }
        }
Example #3
0
        private static string GetLine(int offset, string special)
        {
            string line = "";

            for (int i = 0; i < list.Count; i++)
            {
                if (list[i].Item2 == int.MaxValue) // string literal
                {
                    line += list[i].Item1;
                }
                else if (special != null) // special parameter (replaces code & everything else = empty)
                {
                    line += GetParameter(offset, "%" + (list[i].Item1 == "code" ? special : "empty"), list[i].Item2);
                }
                else // normal parameter
                {
                    line += GetParameter(offset, list[i].Item1, list[i].Item2);
                }
            }

            if (special == null)
            {
                // throw out some errors if stuff looks fishy
                Data.FlagType flag = Data.GetFlag(offset), check = flag == Data.FlagType.Opcode ? Data.FlagType.Operand : flag;
                int           step = flag == Data.FlagType.Opcode ? GetLineByteLength(offset) : Util.TypeStepSize(flag), size = Data.GetROMSize();
                if (flag == Data.FlagType.Operand)
                {
                    err.WriteLine("({0}) Offset 0x{1:X}: Bytes marked as operands formatted as data.", ++errorCount, offset);
                }
                else if (step > 1)
                {
                    for (int i = 1; i < step; i++)
                    {
                        if (offset + i >= size)
                        {
                            err.WriteLine("({0}) Offset 0x{1:X}: {2} extends past the end of the ROM.", ++errorCount, offset, Util.TypeToString(check));
                            break;
                        }
                        else if (Data.GetFlag(offset + i) != check)
                        {
                            err.WriteLine("({0}) Offset 0x{1:X}: Expected {2}, but got {3} instead.", ++errorCount, offset + i, Util.TypeToString(check), Util.TypeToString(Data.GetFlag(offset + i)));
                            break;
                        }
                    }
                }
                int ia = Util.GetIntermediateAddress(offset, true);
                if (ia >= 0 && flag == Data.FlagType.Opcode && Data.GetInOutPoint(offset) == Data.InOutPoint.OutPoint && Data.GetFlag(Util.ConvertSNEStoPC(ia)) != Data.FlagType.Opcode)
                {
                    err.WriteLine("({0}) Offset 0x{1:X}: Branch or jump instruction to a non-instruction.", ++errorCount, offset);
                }
            }

            return(line);
        }