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)); }
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); } }