Ejemplo n.º 1
0
        // TODO: Check size of symbols (24/16/8) and use knowledge of CPU bank registers (K/DP/DB) to look at correct address
        public int ReadAddress(int index, bool readWord, OffsetRegister offset, out int address)
        {
            address = index;

            if (offset == OffsetRegister.X)
            {
                address += X;
            }
            if (offset == OffsetRegister.Y)
            {
                address += Y;
            }
            if (offset == OffsetRegister.IndirectY)
            {
                address = ReadAddress(address, true) + Y;                                                 // TODO: Page boundary crossing issue
            }
            if (offset == OffsetRegister.IndirectX)
            {
                address = ReadAddress(address + X, true);
            }

            if (address >= CpuData.Length || (readWord && address + 1 >= CpuData.Length))
            {
                return(-1);
            }
            return(CpuData[address] + (readWord ? (CpuData[address + 1] << 8) : 0));
        }
Ejemplo n.º 2
0
        public override string ToString()
        {
            var sb = new StringBuilder();

            switch (ValueType)
            {
            case OperandValueType.Byte:
                sb.Append("byte ");
                break;

            case OperandValueType.Word:
                sb.Append("word ");
                break;

            case OperandValueType.Dword:
                break;

            default:
                throw new Exception("Invalid operand value type");     // TODO
            }

            if (IsPointer)
            {
                sb.Append('[');
            }

            if (IsOffset)
            {
                sb.Append(OffsetRegister.ToString().ToLower());
                sb.Append(" + ");
            }

            if (Type >= OperandType.ImmB && Type <= OperandType.ImmD)
            {
                sb.Append(Payload);
            }
            else
            {
                sb.Append(Type.ToString().ToLower());
            }

            if (IsPointer)
            {
                sb.Append(']');
            }

            return(sb.ToString());
        }
Ejemplo n.º 3
0
 public int ReadAddress(int index, bool readWord = false, OffsetRegister offset = OffsetRegister.None)
 {
     return(ReadAddress(index, readWord, offset, out var dummy));
 }