Started on Zero Page opcodes and tests.
This commit is contained in:
1 parent
de0742f59f
commit
ecde55c6b8
6 files changed
+346
-126
No files matched your search
@@ -30,7 +30,7 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertEquals(0xff, cpu.getStackPointer());
|
||||
assertEquals(0x20, cpu.getProcessorStatus());
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* The following opcodes are tested for correctness in this file:
|
||||
*
|
||||
@@ -39,19 +39,19 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
* EOR - $49
|
||||
* ADC - $69
|
||||
* LDY - $a0
|
||||
*
|
||||
*
|
||||
* LDX - $a2
|
||||
* LDA - $a9
|
||||
* CPY - $c0
|
||||
* CMP - $c9
|
||||
* CPX - $e0
|
||||
*
|
||||
*
|
||||
* SBC - $e9
|
||||
*/
|
||||
|
||||
/* ORA Immediate Mode Tests - 0x09 */
|
||||
|
||||
public void test_ORA_SetsAccumulator() {
|
||||
public void test_ORA() {
|
||||
bus.loadProgram(0x09, 0x00, // ORA #$00
|
||||
0x09, 0x11, // ORA #$11
|
||||
0x09, 0x22, // ORA #$22
|
||||
@@ -722,22 +722,22 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
bus.loadProgram(0x18, // CLC
|
||||
0xa9, 0x05, // LDA #$00
|
||||
0xe9, 0x01); // SBC #$01
|
||||
|
||||
|
||||
cpu.step(3);
|
||||
assertEquals(0x03, cpu.getAccumulator());
|
||||
|
||||
|
||||
cpu.reset();
|
||||
|
||||
// Subtrace with Carry Flag cleared
|
||||
bus.loadProgram(0x18, // CLC
|
||||
0xa9, 0x00, // LDA #$00
|
||||
0xe9, 0x01); // SBC #$01
|
||||
|
||||
|
||||
cpu.step(3);
|
||||
assertEquals(0xfe, cpu.getAccumulator());
|
||||
|
||||
|
||||
cpu.reset();
|
||||
|
||||
|
||||
// Subtract with Carry Flag set
|
||||
bus.loadProgram(0x38, // SEC
|
||||
0xa9, 0x05, // LDA #$00
|
||||
@@ -745,9 +745,9 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
cpu.step(3);
|
||||
assertEquals(0x04, cpu.getAccumulator());
|
||||
assertTrue(cpu.getCarryFlag());
|
||||
|
||||
|
||||
cpu.reset();
|
||||
|
||||
|
||||
// Subtract with Carry Flag set
|
||||
bus.loadProgram(0x38, // SEC
|
||||
0xa9, 0x00, // LDA #$00
|
||||
@@ -757,7 +757,7 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertFalse(cpu.getCarryFlag());
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void test_SBC_DecimalMode() {
|
||||
bus.loadProgram(0xf8,
|
||||
0xa9, 0x00,
|
||||
@@ -771,7 +771,7 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertTrue(cpu.getDecimalModeFlag());
|
||||
|
||||
cpu.reset();
|
||||
|
||||
|
||||
bus.loadProgram(0xf8,
|
||||
0xa9, 0x99,
|
||||
0xe9, 0x01);
|
||||
@@ -784,7 +784,7 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertTrue(cpu.getDecimalModeFlag());
|
||||
|
||||
cpu.reset();
|
||||
|
||||
|
||||
bus.loadProgram(0xf8,
|
||||
0xa9, 0x50,
|
||||
0xe9, 0x01);
|
||||
@@ -796,9 +796,9 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getDecimalModeFlag());
|
||||
|
||||
|
||||
|
||||
cpu.reset();
|
||||
|
||||
|
||||
bus.loadProgram(0xf8, // SED
|
||||
0xa9, 0x02, // LDA #$02
|
||||
0xe9, 0x01); // SBC #$01
|
||||
@@ -809,9 +809,9 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
assertTrue(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getDecimalModeFlag());
|
||||
|
||||
|
||||
cpu.reset();
|
||||
|
||||
|
||||
bus.loadProgram(0xf8, // SED
|
||||
0xa9, 0x10, // LDA #$10
|
||||
0xe9, 0x11); // SBC #$11
|
||||
@@ -822,7 +822,7 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getDecimalModeFlag());
|
||||
|
||||
|
||||
cpu.reset();
|
||||
|
||||
bus.loadProgram(0x38, // SEC
|
||||
@@ -838,7 +838,7 @@ public class CpuImmediateModeTest extends TestCase {
|
||||
assertTrue(cpu.getDecimalModeFlag());
|
||||
|
||||
cpu.reset();
|
||||
|
||||
|
||||
bus.loadProgram(0x38, // SEC
|
||||
0xf8, // SED
|
||||
0xa9, 0x00, // LDA #$00
|
||||
|
||||
@@ -346,4 +346,13 @@ public class CpuTest extends TestCase {
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
}
|
||||
|
||||
public void testAddress() {
|
||||
assertEquals(0xf1ea, cpu.address(0xea, 0xf1));
|
||||
assertEquals(0x00ea, cpu.address(0xea, 0x00));
|
||||
assertEquals(0xf100, cpu.address(0x00, 0xf1));
|
||||
assertEquals(0x1234, cpu.address(0x34, 0x12));
|
||||
assertEquals(0xffff, cpu.address(0xff, 0xff));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -34,41 +34,241 @@ public class CpuZeroPageModeTest extends TestCase {
|
||||
/*
|
||||
* The following opcodes are tested for correctness in this file:
|
||||
*
|
||||
* ADC - $65
|
||||
* AND - $25
|
||||
* ORA - $05
|
||||
* ASL - $06
|
||||
* BIT - $24
|
||||
* CMP - $c5
|
||||
*
|
||||
* CPX - $e4
|
||||
* CPY - $c4
|
||||
* DEC - $c6
|
||||
* EOR - $45
|
||||
* INC - $e6
|
||||
*
|
||||
* LDA - $a5
|
||||
* LDX - $a6
|
||||
* LDY - $a4
|
||||
* LSR - $46
|
||||
* ORA - $05
|
||||
*
|
||||
* AND - $25
|
||||
* ROL - $26
|
||||
*
|
||||
* EOR - $45
|
||||
* LSR - $46
|
||||
* ADC - $65
|
||||
* ROR - $66
|
||||
* SBC - $e5
|
||||
* STY - $84
|
||||
*
|
||||
* STA - $85
|
||||
* STX - $86
|
||||
*
|
||||
* STY - $84
|
||||
*
|
||||
* LDY - $a4
|
||||
* LDA - $a5
|
||||
* LDX - $a6
|
||||
*
|
||||
* CPY - $c4
|
||||
* CMP - $c5
|
||||
* DEC - $c6
|
||||
* CPX - $e4
|
||||
* SBC - $e5
|
||||
*
|
||||
* INC - $e6
|
||||
*/
|
||||
|
||||
/* ADC - Add with Carry - $88 */
|
||||
public void test_ADC() {
|
||||
|
||||
|
||||
/* ORA - Logical Inclusive OR - $05 */
|
||||
public void test_ORA() {
|
||||
// Set some initial values in zero page.
|
||||
bus.write(0x0000, 0x00);
|
||||
bus.write(0x0002, 0x11);
|
||||
bus.write(0x0004, 0x22);
|
||||
bus.write(0x0008, 0x44);
|
||||
bus.write(0x0010, 0x88);
|
||||
|
||||
bus.loadProgram(0x05, 0x00, // ORA $00
|
||||
0x05, 0x02, // ORA $02
|
||||
0x05, 0x04, // ORA $04
|
||||
0x05, 0x08, // ORA $08
|
||||
0x05, 0x10); // ORA $10
|
||||
cpu.step();
|
||||
assertEquals(0x00, cpu.getAccumulator());
|
||||
assertTrue(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x11, cpu.getAccumulator());
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x33, cpu.getAccumulator());
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x77, cpu.getAccumulator());
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0xff, cpu.getAccumulator());
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getNegativeFlag());
|
||||
}
|
||||
|
||||
|
||||
/* ASL - Arithmetic Shift Left - $06 */
|
||||
public void test_ASL() {
|
||||
bus.write(0x0000, 0x00);
|
||||
bus.write(0x0001, 0x01);
|
||||
bus.write(0x0002, 0x02);
|
||||
bus.write(0x0003, 0x44);
|
||||
bus.write(0x0004, 0x80);
|
||||
|
||||
bus.loadProgram(0x06, 0x00,
|
||||
0x06, 0x01,
|
||||
0x06, 0x02,
|
||||
0x06, 0x03,
|
||||
0x06, 0x04);
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x00, bus.read(0x0000));
|
||||
assertTrue(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
assertFalse(cpu.getCarryFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x02, bus.read(0x0001));
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
assertFalse(cpu.getCarryFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x04, bus.read(0x0002));
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
assertFalse(cpu.getCarryFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x88, bus.read(0x0003));
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getNegativeFlag());
|
||||
assertFalse(cpu.getCarryFlag());
|
||||
|
||||
cpu.step();
|
||||
assertEquals(0x00, bus.read(0x0004));
|
||||
assertTrue(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
assertTrue(cpu.getCarryFlag());
|
||||
}
|
||||
|
||||
/* BIT - Bit Test - $24 */
|
||||
public void test_BIT() {
|
||||
bus.write(0x0000, 0xc0);
|
||||
|
||||
bus.loadProgram(0xa9, 0x01, // LDA #$01
|
||||
0x24, 0x00, // BIT $00
|
||||
|
||||
0xa9, 0x0f, // LDA #$0f
|
||||
0x24, 0x00, // BIT $00
|
||||
|
||||
0xa9, 0x40, // LDA #$40
|
||||
0x24, 0x00, // BIT $00
|
||||
|
||||
0xa9, 0x80, // LDA #$80
|
||||
0x24, 0x00, // BIT $00
|
||||
|
||||
0xa9, 0xc0, // LDA #$c0
|
||||
0x24, 0x00, // BIT $00
|
||||
|
||||
0xa9, 0xff, // LDA #$ff
|
||||
0x24, 0x00); // BIT $00
|
||||
|
||||
cpu.step(2);
|
||||
assertTrue(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
|
||||
cpu.step(2);
|
||||
assertTrue(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
|
||||
cpu.step(2);
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertFalse(cpu.getNegativeFlag());
|
||||
assertTrue(cpu.getOverflowFlag());
|
||||
|
||||
cpu.step(2);
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getNegativeFlag());
|
||||
assertFalse(cpu.getOverflowFlag());
|
||||
|
||||
cpu.step(2);
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getNegativeFlag());
|
||||
assertTrue(cpu.getOverflowFlag());
|
||||
|
||||
cpu.step(2);
|
||||
assertFalse(cpu.getZeroFlag());
|
||||
assertTrue(cpu.getNegativeFlag());
|
||||
assertTrue(cpu.getOverflowFlag());
|
||||
}
|
||||
|
||||
/* AND - Logical AND - $25 */
|
||||
public void test_AND() {
|
||||
|
||||
}
|
||||
|
||||
/* ROL - Rotate Left - $26 */
|
||||
public void test_ROL() {
|
||||
}
|
||||
|
||||
/* EOR - Exclusive OR - $45 */
|
||||
public void test_EOR() {
|
||||
}
|
||||
|
||||
/* LSR - Logical Shift Right - $46 */
|
||||
public void test_LSR() {
|
||||
}
|
||||
|
||||
/* ADC - Add with Carry - $65 */
|
||||
public void test_ADC() {
|
||||
}
|
||||
|
||||
/* ROR - Rotate Right - $66 */
|
||||
public void test_ROR() {
|
||||
}
|
||||
|
||||
/* STY - Store Y Register - $84 */
|
||||
public void test_STY() {
|
||||
}
|
||||
|
||||
/* STA - Store Accumulator - $85 */
|
||||
public void test_STA() {
|
||||
}
|
||||
|
||||
/* STX - Store X Register - $86 */
|
||||
public void test_STX() {
|
||||
}
|
||||
|
||||
/* LDY - Load Y Register - $a4 */
|
||||
public void test_LDY() {
|
||||
}
|
||||
|
||||
/* LDA - Load Accumulator - $a5 */
|
||||
public void test_LDA() {
|
||||
}
|
||||
|
||||
/* LDX - Load X Register - $a6 */
|
||||
public void test_LDX() {
|
||||
}
|
||||
|
||||
/* CPY - Compare Y Register - $c4 */
|
||||
public void test_CPY() {
|
||||
}
|
||||
|
||||
/* CMP - Compare Accumulator - $c5 */
|
||||
public void test_CMP() {
|
||||
}
|
||||
|
||||
/* DEC - Decrement Memory Location - $c6 */
|
||||
public void test_DEC() {
|
||||
}
|
||||
|
||||
/* CPX - Compare X Register - $e4 */
|
||||
public void test_CPX() {
|
||||
}
|
||||
|
||||
/* SBC - Subtract with Carry - $e5 */
|
||||
public void test_SBC() {
|
||||
}
|
||||
|
||||
/* INC - Increment Memory Location - $e6 */
|
||||
public void test_INC() {
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user