|
- const expect = require('chai').expect;
- const Assembler = require('../src/MOS/6502/assembler.js');
-
-
- describe("Testing MOS6502 Assembler...", function(){
- var asm = new Assembler();
-
- it(".reset()", function(){
- asm.compile("ADC $44");
- asm.reset();
- expect(asm.PC).to.equal(0);
- expect(Object.keys(asm.variables).length).to.equal(0);
- expect(Object.keys(asm.jumplabels).length).to.equal(0);
- expect(asm.result().length).to.equal(0);
- });
-
- it(".result()", function(){
- asm.reset();
- asm.compile("ADC $44");
- expect(asm.result().length).to.be.gt(0);
- });
-
- describe(".compile()", function(){
- it(".define directive", function(){
- asm.compile(".define TAG $44");
- let vars = asm.variables;
- expect(vars).to.have.key('TAG');
- expect(vars['TAG']).to.equal(0x44);
- });
-
- it(".def directive (.define shorthand)", function(){
- asm.compile(".define TAG2 $55");
- let vars = asm.variables;
- expect(vars['TAG2']).to.exist;
- expect(vars['TAG2']).to.equal(0x55);
- });
-
- it("Jump labels", function(){
- let pc = asm.PC;
- asm.compile("loop:\nBNE loop");
- let jmp = asm.jumplabels;
- expect(jmp).to.have.key('loop');
- expect(jmp['loop']).to.equal(pc);
- });
-
- it(".bytes directive", function(){
- let res = asm.reset().compile(".BYTES $44, $55, $66, $77, b10110101, 128").result();
- expect(res.length).to.equal(6);
- expect(res[0]).to.equal(0x44);
- expect(res[1]).to.equal(0x55);
- expect(res[2]).to.equal(0x66);
- expect(res[3]).to.equal(0x77);
- expect(res[4]).to.equal(parseInt('10110101', 2));
- expect(res[5]).to.equal(128);
- });
-
- it(".byt directive (.bytes shorthand)", function(){
- let res = asm.reset().compile(".BYT $44, $55, $66").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x44);
- expect(res[1]).to.equal(0x55);
- expect(res[2]).to.equal(0x66);
- });
-
- it("Jump label before and after .byte directive", function(){
- asm.reset();
- let pc1 = asm.PC;
- asm.compile("bytes: .bytes $44, $55, $66, $77");
- let pc2 = asm.PC;
- asm.compile("loop: BNE loop");
-
- let jmp = asm.jumplabels;
- //expect(jmp).to.have.key('bytes');
- expect(jmp['bytes']).to.equal(pc1);
- //expect(jmp).to.have.key('loop');
- expect(jmp['loop']).to.equal(pc2);
-
- let res = asm.result();
- expect(res.length).to.equal(6);
- expect(res[0]).to.equal(0x44);
- expect(res[1]).to.equal(0x55);
- expect(res[2]).to.equal(0x66);
- expect(res[3]).to.equal(0x77);
- expect(res[4]).to.equal(0xD0);
- expect(res[5]).to.equal(0xFE);
- });
-
- it("ADC Immediate", function(){
- asm.reset();
- asm.compile("ADC #$44");
- let res = asm.result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x69);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ADC Zero Page", function(){
- asm.reset();
- asm.compile("ADC $44");
- let res = asm.result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x65);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ADC Zero Page, X", function(){
- asm.reset();
- asm.compile("ADC $44, X");
- let res = asm.result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x75);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ADC Absolute", function(){
- asm.reset();
- asm.compile("ADC $4400");
- let res = asm.result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x6D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ADC Absolute, X", function(){
- asm.reset();
- asm.compile("ADC $4400,X");
- let res = asm.result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x7D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ADC Absolute, Y", function(){
- asm.reset();
- asm.compile("ADC $4400, Y");
- let res = asm.result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x79);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ADC Indirect, X", function(){
- asm.reset();
- asm.compile("ADC ($44,X)");
- let res = asm.result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x61);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ADC Indirect, Y", function(){
- asm.reset();
- asm.compile("ADC ($44), Y");
- let res = asm.result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x71);
- expect(res[1]).to.equal(0x44);
- });
-
-
- // -------------------------------------------------------------
- it("AND Immediate", function(){
- let res = asm.reset().compile("AND #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x29);
- expect(res[1]).to.equal(0x44);
- });
-
- it("AND Zero Page", function(){
- let res = asm.reset().compile("AND $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x25);
- expect(res[1]).to.equal(0x44);
- });
-
- it("AND Zero Page, X", function(){
- let res = asm.reset().compile("AND $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x35);
- expect(res[1]).to.equal(0x44);
- });
-
- it("AND Absolute", function(){
- let res = asm.reset().compile("AND $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x2D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("AND Absolute, X", function(){
- let res = asm.reset().compile("AND $4400, X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x3D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("AND Absolute, Y", function(){
- let res = asm.reset().compile("AND $4400, Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x39);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("AND Indirect, X", function(){
- let res = asm.reset().compile("AND ($44, X)").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x21);
- expect(res[1]).to.equal(0x44);
- });
-
- it("AND Indirect, Y", function(){
- let res = asm.reset().compile("AND ($44), Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x31);
- expect(res[1]).to.equal(0x44);
- });
-
-
- // -------------------------------------------------------------
- it("ASL Accumulator", function(){
- let res = asm.reset().compile("ASL A").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x0A);
- });
-
- it("ASL Zero Page", function(){
- let res = asm.reset().compile("ASL $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x06);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ASL Zero Page, X", function(){
- let res = asm.reset().compile("ASL $44, X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x16);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ASL Absolute", function(){
- let res = asm.reset().compile("ASL $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x0E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ASL Absolute, X", function(){
- let res = asm.reset().compile("ASL $4400, X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x1E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("BIT Zero Page", function(){
- let res = asm.reset().compile("BIT $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x24);
- expect(res[1]).to.equal(0x44);
- });
-
- it("BIT Absolute", function(){
- let res = asm.reset().compile("BIT $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x2C);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("BPL", function(){
- let res = asm.reset().compile("NOP\nNOP\nBPL $0000").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0xEA);
- expect(res[1]).to.equal(0xEA);
- expect(res[2]).to.equal(0x10);
- expect(res[3]).to.equal(0xFC);
- });
-
- it("BMI", function(){
- let res = asm.reset().compile("BMI $0003\nNOP\nNOP").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0x30);
- expect(res[1]).to.equal(0x02);
- expect(res[2]).to.equal(0xEA);
- expect(res[3]).to.equal(0xEA);
- });
-
- it("BVC", function(){
- let res = asm.reset().compile("BVC $0003\nNOP\nNOP").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0x50);
- expect(res[1]).to.equal(0x02);
- expect(res[2]).to.equal(0xEA);
- expect(res[3]).to.equal(0xEA);
- });
-
- it("BVS", function(){
- let res = asm.reset().compile("NOP\nNOP\nBVS $0000").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0xEA);
- expect(res[1]).to.equal(0xEA);
- expect(res[2]).to.equal(0x70);
- expect(res[3]).to.equal(0xFC);
- });
-
- it("BCC", function(){
- let res = asm.reset().compile("BCC $0003\nNOP\nNOP").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0x90);
- expect(res[1]).to.equal(0x02);
- expect(res[2]).to.equal(0xEA);
- expect(res[3]).to.equal(0xEA);
- });
-
- it("BCS", function(){
- let res = asm.reset().compile("NOP\nNOP\nBCS $0000").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0xEA);
- expect(res[1]).to.equal(0xEA);
- expect(res[2]).to.equal(0xB0);
- expect(res[3]).to.equal(0xFC);
- });
-
- it("BNE", function(){
- let res = asm.reset().compile("BNE $0003\nNOP\nNOP").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0xD0);
- expect(res[1]).to.equal(0x02);
- expect(res[2]).to.equal(0xEA);
- expect(res[3]).to.equal(0xEA);
- });
-
- it("BEQ", function(){
- let res = asm.reset().compile("NOP\nNOP\nBEQ $0000").result();
- expect(res.length).to.equal(4);
- expect(res[0]).to.equal(0xEA);
- expect(res[1]).to.equal(0xEA);
- expect(res[2]).to.equal(0xF0);
- expect(res[3]).to.equal(0xFC);
- });
-
- it("Branch Too Far Back", function(){
- expect(()=>{
- let asm2 = new Assembler(0x1000);
- let res = asm2.compile("BNE $0000").result();
- }).to.throw("Branch exceeds maximum number of bytes on program address 1001");
- });
-
- it("Branch Too Far Forward", function(){
- expect(()=>{
- let res = asm.reset().compile("BNE $00F0").result();
- }).to.throw("Branch exceeds maximum number of bytes on program address 01");
- });
-
- // -------------------------------------------------------------
- it ("BRK", function(){
- asm.reset();
- let res = asm.compile("BRK").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x00);
- });
-
- // -------------------------------------------------------------
- it("CMP Immediate", function(){
- let res = asm.reset().compile("CMP #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xC9);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CMP Zero Page", function(){
- let res = asm.reset().compile("CMP $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xC5);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CMP Zero Page, X", function(){
- let res = asm.reset().compile("CMP $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xD5);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CMP Absolute", function(){
- let res = asm.reset().compile("CMP $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xCD);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("CMP Absolute, X", function(){
- let res = asm.reset().compile("CMP $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xDD);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("CMP Absolute, Y", function(){
- let res = asm.reset().compile("CMP $4400, Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xD9);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("CMP Indirect, X", function(){
- let res = asm.reset().compile("CMP ($44,X)").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xC1);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CMP Indirect, Y", function(){
- let res = asm.reset().compile("CMP ($44),Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xD1);
- expect(res[1]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("CPX Immediate", function(){
- let res = asm.reset().compile("CPX #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xE0);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CPX Zero Page", function(){
- let res = asm.reset().compile("CPX $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xE4);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CPX Absolute", function(){
- let res = asm.reset().compile("CPX $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xEC);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("CPY Immediate", function(){
- let res = asm.reset().compile("CPY #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xC0);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CPY Zero Page", function(){
- let res = asm.reset().compile("CPY $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xC4);
- expect(res[1]).to.equal(0x44);
- });
-
- it("CPY Absolute", function(){
- let res = asm.reset().compile("CPY $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xCC);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("DEC Zero Page", function(){
- let res = asm.reset().compile("DEC $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xC6);
- expect(res[1]).to.equal(0x44);
- });
-
- it("DEC Zero Page, X", function(){
- let res = asm.reset().compile("DEC $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xD6);
- expect(res[1]).to.equal(0x44);
- });
-
- it("DEC Absolute", function(){
- let res = asm.reset().compile("DEC $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xCE);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("DEC Absolute, X", function(){
- let res = asm.reset().compile("DEC $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xDE);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("EOR Immediate", function(){
- let res = asm.reset().compile("EOR #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x49);
- expect(res[1]).to.equal(0x44);
- });
-
- it("EOR Zero Page", function(){
- let res = asm.reset().compile("EOR $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x45);
- expect(res[1]).to.equal(0x44);
- });
-
- it("EOR Zero Page, X", function(){
- let res = asm.reset().compile("EOR $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x55);
- expect(res[1]).to.equal(0x44);
- });
-
- it("EOR Absolute", function(){
- let res = asm.reset().compile("EOR $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x4D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("EOR Absolute, X", function(){
- let res = asm.reset().compile("EOR $4400, X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x5D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("EOR Absolute, Y", function(){
- let res = asm.reset().compile("EOR $4400,Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x59);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("EOR Indirect, X", function(){
- let res = asm.reset().compile("EOR ($44,X)").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x41);
- expect(res[1]).to.equal(0x44);
- });
-
- it("EOR Indirect, Y", function(){
- let res = asm.reset().compile("EOR ($44),Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x51);
- expect(res[1]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("CLC", function(){
- asm.reset();
- let res = asm.compile("CLC").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x18);
- });
-
- it("CLD", function(){
- asm.reset();
- let res = asm.compile("CLD").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xD8);
- });
-
- it("CLI", function(){
- asm.reset();
- let res = asm.compile("CLI").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x58);
- });
-
- it("CLV", function(){
- asm.reset();
- let res = asm.compile("CLV").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xB8);
- });
-
- it("SEC", function(){
- asm.reset();
- let res = asm.compile("SEC").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x38);
- });
-
- it("SED", function(){
- asm.reset();
- let res = asm.compile("SED").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xF8);
- });
-
- it("SEI", function(){
- asm.reset();
- let res = asm.compile("SEI").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x78);
- });
-
- // -------------------------------------------------------------
- it("INC Zero Page", function(){
- let res = asm.reset().compile("INC $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xE6);
- expect(res[1]).to.equal(0x44);
- });
-
- it("INC Zero Page, X", function(){
- let res = asm.reset().compile("INC $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xF6);
- expect(res[1]).to.equal(0x44);
- });
-
- it("INC Absolute", function(){
- let res = asm.reset().compile("INC $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xEE);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("INC Absolute, X", function(){
- let res = asm.reset().compile("INC $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xFE);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("JMP Absolute", function(){
- let res = asm.reset().compile("JMP $2134").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x4C);
- expect(res[1]).to.equal(0x34);
- expect(res[2]).to.equal(0x21);
- });
-
- it("JMP Indirect", function(){
- let res = asm.reset().compile("JMP ($2134)").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x6C);
- expect(res[1]).to.equal(0x34);
- expect(res[2]).to.equal(0x21);
- });
-
- // -------------------------------------------------------------
- it("JSR Absolute", function(){
- let res = asm.reset().compile("JSR $5122").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x20);
- expect(res[1]).to.equal(0x22);
- expect(res[2]).to.equal(0x51);
- });
- // -------------------------------------------------------------
- it("LDA Immediate", function(){
- let res = asm.reset().compile("LDA #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xA9);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDA Zero Page", function(){
- let res = asm.reset().compile("LDA $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xA5);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDA Zero Page, X", function(){
- let res = asm.reset().compile("LDA $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xB5);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDA Absolute", function(){
- let res = asm.reset().compile("LDA $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xAD);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("LDA Absolute, X", function(){
- let res = asm.reset().compile("LDA $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xBD);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("LDA Absolute, Y", function(){
- let res = asm.reset().compile("LDA $4400, Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xB9);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("LDA Indirect, X", function(){
- let res = asm.reset().compile("LDA ($44,X)").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xA1);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDA Indirect, Y", function(){
- let res = asm.reset().compile("LDA ($44),Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xB1);
- expect(res[1]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("LDX Immediate", function(){
- let res = asm.reset().compile("LDX #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xA2);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDX Zero Page", function(){
- let res = asm.reset().compile("LDX $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xA6);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDX Zero Page, Y", function(){
- let res = asm.reset().compile("LDX $44,Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xB6);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDX Absolute", function(){
- let res = asm.reset().compile("LDX $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xAE);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("LDX Absolute, Y", function(){
- let res = asm.reset().compile("LDX $4400,Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xBE);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("LDY Immediate", function(){
- let res = asm.reset().compile("LDY #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xA0);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDY Zero Page", function(){
- let res = asm.reset().compile("LDY $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xA4);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDY Zero Page, X", function(){
- let res = asm.reset().compile("LDY $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xB4);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LDY Absolute", function(){
- let res = asm.reset().compile("LDY $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xAC);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("LDY Absolute, X", function(){
- let res = asm.reset().compile("LDY $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xBC);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("LSR Accumulator", function(){
- let res = asm.reset().compile("LSR A").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x4A);
- });
-
- it("LSR Zero Page", function(){
- let res = asm.reset().compile("LSR $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x46);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LSR Zero Page, X", function(){
- let res = asm.reset().compile("LSR $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x56);
- expect(res[1]).to.equal(0x44);
- });
-
- it("LSR Absolute", function(){
- let res = asm.reset().compile("LSR $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x4E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("LSR Absolute, X", function(){
- let res = asm.reset().compile("LSR $4400, X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x5E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("NOP", function(){
- asm.reset();
- let res = asm.compile("NOP").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xEA);
- });
-
- // -------------------------------------------------------------
- it("ORA Immediate", function(){
- let res = asm.reset().compile("ORA #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x09);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ORA Zero Page", function(){
- let res = asm.reset().compile("ORA $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x05);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ORA Zero Page, X", function(){
- let res = asm.reset().compile("ORA $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x15);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ORA Absolute", function(){
- let res = asm.reset().compile("ORA $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x0D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ORA Absolute, X", function(){
- let res = asm.reset().compile("ORA $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x1D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ORA Absolute, Y", function(){
- let res = asm.reset().compile("ORA $4400,Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x19);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ORA Indirect, X", function(){
- let res = asm.reset().compile("ORA ($44,X)").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x01);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ORA Indirect, Y", function(){
- let res = asm.reset().compile("ORA ($44), Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x11);
- expect(res[1]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("DEX", function(){
- asm.reset();
- let res = asm.compile("DEX").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xCA);
- });
-
- it("DEY", function(){
- asm.reset();
- let res = asm.compile("DEY").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x88);
- });
-
- it("INX", function(){
- asm.reset();
- let res = asm.compile("INX").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xE8);
- });
-
- it("INY", function(){
- asm.reset();
- let res = asm.compile("INY").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xC8);
- });
-
- it("TAX", function(){
- asm.reset();
- let res = asm.compile("TAX").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xAA);
- });
-
- it("TAY", function(){
- asm.reset();
- let res = asm.compile("TAY").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xA8);
- });
-
- it("TXA", function(){
- asm.reset();
- let res = asm.compile("TXA").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x8A);
- });
-
- it("TYA", function(){
- asm.reset();
- let res = asm.compile("TYA").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x98);
- });
-
- // -------------------------------------------------------------
- it("ROL Accumulator", function(){
- let res = asm.reset().compile("ROL A").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x2A);
- });
-
- it("ROL Zero Page", function(){
- let res = asm.reset().compile("ROL $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x26);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ROL Zero Page, X", function(){
- let res = asm.reset().compile("ROL $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x36);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ROL Absolute", function(){
- let res = asm.reset().compile("ROL $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x2E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ROL Absolute, X", function(){
- let res = asm.reset().compile("ROL $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x3E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("ROR Accumulator", function(){
- let res = asm.reset().compile("ROR A").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x6A);
- });
-
- it("ROR Zero Page", function(){
- let res = asm.reset().compile("ROR $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x66);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ROR Zero Page, X", function(){
- let res = asm.reset().compile("ROR $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x76);
- expect(res[1]).to.equal(0x44);
- });
-
- it("ROR Absolute", function(){
- let res = asm.reset().compile("ROR $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x6E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("ROR Absolute, X", function(){
- let res = asm.reset().compile("ROR $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x7E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("RTI", function(){
- asm.reset();
- let res = asm.compile("RTI").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x40);
- });
- it("RTS", function(){
- asm.reset();
- let res = asm.compile("RTS").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x60);
- });
-
- // -------------------------------------------------------------
- it("SBC Immediate", function(){
- let res = asm.reset().compile("SBC #$44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xE9);
- expect(res[1]).to.equal(0x44);
- });
-
- it("SBC Zero Page", function(){
- let res = asm.reset().compile("SBC $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xE5);
- expect(res[1]).to.equal(0x44);
- });
-
- it("SBC Zero Page, X", function(){
- let res = asm.reset().compile("SBC $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xF5);
- expect(res[1]).to.equal(0x44);
- });
-
- it("SBC Absolute", function(){
- let res = asm.reset().compile("SBC $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xED);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("SBC Absolute, X", function(){
- let res = asm.reset().compile("SBC $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xFD);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("SBC Absolute, Y", function(){
- let res = asm.reset().compile("SBC $4400,Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0xF9);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("SBC Indirect, X", function(){
- let res = asm.reset().compile("SBC ($44,X)").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xE1);
- expect(res[1]).to.equal(0x44);
- });
-
- it("SBC Indirect, Y", function(){
- let res = asm.reset().compile("SBC ($44),Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0xF1);
- expect(res[1]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("STA Zero Page", function(){
- let res = asm.reset().compile("STA $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x85);
- expect(res[1]).to.equal(0x44);
- });
-
- it("STA Zero Page, X", function(){
- let res = asm.reset().compile("STA $44,X").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x95);
- expect(res[1]).to.equal(0x44);
- });
-
- it("STA Absolute", function(){
- let res = asm.reset().compile("STA $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x8D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("STA Absolute, X", function(){
- let res = asm.reset().compile("STA $4400,X").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x9D);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("STA Absolute, Y", function(){
- let res = asm.reset().compile("STA $4400,Y").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x99);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- it("STA Indirect, X", function(){
- let res = asm.reset().compile("STA ($44,X)").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x81);
- expect(res[1]).to.equal(0x44);
- });
-
- it("STA Indirect, Y", function(){
- let res = asm.reset().compile("STA ($44),Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x91);
- expect(res[1]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("PHA", function(){
- asm.reset();
- let res = asm.compile("PHA").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x48);
- });
-
- it("PHP", function(){
- asm.reset();
- let res = asm.compile("PHP").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x08);
- });
-
- it("PLA", function(){
- asm.reset();
- let res = asm.compile("PLA").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x68);
- });
-
- it("PLP", function(){
- asm.reset();
- let res = asm.compile("PLP").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x28);
- });
-
- it("TSX", function(){
- asm.reset();
- let res = asm.compile("TSX").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0xBA);
- });
-
- it("TXS", function(){
- asm.reset();
- let res = asm.compile("TXS").result();
- expect(res.length).to.equal(1);
- expect(res[0]).to.equal(0x9A);
- });
-
- // -------------------------------------------------------------
- it("STX Zero Page", function(){
- let res = asm.reset().compile("STX $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x86);
- expect(res[1]).to.equal(0x44);
- });
-
- it("STX Zero Page, Y", function(){
- let res = asm.reset().compile("STX $44, Y").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x96);
- expect(res[1]).to.equal(0x44);
- });
-
- it("STX Absolute", function(){
- let res = asm.reset().compile("STX $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x8E);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- it("STY Zero Page", function(){
- let res = asm.reset().compile("STY $44").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x84);
- expect(res[1]).to.equal(0x44);
- });
-
- it("STY Zero Page, X", function(){
- let res = asm.reset().compile("sty $44,x").result();
- expect(res.length).to.equal(2);
- expect(res[0]).to.equal(0x94);
- expect(res[1]).to.equal(0x44);
- });
-
- it("STY Absolute", function(){
- let res = asm.reset().compile("STY $4400").result();
- expect(res.length).to.equal(3);
- expect(res[0]).to.equal(0x8C);
- expect(res[1]).to.equal(0x00);
- expect(res[2]).to.equal(0x44);
- });
-
- // -------------------------------------------------------------
- });
- });
|