| @@ -207,19 +207,11 @@ function BRK(cpu){ | |||
| case 0: | |||
| PCUp(cpu, 1); | |||
| case 1: | |||
| cpu.__mem.address = cpu.__SP; | |||
| cpu.__mem.byte = cpu.__PC & 0xFF; | |||
| cpu.__SP = ByteWrap(cpu.__SP, -1); | |||
| break; | |||
| StackPush(cpu, cpu.__PC >> 8); break; | |||
| case 2: | |||
| cpu.__mem.address += 1; | |||
| cpu.__mem.byte = cpu.__PC >> 8; | |||
| cpu.__SP = ByteWrap(cpu.__SP, -1); | |||
| break; | |||
| StackPush(cpu, cpu.__PC & 0xFF); break; | |||
| case 3: | |||
| cpu.__mem.address += 1; | |||
| cpu.__mem.byte = cpu.__PR; | |||
| cpu.__SP = ByteWrap(cpu.__SP, -1); | |||
| StackPush(cpu, cpu.__SP); break; | |||
| case 4: | |||
| cpu.__mem.address = 0xFFFE; | |||
| cpu.__PC = cpu.__mem.byte; | |||
| @@ -371,15 +363,9 @@ function JRS(cpu){ | |||
| // Discard stack data (or... No Op) | |||
| break; | |||
| case 2: | |||
| cpu.__mem.address = cpu.__SP; | |||
| cpu.__mem.byte = cpu.__PC & 0xFF; | |||
| cpu.__SP = ByteWrap(cpu.__SP, -1); | |||
| break; | |||
| StackPush(cpu, cpu.__PC >> 8); break; | |||
| case 3: | |||
| cpu.__mem.address -= 1; | |||
| cpu.__mem.byte = cpu.__PC >> 8; | |||
| cpu.__SP = ByteWrap(cpu.__SP, -1); | |||
| break; | |||
| StackPush(cpu, cpu.__PC & 0xFF); break; | |||
| case 4: | |||
| cpu.__mem.address = cpu.__PC; | |||
| cpu.__PC = cpu.__opv | (cpu.__mem.byte << 8) | |||
| @@ -544,11 +530,37 @@ function ROR(cpu){ | |||
| } | |||
| function RTI(cpu){ | |||
| switch(cpu.__cycle){ | |||
| case 0: break; // Discard PC | |||
| case 1: // Discard Stack Pointer Data | |||
| StackPop(cpu); break; | |||
| case 2: | |||
| cpu.__PR = StackPop(cpu); break; | |||
| case 3: | |||
| cpu.__PC = StackPop(cpu); break; | |||
| case 4: | |||
| cpu.__PC |= StackPop(cpu) << 8; | |||
| cpu.__op = -1; | |||
| break; | |||
| } | |||
| cpu.__cycle += 1; | |||
| } | |||
| function RTS(cpu){ | |||
| switch(cpu.__cycle){ | |||
| case 0: break; // Discard PC | |||
| case 1: | |||
| StackPop(cpu); break; | |||
| case 2: | |||
| cpu.__PC = StackPop(cpu); break; | |||
| case 3: | |||
| cpu.__PC |= StackPop(cpu) << 8; break; | |||
| case 4: | |||
| PCUp(cpu, 1); | |||
| cpu.__op = -1; | |||
| break; | |||
| } | |||
| cpu.__cycle += 1; | |||
| } | |||
| function SBC(cpu){ | |||
| @@ -640,6 +652,18 @@ function ByteWrap(v, a){ | |||
| return v; | |||
| } | |||
| function StackPush(cpu, v){ | |||
| cpu.__mem.address = 0x0100 | cpu.__SP; | |||
| cpu.__mem.byte = v & 0xFF; | |||
| cpu.__SP = ByteWrap(cpu.__SP, -1); | |||
| } | |||
| function StackPop(cpu){ | |||
| cpu.__mem.address = 0x0100 | cpu.__SP; | |||
| cpu.__SP = ByteWrap(cpu.__SP, 1); | |||
| return cpu.__mem.byte; | |||
| } | |||
| function PCHI(cpu, b){ | |||
| cpu.__PC = (cpu.__PC & 0x00FF) | (b << 8); | |||
| } | |||