public void labelmath2() { z80assembler z = new z80assembler(); z.loadcommands(); z.ramstart = 0x4000; z.reset(); var wasCalled = false; z.DoErr += delegate(string file, int line, string description) { wasCalled = true; }; string lines = " .global test\n nop\n nop\ntest: .db 10,20,30"; z.parse(lines, ""); Assert.IsFalse(wasCalled); z.link(); Assert.IsFalse(wasCalled); lines = " .extern test\n nop\n nop\n ld a,(test+1)"; z.partialreset(); z.parse(lines, ""); Assert.IsFalse(wasCalled); z.link(); Assert.IsFalse(wasCalled); z.finallink(); Assert.IsFalse(wasCalled); }
public void ramlabels() { //NB ramstart will only take effect on a reset() //and will be reset by each call to parse //so to test ramlabels you need to feed in all the data in one go //as if it is read from a file z80assembler z = new z80assembler(); z.loadcommands(); z.ramstart = 0x4000; z.reset(); string lines = " .DATA \ntest: .db \ntest2: .db \n .CODE \n .ORG 0000\n ld hl,test \n ld hl,(test2)"; z.parse(lines, ""); z.link(); z.finallink(); Assert.AreEqual(0x21, z.bytes[0]); Assert.AreEqual(0x00, z.bytes[1]); Assert.AreEqual(0x40, z.bytes[2]); Assert.AreEqual(0x2A, z.bytes[3]); Assert.AreEqual(0x01, z.bytes[4]); Assert.AreEqual(0x40, z.bytes[5]); }
public void globals2() { z80assembler z = new z80assembler(); z.loadcommands(); z.ramstart = 0x4000; z.reset(); var wasCalled = false; z.DoErr += delegate(string file, int line, string description) { wasCalled = true; }; string lines = " nop\n nop\n nop\ntest: ld hl,test \n nop\n"; z.parse(lines, ""); z.link(); z.partialreset(); Assert.IsFalse(wasCalled); lines = " .extern test \n nop\n nop\n nop\n ld hl,(test) \n nop\n"; z.parse(lines, ""); z.link(); Assert.IsFalse(wasCalled); z.finallink(); Assert.IsTrue(wasCalled); }
public bool build() { error = false; assembler_Msg(" -------- BUILD STARTING -------------"); assembler.basepath = solution.getbasepath(); //assembler.ramstart = solution.details.ramstart; assembler.ramstart = 0x4000; assembler.Msg += new z80assembler.MsgHandler(assembler_Msg); assembler.reset(); foreach (file f in solution.details.files) { if (f.assemblefile == true) { assembler_Msg("\r\n Staring file " + f.name); assembler.partialreset(); assembler.parse(solution.loadfile(f.name), f.name); assembler.link(); // This is the per file link } } assembler_Msg(" \r\n-------- LINKING -------------\r\n "); assembler.finallink(); // This is the per file link assembler_Msg("\r\n --------DONE -------------"); return(error); }
public void labelmath3() { z80assembler z = new z80assembler(); z.loadcommands(); z.ramstart = 0x4000; z.reset(); var wasCalled = false; z.DoErr += delegate(string file, int line, string description) { wasCalled = true; }; string lines = "CHLEVS: .ds 5\n ld DE,CHLEVS+1"; z.parse(lines, ""); Assert.IsFalse(wasCalled); z.link(); Assert.IsFalse(wasCalled); z.finallink(); Assert.IsFalse(wasCalled); }