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:
Seth Morabito committed 2012-12-09 17:04:31 -08:00
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());
}
}