mirror of
https://github.com/sethm/symon.git
synced 2024-06-07 19:29:27 +00:00
Merge pull request #6 from Screwtapello/irq-disabled-at-reset
Make the Processor Status register match a real 6502 at power-on.
This commit is contained in:
commit
cda9a218af
|
@ -126,7 +126,7 @@ public class Cpu implements InstructionTable {
|
|||
// Clear status register bits.
|
||||
state.carryFlag = false;
|
||||
state.zeroFlag = false;
|
||||
state.irqDisableFlag = false;
|
||||
state.irqDisableFlag = true;
|
||||
state.decimalModeFlag = false;
|
||||
state.breakFlag = false;
|
||||
state.overflowFlag = false;
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -169,7 +169,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||
assertEquals(0x04, bus.read(0x1fe, true));
|
||||
|
||||
// No flags should have changed.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/* BIT - Bit Test - $2c */
|
||||
|
@ -362,7 +362,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||
cpu.step();
|
||||
assertEquals(0x3400, cpu.getProgramCounter());
|
||||
// No change to status flags.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/* EOR - Exclusive OR - $4d */
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuAbsoluteYModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -30,7 +30,7 @@ public class CpuAccumulatorModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuImmediateModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -33,7 +33,7 @@ public class CpuImpliedModeTest {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -76,6 +76,7 @@ public class CpuImpliedModeTest {
|
|||
public void test_BRK() throws MemoryAccessException {
|
||||
cpu.setCarryFlag();
|
||||
cpu.setOverflowFlag();
|
||||
cpu.clearIrqDisableFlag();
|
||||
assertEquals(0x20 | Cpu.P_CARRY | Cpu.P_OVERFLOW,
|
||||
cpu.getProcessorStatus());
|
||||
assertEquals(0x00, cpu.stackPeek());
|
||||
|
@ -343,7 +344,7 @@ public class CpuImpliedModeTest {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x201, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/* PHA - Push Accumulator - $48 */
|
||||
|
@ -432,7 +433,7 @@ public class CpuImpliedModeTest {
|
|||
cpu.step();
|
||||
|
||||
assertEquals(0x0f12, cpu.getProgramCounter());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/* SEC - Set Carry Flag - $38 */
|
||||
|
|
|
@ -31,7 +31,7 @@ public class CpuIndexedIndirectModeTest {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -31,7 +31,7 @@ public class CpuIndirectIndexedModeTest {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuIndirectModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -48,7 +48,7 @@ public class CpuIndirectModeTest extends TestCase {
|
|||
cpu.step();
|
||||
assertEquals(0x5400, cpu.getProgramCounter());
|
||||
// No change to status flags.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
public void test_JMP_with_ROR_Bug() throws MemoryAccessException {
|
||||
|
@ -60,7 +60,7 @@ public class CpuIndirectModeTest extends TestCase {
|
|||
cpu.step();
|
||||
assertEquals(0x2200, cpu.getProgramCounter());
|
||||
// No change to status flags.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
public void test_JMP_withIndirectBug() throws MemoryAccessException {
|
||||
|
@ -72,7 +72,7 @@ public class CpuIndirectModeTest extends TestCase {
|
|||
cpu.step();
|
||||
assertEquals(0x2200, cpu.getProgramCounter());
|
||||
// No change to status flags.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
public void test_JMP_withOutIndirectBug() throws MemoryAccessException {
|
||||
|
@ -84,7 +84,7 @@ public class CpuIndirectModeTest extends TestCase {
|
|||
cpu.step();
|
||||
assertEquals(0x5400, cpu.getProgramCounter());
|
||||
// No change to status flags.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
public void test_JMP_cmos() throws MemoryAccessException {
|
||||
|
@ -96,7 +96,7 @@ public class CpuIndirectModeTest extends TestCase {
|
|||
cpu.step();
|
||||
assertEquals(0x5400, cpu.getProgramCounter());
|
||||
// No change to status flags.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
}
|
|
@ -28,7 +28,7 @@ public class CpuIndirectXModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuRelativeModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -44,7 +44,7 @@ public class CpuTest extends TestCase {
|
|||
assertEquals(0x0200, cpu.getProgramCounter());
|
||||
assertFalse(cpu.getCarryFlag());
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getIrqDisableFlag());
|
||||
assertTrue(cpu.getIrqDisableFlag());
|
||||
assertFalse(cpu.getDecimalModeFlag());
|
||||
assertFalse(cpu.getBreakFlag());
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
|
@ -205,14 +205,12 @@ public class CpuTest extends TestCase {
|
|||
}
|
||||
|
||||
public void testGetProcessorStatus() {
|
||||
// By default, no flags are set. Remember, bit 5
|
||||
// By default, only "interrupt disable" is set. Remember, bit 5
|
||||
// is always '1'.
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
cpu.setCarryFlag();
|
||||
assertEquals(0x21, cpu.getProcessorStatus());
|
||||
assertEquals(0x25, cpu.getProcessorStatus());
|
||||
cpu.setZeroFlag();
|
||||
assertEquals(0x23, cpu.getProcessorStatus());
|
||||
cpu.setIrqDisableFlag();
|
||||
assertEquals(0x27, cpu.getProcessorStatus());
|
||||
cpu.setDecimalModeFlag();
|
||||
assertEquals(0x2f, cpu.getProcessorStatus());
|
||||
|
@ -237,13 +235,16 @@ public class CpuTest extends TestCase {
|
|||
assertEquals(0xa0, cpu.getProcessorStatus());
|
||||
cpu.clearNegativeFlag();
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
|
||||
cpu.setIrqDisableFlag();
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
public void testSetProcessorStatus() {
|
||||
// Default
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getIrqDisableFlag());
|
||||
assertTrue(cpu.getIrqDisableFlag());
|
||||
assertFalse(cpu.getDecimalModeFlag());
|
||||
assertFalse(cpu.getBreakFlag());
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -29,7 +29,7 @@ public class CpuZeroPageYModeTest extends TestCase {
|
|||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
assertEquals(0x24, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue
Block a user