|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266 |
- 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);
- });
-
- // -------------------------------------------------------------
- });
- });
-
|