|
- const expect = require('chai').expect;
- const CPU = require('../src/MOS6502/cpu.js');
- const Mem = require('../src/memory');
-
-
- describe("Testing MOS6502 CPU...", function(){
- var cpu = new CPU();
- var tick = cpu.clk();
- cpu.memory = new Mem.Memory.RAM(256);
- cpu.memory.load(0xFFFC, [0x00, 0x00]);
-
- it("Resetting (IRQ Disabled flag must be on", function(){
- cpu.reset = true;
- tick(); // One tick to handle resets.
- expect(cpu.I).to.equal(1);
- expect(cpu.PC).to.equal(0); // Test program counter set to the vector stored at 0xFFFC - 0xFFFD
- });
-
- describe("Testing flag set/clear calls...", function(){
- it("CLC / SEC", function(){
- cpu.memory.clearPage(0);
- cpu.memory.load(0, [0x18, 0x38]);
- cpu.reset = true;
- tick(); // reset.
- tick(); tick(); // Two ticks to process opcode.
- expect(cpu.C).to.equal(0);
- tick(); tick();
- expect(cpu.C).to.equal(1);
- });
-
- it("CLI / SEI", function(){
- cpu.memory.clearPage(0);
- cpu.memory.load(0, [0x58, 0x78]);
- cpu.reset = true;
- tick();
- tick(); tick();
- expect(cpu.I).to.equal(0);
- tick(); tick();
- expect(cpu.I).to.equal(1);
- });
-
- it("CLD / SED", function(){
- cpu.memory.clearPage(0);
- cpu.memory.load(0, [0xD8, 0xF8]);
- cpu.reset = true;
- tick();
- tick(); tick();
- expect(cpu.D).to.equal(0);
- tick(); tick();
- expect(cpu.D).to.equal(1);
- });
-
- it("CLV", function(){
- cpu.memory.clearPage(0);
- cpu.memory.load(0, [0xB8]);
- cpu.reset = true;
- tick();
- tick(); tick();
- expect(cpu.V).to.equal(0);
- });
- });
-
- describe("Testing LDA...", function(){
- it("LDA Immediate", function(){
- cpu.memory.clearPage(0);
- cpu.memory.load(0, [0xA9, 0x01, 0xA9, 0xBB]);
- cpu.reset = true;
- tick();
- tick();
- tick();
- expect(cpu.A).to.equal(0x01);
- tick();
- expect(cpu.A).to.equal(0x01);
- tick();
- expect(cpu.A).to.equal(0xBB);
- });
-
- it("LDA Zero Page");
- it("LDA Zero Page, X");
- it("LDA Absolute");
- it("LDA Absolute, X");
- it("LDA Absolute, Y");
- it("LDA Indirect, X");
- it("LDA Indirect, Y");
- });
-
- describe("Testing ADC...", function(){
- it("ADC Immediate", function(){
- cpu.memory.clearPage(0);
- // CLC
- // CLV
- // CLD
- // CLI
- // LDA $00
- // ADC $01
- // ADC $01
- cpu.memory.load(0, [0x18, 0xB8, 0xD8, 0x58, 0xA9, 0x00, 0x69, 0x01, 0x69, 0x01]);
- cpu.reset = true;
- tick();
- // Getting through the 4 clear flag calls. Each should take 2 ticks.
- tick(); tick(); tick(); tick(); tick(); tick(); tick(); tick();
- // Next two ticks for the LDA call
- tick(); tick();
- // Now processing the adds.
- expect(cpu.A).to.equal(0);
- tick();
- expect(cpu.A).to.equal(0);
- tick();
- expect(cpu.A).to.equal(1);
- tick();
- expect(cpu.A).to.equal(1);
- tick();
- expect(cpu.A).to.equal(2);
- });
-
- it("ADC Zero Page");
- it("ADC Zero Page, X");
- it("ADC Absolute");
- it("ADC Absolute, X");
- it("ADC Absolute, Y");
- it("ADC Indirect, X");
- it("ADC Indirect, Y");
-
- it ("ADC Test Zero flag"/*, function(){
- cpu.memory.clearPage(0);
- cpu.memory.load(0, [0x18, 0xB8, 0xD8, 0x58, 0x69, 0xFF, 0x69, 0x01]);
- // Getting through the 4 clear flag calls. Each should take 2 ticks.
- tick(); tick(); tick(); tick(); tick(); tick(); tick(); tick();
- // Now processing the adds.
- expect(cpu.A).to.equal(0);
- tick();
- expect(cpu.A).to.equal(0);
- tick();
- expect(cpu.A).to.equal(1);
- tick();
- expect(cpu.A).to.equal(1);
- tick();
- expect(cpu.A).to.equal(2);
- }*/);
- });
-
- describe("Testing SBC...", function(){
- it("SBC Immediate", function(){
- cpu.memory.clearPage(0);
- // SEC
- // CLV
- // CLD
- // CLI
- // LDA $00
- // SBC $01
- // SBC $01
- cpu.memory.load(0, [0x38, 0xB8, 0xD8, 0x58, 0xA9, 0x00, 0xE9, 0x01, 0xE9, 0x01]);
- cpu.reset = true;
- tick();
- // Getting through the 1 set and 3 clear flag calls. Each should take 2 ticks.
- tick(); tick(); tick(); tick(); tick(); tick(); tick(); tick();
- // Next two ticks for the LDA call
- tick(); tick();
- // Now processing the subtractions.
- expect(cpu.A).to.equal(0);
- tick();
- expect(cpu.A).to.equal(0);
- tick();
- expect(cpu.A).to.equal(0xFF);
- tick();
- expect(cpu.A).to.equal(0xFF);
- tick();
- expect(cpu.A).to.equal(0xFE);
- });
-
- it("SBC Zero Page");
- it("SBC Zero Page, X");
- it("SBC Absolute");
- it("SBC Absolute, X");
- it("SBC Absolute, Y");
- it("SBC Indirect, X");
- it("SBC Indirect, Y");
- });
- });
-
|