Ejemplo n.º 1
0
Archivo: CPU.cs Proyecto: falk/corenes
        // SBC - Subtract with Carry
        private void SBC(StepParameters parms)
        {
            var a = _a;
            var b = Memory.Read(parms.address);
            var c = _c;

            _a = (byte) (a - b - (1 - c));

            setZN(_a);

            // cast to int?
            if ((a - b - 1 - c) >= 0)
            {
                _c = 1;
            }
            else
            {
                _c = 0;
            }
            if (((a ^ b) &0x80) != 0 && ((a ^ _a) & 0x80) != 0)
            {
                _v = 1;
            } else {
                _v = 0;
            }
        }
Ejemplo n.º 2
0
Archivo: CPU.cs Proyecto: falk/corenes
 // BRK - Force Interrupt
 private void BRK(StepParameters parms)
 {
     push16(_pc);
     PHP(parms);
     SEI(parms);
     _pc = Read16(0xFFFE);
 }
Ejemplo n.º 3
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void BIT(StepParameters parms)
 {
     byte value = Memory.Read(parms.address);
     _v = (byte) ((value >> 6) & 1);
     setZ((byte) (value & _a));
     setN(value);
 }
Ejemplo n.º 4
0
Archivo: CPU.cs Proyecto: falk/corenes
        // ADC - Add with Carry
        private void ADC(StepParameters parms)
        {
            var a = _a;
            var b = Memory.Read(parms.address);
            var c = _c;

            _a = (byte) (a + b + c);

            setZN(_a);

            // Carry?
            if (a + b + + c >= 0xFF)
            {
                _c = 1;
            }
            else
            {
                _c = 0;
            }
            if (((a ^ b) & 0x80) == 0 && ((a ^ _a) & 0x80) != 0)
            {
                _v = 1;
            }
            else
            {
                _v = 0;
            }
        }
Ejemplo n.º 5
0
Archivo: CPU.cs Proyecto: falk/corenes
 // Branch if positive
 private void BPL(StepParameters parms)
 {
     if (_n == 0)
     {
         _pc = parms.address;
         addBranchCycles(parms);
     }
 }
Ejemplo n.º 6
0
Archivo: CPU.cs Proyecto: falk/corenes
 // addBranchCycles adds a cycle for taking a branch and adds another cycle
 // if the branch jumps to a new page
 private void addBranchCycles(StepParameters parms)
 {
     _cycles++;
     if (!SamePage(parms.pc, parms.address))
     {
         _cycles++;
     }
 }
Ejemplo n.º 7
0
Archivo: CPU.cs Proyecto: falk/corenes
 // LSR - Logical Shift Right
 private void LSR(StepParameters parms)
 {
     // Accu
     if (parms.mode == 4)
     {
         _c = (byte) (_a & 1);
         _a >>= 1;
         setZN(_a);
     }
     else
     {
         byte value = Memory.Read(parms.address);
         _c = (byte) (value & 1);
         value >>= 1;
         Memory.Write(parms.address, value);
         setZN(value);
     }
 }
Ejemplo n.º 8
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void ROR(StepParameters parms)
 {
     // Accu
     if (parms.mode == 4)
     {
         var c = _c;
         _c = (byte) (_a & 1);
         _a = (byte) (_a >> 1 | c);
         setZN(_a);
     }
     else
     {
         var c = _c;
         byte value = Memory.Read(parms.address);
         _c = (byte) ((value >> 7) & 1);
         _a = (byte) (value << 1 | c);
         Memory.Write(parms.address, value);
         setZN(value);
     }
 }
Ejemplo n.º 9
0
Archivo: CPU.cs Proyecto: falk/corenes
 // RTS - Return from sub routine
 private void RTS(StepParameters parms)
 {
     _pc = (ushort) (Pull16() + 1);
 }
Ejemplo n.º 10
0
Archivo: CPU.cs Proyecto: falk/corenes
 // RTI - Return from Interrupt
 private void RTI(StepParameters parms)
 {
     SetFlags((byte) (Pull() & 0xEF | 0x20));
     _pc = (ushort) Pull16();
 }
