diff --git a/src/main/java/com/loomcom/lm6502/AddressDecoder.java b/src/main/java/com/loomcom/lm6502/AddressDecoder.java index 5472dc3..72f380a 100644 --- a/src/main/java/com/loomcom/lm6502/AddressDecoder.java +++ b/src/main/java/com/loomcom/lm6502/AddressDecoder.java @@ -20,8 +20,9 @@ public class AddressDecoder { throws MemoryRangeException { // Make sure there's no memory overlap. for (MemoryRange memRange : ioMap.keySet()) { - if (d.getMemoryRange().overlapsWith(memRange)) { - throw new MemoryRangeException("The device being added overlaps with an existing device."); + if (d.getMemoryRange().overlaps(memRange)) { + throw new MemoryRangeException("The device being added overlaps " + + "with an existing device."); } } diff --git a/src/main/java/com/loomcom/lm6502/MemoryRange.java b/src/main/java/com/loomcom/lm6502/MemoryRange.java index 0e0455a..b86532c 100644 --- a/src/main/java/com/loomcom/lm6502/MemoryRange.java +++ b/src/main/java/com/loomcom/lm6502/MemoryRange.java @@ -10,7 +10,8 @@ public class MemoryRange implements Comparable { throw new MemoryRangeException("Addresses cannot be less than 0."); } if (startAddress >= endAddress) { - throw new MemoryRangeException("End address must be greater than start address."); + throw new MemoryRangeException("End address must be greater " + + "than start address."); } this.startAddress = startAddress; this.endAddress = endAddress; @@ -40,15 +41,9 @@ public class MemoryRange implements Comparable { * * @returns true if this range overlaps in any way with the other. */ - public boolean overlapsWith(MemoryRange other) { - return ((this.getEndAddress() >= other.getStartAddress() && - this.getEndAddress() <= other.getEndAddress()) || - (other.getEndAddress() >= this.getStartAddress() && - other.getEndAddress() <= this.getEndAddress()) || - (this.getStartAddress() <= other.getStartAddress() && - this.getEndAddress() >= other.getEndAddress()) || - (other.getStartAddress() <= this.getStartAddress() && - other.getEndAddress() >= this.getEndAddress())); + public boolean overlaps(MemoryRange other) { + return (this.includes(other.getStartAddress()) || + other.includes(this.getStartAddress())); } // Implementation of Comparable interface diff --git a/src/test/java/com/loomcom/lm6502/MemoryRangeTest.java b/src/test/java/com/loomcom/lm6502/MemoryRangeTest.java index a331a6c..23937e0 100644 --- a/src/test/java/com/loomcom/lm6502/MemoryRangeTest.java +++ b/src/test/java/com/loomcom/lm6502/MemoryRangeTest.java @@ -46,43 +46,38 @@ public class MemoryRangeTest extends TestCase { assertEquals(0x202, r.getEndAddress()); } - public void testOverlapsWith() throws MemoryRangeException { - MemoryRange a = new MemoryRange(0x0000, 0x0fff); - MemoryRange b = new MemoryRange(0x2000, 0x2fff); - MemoryRange c = new MemoryRange(0x1000, 0x1fff); // fits between a and b - MemoryRange d = new MemoryRange(0x0f00, 0x10ff); // overlaps with a - MemoryRange e = new MemoryRange(0x1fff, 0x20ff); // overlaps with b - MemoryRange f = new MemoryRange(0x0fff, 0x2000); // overlaps a and b - MemoryRange g = new MemoryRange(0x00ff, 0x0100); // Overlaps (inside) a, below b - MemoryRange h = new MemoryRange(0x20ff, 0x2100); // Overlaps (inside) b, above a + public void testOverlaps() throws MemoryRangeException { + MemoryRange a = new MemoryRange(0x0100, 0x01ff); + MemoryRange b = new MemoryRange(0x0200, 0x02ff); - assertFalse(c.overlapsWith(a)); - assertFalse(c.overlapsWith(b)); - assertFalse(a.overlapsWith(c)); - assertFalse(b.overlapsWith(c)); - assertFalse(a.overlapsWith(b)); - assertFalse(b.overlapsWith(a)); + MemoryRange c = new MemoryRange(0x01a0, 0x01af); // inside a + MemoryRange d = new MemoryRange(0x00ff, 0x01a0); // overlaps a + MemoryRange e = new MemoryRange(0x01a0, 0x02ff); // overlaps a - assertTrue(d.overlapsWith(a)); - assertTrue(a.overlapsWith(d)); + MemoryRange f = new MemoryRange(0x02a0, 0x02af); // inside b + MemoryRange g = new MemoryRange(0x01ff, 0x02a0); // overlaps b + MemoryRange h = new MemoryRange(0x02a0, 0x03ff); // overlaps b - assertTrue(e.overlapsWith(b)); - assertTrue(b.overlapsWith(e)); + assertFalse(a.overlaps(b)); + assertFalse(b.overlaps(a)); - assertTrue(f.overlapsWith(a)); - assertTrue(a.overlapsWith(f)); - assertTrue(f.overlapsWith(b)); - assertTrue(b.overlapsWith(f)); + assertTrue(a.overlaps(c)); + assertTrue(c.overlaps(a)); - assertTrue(a.overlapsWith(g)); - assertTrue(g.overlapsWith(a)); - assertFalse(b.overlapsWith(g)); - assertFalse(g.overlapsWith(b)); + assertTrue(a.overlaps(d)); + assertTrue(d.overlaps(a)); - assertFalse(a.overlapsWith(h)); - assertFalse(h.overlapsWith(a)); - assertTrue(b.overlapsWith(h)); - assertTrue(h.overlapsWith(b)); + 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 testIncluded() throws MemoryRangeException {