Ejemplo n.º 1
0
        void SetCpu(CpuChangedEventArgs args)
        {
            if (args.Line.Operand.EnclosedInQuotes() == false &&
                !args.Line.SourceString.Equals(ConstStrings.COMMANDLINE_ARG))
            {
                Controller.Log.LogEntry(args.Line, ErrorStrings.QuoteStringNotEnclosed);
                return;
            }
            var cpu = args.Line.Operand.Trim('"');

            if (!cpu.Equals("6502") && !cpu.Equals("65C02") && !cpu.Equals("65816") && !cpu.Equals("6502i"))
            {
                var error = string.Format("Invalid CPU '{0}' specified", cpu);
                if (args.Line.SourceString.Equals(ConstStrings.COMMANDLINE_ARG))
                {
                    throw new Exception(string.Format(error));
                }

                Controller.Log.LogEntry(args.Line, error);
                return;
            }
            _cpu = cpu;

            switch (_cpu)
            {
            case "65816":
                _filteredOpcodes = _opcodes.Where(o => o.Value.CPU.Equals("6502") || o.Value.CPU.Equals("65C02") || o.Value.CPU.Equals("65816")).ToDictionary(k => k.Key, k => k.Value, Controller.Options.StringComparar);
                _filteredOpcodes.Add("stp", new Instruction {
                    CPU = "65816", Size = 1, Opcode = 0xdb
                });
                break;

            case "65C02":
                _filteredOpcodes = _opcodes.Where(o => o.Value.CPU.Equals("6502") || o.Value.CPU.Equals("65C02")).ToDictionary(k => k.Key, k => k.Value, Controller.Options.StringComparar);
                break;

            case "6502i":
                _filteredOpcodes = _opcodes.Where(o => o.Value.CPU.Equals("6502") || o.Value.CPU.Equals("6502i")).ToDictionary(k => k.Key, k => k.Value, Controller.Options.StringComparar);
                break;

            case "6502":
                _filteredOpcodes = _opcodes.Where(o => o.Value.CPU.Equals("6502")).ToDictionary(k => k.Key, k => k.Value, Controller.Options.StringComparar);
                break;

            default:
                break;
            }

            if (_m16)
            {
                SetImmediateA(3);
            }
            if (_x16)
            {
                SetImmediateXY(3);
            }
        }
Ejemplo n.º 2
0
        void SetCpu(CpuChangedEventArgs args)
        {
            if (args.Line.Operand.EnclosedInQuotes() == false &&
                !args.Line.SourceString.Equals(ConstStrings.COMMANDLINE_ARG))
            {
                Assembler.Log.LogEntry(args.Line, ErrorStrings.QuoteStringNotEnclosed);
                return;
            }
            var cpu = args.Line.Operand.Trim('"');

            if (!SupportedCPUs.Contains(cpu))
            {
                var error = string.Format("Invalid CPU '{0}' specified", cpu);
                if (args.Line.SourceString.Equals(ConstStrings.COMMANDLINE_ARG))
                {
                    throw new Exception(string.Format(error));
                }

                Assembler.Log.LogEntry(args.Line, error);
                return;
            }
            _cpu = cpu;

            switch (_cpu)
            {
            case "65816":
                _filteredOpcodes = _opcodes6502.Concat(_opcodes65C02)
                                   .Concat(_opcodes65816)
                                   .ToDictionary(k => k.Key, k => k.Value, Assembler.Options.StringComparar);
                break;

            case "65CE02":
                _filteredOpcodes = _opcodes6502.Where(o => (o.Value.Opcode & 0x1f) != 0x10)     // exclude 6502 branch instructions
                                   .Concat(_opcodes65C02.Where(o => o.Value.Opcode != 0x80 && (o.Value.Opcode & 0x0f) != 0x02))
                                   .Concat(_opcodesR65C02)
                                   .Concat(_opcodes65CE02)
                                   .ToDictionary(k => k.Key, k => k.Value, Assembler.Options.StringComparar);
                break;

            case "R65C02":
                _filteredOpcodes = _opcodes6502.Concat(_opcodes65C02)
                                   .Concat(_opcodesR65C02)
                                   .ToDictionary(k => k.Key, k => k.Value, Assembler.Options.StringComparar);
                break;

            case "65C02":
                _filteredOpcodes = _opcodes6502.Concat(_opcodes65C02)
                                   .ToDictionary(k => k.Key, k => k.Value, Assembler.Options.StringComparar);
                break;

            case "6502i":
                _filteredOpcodes = _opcodes6502.Concat(_opcodes6502i)
                                   .ToDictionary(k => k.Key, k => k.Value, Assembler.Options.StringComparar);
                break;

            default:
                _filteredOpcodes = new OpcodeTable(_opcodes6502, Assembler.Options.StringComparar);
                break;
            }

            if (_m16)
            {
                SetImmediateA(3);
            }
            if (_x16)
            {
                SetImmediateXY(3);
            }
        }