Esempio n. 1
0
    private string FormatOperandAddress(TByteSource data, int offset, Cpu65C816Constants.AddressMode mode)
    {
        var address = data.GetIntermediateAddress(offset);

        if (address < 0)
        {
            return("");
        }

        if (data is IReadOnlyLabels labelProvider)
        {
            var label = labelProvider.Labels.GetLabelName(address);
            if (label != "")
            {
                return(label);
            }
        }

        var count = BytesToShow(mode);

        if (mode is Cpu65C816Constants.AddressMode.Relative8 or Cpu65C816Constants.AddressMode.Relative16)
        {
            var romWord = data.GetRomWord(offset + 1);
            if (!romWord.HasValue)
            {
                return("");
            }

            address = (int)romWord;
        }

        address &= ~(-1 << (8 * count));
        return(Util.NumberToBaseString(address, Util.NumberBase.Hexadecimal, 2 * count, true));
    }
Esempio n. 2
0
    private static int GetInstructionLength(Cpu65C816Constants.AddressMode mode)
    {
        switch (mode)
        {
        case Cpu65C816Constants.AddressMode.Implied:
        case Cpu65C816Constants.AddressMode.Accumulator:
            return(1);

        case Cpu65C816Constants.AddressMode.Constant8:
        case Cpu65C816Constants.AddressMode.Immediate8:
        case Cpu65C816Constants.AddressMode.DirectPage:
        case Cpu65C816Constants.AddressMode.DirectPageXIndex:
        case Cpu65C816Constants.AddressMode.DirectPageYIndex:
        case Cpu65C816Constants.AddressMode.DirectPageSIndex:
        case Cpu65C816Constants.AddressMode.DirectPageIndirect:
        case Cpu65C816Constants.AddressMode.DirectPageXIndexIndirect:
        case Cpu65C816Constants.AddressMode.DirectPageIndirectYIndex:
        case Cpu65C816Constants.AddressMode.DirectPageSIndexIndirectYIndex:
        case Cpu65C816Constants.AddressMode.DirectPageLongIndirect:
        case Cpu65C816Constants.AddressMode.DirectPageLongIndirectYIndex:
        case Cpu65C816Constants.AddressMode.Relative8:
            return(2);

        case Cpu65C816Constants.AddressMode.Immediate16:
        case Cpu65C816Constants.AddressMode.Address:
        case Cpu65C816Constants.AddressMode.AddressXIndex:
        case Cpu65C816Constants.AddressMode.AddressYIndex:
        case Cpu65C816Constants.AddressMode.AddressIndirect:
        case Cpu65C816Constants.AddressMode.AddressXIndexIndirect:
        case Cpu65C816Constants.AddressMode.AddressLongIndirect:
        case Cpu65C816Constants.AddressMode.BlockMove:
        case Cpu65C816Constants.AddressMode.Relative16:
            return(3);

        case Cpu65C816Constants.AddressMode.Long:
        case Cpu65C816Constants.AddressMode.LongXIndex:
            return(4);

        default:
            return(1);
        }
    }