const expect = require('chai').expect; const Assembler = require('../src/chip/MOS6502/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"); 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"); // ------------------------------------------------------------- it("LDX Immediate"); it("LDX Zero Page"); it("LDX Zero Page, Y"); it("LDX Absolute"); it("LDX Absolute, Y"); // ------------------------------------------------------------- it("LDY Immediate"); it("LDY Zero Page"); it("LDY Zero Page, X"); it("LDY Absolute"); it("LDY Absolute, X"); // ------------------------------------------------------------- it("LSR Accumulator"); it("LSR Zero Page"); it("LSR Zero Page, X"); it("LSR Absolute"); it("LSR Absolute, X"); // ------------------------------------------------------------- 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"); it("ORA Zero Page"); it("ORA Zero Page, X"); it("ORA Absolute"); it("ORA Absolute, X"); it("ORA Absolute, Y"); it("ORA Indirect, X"); it("ORA Indirect, Y"); // ------------------------------------------------------------- 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"); it("ROL Zero Page"); it("ROL Zero Page, X"); it("ROL Absolute"); it("ROL Absolute, X"); // ------------------------------------------------------------- it("ROR Accumulator"); it("ROR Zero Page"); it("ROR Zero Page, X"); it("ROR Absolute"); it("ROR Absolute, X"); // ------------------------------------------------------------- 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"); 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"); // ------------------------------------------------------------- it("STA Zero Page"); it("STA Zero Page, X"); it("STA Absolute"); it("STA Absolute, X"); it("STA Absolute, Y"); it("STA Indirect, X"); it("STA Indirect, Y"); // ------------------------------------------------------------- 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"); it("STX Zero Page, Y"); it("STX Absolute"); // ------------------------------------------------------------- it("STY Zero Page"); it("STY Zero Page, X"); it("STY Absolute"); // ------------------------------------------------------------- }); });