| expect(res[0]).to.equal(0x71); | expect(res[0]).to.equal(0x71); | ||||
| expect(res[1]).to.equal(0x44); | expect(res[1]).to.equal(0x44); | ||||
| }); | }); | ||||
| // ------------------------------------------------------------- | // ------------------------------------------------------------- | ||||
| it("AND Immediate"); | |||||
| it("AND Zero Page"); | |||||
| it("AND Zero Page, X"); | |||||
| it("AND Absolute"); | |||||
| it("AND Absolute, X"); | |||||
| it("AND Absolute, Y"); | |||||
| it("AND Indirect, X"); | |||||
| it("AND Indirect, Y"); | |||||
| 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"); | |||||
| it("ASL Zero Page"); | |||||
| it("ASL Zero Page, X"); | |||||
| it("ASL Absolute"); | |||||
| it("ASL Absolute, X"); | |||||
| 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"); | |||||
| it("BIT Absolute"); | |||||
| 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"); | |||||
| it("BMI"); | |||||
| it("BVC"); | |||||
| it("BVS"); | |||||
| it("BCC"); | |||||
| it("BCS"); | |||||
| it("BNE"); | |||||
| it("BEQ"); | |||||
| 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(){ | it ("BRK", function(){ | ||||
| asm.reset(); | asm.reset(); | ||||
| expect(res.length).to.equal(1); | expect(res.length).to.equal(1); | ||||
| expect(res[0]).to.equal(0x00); | expect(res[0]).to.equal(0x00); | ||||
| }); | }); | ||||
| // ------------------------------------------------------------- | // ------------------------------------------------------------- | ||||
| it("CMP Immediate"); | |||||
| it("CMP Zero Page"); | |||||
| it("CMP Zero Page, X"); | |||||
| it("CMP Absolute"); | |||||
| it("CMP Absolute, X"); | |||||
| it("CMP Absolute, Y"); | |||||
| it("CMP Indirect, X"); | |||||
| it("CMP Indirect, Y"); | |||||
| 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"); | |||||
| it("CPX Zero Page"); | |||||
| it("CPX Absolute"); | |||||
| 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"); | |||||
| it("CPY Zero Page"); | |||||
| it("CPY Absolute"); | |||||
| 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"); | |||||
| it("DEC Zero Page, X"); | |||||
| it("DEC Absolute"); | |||||
| it("DEC Absolute, X"); | |||||
| 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"); | |||||
| it("EOR Zero Page"); | |||||
| it("EOR Zero Page, X"); | |||||
| it("EOR Absolute"); | |||||
| it("EOR Absolute, X"); | |||||
| it("EOR Absolute, Y"); | |||||
| it("EOR Indirect, X"); | |||||
| it("EOR Indirect, Y"); | |||||
| 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(){ | it("CLC", function(){ | ||||
| }); | }); | ||||
| // ------------------------------------------------------------- | // ------------------------------------------------------------- | ||||
| it("INC Zero Page"); | |||||
| it("INC Zero Page, X"); | |||||
| it("INC Absolute"); | |||||
| it("INC Absolute, X"); | |||||
| 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"); | |||||
| it("JMP Indirect"); | |||||
| 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("JRS Absolute"); | |||||
| 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 Immediate"); | ||||
| it("LDA Zero Page"); | it("LDA Zero Page"); |