Ejemplo n.º 11
0
Archivo: CPU.cs Proyecto: falk/corenes
 // PLA - Pop Accumulator
 private void PLA(StepParameters parms)
 {
     _a = Pull();
     setZN(_a);
 }
Ejemplo n.º 12
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void JMP(StepParameters parms)
 {
     _pc = parms.address;
 }
Ejemplo n.º 13
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void PHP(StepParameters parms)
 {
     push((byte) (GetFlags() | 0x10));
 }
Ejemplo n.º 14
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void TXA(StepParameters parms)
 {
     _a = _x;
     setZN(_a);
 }
Ejemplo n.º 15
0
Archivo: CPU.cs Proyecto: falk/corenes
 // SEI - Set Interrupt Disable
 private void SEI(StepParameters parms)
 {
     _i = 1;
 }
Ejemplo n.º 16
0
Archivo: CPU.cs Proyecto: falk/corenes
 // LDY - Load Y Register
 private void LDY(StepParameters parms)
 {
     _y = Memory.Read(parms.address);
     setZN(_y);
 }
Ejemplo n.º 17
0
Archivo: CPU.cs Proyecto: falk/corenes
 // TAX - Transfer Accumulator to X
 private void TAX(StepParameters parms)
 {
     _x = _a;
     setZN(_x);
 }
Ejemplo n.º 18
0
Archivo: CPU.cs Proyecto: falk/corenes
 // LDX - Load X Register
 private void LDX(StepParameters parms)
 {
     _x = Memory.Read(parms.address);
     setZN(_x);
 }
Ejemplo n.º 19
0
Archivo: CPU.cs Proyecto: falk/corenes
 // LDA - Load Accumulator
 private void LDA(StepParameters parms)
 {
     _a = Memory.Read(parms.address);
     setZN(_a);
 }
Ejemplo n.º 20
0
Archivo: CPU.cs Proyecto: falk/corenes
 // JSR - Jump to sub routine
 private void JSR(StepParameters parms)
 {
     push16((ushort) (_pc - 1));
     _pc = parms.address;
 }
Ejemplo n.º 21
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void INC(StepParameters parms)
 {
     byte value = (byte) (Memory.Read(parms.address) + 1);
     Memory.Write(parms.address, value);
     setZN(value);
 }
Ejemplo n.º 22
0
Archivo: CPU.cs Proyecto: falk/corenes
 // INX - Increment X
 private void INX(StepParameters parms)
 {
     _x++;
     setZN(_x);
 }
Ejemplo n.º 23
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void SEC(StepParameters parms)
 {
     _c = 1;
 }
Ejemplo n.º 24
0
Archivo: CPU.cs Proyecto: falk/corenes
 // PHA - Push Accumulator
 private void PHA(StepParameters parms)
 {
     push(_a);
 }
Ejemplo n.º 25
0
Archivo: CPU.cs Proyecto: falk/corenes
 // STY - Store y
 private void STY(StepParameters parms)
 {
     Memory.Write(parms.address, _y);
 }
Ejemplo n.º 26
0
Archivo: CPU.cs Proyecto: falk/corenes
 // INY - Increment Y
 private void INY(StepParameters parms)
 {
     _y++;
     setZN(_y);
 }
Ejemplo n.º 27
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void TAY(StepParameters parms)
 {
     _y = _a;
     setZN(_y);
 }
Ejemplo n.º 28
0
Archivo: CPU.cs Proyecto: falk/corenes
 private void NOP(StepParameters parms)
 {
 }
Ejemplo n.º 29
0
Archivo: CPU.cs Proyecto: falk/corenes
 // TXS - Transfer X to Stack Pointer
 private void TXS(StepParameters parms)
 {
     _sp = _x;
 }
Ejemplo n.º 30
0
Archivo: CPU.cs Proyecto: falk/corenes
 // ORA - Logical Inclusive OR
 private void ORA(StepParameters parms)
 {
     _a = (byte) (_a | Memory.Read(parms.address));
     setZN(_a);
 }