Renamed project to "Symon".

This commit is contained in:
Seth Morabito committed 2008-12-13 14:59:22 -08:00
1 parent 9a6a256073
commit 3f74489757
20 files changed
+102 -42

No files matched your search

@@ -0,0 +1,125 @@
package com.loomcom.symon;
import junit.framework.*;
import com.loomcom.symon.devices.*;
import com.loomcom.symon.exceptions.*;
import java.util.*;
/**
*
*/
public class BusTest extends TestCase {
public BusTest(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(BusTest.class);
}
public void testCreatingWithStartAndEndAddresses() {
Bus b = null;
b = new Bus(0x00, 0xff);
assertEquals(0x00, b.startAddress());
assertEquals(0xff, b.endAddress());
b = new Bus(0x20, 0xea);
assertEquals(0x20, b.startAddress());
assertEquals(0xea, b.endAddress());
}
public void testCreatingWithSize() {
Bus b = null;
b = new Bus(256);
assertEquals(0x00, b.startAddress());
assertEquals(0xff, b.endAddress());
b = new Bus(4096);
assertEquals(0x000, b.startAddress());
assertEquals(0xfff, b.endAddress());
b = new Bus(65536);
assertEquals(0x0000, b.startAddress());
assertEquals(0xffff, b.endAddress());
}
public void testAddDevice() throws MemoryRangeException {
Device memory = new Memory(0x0000, 0x0100, true);
Device rom = new Memory(0x0100, 0x0200, false);
Bus b = new Bus(0x0000, 0xffff);
assertEquals(0, b.getDevices().size());
b.addDevice(memory);
assertEquals(1, b.getDevices().size());
b.addDevice(rom);
assertEquals(2, b.getDevices().size());
}
public void testOverlappingDevicesShouldFail() throws MemoryRangeException {
Device memory = new Memory(0x0000, 0x0100, true);
Device rom = new Memory(0x00ff, 0x0200, false);
Bus b = new Bus(0x0000, 0xffff);
b.addDevice(memory);
try {
b.addDevice(rom);
fail("Should have thrown a MemoryRangeException.");
} catch (MemoryRangeException ex) {
// expected
}
}
public void testIsCompleteWithFirstDeviceNotStartingAtStartAddress() throws MemoryRangeException {
Device memory = new Memory(0x00ff, 0xff00, true);
Bus b = new Bus(0x0000, 0xffff);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
b.addDevice(memory);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
}
public void testIsCompleteWithOneDevice() throws MemoryRangeException {
Device memory = new Memory(0x0000, 0x10000, true);
Bus b = new Bus(0x0000, 0xffff);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
b.addDevice(memory);
assertTrue("Address space should have been complete!", b.isComplete());
}
public void testIsCompleteWithTwoDevices() throws MemoryRangeException {
Device memory = new Memory(0x0000, 0x8000, true);
Device rom = new Memory(0x8000, 0x8000, false);
Bus b = new Bus(0x0000, 0xffff);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
b.addDevice(memory);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
b.addDevice(rom);
assertTrue("Address space should have been complete!", b.isComplete());
}
public void testIsCompleteWithThreeDevices() throws MemoryRangeException {
Device memory = new Memory(0x0000, 0x8000, true);
Device rom1 = new Memory(0x8000, 0x4000, false);
Device rom2 = new Memory(0xC000, 0x4000, false);
Bus b = new Bus(0x0000, 0xffff);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
b.addDevice(memory);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
b.addDevice(rom1);
assertFalse("Address space was unexpectedly complete!", b.isComplete());
b.addDevice(rom2);
assertTrue("Address space should have been complete!", b.isComplete());
}
}
@@ -0,0 +1,163 @@
package com.loomcom.symon;
import junit.framework.*;
import com.loomcom.symon.devices.*;
import com.loomcom.symon.exceptions.*;
/**
*
*/
public class CpuTest extends TestCase {
private Cpu cpu;
private Bus bus;
private Memory mem;
public CpuTest(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(CpuTest.class);
}
public void setUp() throws MemoryRangeException {
this.cpu = new Cpu();
this.bus = new Bus(0x0000, 0xffff);
this.mem = new Memory(0x0000, 0x10000);
bus.addCpu(cpu);
bus.addDevice(new Memory(0x0000, 0x10000));
// All test programs start at 0x0200;
bus.write(0xfffc, 0x00);
bus.write(0xfffd, 0x02);
cpu.reset();
}
public void testReset() {
assertEquals(0, cpu.getAccumulator());
assertEquals(0, cpu.getXRegister());
assertEquals(0, cpu.getYRegister());
assertEquals(0x0200, cpu.getProgramCounter());
assertFalse(cpu.getCarryFlag());
assertFalse(cpu.getZeroFlag());
assertFalse(cpu.getIrqDisableFlag());
assertFalse(cpu.getDecimalModeFlag());
assertFalse(cpu.getBreakFlag());
assertFalse(cpu.getOverflowFlag());
assertFalse(cpu.getNegativeFlag());
}
/* LDA Immediate Mode Tests - 0xa9 */
public void test_LDA_IMM_SetsAccumulator() {
bus.write(0x0200, 0xa9);
bus.write(0x0201, 0x12);
cpu.step();
assertEquals(0x12, cpu.getAccumulator());
}
public void test_LDA_IMM_SetsZeroFlagIfArgIsZero() {
bus.write(0x0200, 0xa9);
bus.write(0x0201, 0x00);
cpu.step();
assertTrue(cpu.getZeroFlag());
}
public void test_LDA_IMM_DoesNotSetZeroFlagIfArgNotZero() {
bus.write(0x0200, 0xa9);
bus.write(0x0201, 0x12);
cpu.step();
assertFalse(cpu.getZeroFlag());
}
public void test_LDA_IMM_SetsNegativeFlagIfArgIsNegative() {
bus.write(0x0200, 0xa9);
bus.write(0x0201, 0x80);
cpu.step();
assertTrue(cpu.getNegativeFlag());
}
public void test_LDA_IMM_DoesNotSetNegativeFlagIfArgNotNegative() {
bus.write(0x0200, 0xa9);
bus.write(0x0201, 0x7f);
cpu.step();
assertFalse(cpu.getNegativeFlag());
}
/* LDX Immediate Mode Tests - 0xa2 */
public void test_LDX_IMM_SetsXRegister() {
bus.write(0x0200, 0xa2);
bus.write(0x0201, 0x12);
cpu.step();
assertEquals(0x12, cpu.getXRegister());
}
public void test_LDX_IMM_SetsZeroFlagIfArgIsZero() {
bus.write(0x0200, 0xa2);
bus.write(0x0201, 0x00);
cpu.step();
assertTrue(cpu.getZeroFlag());
}
public void test_LDX_IMM_DoesNotSetZeroFlagIfArgNotZero() {
bus.write(0x0200, 0xa2);
bus.write(0x0201, 0x12);
cpu.step();
assertFalse(cpu.getZeroFlag());
}
public void test_LDX_IMM_SetsNegativeFlagIfArgIsNegative() {
bus.write(0x0200, 0xa2);
bus.write(0x0201, 0x80);
cpu.step();
assertTrue(cpu.getNegativeFlag());
}
public void test_LDX_IMM_DoesNotSetNegativeFlagIfArgNotNegative() {
bus.write(0x0200, 0xa2);
bus.write(0x0201, 0x7f);
cpu.step();
assertFalse(cpu.getNegativeFlag());
}
/* LDY Immediate Mode Tests - 0xa0 */
public void test_LDY_IMM_SetsYRegister() {
bus.write(0x0200, 0xa0);
bus.write(0x0201, 0x12);
cpu.step();
assertEquals(0x12, cpu.getYRegister());
}
public void test_LDY_IMM_SetsZeroFlagIfArgIsZero() {
bus.write(0x0200, 0xa0);
bus.write(0x0201, 0x00);
cpu.step();
assertTrue(cpu.getZeroFlag());
}
public void test_LDY_IMM_DoesNotSetZeroFlagIfArgNotZero() {
bus.write(0x0200, 0xa0);
bus.write(0x0201, 0x12);
cpu.step();
assertFalse(cpu.getZeroFlag());
}
public void test_LDY_IMM_SetsNegativeFlagIfArgIsNegative() {
bus.write(0x0200, 0xa0);
bus.write(0x0201, 0x80);
cpu.step();
assertTrue(cpu.getNegativeFlag());
}
public void test_LDY_IMM_DoesNotSetNegativeFlagIfArgNotNegative() {
bus.write(0x0200, 0xa0);
bus.write(0x0201, 0x7f);
cpu.step();
assertFalse(cpu.getNegativeFlag());
}
}
@@ -0,0 +1,15 @@
package com.loomcom.symon;
import junit.framework.TestCase;
public class CpuUtilsTest extends TestCase {
public void testAddress() {
assertEquals(0xf1ea, CpuUtils.address(0xea, 0xf1));
assertEquals(0x00ea, CpuUtils.address(0xea, 0x00));
assertEquals(0xf100, CpuUtils.address(0x00, 0xf1));
assertEquals(0x1234, CpuUtils.address(0x34, 0x12));
assertEquals(0xffff, CpuUtils.address(0xff, 0xff));
}
}
@@ -0,0 +1,140 @@
package com.loomcom.symon;
import junit.framework.*;
import java.util.HashMap;
import java.util.Map;
import com.loomcom.symon.exceptions.*;
/**
*
*/
public class MemoryRangeTest extends TestCase {
public MemoryRangeTest(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(MemoryRangeTest.class);
}
public void testConstructorThrowsWhenInvalid() {
// All of these should raise MemoryRangeException
doInvalidMemoryRangeTest(0, -1);
doInvalidMemoryRangeTest(-1, 0);
doInvalidMemoryRangeTest(0, 0);
doInvalidMemoryRangeTest(1, 1);
doInvalidMemoryRangeTest(1, 0);
doInvalidMemoryRangeTest(2, 1);
}
public void testConstructorShouldNotThrow() throws MemoryRangeException {
// None of these should throw.
new MemoryRange(0, 1);
new MemoryRange(0, 2);
new MemoryRange(1, 2);
new MemoryRange(2, 10);
}
public void testStartAddress() throws MemoryRangeException {
MemoryRange r = new MemoryRange(0x101, 0x202);
assertEquals(0x101, r.startAddress());
}
public void testEndAddress() throws MemoryRangeException {
MemoryRange r = new MemoryRange(0x101, 0x202);
assertEquals(0x202, r.endAddress());
}
public void testOverlaps() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0100, 0x01ff);
MemoryRange b = new MemoryRange(0x0200, 0x02ff);
MemoryRange c = new MemoryRange(0x01a0, 0x01af); // inside a
MemoryRange d = new MemoryRange(0x00ff, 0x01a0); // overlaps a
MemoryRange e = new MemoryRange(0x01a0, 0x02ff); // overlaps a
MemoryRange f = new MemoryRange(0x02a0, 0x02af); // inside b
MemoryRange g = new MemoryRange(0x01ff, 0x02a0); // overlaps b
MemoryRange h = new MemoryRange(0x02a0, 0x03ff); // overlaps b
assertFalse(a.overlaps(b));
assertFalse(b.overlaps(a));
assertTrue(a.overlaps(c));
assertTrue(c.overlaps(a));
assertTrue(a.overlaps(d));
assertTrue(d.overlaps(a));
assertTrue(a.overlaps(e));
assertTrue(e.overlaps(a));
assertTrue(b.overlaps(f));
assertTrue(f.overlaps(b));
assertTrue(b.overlaps(g));
assertTrue(g.overlaps(b));
assertTrue(b.overlaps(h));
assertTrue(h.overlaps(b));
}
public void testToString() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0abf, 0xff00);
assertEquals("@0x0abf-0xff00", a.toString());
MemoryRange b = new MemoryRange(0, 255);
assertEquals("@0x0000-0x00ff", b.toString());
MemoryRange c = new MemoryRange(0, 65535);
assertEquals("@0x0000-0xffff", c.toString());
}
public void testIncluded() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0100, 0x0fff);
assertFalse(a.includes(0x0000));
assertFalse(a.includes(0x00ff));
assertTrue(a.includes(0x0100));
assertTrue(a.includes(0x0fff));
assertFalse(a.includes(0x1000));
assertFalse(a.includes(0xffff));
}
public void testCompareTo() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0000, 0x0100);
MemoryRange b = new MemoryRange(0x0200, 0x0300);
MemoryRange c = new MemoryRange(0x0200, 0x0300);
// a < b
assertTrue(a.compareTo(b) == -1);
// b > a
assertTrue(b.compareTo(a) == 1);
// Identity
assertTrue(a.compareTo(a) == 0);
assertTrue(b.compareTo(b) == 0);
// Equality
assertTrue(b.compareTo(c) == 0);
assertTrue(c.compareTo(b) == 0);
// Null
try {
a.compareTo(null);
fail("Should have thrown NullPointerException");
} catch (NullPointerException ex) {
// expected
}
}
// Helper method.
public void doInvalidMemoryRangeTest(int start, int end) {
try {
new MemoryRange(start, end);
fail("MemoryRangeException should have been thrown.");
} catch (MemoryRangeException e) {
// Expected.
}
}
}
@@ -0,0 +1,33 @@
package com.loomcom.symon;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for the j6502 Simulator class.
*/
public class SimulatorTest extends TestCase {
/**
* Create the test case
*
* @param testName name of the test case
*/
public SimulatorTest(String testName) {
super(testName);
}
/**
* @return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite(SimulatorTest.class);
}
/**
* Rigourous Test :-)
*/
public void testSimulator() {
assertTrue(true);
}
}