nes-emu
Version:
A NES emulator
99 lines (98 loc) • 2.37 kB
JavaScript
;
var _ = _interopRequireDefault(require("."));
var _createTestContext = _interopRequireDefault(require("../../helpers/createTestContext"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const should = require("chai").Should();
describe("instructions", () => {
describe("checks", () => {
let cpu, context;
beforeEach(() => {
({
cpu,
context
} = (0, _createTestContext.default)());
});
describe("BIT", () => {
[{
mask: 0b01100101,
value: 0b10011010,
z: true,
n: true,
v: false
}, {
mask: 0b11100101,
value: 0b01011010,
z: false,
n: false,
v: true
}].forEach(_ref => {
let {
mask,
value,
z,
n,
v
} = _ref;
it("sets the Z, N, and V flags with mask=0b".concat(mask.toString(2), " and value=0b").concat(value.toString(2)), () => {
cpu.registers.a.value = mask;
_.default.BIT.execute(context, value);
cpu.flags.z.should.equal(z);
cpu.flags.n.should.equal(n);
cpu.flags.v.should.equal(v);
});
});
});
[{
instruction: "CMP",
register: "a",
source: 10,
value: 120,
z: false,
n: true,
c: false
}, {
instruction: "CMP",
register: "a",
source: 112,
value: 2,
z: false,
n: false,
c: true
}, {
instruction: "CPX",
register: "x",
source: 100,
value: 100,
z: true,
n: false,
c: true
}, {
instruction: "CPY",
register: "y",
source: 240,
value: 30,
z: false,
n: true,
c: true
}].forEach(_ref2 => {
let {
instruction,
register,
source,
value,
z,
n,
c
} = _ref2;
describe(instruction, () => {
it("compares and sets the proper flags with ".concat(register, "=").concat(source, " and value=").concat(value), () => {
cpu.registers[register].value = source;
_.default[instruction].execute(context, value);
cpu.flags.z.should.equal(z);
cpu.flags.n.should.equal(n);
cpu.flags.c.should.equal(c);
});
});
});
});
});