public void Emu6502_asl_adc_overflow() { Given_Code(m => { m.Adc(m.i8(0x1)); }); emu.WriteRegister(Registers.a, 0x7F); emu.WriteRegister(Registers.p, 0); emu.Start(); Assert.AreEqual(0x80, emu.ReadRegister(Registers.a)); Assert.AreEqual(0xC0, emu.ReadRegister(Registers.p)); }
private void Given_Code(Action <Assembler> p) { var asm = new Assembler(sc, arch, Address.Ptr16(0x0800), new List <ImageSymbol>()); p(asm); var program = asm.GetImage(); program.SegmentMap.AddSegment( new ByteMemoryArea(Address.Ptr16(0), new byte[256]), "ZeroPage", AccessMode.ReadWriteExecute); var envEmu = new DefaultPlatformEmulator(); emu = (Mos6502Emulator)arch.CreateEmulator(program.SegmentMap, envEmu); emu.InstructionPointer = program.ImageMap.BaseAddress; emu.WriteRegister(Registers.s, 0xFF); emu.ExceptionRaised += (sender, e) => { throw e.Exception; }; }