Ejemplo n.º 1
0
        public override IEnumerable <TmsCommand> Translate(Z80T crementCommand)
        {
            var memoryOperand = new LabeledAddressTmsOperand(_labelHighlighter.OneByteLabel);

            if (MustUnifyRegisterPairs(crementCommand.Operand, out var lowByteRegister, out var copyToOperand, out var highByteRegister))
            {
                if (crementCommand.Operand.OperandSize == Z80AssemblyParsing.OperandSize.EightBit)
                {
                    yield return(new MoveByteCommand(crementCommand, lowByteRegister, copyToOperand));

                    yield return((MathByteT)Activator.CreateInstance(typeof(MathByteT), new object[] { crementCommand, memoryOperand, highByteRegister }));
                }
                else
                {
                    SetLabels();
                    yield return((MathByteT)Activator.CreateInstance(typeof(MathByteT), new object[] { crementCommand, memoryOperand, lowByteRegister }));

                    yield return(new JumpIfNoCarryCommand(crementCommand, new LabeledAddressWithoutAtTmsOperand(JumpLabel1)));

                    yield return((MathByteT)Activator.CreateInstance(typeof(MathByteT), new object[] { crementCommand, memoryOperand, highByteRegister }));

                    yield return(new JumpCommand(crementCommand, new LabeledAddressWithoutAtTmsOperand(JumpLabel2)));

                    yield return(new MoveByteCommand(crementCommand, highByteRegister, highByteRegister)
                    {
                        Label = JumpLabel1
                    });

                    yield return(new BlankLineInTms(crementCommand)
                    {
                        Label = JumpLabel2
                    });
                }
            }
Ejemplo n.º 2
0
        public override IEnumerable <TmsCommand> Translate(Z80AssemblyParsing.Commands.NegateCommand z80Command)
        {
            var negOneByte         = new LabeledAddressTmsOperand(_labelHighlighter.NegOneByteLabel);
            var accumulatorLowByte = new IndirectRegisterTmsOperand(WorkspaceRegister.R12);
            var accumulatorOperand = new RegisterTmsOperand(_registerMap[Z80AssemblyParsing.Register.A]);

            yield return(new MoveByteCommand(z80Command, negOneByte, accumulatorLowByte));

            yield return(new NegateCommand(z80Command, accumulatorOperand));
        }
Ejemplo n.º 3
0
        public override IEnumerable <TmsCommand> Translate(T logicCommand)
        {
            var zeroByte           = new LabeledAddressTmsOperand(_labelHighlighter.ZeroByteLabel);
            var accumulatorLowByte = new IndirectRegisterTmsOperand(WorkspaceRegister.R12);
            var accumulatorOperand = new RegisterTmsOperand(_registerMap[Z80AssemblyParsing.Register.A]);

            if (logicCommand.Operand is Z80AssemblyParsing.Operands.IndirectRegisterOperand &&
                MustUnifyRegisterPairs(logicCommand.Operand, out var copyFromOperand, out var copyToOperand, out var unifiedOperand))
            {
                yield return(new MoveByteCommand(logicCommand, copyFromOperand, copyToOperand));

                yield return(GetEquivCommand <TmsEquivCommand>(logicCommand, unifiedOperand, accumulatorOperand));
            }