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