nes-emu
Version:
A NES emulator
42 lines (41 loc) • 1.4 kB
JavaScript
;
var _createTestContext = _interopRequireDefault(require("../../helpers/createTestContext"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const should = require("chai").Should();
const ADDRESS = 0x2002;
describe("CPU/PPU registers interaction", () => {
describe("PPUStatus", () => {
let ppu, memory, register;
beforeEach(() => {
({
ppu,
memory
} = (0, _createTestContext.default)());
register = ppu.registers.ppuStatus;
});
it("is read-only", () => {
register.setValue(123);
memory.readAt(ADDRESS).should.equal(123);
memory.writeAt(ADDRESS, 456);
memory.readAt(ADDRESS).should.equal(123);
});
it("can read the register", () => {
memory.readAt(ADDRESS).should.equal(0b10000000);
register.spriteOverflow = 1;
register.sprite0Hit = 1;
memory.readAt(ADDRESS).should.equal(0b01100000);
});
describe("side effects", () => {
it("resets the vertical blank flag on every read", () => {
register.isInVBlankInterval = 1;
memory.readAt(ADDRESS);
register.isInVBlankInterval.should.equal(0);
});
it("resets PPUAddr's latch on every read", () => {
ppu.loopy.latch = true;
memory.readAt(ADDRESS);
ppu.registers.ppuAddr.latch.should.equal(false);
});
});
});
});