Exemple #1
0
        public byte Execute(OpCodeDefinition opCodeDefinition, IAddressingMode addressingMode, CPUMemory memory, CPURegisters registers, byte operand1, byte operand2)
        {
            var operationAddress = addressingMode.GetAddress(memory, registers, operand1, operand2, out _);
            var operationValue   = addressingMode.GetValue(memory, registers, operationAddress);

            var result = operationValue + 1;

            registers.N_NegativeFlag = (byte)((result & 0x80) >> 7);
            registers.Z_ZeroFlag     = (byte)((byte)result == 0 ? 1 : 0);

            addressingMode.SetValue(memory, registers, operationAddress, (byte)result);

            return(opCodeDefinition.ExecutionCycles);
        }
Exemple #2
0
        public byte Execute(OpCodeDefinition opCodeDefinition, IAddressingMode addressingMode, CPUMemory memory, CPURegisters registers, byte operand1, byte operand2)
        {
            var operationAddress = addressingMode.GetAddress(memory, registers, operand1, operand2, out bool pageBoundaryCrossed);
            var operationValue   = addressingMode.GetValue(memory, registers, operationAddress);

            var result = operationValue << 1 | registers.C_CarryFlag;

            registers.N_NegativeFlag = (byte)((result & 0x80) >> 7);
            registers.C_CarryFlag    = (byte)((operationValue & 0x80) >> 7);
            registers.Z_ZeroFlag     = (byte)((byte)result == 0x00 ? 1 : 0);

            addressingMode.SetValue(memory, registers, operationAddress, (byte)result);

            return((byte)(opCodeDefinition.ExecutionCycles + (opCodeDefinition.AddExecutionCycleOnPageBoundaryCross && pageBoundaryCrossed ? 1 : 0)));
        }
Exemple #3
0
        public byte Execute(OpCodeDefinition opCodeDefinition, IAddressingMode addressingMode, CPUMemory memory, CPURegisters registers, byte operand1, byte operand2)
        {
            addressingMode.SetValue(memory, registers, operand1, operand2, registers.X, out bool pageBoundaryCrossed);

            return((byte)(opCodeDefinition.ExecutionCycles + (opCodeDefinition.AddExecutionCycleOnPageBoundaryCross && pageBoundaryCrossed ? 1 : 0)));
        }