Execution Trace Log
Introduces an execution trace window that will keep track of the most recent 10000 execution steps. I'm not entirely happy with the implementation, yet.
This commit is contained in:
1 parent
38a4458aff
commit
bc3de80892
11 files changed
+1268
-1256
No files matched your search
@@ -7,30 +7,30 @@ import junit.framework.TestCase;
|
||||
|
||||
public class CpuRelativeModeTest extends TestCase {
|
||||
|
||||
protected Cpu cpu;
|
||||
protected Bus bus;
|
||||
protected Memory mem;
|
||||
protected Cpu cpu;
|
||||
protected Bus bus;
|
||||
protected Memory mem;
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
this.cpu = new Cpu();
|
||||
this.bus = new Bus(0x0000, 0xffff);
|
||||
this.mem = new Memory(0x0000, 0x10000);
|
||||
bus.addCpu(cpu);
|
||||
bus.addDevice(mem);
|
||||
protected void setUp() throws Exception {
|
||||
this.cpu = new Cpu();
|
||||
this.bus = new Bus(0x0000, 0xffff);
|
||||
this.mem = new Memory(0x0000, 0x10000);
|
||||
bus.addCpu(cpu);
|
||||
bus.addDevice(mem);
|
||||
|
||||
// Load the reset vector.
|
||||
bus.write(0xfffc, Bus.DEFAULT_LOAD_ADDRESS & 0x00ff);
|
||||
bus.write(0xfffd, (Bus.DEFAULT_LOAD_ADDRESS & 0xff00)>>>8);
|
||||
// Load the reset vector.
|
||||
bus.write(0xfffc, Bus.DEFAULT_LOAD_ADDRESS & 0x00ff);
|
||||
bus.write(0xfffd, (Bus.DEFAULT_LOAD_ADDRESS & 0xff00) >>> 8);
|
||||
|
||||
cpu.reset();
|
||||
// Assert initial state
|
||||
assertEquals(0, cpu.getAccumulator());
|
||||
assertEquals(0, cpu.getXRegister());
|
||||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
}
|
||||
cpu.reset();
|
||||
// Assert initial state
|
||||
assertEquals(0, cpu.getAccumulator());
|
||||
assertEquals(0, cpu.getXRegister());
|
||||
assertEquals(0, cpu.getYRegister());
|
||||
assertEquals(0x200, cpu.getProgramCounter());
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
/*
|
||||
* The following opcodes are tested for correctness in this file:
|
||||
@@ -48,234 +48,234 @@ public class CpuRelativeModeTest extends TestCase {
|
||||
|
||||
/* BPL - Branch if Positive - 0x10 */
|
||||
|
||||
public void test_BPL() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x10, 0x05); // BPL $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
public void test_BPL() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x10, 0x05); // BPL $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x10, 0x05); // BPL $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x10, 0x05); // BPL $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x10, 0xfb); // BPL $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x10, 0xfb); // BPL $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x10, 0xfb); // BPL $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x10, 0xfb); // BPL $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
/* BMI - Branch if Minus - 0x30 */
|
||||
|
||||
public void test_BMI() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x30, 0x05); // BMI $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
public void test_BMI() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x30, 0x05); // BMI $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x30, 0x05); // BMI $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x30, 0x05); // BMI $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x30, 0xfb); // BMI $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x30, 0xfb); // BMI $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x30, 0xfb); // BMI $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x30, 0xfb); // BMI $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearNegativeFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
/* BVC - Branch if Overflow Clear - 0x50 */
|
||||
|
||||
public void test_BVC() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x50, 0x05); // BVC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
public void test_BVC() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x50, 0x05); // BVC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x50, 0x05); // BVC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x50, 0x05); // BVC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x50, 0xfb); // BVC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x50, 0xfb); // BVC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x50, 0xfb); // BVC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x50, 0xfb); // BVC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
/* BVS - Branch if Overflow Set - 0x70 */
|
||||
|
||||
public void test_BVS() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x70, 0x05); // BVS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
public void test_BVS() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x70, 0x05); // BVS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x70, 0x05); // BVS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x70, 0x05); // BVS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x70, 0xfb); // BVS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x70, 0xfb); // BVS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x70, 0xfb); // BVS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x70, 0xfb); // BVS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearOverflowFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
/* BCC - Branch if Carry Clear - 0x90 */
|
||||
|
||||
public void test_BCC() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x90, 0x05); // BCC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
public void test_BCC() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0x90, 0x05); // BCC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x90, 0x05); // BCC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x90, 0x05); // BCC $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x90, 0xfb); // BCC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x90, 0xfb); // BCC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x90, 0xfb); // BCC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0x90, 0xfb); // BCC $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
/* BCS - Branch if Carry Set - 0xb0 */
|
||||
|
||||
public void test_BCS() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0xb0, 0x05); // BCS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
public void test_BCS() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0xb0, 0x05); // BCS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xb0, 0x05); // BCS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xb0, 0x05); // BCS $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xb0, 0xfb); // BCS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xb0, 0xfb); // BCS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xb0, 0xfb); // BCS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xb0, 0xfb); // BCS $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearCarryFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
/* BNE - Branch if Not Equal to Zero - 0xd0 */
|
||||
|
||||
public void test_BNE() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0xd0, 0x05); // BNE $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
public void test_BNE() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0xd0, 0x05); // BNE $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xd0, 0x05); // BNE $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xd0, 0x05); // BNE $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xd0, 0xfb); // BNE $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xd0, 0xfb); // BNE $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xd0, 0xfb); // BNE $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xd0, 0xfb); // BNE $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
/* BEQ - Branch if Equal to Zero - 0xf0 */
|
||||
|
||||
public void test_BEQ() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0xf0, 0x05); // BEQ $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
public void test_BEQ() throws MemoryAccessException {
|
||||
// Positive Offset
|
||||
bus.loadProgram(0xf0, 0x05); // BEQ $05 ; *=$0202+$05 ($0207)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x207, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xf0, 0x05); // BEQ $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xf0, 0x05); // BEQ $05 ; *=$0202+$05 ($0207)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xf0, 0xfb); // BEQ $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
// Negative Offset
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xf0, 0xfb); // BEQ $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.setZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x1fd, cpu.getProgramCounter());
|
||||
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xf0, 0xfb); // BEQ $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
cpu.reset();
|
||||
bus.loadProgram(0xf0, 0xfb); // BEQ $fb ; *=$0202-$05 ($01fd)
|
||||
cpu.clearZeroFlag();
|
||||
cpu.step();
|
||||
assertEquals(0x202, cpu.getProgramCounter());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user