Merge pull request #17 from LIV2/master
Memory window should not reset device registers
This commit is contained in:
commit
2e33756d49
27 files changed
+370
-333
No files matched your search
@@ -7,7 +7,7 @@ SYMON - A 6502 System Simulator
|
|||||||
|
|
||||||
See the file COPYING for license.
|
See the file COPYING for license.
|
||||||
|
|
||||||
![Symon Simulator in Action] (http://www.loomcom.com/symon/screenshots/full.jpg)
|

|
||||||
|
|
||||||
## 1.0 About
|
## 1.0 About
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ experimental 6545 CRTC.
|
|||||||
|
|
||||||
Symon has extensive unit tests to verify correctness, and fully passes
|
Symon has extensive unit tests to verify correctness, and fully passes
|
||||||
Klaus Dormann's 6502 Functional Test Suite as of version 0.8.2
|
Klaus Dormann's 6502 Functional Test Suite as of version 0.8.2
|
||||||
(See [this thread on the 6502.org Forums] (http://forum.6502.org/viewtopic.php?f=2&t=2241)
|
(See [this thread on the 6502.org Forums](http://forum.6502.org/viewtopic.php?f=2&t=2241)
|
||||||
for more information about this functional test suite).
|
for more information about this functional test suite).
|
||||||
|
|
||||||
Symon is under constant, active development. Feedback and patches
|
Symon is under constant, active development. Feedback and patches
|
||||||
@@ -66,7 +66,7 @@ memory.
|
|||||||
|
|
||||||
### 3.2 Serial Console and CPU Status
|
### 3.2 Serial Console and CPU Status
|
||||||
|
|
||||||
![Serial Console] (http://www.loomcom.com/symon/screenshots/console.png)
|

|
||||||
|
|
||||||
The main window of the simulator acts as the primary Input/Output
|
The main window of the simulator acts as the primary Input/Output
|
||||||
system through a virtual serial terminal. The terminal is attached to
|
system through a virtual serial terminal. The terminal is attached to
|
||||||
@@ -78,13 +78,13 @@ It also provides CPU status. Contents of the accumulator, index
|
|||||||
registers, processor status flags, disassembly of the instruction
|
registers, processor status flags, disassembly of the instruction
|
||||||
register, and stack pointer are all displayed.
|
register, and stack pointer are all displayed.
|
||||||
|
|
||||||
![Font Selection] (http://www.loomcom.com/symon/screenshots/font_selection.png)
|

|
||||||
|
|
||||||
The console supports font sizes from 10 to 20 points.
|
The console supports font sizes from 10 to 20 points.
|
||||||
|
|
||||||
### 3.3 ROM Loading
|
### 3.3 ROM Loading
|
||||||
|
|
||||||
![ROM Loading] (http://www.loomcom.com/symon/screenshots/load_rom.png)
|

|
||||||
|
|
||||||
Symon can load any appropriately sized ROM image. The Symon
|
Symon can load any appropriately sized ROM image. The Symon
|
||||||
architecture expects as 16KB (16384 byte) ROM image, while the
|
architecture expects as 16KB (16384 byte) ROM image, while the
|
||||||
@@ -95,32 +95,32 @@ address.
|
|||||||
|
|
||||||
### 3.4 Memory Window
|
### 3.4 Memory Window
|
||||||
|
|
||||||
![Memory Window] (http://www.loomcom.com/symon/screenshots/memory_window.png)
|

|
||||||
|
|
||||||
Memory contents can be viewed (and edited) one page at a time through the Memory Window.
|
Memory contents can be viewed (and edited) one page at a time through the Memory Window.
|
||||||
|
|
||||||
### 3.5 Trace Log
|
### 3.5 Trace Log
|
||||||
|
|
||||||
![Trace Log] (http://www.loomcom.com/symon/screenshots/trace_log.png)
|

|
||||||
|
|
||||||
The last 20,000 execution steps are disassembled and logged to the Trace Log
|
The last 20,000 execution steps are disassembled and logged to the Trace Log
|
||||||
Window.
|
Window.
|
||||||
|
|
||||||
### 3.6 Simulator Speeds
|
### 3.6 Simulator Speeds
|
||||||
|
|
||||||
![Speeds] (http://www.loomcom.com/symon/screenshots/simulator_menu.png)
|

|
||||||
|
|
||||||
Simulated speeds may be set from 1MHz to 8MHz.
|
Simulated speeds may be set from 1MHz to 8MHz.
|
||||||
|
|
||||||
### 3.7 Breakpoints
|
### 3.7 Breakpoints
|
||||||
|
|
||||||
![Breakpoints] (http://www.loomcom.com/symon/screenshots/breakpoints.png)
|

|
||||||
|
|
||||||
Breakpoints can be set and removed through the Breakpoints window.
|
Breakpoints can be set and removed through the Breakpoints window.
|
||||||
|
|
||||||
### 3.8 Experimental 6545 CRTC Video
|
### 3.8 Experimental 6545 CRTC Video
|
||||||
|
|
||||||
![Composite Video] (http://www.loomcom.com/symon/screenshots/video_window.png)
|

|
||||||
|
|
||||||
This feature is highly experimental. It's possible to open a video window
|
This feature is highly experimental. It's possible to open a video window
|
||||||
from the "View" menu. This window simulates the output of a MOS 6545 CRT
|
from the "View" menu. This window simulates the output of a MOS 6545 CRT
|
||||||
@@ -158,9 +158,9 @@ between the simulated 6545 and a real 6545:
|
|||||||
|
|
||||||
For more information on the 6545 CRTC and its programming model, please see the following resources
|
For more information on the 6545 CRTC and its programming model, please see the following resources
|
||||||
|
|
||||||
- [CRTC 6545/6845 Information (André Fachat)] (http://6502.org/users/andre/hwinfo/crtc/index.html)
|
- [CRTC 6545/6845 Information (André Fachat)](http://6502.org/users/andre/hwinfo/crtc/index.html)
|
||||||
- [CRTC Operation (André Fachat)] (http://www.6502.org/users/andre/hwinfo/crtc/crtc.html)
|
- [CRTC Operation (André Fachat)](http://www.6502.org/users/andre/hwinfo/crtc/crtc.html)
|
||||||
- [MOS 6545 Datasheet (PDF)] (http://www.6502.org/users/andre/hwinfo/crtc/crtc.html)
|
- [MOS 6545 Datasheet (PDF)](http://www.6502.org/users/andre/hwinfo/crtc/crtc.html)
|
||||||
|
|
||||||
|
|
||||||
#### 3.8.1 Example BASIC Program to test Video
|
#### 3.8.1 Example BASIC Program to test Video
|
||||||
@@ -338,10 +338,10 @@ Additional components used in this project are copyright their respective owners
|
|||||||
|
|
||||||
This project would not have been possible without the following resources:
|
This project would not have been possible without the following resources:
|
||||||
|
|
||||||
- [Andrew Jacobs' 6502 Pages] (http://www.obelisk.demon.co.uk/6502/), for
|
- [Andrew Jacobs' 6502 Pages](http://www.obelisk.demon.co.uk/6502/), for
|
||||||
wonderfully detailed information about the 6502
|
wonderfully detailed information about the 6502
|
||||||
|
|
||||||
- [Neil Parker's "The 6502/65C02/65C816 Instruction Set Decoded"] (http://www.llx.com/~nparker/a2/opcodes.html),
|
- [Neil Parker's "The 6502/65C02/65C816 Instruction Set Decoded"](http://www.llx.com/~nparker/a2/opcodes.html),
|
||||||
for information about how instructions are coded
|
for information about how instructions are coded
|
||||||
|
|
||||||
## 9.0 Licensing
|
## 9.0 Licensing
|
||||||
|
|||||||
@@ -168,12 +168,12 @@ public class Bus {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int read(int address) throws MemoryAccessException {
|
public int read(int address, boolean cpuAccess) throws MemoryAccessException {
|
||||||
Device d = deviceAddressArray[address - this.startAddress];
|
Device d = deviceAddressArray[address - this.startAddress];
|
||||||
if (d != null) {
|
if (d != null) {
|
||||||
MemoryRange range = d.getMemoryRange();
|
MemoryRange range = d.getMemoryRange();
|
||||||
int devAddr = address - range.startAddress();
|
int devAddr = address - range.startAddress();
|
||||||
return d.read(devAddr) & 0xff;
|
return d.read(devAddr, cpuAccess) & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new MemoryAccessException("Bus read failed. No device at address " + String.format("$%04X", address));
|
throw new MemoryAccessException("Bus read failed. No device at address " + String.format("$%04X", address));
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ public class Cpu implements InstructionTable {
|
|||||||
state.sp = 0xff;
|
state.sp = 0xff;
|
||||||
|
|
||||||
// Set the PC to the address stored in the reset vector
|
// Set the PC to the address stored in the reset vector
|
||||||
state.pc = Utils.address(bus.read(RST_VECTOR_L), bus.read(RST_VECTOR_H));
|
state.pc = Utils.address(bus.read(RST_VECTOR_L, true), bus.read(RST_VECTOR_H, true));
|
||||||
|
|
||||||
// Clear instruction register.
|
// Clear instruction register.
|
||||||
state.ir = 0;
|
state.ir = 0;
|
||||||
@@ -168,7 +168,7 @@ public class Cpu implements InstructionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Fetch memory location for this instruction.
|
// Fetch memory location for this instruction.
|
||||||
state.ir = bus.read(state.pc);
|
state.ir = bus.read(state.pc, true);
|
||||||
int irAddressMode = (state.ir >> 2) & 0x07; // Bits 3-5 of IR: [ | | |X|X|X| | ]
|
int irAddressMode = (state.ir >> 2) & 0x07; // Bits 3-5 of IR: [ | | |X|X|X| | ]
|
||||||
int irOpMode = state.ir & 0x03; // Bits 6-7 of IR: [ | | | | | |X|X]
|
int irOpMode = state.ir & 0x03; // Bits 6-7 of IR: [ | | | | | |X|X]
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ public class Cpu implements InstructionTable {
|
|||||||
// Decode the instruction and operands
|
// Decode the instruction and operands
|
||||||
state.instSize = Cpu.instructionSizes[state.ir];
|
state.instSize = Cpu.instructionSizes[state.ir];
|
||||||
for (int i = 0; i < state.instSize - 1; i++) {
|
for (int i = 0; i < state.instSize - 1; i++) {
|
||||||
state.args[i] = bus.read(state.pc);
|
state.args[i] = bus.read(state.pc, true);
|
||||||
// Increment PC after reading
|
// Increment PC after reading
|
||||||
incrementPC();
|
incrementPC();
|
||||||
}
|
}
|
||||||
@@ -224,7 +224,7 @@ public class Cpu implements InstructionTable {
|
|||||||
switch (irAddressMode) {
|
switch (irAddressMode) {
|
||||||
case 0: // (Zero Page,X)
|
case 0: // (Zero Page,X)
|
||||||
tmp = (state.args[0] + state.x) & 0xff;
|
tmp = (state.args[0] + state.x) & 0xff;
|
||||||
effectiveAddress = Utils.address(bus.read(tmp), bus.read(tmp + 1));
|
effectiveAddress = Utils.address(bus.read(tmp, true), bus.read(tmp + 1, true));
|
||||||
break;
|
break;
|
||||||
case 1: // Zero Page
|
case 1: // Zero Page
|
||||||
effectiveAddress = state.args[0];
|
effectiveAddress = state.args[0];
|
||||||
@@ -236,8 +236,8 @@ public class Cpu implements InstructionTable {
|
|||||||
effectiveAddress = Utils.address(state.args[0], state.args[1]);
|
effectiveAddress = Utils.address(state.args[0], state.args[1]);
|
||||||
break;
|
break;
|
||||||
case 4: // (Zero Page),Y
|
case 4: // (Zero Page),Y
|
||||||
tmp = Utils.address(bus.read(state.args[0]),
|
tmp = Utils.address(bus.read(state.args[0], true),
|
||||||
bus.read((state.args[0] + 1) & 0xff));
|
bus.read((state.args[0] + 1) & 0xff, true));
|
||||||
effectiveAddress = (tmp + state.y) & 0xffff;
|
effectiveAddress = (tmp + state.y) & 0xffff;
|
||||||
break;
|
break;
|
||||||
case 5: // Zero Page,X
|
case 5: // Zero Page,X
|
||||||
@@ -409,7 +409,7 @@ public class Cpu implements InstructionTable {
|
|||||||
hi = lo + 1;
|
hi = lo + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
state.pc = Utils.address(bus.read(lo), bus.read(hi));
|
state.pc = Utils.address(bus.read(lo, true), bus.read(hi, true));
|
||||||
/* TODO: For accuracy, allow a flag to enable broken behavior of early 6502s:
|
/* TODO: For accuracy, allow a flag to enable broken behavior of early 6502s:
|
||||||
*
|
*
|
||||||
* "An original 6502 has does not correctly fetch the target
|
* "An original 6502 has does not correctly fetch the target
|
||||||
@@ -436,7 +436,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x15: // Zero Page,X
|
case 0x15: // Zero Page,X
|
||||||
case 0x19: // Absolute,Y
|
case 0x19: // Absolute,Y
|
||||||
case 0x1d: // Absolute,X
|
case 0x1d: // Absolute,X
|
||||||
state.a |= bus.read(effectiveAddress);
|
state.a |= bus.read(effectiveAddress, true);
|
||||||
setArithmeticFlags(state.a);
|
setArithmeticFlags(state.a);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -450,7 +450,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x0e: // Absolute
|
case 0x0e: // Absolute
|
||||||
case 0x16: // Zero Page,X
|
case 0x16: // Zero Page,X
|
||||||
case 0x1e: // Absolute,X
|
case 0x1e: // Absolute,X
|
||||||
tmp = asl(bus.read(effectiveAddress));
|
tmp = asl(bus.read(effectiveAddress, true));
|
||||||
bus.write(effectiveAddress, tmp);
|
bus.write(effectiveAddress, tmp);
|
||||||
setArithmeticFlags(tmp);
|
setArithmeticFlags(tmp);
|
||||||
break;
|
break;
|
||||||
@@ -459,7 +459,7 @@ public class Cpu implements InstructionTable {
|
|||||||
/** BIT - Bit Test ******************************************************/
|
/** BIT - Bit Test ******************************************************/
|
||||||
case 0x24: // Zero Page
|
case 0x24: // Zero Page
|
||||||
case 0x2c: // Absolute
|
case 0x2c: // Absolute
|
||||||
tmp = bus.read(effectiveAddress);
|
tmp = bus.read(effectiveAddress, true);
|
||||||
setZeroFlag((state.a & tmp) == 0);
|
setZeroFlag((state.a & tmp) == 0);
|
||||||
setNegativeFlag((tmp & 0x80) != 0);
|
setNegativeFlag((tmp & 0x80) != 0);
|
||||||
setOverflowFlag((tmp & 0x40) != 0);
|
setOverflowFlag((tmp & 0x40) != 0);
|
||||||
@@ -478,7 +478,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x35: // Zero Page,X
|
case 0x35: // Zero Page,X
|
||||||
case 0x39: // Absolute,Y
|
case 0x39: // Absolute,Y
|
||||||
case 0x3d: // Absolute,X
|
case 0x3d: // Absolute,X
|
||||||
state.a &= bus.read(effectiveAddress);
|
state.a &= bus.read(effectiveAddress, true);
|
||||||
setArithmeticFlags(state.a);
|
setArithmeticFlags(state.a);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -492,7 +492,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x2e: // Absolute
|
case 0x2e: // Absolute
|
||||||
case 0x36: // Zero Page,X
|
case 0x36: // Zero Page,X
|
||||||
case 0x3e: // Absolute,X
|
case 0x3e: // Absolute,X
|
||||||
tmp = rol(bus.read(effectiveAddress));
|
tmp = rol(bus.read(effectiveAddress, true));
|
||||||
bus.write(effectiveAddress, tmp);
|
bus.write(effectiveAddress, tmp);
|
||||||
setArithmeticFlags(tmp);
|
setArithmeticFlags(tmp);
|
||||||
break;
|
break;
|
||||||
@@ -510,7 +510,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x55: // Zero Page,X
|
case 0x55: // Zero Page,X
|
||||||
case 0x59: // Absolute,Y
|
case 0x59: // Absolute,Y
|
||||||
case 0x5d: // Absolute,X
|
case 0x5d: // Absolute,X
|
||||||
state.a ^= bus.read(effectiveAddress);
|
state.a ^= bus.read(effectiveAddress, true);
|
||||||
setArithmeticFlags(state.a);
|
setArithmeticFlags(state.a);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -524,7 +524,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x4e: // Absolute
|
case 0x4e: // Absolute
|
||||||
case 0x56: // Zero Page,X
|
case 0x56: // Zero Page,X
|
||||||
case 0x5e: // Absolute,X
|
case 0x5e: // Absolute,X
|
||||||
tmp = lsr(bus.read(effectiveAddress));
|
tmp = lsr(bus.read(effectiveAddress, true));
|
||||||
bus.write(effectiveAddress, tmp);
|
bus.write(effectiveAddress, tmp);
|
||||||
setArithmeticFlags(tmp);
|
setArithmeticFlags(tmp);
|
||||||
break;
|
break;
|
||||||
@@ -546,9 +546,9 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x79: // Absolute,Y
|
case 0x79: // Absolute,Y
|
||||||
case 0x7d: // Absolute,X
|
case 0x7d: // Absolute,X
|
||||||
if (state.decimalModeFlag) {
|
if (state.decimalModeFlag) {
|
||||||
state.a = adcDecimal(state.a, bus.read(effectiveAddress));
|
state.a = adcDecimal(state.a, bus.read(effectiveAddress, true));
|
||||||
} else {
|
} else {
|
||||||
state.a = adc(state.a, bus.read(effectiveAddress));
|
state.a = adc(state.a, bus.read(effectiveAddress, true));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -562,7 +562,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0x6e: // Absolute
|
case 0x6e: // Absolute
|
||||||
case 0x76: // Zero Page,X
|
case 0x76: // Zero Page,X
|
||||||
case 0x7e: // Absolute,X
|
case 0x7e: // Absolute,X
|
||||||
tmp = ror(bus.read(effectiveAddress));
|
tmp = ror(bus.read(effectiveAddress, true));
|
||||||
bus.write(effectiveAddress, tmp);
|
bus.write(effectiveAddress, tmp);
|
||||||
setArithmeticFlags(tmp);
|
setArithmeticFlags(tmp);
|
||||||
break;
|
break;
|
||||||
@@ -605,7 +605,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0xac: // Absolute
|
case 0xac: // Absolute
|
||||||
case 0xb4: // Zero Page,X
|
case 0xb4: // Zero Page,X
|
||||||
case 0xbc: // Absolute,X
|
case 0xbc: // Absolute,X
|
||||||
state.y = bus.read(effectiveAddress);
|
state.y = bus.read(effectiveAddress, true);
|
||||||
setArithmeticFlags(state.y);
|
setArithmeticFlags(state.y);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -619,7 +619,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0xae: // Absolute
|
case 0xae: // Absolute
|
||||||
case 0xb6: // Zero Page,Y
|
case 0xb6: // Zero Page,Y
|
||||||
case 0xbe: // Absolute,Y
|
case 0xbe: // Absolute,Y
|
||||||
state.x = bus.read(effectiveAddress);
|
state.x = bus.read(effectiveAddress, true);
|
||||||
setArithmeticFlags(state.x);
|
setArithmeticFlags(state.x);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -636,7 +636,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0xb5: // Zero Page,X
|
case 0xb5: // Zero Page,X
|
||||||
case 0xb9: // Absolute,Y
|
case 0xb9: // Absolute,Y
|
||||||
case 0xbd: // Absolute,X
|
case 0xbd: // Absolute,X
|
||||||
state.a = bus.read(effectiveAddress);
|
state.a = bus.read(effectiveAddress, true);
|
||||||
setArithmeticFlags(state.a);
|
setArithmeticFlags(state.a);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -647,7 +647,7 @@ public class Cpu implements InstructionTable {
|
|||||||
break;
|
break;
|
||||||
case 0xc4: // Zero Page
|
case 0xc4: // Zero Page
|
||||||
case 0xcc: // Absolute
|
case 0xcc: // Absolute
|
||||||
cmp(state.y, bus.read(effectiveAddress));
|
cmp(state.y, bus.read(effectiveAddress, true));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
@@ -662,7 +662,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0xd5: // Zero Page,X
|
case 0xd5: // Zero Page,X
|
||||||
case 0xd9: // Absolute,Y
|
case 0xd9: // Absolute,Y
|
||||||
case 0xdd: // Absolute,X
|
case 0xdd: // Absolute,X
|
||||||
cmp(state.a, bus.read(effectiveAddress));
|
cmp(state.a, bus.read(effectiveAddress, true));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
@@ -671,7 +671,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0xce: // Absolute
|
case 0xce: // Absolute
|
||||||
case 0xd6: // Zero Page,X
|
case 0xd6: // Zero Page,X
|
||||||
case 0xde: // Absolute,X
|
case 0xde: // Absolute,X
|
||||||
tmp = (bus.read(effectiveAddress) - 1) & 0xff;
|
tmp = (bus.read(effectiveAddress, true) - 1) & 0xff;
|
||||||
bus.write(effectiveAddress, tmp);
|
bus.write(effectiveAddress, tmp);
|
||||||
setArithmeticFlags(tmp);
|
setArithmeticFlags(tmp);
|
||||||
break;
|
break;
|
||||||
@@ -683,7 +683,7 @@ public class Cpu implements InstructionTable {
|
|||||||
break;
|
break;
|
||||||
case 0xe4: // Zero Page
|
case 0xe4: // Zero Page
|
||||||
case 0xec: // Absolute
|
case 0xec: // Absolute
|
||||||
cmp(state.x, bus.read(effectiveAddress));
|
cmp(state.x, bus.read(effectiveAddress, true));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
@@ -703,9 +703,9 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0xf9: // Absolute,Y
|
case 0xf9: // Absolute,Y
|
||||||
case 0xfd: // Absolute,X
|
case 0xfd: // Absolute,X
|
||||||
if (state.decimalModeFlag) {
|
if (state.decimalModeFlag) {
|
||||||
state.a = sbcDecimal(state.a, bus.read(effectiveAddress));
|
state.a = sbcDecimal(state.a, bus.read(effectiveAddress, true));
|
||||||
} else {
|
} else {
|
||||||
state.a = sbc(state.a, bus.read(effectiveAddress));
|
state.a = sbc(state.a, bus.read(effectiveAddress, true));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -715,7 +715,7 @@ public class Cpu implements InstructionTable {
|
|||||||
case 0xee: // Absolute
|
case 0xee: // Absolute
|
||||||
case 0xf6: // Zero Page,X
|
case 0xf6: // Zero Page,X
|
||||||
case 0xfe: // Absolute,X
|
case 0xfe: // Absolute,X
|
||||||
tmp = (bus.read(effectiveAddress) + 1) & 0xff;
|
tmp = (bus.read(effectiveAddress, true) + 1) & 0xff;
|
||||||
bus.write(effectiveAddress, tmp);
|
bus.write(effectiveAddress, tmp);
|
||||||
setArithmeticFlags(tmp);
|
setArithmeticFlags(tmp);
|
||||||
break;
|
break;
|
||||||
@@ -734,11 +734,11 @@ public class Cpu implements InstructionTable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void peekAhead() throws MemoryAccessException {
|
private void peekAhead() throws MemoryAccessException {
|
||||||
state.nextIr = bus.read(state.pc);
|
state.nextIr = bus.read(state.pc, true);
|
||||||
int nextInstSize = Cpu.instructionSizes[state.nextIr];
|
int nextInstSize = Cpu.instructionSizes[state.nextIr];
|
||||||
for (int i = 1; i < nextInstSize; i++) {
|
for (int i = 1; i < nextInstSize; i++) {
|
||||||
int nextRead = (state.pc + i) % bus.endAddress();
|
int nextRead = (state.pc + i) % bus.endAddress();
|
||||||
state.nextArgs[i-1] = bus.read(nextRead);
|
state.nextArgs[i-1] = bus.read(nextRead, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -783,7 +783,7 @@ public class Cpu implements InstructionTable {
|
|||||||
setIrqDisableFlag();
|
setIrqDisableFlag();
|
||||||
|
|
||||||
// Load interrupt vector address into PC
|
// Load interrupt vector address into PC
|
||||||
state.pc = Utils.address(bus.read(vectorLow), bus.read(vectorHigh));
|
state.pc = Utils.address(bus.read(vectorLow, true), bus.read(vectorHigh, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1290,14 +1290,14 @@ public class Cpu implements InstructionTable {
|
|||||||
++state.sp;
|
++state.sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return bus.read(0x100 + state.sp);
|
return bus.read(0x100 + state.sp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Peek at the value currently at the top of the stack
|
* Peek at the value currently at the top of the stack
|
||||||
*/
|
*/
|
||||||
int stackPeek() throws MemoryAccessException {
|
int stackPeek() throws MemoryAccessException {
|
||||||
return bus.read(0x100 + state.sp + 1);
|
return bus.read(0x100 + state.sp + 1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1435,12 +1435,12 @@ public class Cpu implements InstructionTable {
|
|||||||
* @return String containing the disassembled instruction and operands.
|
* @return String containing the disassembled instruction and operands.
|
||||||
*/
|
*/
|
||||||
public String disassembleOpAtAddress(int address) throws MemoryAccessException {
|
public String disassembleOpAtAddress(int address) throws MemoryAccessException {
|
||||||
int opCode = bus.read(address);
|
int opCode = bus.read(address, true);
|
||||||
int args[] = new int[2];
|
int args[] = new int[2];
|
||||||
int size = Cpu.instructionSizes[opCode];
|
int size = Cpu.instructionSizes[opCode];
|
||||||
for (int i = 1; i < size; i++) {
|
for (int i = 1; i < size; i++) {
|
||||||
int nextRead = (address + i) % bus.endAddress();
|
int nextRead = (address + i) % bus.endAddress();
|
||||||
args[i-1] = bus.read(nextRead);
|
args[i-1] = bus.read(nextRead, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
return disassembleOp(opCode, args);
|
return disassembleOp(opCode, args);
|
||||||
|
|||||||
@@ -348,7 +348,7 @@ public class Simulator {
|
|||||||
// output ready.
|
// output ready.
|
||||||
if (machine.getAcia() != null && machine.getAcia().hasTxChar()) {
|
if (machine.getAcia() != null && machine.getAcia().hasTxChar()) {
|
||||||
// This is thread-safe
|
// This is thread-safe
|
||||||
console.print(Character.toString((char) machine.getAcia().txRead()));
|
console.print(Character.toString((char) machine.getAcia().txRead(true)));
|
||||||
console.repaint();
|
console.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,10 +107,12 @@ public abstract class Acia extends Device {
|
|||||||
return name + "@" + String.format("%04X", baseAddress);
|
return name + "@" + String.format("%04X", baseAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized int rxRead() {
|
public synchronized int rxRead(boolean cpuAccess) {
|
||||||
lastRxRead = System.nanoTime();
|
if (cpuAccess) {
|
||||||
overrun = false;
|
lastRxRead = System.nanoTime();
|
||||||
rxFull = false;
|
overrun = false;
|
||||||
|
rxFull = false;
|
||||||
|
}
|
||||||
return rxChar;
|
return rxChar;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,13 +130,14 @@ public abstract class Acia extends Device {
|
|||||||
rxChar = data;
|
rxChar = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized int txRead() {
|
public synchronized int txRead(boolean cpuAccess) {
|
||||||
txEmpty = true;
|
if (cpuAccess) {
|
||||||
|
txEmpty = true;
|
||||||
|
|
||||||
if (transmitIrqEnabled) {
|
if (transmitIrqEnabled) {
|
||||||
getBus().assertIrq();
|
getBus().assertIrq();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return txChar;
|
return txChar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,10 +56,10 @@ public class Acia6551 extends Acia {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(int address) throws MemoryAccessException {
|
public int read(int address, boolean cpuAccess) throws MemoryAccessException {
|
||||||
switch (address) {
|
switch (address) {
|
||||||
case DATA_REG:
|
case DATA_REG:
|
||||||
return rxRead();
|
return rxRead(cpuAccess);
|
||||||
case STAT_REG:
|
case STAT_REG:
|
||||||
return statusReg();
|
return statusReg();
|
||||||
case CMND_REG:
|
case CMND_REG:
|
||||||
|
|||||||
@@ -53,10 +53,10 @@ public class Acia6850 extends Acia {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(int address) throws MemoryAccessException {
|
public int read(int address, boolean cpuAccess) throws MemoryAccessException {
|
||||||
switch (address) {
|
switch (address) {
|
||||||
case RX_REG:
|
case RX_REG:
|
||||||
return rxRead();
|
return rxRead(cpuAccess);
|
||||||
case STAT_REG:
|
case STAT_REG:
|
||||||
return statusReg();
|
return statusReg();
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ public class Crtc extends Device {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(int address) throws MemoryAccessException {
|
public int read(int address, boolean cpuAccess) throws MemoryAccessException {
|
||||||
switch (address) {
|
switch (address) {
|
||||||
case REGISTER_RW:
|
case REGISTER_RW:
|
||||||
switch (currentRegister) {
|
switch (currentRegister) {
|
||||||
@@ -142,7 +142,7 @@ public class Crtc extends Device {
|
|||||||
|
|
||||||
public int getCharAtAddress(int address) throws MemoryAccessException {
|
public int getCharAtAddress(int address) throws MemoryAccessException {
|
||||||
// TODO: Row/Column addressing
|
// TODO: Row/Column addressing
|
||||||
return memory.read(address);
|
return memory.read(address, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getHorizontalDisplayed() {
|
public int getHorizontalDisplayed() {
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public abstract class Device implements Comparable<Device> {
|
|||||||
/* Methods required to be implemented by inheriting classes. */
|
/* Methods required to be implemented by inheriting classes. */
|
||||||
public abstract void write(int address, int data) throws MemoryAccessException;
|
public abstract void write(int address, int data) throws MemoryAccessException;
|
||||||
|
|
||||||
public abstract int read(int address) throws MemoryAccessException;
|
public abstract int read(int address, boolean cpuAccess) throws MemoryAccessException;
|
||||||
|
|
||||||
public abstract String toString();
|
public abstract String toString();
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class Memory extends Device {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int read(int address) throws MemoryAccessException {
|
public int read(int address, boolean cpuAccess) throws MemoryAccessException {
|
||||||
return this.mem[address];
|
return this.mem[address];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public class SdController extends Device {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(int address) throws MemoryAccessException {
|
public int read(int address, boolean cpuAccess) throws MemoryAccessException {
|
||||||
switch (address) {
|
switch (address) {
|
||||||
case 0:
|
case 0:
|
||||||
return readData();
|
return readData();
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public class Via6522 extends Pia {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int read(int address) throws MemoryAccessException {
|
public int read(int address, boolean cpuAccess) throws MemoryAccessException {
|
||||||
Register[] registers = Register.values();
|
Register[] registers = Register.values();
|
||||||
|
|
||||||
if (address >= registers.length) {
|
if (address >= registers.length) {
|
||||||
|
|||||||
@@ -331,10 +331,10 @@ public class MemoryWindow extends JFrame implements ActionListener {
|
|||||||
return Utils.wordToHex(fullAddress(row, 1));
|
return Utils.wordToHex(fullAddress(row, 1));
|
||||||
} else if (column < 9) {
|
} else if (column < 9) {
|
||||||
// Display hex value of the data
|
// Display hex value of the data
|
||||||
return Utils.byteToHex(bus.read(fullAddress(row, column)));
|
return Utils.byteToHex(bus.read(fullAddress(row, column), false));
|
||||||
} else {
|
} else {
|
||||||
// Display the ASCII equivalent (if printable)
|
// Display the ASCII equivalent (if printable)
|
||||||
return Utils.byteToAscii(bus.read(fullAddress(row, column - 8)));
|
return Utils.byteToAscii(bus.read(fullAddress(row, column - 8), false));
|
||||||
}
|
}
|
||||||
} catch (MemoryAccessException ex) {
|
} catch (MemoryAccessException ex) {
|
||||||
return "??";
|
return "??";
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public class AciaTest {
|
|||||||
verify(mockBus, never()).assertIrq();
|
verify(mockBus, never()).assertIrq();
|
||||||
|
|
||||||
// Transmission should cause IRQ
|
// Transmission should cause IRQ
|
||||||
acia.txRead();
|
acia.txRead(true);
|
||||||
|
|
||||||
verify(mockBus, atLeastOnce()).assertIrq();
|
verify(mockBus, atLeastOnce()).assertIrq();
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@ public class AciaTest {
|
|||||||
acia.write(0, 'a');
|
acia.write(0, 'a');
|
||||||
|
|
||||||
// Transmission should cause IRQ
|
// Transmission should cause IRQ
|
||||||
acia.txRead();
|
acia.txRead(true);
|
||||||
|
|
||||||
verify(mockBus, never()).assertIrq();
|
verify(mockBus, never()).assertIrq();
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ public class AciaTest {
|
|||||||
public void newAciaShouldHaveTxEmptyStatus() throws Exception {
|
public void newAciaShouldHaveTxEmptyStatus() throws Exception {
|
||||||
Acia acia = new Acia6551(0x000);
|
Acia acia = new Acia6551(0x000);
|
||||||
|
|
||||||
assertEquals(0x10, acia.read(0x0001));
|
assertEquals(0x10, acia.read(0x0001, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -91,7 +91,7 @@ public class AciaTest {
|
|||||||
Acia acia = new Acia6551(0x000);
|
Acia acia = new Acia6551(0x000);
|
||||||
|
|
||||||
acia.txWrite('a');
|
acia.txWrite('a');
|
||||||
assertEquals(0x00, acia.read(0x0001));
|
assertEquals(0x00, acia.read(0x0001, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -99,7 +99,7 @@ public class AciaTest {
|
|||||||
Acia acia = new Acia6551(0x000);
|
Acia acia = new Acia6551(0x000);
|
||||||
|
|
||||||
acia.rxWrite('a');
|
acia.rxWrite('a');
|
||||||
assertEquals(0x18, acia.read(0x0001));
|
assertEquals(0x18, acia.read(0x0001, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -110,7 +110,7 @@ public class AciaTest {
|
|||||||
acia.rxWrite('a');
|
acia.rxWrite('a');
|
||||||
acia.txWrite('b');
|
acia.txWrite('b');
|
||||||
|
|
||||||
assertEquals(0x08, acia.read(0x0001));
|
assertEquals(0x08, acia.read(0x0001, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -123,14 +123,31 @@ public class AciaTest {
|
|||||||
acia.rxWrite('a');
|
acia.rxWrite('a');
|
||||||
acia.rxWrite('b');
|
acia.rxWrite('b');
|
||||||
|
|
||||||
assertEquals(0x04, acia.read(0x0001) & 0x04);
|
assertEquals(0x04, acia.read(0x0001, true) & 0x04);
|
||||||
|
|
||||||
// read should reset
|
// read should reset
|
||||||
acia.rxRead();
|
acia.rxRead(true);
|
||||||
assertEquals(0x00, acia.read(0x0001) & 0x04);
|
assertEquals(0x00, acia.read(0x0001, true) & 0x04);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void aciaShouldOverrunAndMemoryWindowReadShouldNotReset()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
Acia acia = new Acia6551(0x0000);
|
||||||
|
|
||||||
|
// overrun ACIA
|
||||||
|
acia.rxWrite('a');
|
||||||
|
acia.rxWrite('b');
|
||||||
|
|
||||||
|
assertEquals(0x04, acia.read(0x0001, true) & 0x04);
|
||||||
|
|
||||||
|
// memory window read should not reset
|
||||||
|
acia.rxRead(false);
|
||||||
|
assertEquals(0x04, acia.read(0x0001, true) & 0x04);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void readingBuffersShouldResetStatus()
|
public void readingBuffersShouldResetStatus()
|
||||||
@@ -141,11 +158,28 @@ public class AciaTest {
|
|||||||
acia.txWrite('b');
|
acia.txWrite('b');
|
||||||
|
|
||||||
|
|
||||||
assertEquals(0x08, acia.read(0x0001));
|
assertEquals(0x08, acia.read(0x0001, true));
|
||||||
|
|
||||||
assertEquals('a', acia.rxRead());
|
assertEquals('a', acia.rxRead(true));
|
||||||
assertEquals('b', acia.txRead());
|
assertEquals('b', acia.txRead(true));
|
||||||
|
|
||||||
assertEquals(0x10, acia.read(0x0001));
|
assertEquals(0x10, acia.read(0x0001, true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void A()
|
||||||
|
throws Exception {
|
||||||
|
Acia acia = new Acia6551(0x0000);
|
||||||
|
|
||||||
|
acia.rxWrite('a');
|
||||||
|
acia.txWrite('b');
|
||||||
|
|
||||||
|
|
||||||
|
assertEquals(0x08, acia.read(0x0001, true));
|
||||||
|
|
||||||
|
assertEquals('a', acia.rxRead(false));
|
||||||
|
assertEquals('b', acia.txRead(false));
|
||||||
|
|
||||||
|
assertEquals(0x08, acia.read(0x0001, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,7 +67,7 @@ public class AciaTest6850 {
|
|||||||
verify(mockBus, never()).assertIrq();
|
verify(mockBus, never()).assertIrq();
|
||||||
|
|
||||||
// Transmission should cause IRQ
|
// Transmission should cause IRQ
|
||||||
acia.txRead();
|
acia.txRead(true);
|
||||||
|
|
||||||
verify(mockBus, atLeastOnce()).assertIrq();
|
verify(mockBus, atLeastOnce()).assertIrq();
|
||||||
}
|
}
|
||||||
@@ -86,7 +86,7 @@ public class AciaTest6850 {
|
|||||||
acia.write(DATA_REG, 'a');
|
acia.write(DATA_REG, 'a');
|
||||||
|
|
||||||
// Transmission should cause IRQ
|
// Transmission should cause IRQ
|
||||||
acia.txRead();
|
acia.txRead(true);
|
||||||
|
|
||||||
verify(mockBus, never()).assertIrq();
|
verify(mockBus, never()).assertIrq();
|
||||||
}
|
}
|
||||||
@@ -95,7 +95,7 @@ public class AciaTest6850 {
|
|||||||
public void newAciaShouldHaveTxEmptyStatus() throws Exception {
|
public void newAciaShouldHaveTxEmptyStatus() throws Exception {
|
||||||
Acia acia = newAcia();
|
Acia acia = newAcia();
|
||||||
|
|
||||||
assertEquals(0x02, acia.read(CMD_STAT_REG) & 0x02);
|
assertEquals(0x02, acia.read(CMD_STAT_REG, true) & 0x02);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -103,7 +103,7 @@ public class AciaTest6850 {
|
|||||||
Acia acia = newAcia();
|
Acia acia = newAcia();
|
||||||
|
|
||||||
acia.txWrite('a');
|
acia.txWrite('a');
|
||||||
assertEquals(0x00, acia.read(CMD_STAT_REG) & 0x02);
|
assertEquals(0x00, acia.read(CMD_STAT_REG, true) & 0x02);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -112,7 +112,7 @@ public class AciaTest6850 {
|
|||||||
|
|
||||||
acia.rxWrite('a');
|
acia.rxWrite('a');
|
||||||
|
|
||||||
assertEquals(0x01, acia.read(CMD_STAT_REG) & 0x01);
|
assertEquals(0x01, acia.read(CMD_STAT_REG, true) & 0x01);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -123,7 +123,7 @@ public class AciaTest6850 {
|
|||||||
acia.rxWrite('a');
|
acia.rxWrite('a');
|
||||||
acia.txWrite('b');
|
acia.txWrite('b');
|
||||||
|
|
||||||
assertEquals(0x01, acia.read(CMD_STAT_REG) & 0x03);
|
assertEquals(0x01, acia.read(CMD_STAT_REG, true) & 0x03);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -136,11 +136,11 @@ public class AciaTest6850 {
|
|||||||
acia.rxWrite('a');
|
acia.rxWrite('a');
|
||||||
acia.rxWrite('b');
|
acia.rxWrite('b');
|
||||||
|
|
||||||
assertEquals(0x20, acia.read(CMD_STAT_REG) & 0x20);
|
assertEquals(0x20, acia.read(CMD_STAT_REG, true) & 0x20);
|
||||||
|
|
||||||
// read should reset
|
// read should reset
|
||||||
acia.rxRead();
|
acia.rxRead(true);
|
||||||
assertEquals(0x00, acia.read(CMD_STAT_REG) & 0x20);
|
assertEquals(0x00, acia.read(CMD_STAT_REG, true) & 0x20);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,15 +149,15 @@ public class AciaTest6850 {
|
|||||||
throws Exception {
|
throws Exception {
|
||||||
Acia acia = newAcia();
|
Acia acia = newAcia();
|
||||||
|
|
||||||
assertEquals(0x00, acia.read(CMD_STAT_REG) & 0x01);
|
assertEquals(0x00, acia.read(CMD_STAT_REG, true) & 0x01);
|
||||||
|
|
||||||
acia.rxWrite('a');
|
acia.rxWrite('a');
|
||||||
|
|
||||||
assertEquals(0x01, acia.read(CMD_STAT_REG) & 0x01);
|
assertEquals(0x01, acia.read(CMD_STAT_REG, true) & 0x01);
|
||||||
|
|
||||||
acia.rxRead();
|
acia.rxRead(true);
|
||||||
|
|
||||||
assertEquals(0x00, acia.read(CMD_STAT_REG) & 0x01);
|
assertEquals(0x00, acia.read(CMD_STAT_REG, true) & 0x01);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,31 +121,31 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
0x0e, 0x04, 0x12); // ASL $1204
|
0x0e, 0x04, 0x12); // ASL $1204
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x7f00));
|
assertEquals(0x00, bus.read(0x7f00, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x7f01));
|
assertEquals(0x02, bus.read(0x7f01, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0x3502));
|
assertEquals(0x04, bus.read(0x3502, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x88, bus.read(0x3503));
|
assertEquals(0x88, bus.read(0x3503, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1204));
|
assertEquals(0x00, bus.read(0x1204, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
@@ -165,8 +165,8 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
|
|
||||||
// Old PC-1 should be on stack (i.e.: address of third byte of the
|
// Old PC-1 should be on stack (i.e.: address of third byte of the
|
||||||
// JSR instruction, 0x0204)
|
// JSR instruction, 0x0204)
|
||||||
assertEquals(0x02, bus.read(0x1ff));
|
assertEquals(0x02, bus.read(0x1ff, true));
|
||||||
assertEquals(0x04, bus.read(0x1fe));
|
assertEquals(0x04, bus.read(0x1fe, true));
|
||||||
|
|
||||||
// No flags should have changed.
|
// No flags should have changed.
|
||||||
assertEquals(0x20, cpu.getProcessorStatus());
|
assertEquals(0x20, cpu.getProcessorStatus());
|
||||||
@@ -295,61 +295,61 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
0x2e, 0x01, 0x12); // ROL $1201 (m=%10000001, c=0)
|
0x2e, 0x01, 0x12); // ROL $1201 (m=%10000001, c=0)
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1200));
|
assertEquals(0x00, bus.read(0x1200, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x1201));
|
assertEquals(0x02, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x05, bus.read(0x1201));
|
assertEquals(0x05, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0a, bus.read(0x1201));
|
assertEquals(0x0a, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x14, bus.read(0x1201));
|
assertEquals(0x14, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x28, bus.read(0x1201));
|
assertEquals(0x28, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x50, bus.read(0x1201));
|
assertEquals(0x50, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xa0, bus.read(0x1201));
|
assertEquals(0xa0, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x1201));
|
assertEquals(0x40, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x81, bus.read(0x1201));
|
assertEquals(0x81, bus.read(0x1201, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -418,38 +418,38 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
0x4e, 0x05, 0x12); // LSR $1205
|
0x4e, 0x05, 0x12); // LSR $1205
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1200));
|
assertEquals(0x00, bus.read(0x1200, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1201));
|
assertEquals(0x00, bus.read(0x1201, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x1202));
|
assertEquals(0x01, bus.read(0x1202, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x22, bus.read(0x1203));
|
assertEquals(0x22, bus.read(0x1203, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x1204));
|
assertEquals(0x40, bus.read(0x1204, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
// Setting Carry should not affect the result.
|
// Setting Carry should not affect the result.
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x01, bus.read(0x1205));
|
assertEquals(0x01, bus.read(0x1205, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -654,61 +654,61 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
0x6e, 0x11, 0x12); // ROR $1201 (m=%00010000, c=0)
|
0x6e, 0x11, 0x12); // ROR $1201 (m=%00010000, c=0)
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1210));
|
assertEquals(0x00, bus.read(0x1210, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x08, bus.read(0x1211));
|
assertEquals(0x08, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0x1211));
|
assertEquals(0x04, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x1211));
|
assertEquals(0x02, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x1211));
|
assertEquals(0x01, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1211));
|
assertEquals(0x00, bus.read(0x1211, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x1211));
|
assertEquals(0x80, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x1211));
|
assertEquals(0x40, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x20, bus.read(0x1211));
|
assertEquals(0x20, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x10, bus.read(0x1211));
|
assertEquals(0x10, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -720,7 +720,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x00);
|
cpu.setYRegister(0x00);
|
||||||
bus.loadProgram(0x8c, 0x10, 0x12);
|
bus.loadProgram(0x8c, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1210));
|
assertEquals(0x00, bus.read(0x1210, true));
|
||||||
// STY should have NO effect on flags.
|
// STY should have NO effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -730,7 +730,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x0f);
|
cpu.setYRegister(0x0f);
|
||||||
bus.loadProgram(0x8c, 0x10, 0x12);
|
bus.loadProgram(0x8c, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x1210));
|
assertEquals(0x0f, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -739,7 +739,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x80);
|
cpu.setYRegister(0x80);
|
||||||
bus.loadProgram(0x8c, 0x10, 0x12);
|
bus.loadProgram(0x8c, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x1210));
|
assertEquals(0x80, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -750,7 +750,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x00);
|
cpu.setAccumulator(0x00);
|
||||||
bus.loadProgram(0x8d, 0x10, 0x12);
|
bus.loadProgram(0x8d, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1210));
|
assertEquals(0x00, bus.read(0x1210, true));
|
||||||
// STA should have NO effect on flags.
|
// STA should have NO effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -760,7 +760,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x0f);
|
cpu.setAccumulator(0x0f);
|
||||||
bus.loadProgram(0x8d, 0x10, 0x12);
|
bus.loadProgram(0x8d, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x1210));
|
assertEquals(0x0f, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -769,7 +769,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x80);
|
cpu.setAccumulator(0x80);
|
||||||
bus.loadProgram(0x8d, 0x10, 0x12);
|
bus.loadProgram(0x8d, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x1210));
|
assertEquals(0x80, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -780,7 +780,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x00);
|
cpu.setXRegister(0x00);
|
||||||
bus.loadProgram(0x8e, 0x10, 0x12);
|
bus.loadProgram(0x8e, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1210));
|
assertEquals(0x00, bus.read(0x1210, true));
|
||||||
// STX should have NO effect on flags.
|
// STX should have NO effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -790,7 +790,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x0f);
|
cpu.setXRegister(0x0f);
|
||||||
bus.loadProgram(0x8e, 0x10, 0x12);
|
bus.loadProgram(0x8e, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x1210));
|
assertEquals(0x0f, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -799,7 +799,7 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x80);
|
cpu.setXRegister(0x80);
|
||||||
bus.loadProgram(0x8e, 0x10, 0x12);
|
bus.loadProgram(0x8e, 0x10, 0x12);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x1210));
|
assertEquals(0x80, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -957,22 +957,22 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
0xce, 0x13, 0x12); // DEC $1213
|
0xce, 0x13, 0x12); // DEC $1213
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xff, bus.read(0x1210));
|
assertEquals(0xff, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1211));
|
assertEquals(0x00, bus.read(0x1211, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x7f, bus.read(0x1212));
|
assertEquals(0x7f, bus.read(0x1212, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xfe, bus.read(0x1213));
|
assertEquals(0xfe, bus.read(0x1213, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -1213,17 +1213,17 @@ public class CpuAbsoluteModeTest extends TestCase {
|
|||||||
0xee, 0x12, 0x12); // INC $1212
|
0xee, 0x12, 0x12); // INC $1212
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x1210));
|
assertEquals(0x01, bus.read(0x1210, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x1211));
|
assertEquals(0x80, bus.read(0x1211, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1212));
|
assertEquals(0x00, bus.read(0x1212, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
|
|||||||
@@ -117,31 +117,31 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
0x1e, 0x04, 0x2c); // ASL $2c04,X
|
0x1e, 0x04, 0x2c); // ASL $2c04,X
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x2c30));
|
assertEquals(0x00, bus.read(0x2c30, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x2c31));
|
assertEquals(0x02, bus.read(0x2c31, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0x2c32));
|
assertEquals(0x04, bus.read(0x2c32, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x88, bus.read(0x2c33));
|
assertEquals(0x88, bus.read(0x2c33, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x2c34));
|
assertEquals(0x00, bus.read(0x2c34, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
@@ -229,61 +229,61 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
0x3e, 0x01, 0x10); // ROL $1001,X (m=%10000001, c=0)
|
0x3e, 0x01, 0x10); // ROL $1001,X (m=%10000001, c=0)
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x1070));
|
assertEquals(0x00, bus.read(0x1070, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x1071));
|
assertEquals(0x02, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x05, bus.read(0x1071));
|
assertEquals(0x05, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0a, bus.read(0x1071));
|
assertEquals(0x0a, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x14, bus.read(0x1071));
|
assertEquals(0x14, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x28, bus.read(0x1071));
|
assertEquals(0x28, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x50, bus.read(0x1071));
|
assertEquals(0x50, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xa0, bus.read(0x1071));
|
assertEquals(0xa0, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x1071));
|
assertEquals(0x40, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x81, bus.read(0x1071));
|
assertEquals(0x81, bus.read(0x1071, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -346,38 +346,38 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
0x5e, 0x05, 0xab); // LSR $ab05,X
|
0x5e, 0x05, 0xab); // LSR $ab05,X
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab30));
|
assertEquals(0x00, bus.read(0xab30, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab31));
|
assertEquals(0x00, bus.read(0xab31, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0xab32));
|
assertEquals(0x01, bus.read(0xab32, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x22, bus.read(0xab33));
|
assertEquals(0x22, bus.read(0xab33, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0xab34));
|
assertEquals(0x40, bus.read(0xab34, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
// Setting Carry should not affect the result.
|
// Setting Carry should not affect the result.
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x01, bus.read(0xab35));
|
assertEquals(0x01, bus.read(0xab35, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -609,61 +609,61 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x30);
|
cpu.setXRegister(0x30);
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab40));
|
assertEquals(0x00, bus.read(0xab40, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x08, bus.read(0xab41));
|
assertEquals(0x08, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0xab41));
|
assertEquals(0x04, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0xab41));
|
assertEquals(0x02, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0xab41));
|
assertEquals(0x01, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab41));
|
assertEquals(0x00, bus.read(0xab41, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0xab41));
|
assertEquals(0x80, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0xab41));
|
assertEquals(0x40, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x20, bus.read(0xab41));
|
assertEquals(0x20, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x10, bus.read(0xab41));
|
assertEquals(0x10, bus.read(0xab41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -677,7 +677,7 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x00);
|
cpu.setAccumulator(0x00);
|
||||||
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab40));
|
assertEquals(0x00, bus.read(0xab40, true));
|
||||||
// STA should have NO affect on flags.
|
// STA should have NO affect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -688,7 +688,7 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x0f);
|
cpu.setAccumulator(0x0f);
|
||||||
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0xab40));
|
assertEquals(0x0f, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -698,7 +698,7 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x80);
|
cpu.setAccumulator(0x80);
|
||||||
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0xab40));
|
assertEquals(0x80, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -808,22 +808,22 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x30);
|
cpu.setXRegister(0x30);
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xff, bus.read(0xab40));
|
assertEquals(0xff, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab41));
|
assertEquals(0x00, bus.read(0xab41, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x7f, bus.read(0xab42));
|
assertEquals(0x7f, bus.read(0xab42, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xfe, bus.read(0xab43));
|
assertEquals(0xfe, bus.read(0xab43, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -1051,17 +1051,17 @@ public class CpuAbsoluteXModeTest extends TestCase {
|
|||||||
0xfe, 0x12, 0xab); // INC $ab12,X
|
0xfe, 0x12, 0xab); // INC $ab12,X
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0xab30));
|
assertEquals(0x01, bus.read(0xab30, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0xab31));
|
assertEquals(0x80, bus.read(0xab31, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab32));
|
assertEquals(0x00, bus.read(0xab32, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -411,7 +411,7 @@ public class CpuAbsoluteYModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x00);
|
cpu.setAccumulator(0x00);
|
||||||
bus.loadProgram(0x99, 0x10, 0xab); // STA $ab10,Y
|
bus.loadProgram(0x99, 0x10, 0xab); // STA $ab10,Y
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab40));
|
assertEquals(0x00, bus.read(0xab40, true));
|
||||||
// STA should have NO effect on flags
|
// STA should have NO effect on flags
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -423,7 +423,7 @@ public class CpuAbsoluteYModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x0f);
|
cpu.setAccumulator(0x0f);
|
||||||
bus.loadProgram(0x99, 0x10, 0xab); // STA $ab10,Y
|
bus.loadProgram(0x99, 0x10, 0xab); // STA $ab10,Y
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0xab40));
|
assertEquals(0x0f, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -433,7 +433,7 @@ public class CpuAbsoluteYModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x80);
|
cpu.setAccumulator(0x80);
|
||||||
bus.loadProgram(0x99, 0x10, 0xab); // STA $ab10,Y
|
bus.loadProgram(0x99, 0x10, 0xab); // STA $ab10,Y
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0xab40));
|
assertEquals(0x80, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,10 +101,10 @@ public class CpuImpliedModeTest {
|
|||||||
cpu.step(); // Triggers the BRK
|
cpu.step(); // Triggers the BRK
|
||||||
|
|
||||||
// Was at PC = 0x204. PC+1 should now be on the stack
|
// Was at PC = 0x204. PC+1 should now be on the stack
|
||||||
assertEquals(0x02, bus.read(0x1ff)); // PC high byte
|
assertEquals(0x02, bus.read(0x1ff, true)); // PC high byte
|
||||||
assertEquals(0x05, bus.read(0x1fe)); // PC low byte
|
assertEquals(0x05, bus.read(0x1fe, true)); // PC low byte
|
||||||
assertEquals(0x20 | Cpu.P_CARRY | Cpu.P_OVERFLOW | Cpu.P_BREAK,
|
assertEquals(0x20 | Cpu.P_CARRY | Cpu.P_OVERFLOW | Cpu.P_BREAK,
|
||||||
bus.read(0x1fd)); // Processor Status, with B set
|
bus.read(0x1fd, true)); // Processor Status, with B set
|
||||||
|
|
||||||
// Interrupt vector held 0x1234, so we should be there.
|
// Interrupt vector held 0x1234, so we should be there.
|
||||||
assertEquals(0x1234, cpu.getProgramCounter());
|
assertEquals(0x1234, cpu.getProgramCounter());
|
||||||
@@ -149,10 +149,10 @@ public class CpuImpliedModeTest {
|
|||||||
|
|
||||||
|
|
||||||
// Was at PC = 0x204. PC+1 should now be on the stack
|
// Was at PC = 0x204. PC+1 should now be on the stack
|
||||||
assertEquals(0x02, bus.read(0x1ff)); // PC high byte
|
assertEquals(0x02, bus.read(0x1ff, true)); // PC high byte
|
||||||
assertEquals(0x05, bus.read(0x1fe)); // PC low byte
|
assertEquals(0x05, bus.read(0x1fe, true)); // PC low byte
|
||||||
assertEquals(0x20 | Cpu.P_CARRY | Cpu.P_OVERFLOW | Cpu.P_BREAK | Cpu.P_IRQ_DISABLE,
|
assertEquals(0x20 | Cpu.P_CARRY | Cpu.P_OVERFLOW | Cpu.P_BREAK | Cpu.P_IRQ_DISABLE,
|
||||||
bus.read(0x1fd)); // Processor Status, with B set
|
bus.read(0x1fd, true)); // Processor Status, with B set
|
||||||
|
|
||||||
// Interrupt vector held 0x1234, so we should be there.
|
// Interrupt vector held 0x1234, so we should be there.
|
||||||
assertEquals(0x1234, cpu.getProgramCounter());
|
assertEquals(0x1234, cpu.getProgramCounter());
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ public class CpuIndexedIndirectModeTest {
|
|||||||
cpu.step(1);
|
cpu.step(1);
|
||||||
|
|
||||||
assertEquals(0x35, cpu.getAccumulator());
|
assertEquals(0x35, cpu.getAccumulator());
|
||||||
assertEquals(0x31, bus.read(0xc51f));
|
assertEquals(0x31, bus.read(0xc51f, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -103,6 +103,6 @@ public class CpuIndexedIndirectModeTest {
|
|||||||
cpu.step(1);
|
cpu.step(1);
|
||||||
|
|
||||||
assertEquals(0x11, cpu.getAccumulator());
|
assertEquals(0x11, cpu.getAccumulator());
|
||||||
assertEquals(0x31, bus.read(0xc51f));
|
assertEquals(0x31, bus.read(0xc51f, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -62,7 +62,7 @@ public class CpuIndirectIndexedModeTest {
|
|||||||
cpu.step(1);
|
cpu.step(1);
|
||||||
|
|
||||||
assertEquals(0xf3, cpu.getAccumulator());
|
assertEquals(0xf3, cpu.getAccumulator());
|
||||||
assertEquals(0xe3, bus.read(0xd828));
|
assertEquals(0xe3, bus.read(0xd828, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -78,7 +78,7 @@ public class CpuIndirectIndexedModeTest {
|
|||||||
cpu.step(1);
|
cpu.step(1);
|
||||||
|
|
||||||
assertEquals(0x22, cpu.getAccumulator());
|
assertEquals(0x22, cpu.getAccumulator());
|
||||||
assertEquals(0xe3, bus.read(0xd828));
|
assertEquals(0xe3, bus.read(0xd828, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -411,7 +411,7 @@ public class CpuIndirectXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x00);
|
cpu.setAccumulator(0x00);
|
||||||
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0xab40));
|
assertEquals(0x00, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -422,7 +422,7 @@ public class CpuIndirectXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x0f);
|
cpu.setAccumulator(0x0f);
|
||||||
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0xab40));
|
assertEquals(0x0f, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -432,7 +432,7 @@ public class CpuIndirectXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x80);
|
cpu.setAccumulator(0x80);
|
||||||
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
bus.loadProgram(0x9d, 0x10, 0xab); // STA $ab10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0xab40));
|
assertEquals(0x80, bus.read(0xab40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,61 +71,61 @@ public class CpuTest extends TestCase {
|
|||||||
|
|
||||||
public void testStackPush() throws MemoryAccessException {
|
public void testStackPush() throws MemoryAccessException {
|
||||||
assertEquals(0xff, cpu.getStackPointer());
|
assertEquals(0xff, cpu.getStackPointer());
|
||||||
assertEquals(0x00, bus.read(0x1ff));
|
assertEquals(0x00, bus.read(0x1ff, true));
|
||||||
|
|
||||||
cpu.stackPush(0x06);
|
cpu.stackPush(0x06);
|
||||||
assertEquals(0xfe, cpu.getStackPointer());
|
assertEquals(0xfe, cpu.getStackPointer());
|
||||||
assertEquals(0x06, bus.read(0x1ff));
|
assertEquals(0x06, bus.read(0x1ff, true));
|
||||||
|
|
||||||
cpu.stackPush(0x05);
|
cpu.stackPush(0x05);
|
||||||
assertEquals(0xfd, cpu.getStackPointer());
|
assertEquals(0xfd, cpu.getStackPointer());
|
||||||
assertEquals(0x06, bus.read(0x1ff));
|
assertEquals(0x06, bus.read(0x1ff, true));
|
||||||
assertEquals(0x05, bus.read(0x1fe));
|
assertEquals(0x05, bus.read(0x1fe, true));
|
||||||
|
|
||||||
cpu.stackPush(0x04);
|
cpu.stackPush(0x04);
|
||||||
assertEquals(0xfc, cpu.getStackPointer());
|
assertEquals(0xfc, cpu.getStackPointer());
|
||||||
assertEquals(0x06, bus.read(0x1ff));
|
assertEquals(0x06, bus.read(0x1ff, true));
|
||||||
assertEquals(0x05, bus.read(0x1fe));
|
assertEquals(0x05, bus.read(0x1fe, true));
|
||||||
assertEquals(0x04, bus.read(0x1fd));
|
assertEquals(0x04, bus.read(0x1fd, true));
|
||||||
|
|
||||||
cpu.stackPush(0x03);
|
cpu.stackPush(0x03);
|
||||||
assertEquals(0xfb, cpu.getStackPointer());
|
assertEquals(0xfb, cpu.getStackPointer());
|
||||||
assertEquals(0x06, bus.read(0x1ff));
|
assertEquals(0x06, bus.read(0x1ff, true));
|
||||||
assertEquals(0x05, bus.read(0x1fe));
|
assertEquals(0x05, bus.read(0x1fe, true));
|
||||||
assertEquals(0x04, bus.read(0x1fd));
|
assertEquals(0x04, bus.read(0x1fd, true));
|
||||||
assertEquals(0x03, bus.read(0x1fc));
|
assertEquals(0x03, bus.read(0x1fc, true));
|
||||||
|
|
||||||
cpu.stackPush(0x02);
|
cpu.stackPush(0x02);
|
||||||
assertEquals(0xfa, cpu.getStackPointer());
|
assertEquals(0xfa, cpu.getStackPointer());
|
||||||
assertEquals(0x06, bus.read(0x1ff));
|
assertEquals(0x06, bus.read(0x1ff, true));
|
||||||
assertEquals(0x05, bus.read(0x1fe));
|
assertEquals(0x05, bus.read(0x1fe, true));
|
||||||
assertEquals(0x04, bus.read(0x1fd));
|
assertEquals(0x04, bus.read(0x1fd, true));
|
||||||
assertEquals(0x03, bus.read(0x1fc));
|
assertEquals(0x03, bus.read(0x1fc, true));
|
||||||
assertEquals(0x02, bus.read(0x1fb));
|
assertEquals(0x02, bus.read(0x1fb, true));
|
||||||
|
|
||||||
cpu.stackPush(0x01);
|
cpu.stackPush(0x01);
|
||||||
assertEquals(0xf9, cpu.getStackPointer());
|
assertEquals(0xf9, cpu.getStackPointer());
|
||||||
assertEquals(0x06, bus.read(0x1ff));
|
assertEquals(0x06, bus.read(0x1ff, true));
|
||||||
assertEquals(0x05, bus.read(0x1fe));
|
assertEquals(0x05, bus.read(0x1fe, true));
|
||||||
assertEquals(0x04, bus.read(0x1fd));
|
assertEquals(0x04, bus.read(0x1fd, true));
|
||||||
assertEquals(0x03, bus.read(0x1fc));
|
assertEquals(0x03, bus.read(0x1fc, true));
|
||||||
assertEquals(0x02, bus.read(0x1fb));
|
assertEquals(0x02, bus.read(0x1fb, true));
|
||||||
assertEquals(0x01, bus.read(0x1fa));
|
assertEquals(0x01, bus.read(0x1fa, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testStackPushWrapsAroundToStackTop() throws MemoryAccessException {
|
public void testStackPushWrapsAroundToStackTop() throws MemoryAccessException {
|
||||||
cpu.setStackPointer(0x01);
|
cpu.setStackPointer(0x01);
|
||||||
|
|
||||||
cpu.stackPush(0x01);
|
cpu.stackPush(0x01);
|
||||||
assertEquals(0x01, bus.read(0x101));
|
assertEquals(0x01, bus.read(0x101, true));
|
||||||
assertEquals(0x00, cpu.getStackPointer());
|
assertEquals(0x00, cpu.getStackPointer());
|
||||||
|
|
||||||
cpu.stackPush(0x02);
|
cpu.stackPush(0x02);
|
||||||
assertEquals(0x02, bus.read(0x100));
|
assertEquals(0x02, bus.read(0x100, true));
|
||||||
assertEquals(0xff, cpu.getStackPointer());
|
assertEquals(0xff, cpu.getStackPointer());
|
||||||
|
|
||||||
cpu.stackPush(0x03);
|
cpu.stackPush(0x03);
|
||||||
assertEquals(0x03, bus.read(0x1ff));
|
assertEquals(0x03, bus.read(0x1ff, true));
|
||||||
assertEquals(0xfe, cpu.getStackPointer());
|
assertEquals(0xfe, cpu.getStackPointer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -119,31 +119,31 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
0x06, 0x04);
|
0x06, 0x04);
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x0000));
|
assertEquals(0x00, bus.read(0x0000, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x0001));
|
assertEquals(0x02, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0x0002));
|
assertEquals(0x04, bus.read(0x0002, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x88, bus.read(0x0003));
|
assertEquals(0x88, bus.read(0x0003, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x0004));
|
assertEquals(0x00, bus.read(0x0004, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
@@ -274,61 +274,61 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
0x26, 0x01); // ROL $01 (m=%10000001, c=0)
|
0x26, 0x01); // ROL $01 (m=%10000001, c=0)
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x0000));
|
assertEquals(0x00, bus.read(0x0000, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x0001));
|
assertEquals(0x02, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x05, bus.read(0x0001));
|
assertEquals(0x05, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0a, bus.read(0x0001));
|
assertEquals(0x0a, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x14, bus.read(0x0001));
|
assertEquals(0x14, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x28, bus.read(0x0001));
|
assertEquals(0x28, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x50, bus.read(0x0001));
|
assertEquals(0x50, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xa0, bus.read(0x0001));
|
assertEquals(0xa0, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x0001));
|
assertEquals(0x40, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x81, bus.read(0x0001));
|
assertEquals(0x81, bus.read(0x0001, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -387,38 +387,38 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
0x46, 0x05); // LSR $05
|
0x46, 0x05); // LSR $05
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x0000));
|
assertEquals(0x00, bus.read(0x0000, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x0001));
|
assertEquals(0x00, bus.read(0x0001, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x0002));
|
assertEquals(0x01, bus.read(0x0002, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x22, bus.read(0x0003));
|
assertEquals(0x22, bus.read(0x0003, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x0004));
|
assertEquals(0x40, bus.read(0x0004, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
// Setting Carry should not affect the result.
|
// Setting Carry should not affect the result.
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x01, bus.read(0x0005));
|
assertEquals(0x01, bus.read(0x0005, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -623,61 +623,61 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
0x66, 0x11); // ROR $01 (m=%00010000, c=0)
|
0x66, 0x11); // ROR $01 (m=%00010000, c=0)
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x10));
|
assertEquals(0x00, bus.read(0x10, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x08, bus.read(0x11));
|
assertEquals(0x08, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0x11));
|
assertEquals(0x04, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x11));
|
assertEquals(0x02, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x11));
|
assertEquals(0x01, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x11));
|
assertEquals(0x00, bus.read(0x11, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x11));
|
assertEquals(0x80, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x11));
|
assertEquals(0x40, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x20, bus.read(0x11));
|
assertEquals(0x20, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x10, bus.read(0x11));
|
assertEquals(0x10, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -689,7 +689,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x00);
|
cpu.setYRegister(0x00);
|
||||||
bus.loadProgram(0x84, 0x10);
|
bus.loadProgram(0x84, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x10));
|
assertEquals(0x00, bus.read(0x10, true));
|
||||||
// Should have no effect on flags.
|
// Should have no effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -699,7 +699,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x0f);
|
cpu.setYRegister(0x0f);
|
||||||
bus.loadProgram(0x84, 0x10);
|
bus.loadProgram(0x84, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x10));
|
assertEquals(0x0f, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -708,7 +708,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x80);
|
cpu.setYRegister(0x80);
|
||||||
bus.loadProgram(0x84, 0x10);
|
bus.loadProgram(0x84, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x10));
|
assertEquals(0x80, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -719,7 +719,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x00);
|
cpu.setAccumulator(0x00);
|
||||||
bus.loadProgram(0x85, 0x10);
|
bus.loadProgram(0x85, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x10));
|
assertEquals(0x00, bus.read(0x10, true));
|
||||||
// Should have no effect on flags.
|
// Should have no effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -729,7 +729,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x0f);
|
cpu.setAccumulator(0x0f);
|
||||||
bus.loadProgram(0x85, 0x10);
|
bus.loadProgram(0x85, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x10));
|
assertEquals(0x0f, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -738,7 +738,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x80);
|
cpu.setAccumulator(0x80);
|
||||||
bus.loadProgram(0x85, 0x10);
|
bus.loadProgram(0x85, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x10));
|
assertEquals(0x80, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -749,7 +749,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x00);
|
cpu.setXRegister(0x00);
|
||||||
bus.loadProgram(0x86, 0x10);
|
bus.loadProgram(0x86, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x10));
|
assertEquals(0x00, bus.read(0x10, true));
|
||||||
// Should have no effect on flags.
|
// Should have no effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -759,7 +759,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x0f);
|
cpu.setXRegister(0x0f);
|
||||||
bus.loadProgram(0x86, 0x10);
|
bus.loadProgram(0x86, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x10));
|
assertEquals(0x0f, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -768,7 +768,7 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x80);
|
cpu.setXRegister(0x80);
|
||||||
bus.loadProgram(0x86, 0x10);
|
bus.loadProgram(0x86, 0x10);
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x10));
|
assertEquals(0x80, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -926,22 +926,22 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
0xc6, 0x13); // DEC $13
|
0xc6, 0x13); // DEC $13
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xff, bus.read(0x10));
|
assertEquals(0xff, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x11));
|
assertEquals(0x00, bus.read(0x11, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x7f, bus.read(0x12));
|
assertEquals(0x7f, bus.read(0x12, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xfe, bus.read(0x13));
|
assertEquals(0xfe, bus.read(0x13, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -1182,17 +1182,17 @@ public class CpuZeroPageModeTest extends TestCase {
|
|||||||
0xe6, 0x12); // INC $12
|
0xe6, 0x12); // INC $12
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x10));
|
assertEquals(0x01, bus.read(0x10, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x11));
|
assertEquals(0x80, bus.read(0x11, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x12));
|
assertEquals(0x00, bus.read(0x12, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,38 +131,38 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
0x16, 0xd2); // ASL $d2,X
|
0x16, 0xd2); // ASL $d2,X
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x30));
|
assertEquals(0x00, bus.read(0x30, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x31));
|
assertEquals(0x02, bus.read(0x31, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0x32));
|
assertEquals(0x04, bus.read(0x32, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x88, bus.read(0x33));
|
assertEquals(0x88, bus.read(0x33, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x34));
|
assertEquals(0x00, bus.read(0x34, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
// Should wrap around, d2 + 30 = 02
|
// Should wrap around, d2 + 30 = 02
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x02));
|
assertEquals(0x02, bus.read(0x02, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -251,61 +251,61 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
0x36, 0x01); // ROL $01,X (m=%10000001, c=0)
|
0x36, 0x01); // ROL $01,X (m=%10000001, c=0)
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x70));
|
assertEquals(0x00, bus.read(0x70, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x71));
|
assertEquals(0x02, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x05, bus.read(0x71));
|
assertEquals(0x05, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0a, bus.read(0x71));
|
assertEquals(0x0a, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x14, bus.read(0x71));
|
assertEquals(0x14, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x28, bus.read(0x71));
|
assertEquals(0x28, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x50, bus.read(0x71));
|
assertEquals(0x50, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xa0, bus.read(0x71));
|
assertEquals(0xa0, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x71));
|
assertEquals(0x40, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x81, bus.read(0x71));
|
assertEquals(0x81, bus.read(0x71, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -368,38 +368,38 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
0x56, 0x05); // LSR $05,X
|
0x56, 0x05); // LSR $05,X
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x30));
|
assertEquals(0x00, bus.read(0x30, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x31));
|
assertEquals(0x00, bus.read(0x31, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x32));
|
assertEquals(0x01, bus.read(0x32, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x22, bus.read(0x33));
|
assertEquals(0x22, bus.read(0x33, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x34));
|
assertEquals(0x40, bus.read(0x34, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
// Setting Carry should not affect the result.
|
// Setting Carry should not affect the result.
|
||||||
cpu.step(2);
|
cpu.step(2);
|
||||||
assertEquals(0x01, bus.read(0x35));
|
assertEquals(0x01, bus.read(0x35, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -641,61 +641,61 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x30);
|
cpu.setXRegister(0x30);
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x40));
|
assertEquals(0x00, bus.read(0x40, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x08, bus.read(0x41));
|
assertEquals(0x08, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x04, bus.read(0x41));
|
assertEquals(0x04, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x02, bus.read(0x41));
|
assertEquals(0x02, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x41));
|
assertEquals(0x01, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x41));
|
assertEquals(0x00, bus.read(0x41, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertTrue(cpu.getCarryFlag());
|
assertTrue(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x41));
|
assertEquals(0x80, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x40, bus.read(0x41));
|
assertEquals(0x40, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x20, bus.read(0x41));
|
assertEquals(0x20, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x10, bus.read(0x41));
|
assertEquals(0x10, bus.read(0x41, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
assertFalse(cpu.getCarryFlag());
|
assertFalse(cpu.getCarryFlag());
|
||||||
@@ -708,7 +708,7 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x00);
|
cpu.setYRegister(0x00);
|
||||||
bus.loadProgram(0x94, 0x10); // STY $10,X
|
bus.loadProgram(0x94, 0x10); // STY $10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x40));
|
assertEquals(0x00, bus.read(0x40, true));
|
||||||
// Should have no effect on flags.
|
// Should have no effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -719,7 +719,7 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x0f);
|
cpu.setYRegister(0x0f);
|
||||||
bus.loadProgram(0x94, 0x10); // STY $10,X
|
bus.loadProgram(0x94, 0x10); // STY $10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x40));
|
assertEquals(0x0f, bus.read(0x40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -729,7 +729,7 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setYRegister(0x80);
|
cpu.setYRegister(0x80);
|
||||||
bus.loadProgram(0x94, 0x10); // STY $10,X
|
bus.loadProgram(0x94, 0x10); // STY $10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x40));
|
assertEquals(0x80, bus.read(0x40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -742,7 +742,7 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x00);
|
cpu.setAccumulator(0x00);
|
||||||
bus.loadProgram(0x95, 0x10); // STA $10,X
|
bus.loadProgram(0x95, 0x10); // STA $10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x40));
|
assertEquals(0x00, bus.read(0x40, true));
|
||||||
// Should have no effect on flags.
|
// Should have no effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -753,7 +753,7 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x0f);
|
cpu.setAccumulator(0x0f);
|
||||||
bus.loadProgram(0x95, 0x10); // STA $10,X
|
bus.loadProgram(0x95, 0x10); // STA $10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x40));
|
assertEquals(0x0f, bus.read(0x40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -763,7 +763,7 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setAccumulator(0x80);
|
cpu.setAccumulator(0x80);
|
||||||
bus.loadProgram(0x95, 0x10); // STA $10,X
|
bus.loadProgram(0x95, 0x10); // STA $10,X
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x40));
|
assertEquals(0x80, bus.read(0x40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -873,22 +873,22 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x30);
|
cpu.setXRegister(0x30);
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xff, bus.read(0x40));
|
assertEquals(0xff, bus.read(0x40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x41));
|
assertEquals(0x00, bus.read(0x41, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x7f, bus.read(0x42));
|
assertEquals(0x7f, bus.read(0x42, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0xfe, bus.read(0x43));
|
assertEquals(0xfe, bus.read(0x43, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
@@ -1116,17 +1116,17 @@ public class CpuZeroPageXModeTest extends TestCase {
|
|||||||
0xf6, 0x12); // INC $12,X
|
0xf6, 0x12); // INC $12,X
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x01, bus.read(0x30));
|
assertEquals(0x01, bus.read(0x30, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x31));
|
assertEquals(0x80, bus.read(0x31, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertTrue(cpu.getNegativeFlag());
|
assertTrue(cpu.getNegativeFlag());
|
||||||
|
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x32));
|
assertEquals(0x00, bus.read(0x32, true));
|
||||||
assertTrue(cpu.getZeroFlag());
|
assertTrue(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public class CpuZeroPageYModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x00);
|
cpu.setXRegister(0x00);
|
||||||
bus.loadProgram(0x96, 0x10); // STX $10,Y
|
bus.loadProgram(0x96, 0x10); // STX $10,Y
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x00, bus.read(0x40));
|
assertEquals(0x00, bus.read(0x40, true));
|
||||||
// Should have no effect on flags.
|
// Should have no effect on flags.
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
@@ -57,7 +57,7 @@ public class CpuZeroPageYModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x0f);
|
cpu.setXRegister(0x0f);
|
||||||
bus.loadProgram(0x96, 0x10); // STX $10,Y
|
bus.loadProgram(0x96, 0x10); // STX $10,Y
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x0f, bus.read(0x40));
|
assertEquals(0x0f, bus.read(0x40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ public class CpuZeroPageYModeTest extends TestCase {
|
|||||||
cpu.setXRegister(0x80);
|
cpu.setXRegister(0x80);
|
||||||
bus.loadProgram(0x96, 0x10); // STX $10,Y
|
bus.loadProgram(0x96, 0x10); // STX $10,Y
|
||||||
cpu.step();
|
cpu.step();
|
||||||
assertEquals(0x80, bus.read(0x40));
|
assertEquals(0x80, bus.read(0x40, true));
|
||||||
assertFalse(cpu.getZeroFlag());
|
assertFalse(cpu.getZeroFlag());
|
||||||
assertFalse(cpu.getNegativeFlag());
|
assertFalse(cpu.getNegativeFlag());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -242,19 +242,19 @@ public class CrtcTest {
|
|||||||
crtc.write(0, 12); // High byte
|
crtc.write(0, 12); // High byte
|
||||||
|
|
||||||
crtc.write(1, 0x03);
|
crtc.write(1, 0x03);
|
||||||
assertEquals(0, crtc.read(1));
|
assertEquals(0, crtc.read(1, true));
|
||||||
|
|
||||||
crtc.write(1, 0x70);
|
crtc.write(1, 0x70);
|
||||||
assertEquals(0, crtc.read(1));
|
assertEquals(0, crtc.read(1, true));
|
||||||
|
|
||||||
|
|
||||||
crtc.write(0, 13); // Low byte
|
crtc.write(0, 13); // Low byte
|
||||||
|
|
||||||
crtc.write(1, 0xff);
|
crtc.write(1, 0xff);
|
||||||
assertEquals(0, crtc.read(1));
|
assertEquals(0, crtc.read(1, true));
|
||||||
|
|
||||||
crtc.write(1, 0x0e);
|
crtc.write(1, 0x0e);
|
||||||
assertEquals(0, crtc.read(1));
|
assertEquals(0, crtc.read(1, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -278,10 +278,10 @@ public class CrtcTest {
|
|||||||
crtc.write(0, 14);
|
crtc.write(0, 14);
|
||||||
|
|
||||||
crtc.write(1, 0x3f);
|
crtc.write(1, 0x3f);
|
||||||
assertEquals(0x3f, crtc.read(1));
|
assertEquals(0x3f, crtc.read(1, true));
|
||||||
|
|
||||||
crtc.write(1, 0x70);
|
crtc.write(1, 0x70);
|
||||||
assertEquals(0x70, crtc.read(1));
|
assertEquals(0x70, crtc.read(1, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -313,13 +313,13 @@ public class CrtcTest {
|
|||||||
crtc.write(0, 15);
|
crtc.write(0, 15);
|
||||||
|
|
||||||
crtc.write(1, 0x00);
|
crtc.write(1, 0x00);
|
||||||
assertEquals(0x00, crtc.read(1));
|
assertEquals(0x00, crtc.read(1, true));
|
||||||
|
|
||||||
crtc.write(1, 0x1f);
|
crtc.write(1, 0x1f);
|
||||||
assertEquals(0x1f, crtc.read(1));
|
assertEquals(0x1f, crtc.read(1, true));
|
||||||
|
|
||||||
crtc.write(1, 0xff);
|
crtc.write(1, 0xff);
|
||||||
assertEquals(0xff, crtc.read(1));
|
assertEquals(0xff, crtc.read(1, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user