/// <summary> /// Load a Basic PRG. /// </summary> /// <param name="imageBytes"></param> /// <returns></returns> private static Program LoadPrg(IServiceProvider services, byte[] imageBytes) { var stm = new MemoryStream(); ushort preferredAddress = MemoryArea.ReadLeUInt16(imageBytes, 0); ushort alignedAddress = (ushort)(preferredAddress & ~0xF); int pad = preferredAddress - alignedAddress; while (pad-- > 0) { stm.WriteByte(0); } stm.Write(imageBytes, 2, imageBytes.Length - 2); var loadedBytes = stm.ToArray(); var image = new MemoryArea( Address.Ptr16(alignedAddress), loadedBytes); var rdr = new C64BasicReader(image, 0x0801); var lines = rdr.ToSortedList(line => (ushort)line.Address.ToLinear(), line => line); var cfgSvc = services.RequireService <IConfigurationService>(); var arch6502 = new Mos6502Architecture(services, "m6502"); var arch = new C64Basic(services, lines); var platform = cfgSvc.GetEnvironment("c64").Load(services, arch); var segMap = platform.CreateAbsoluteMemoryMap(); segMap.AddSegment(image, "code", AccessMode.ReadWriteExecute); var program = new Program(segMap, arch, platform); program.Architectures.Add(arch6502.Name, arch6502); var addrBasic = Address.Ptr16(lines.Keys[0]); var sym = ImageSymbol.Procedure(arch, addrBasic, state: arch.CreateProcessorState()); program.EntryPoints.Add(sym.Address, sym); return(program); }
public override ILoadedImage Load(Address?addrLoad) { addrLoad ??= PreferredBaseAddress; List <ArchiveDirectoryEntry> entries = LoadDiskDirectory(); IArchiveBrowserService abSvc = Services.GetService <IArchiveBrowserService>(); if (abSvc != null) { if (abSvc.UserSelectFileFromArchive(entries) is D64FileEntry selectedFile) { this.program = LoadImage(addrLoad, selectedFile); return(program); } } var arch = new Mos6502Architecture(Services, "mos6502", new Dictionary <string, object>()); var mem = new ByteMemoryArea(Address.Ptr16(0), RawImage); var segmentMap = new SegmentMap(mem.BaseAddress); segmentMap.AddSegment(mem, "code", AccessMode.ReadWriteExecute); return(new Program { SegmentMap = segmentMap, Architecture = arch, Platform = new DefaultPlatform(Services, arch) }); }
public override Program Load(Address addrLoad) { List <ArchiveDirectoryEntry> entries = LoadTapeDirectory(); IArchiveBrowserService abSvc = Services.GetService <IArchiveBrowserService>(); if (abSvc != null) { if (abSvc.UserSelectFileFromArchive(entries) is T64FileEntry selectedFile) { this.program = LoadImage(addrLoad, selectedFile); return(program); } } var arch = new Mos6502Architecture("mos6502"); var mem = new MemoryArea(Address.Ptr16(0), RawImage); var segmentMap = new SegmentMap(mem.BaseAddress); segmentMap.AddSegment(mem, "code", AccessMode.ReadWriteExecute); return(new Program { SegmentMap = segmentMap, Architecture = arch, Platform = new DefaultPlatform(Services, arch) }); }
public static Program LoadSeq(IServiceProvider services, Address addrPreferred, byte[] imageBytes) { var mem = new ByteMemoryArea(addrPreferred, imageBytes); var arch = new Mos6502Architecture(services, "mos6502", new Dictionary <string, object>()); return(new Program( new SegmentMap( mem.BaseAddress, new ImageSegment("c64", mem, AccessMode.ReadWriteExecute)), arch, new DefaultPlatform(services, arch))); }
public void Setup() { lines = new SortedList <ushort, C64BasicInstruction>(); arch = new C64Basic(lines); arch6502 = new Mos6502Architecture("m6502"); m = new BasicProcessor(lines); host = new Mock <RewriterTestBase.RewriterHost>(arch) { CallBase = true }; host.Setup(h => h.GetArchitecture("m6502")) .Returns(arch6502); base.Given_MemoryArea(new MemoryArea(Address.Ptr16(0x10), new byte[10])); }
public void Setup() { lines = new SortedList <ushort, C64BasicInstruction>(); sc = CreateServiceContainer(); arch = new C64Basic(sc, "c64", new Dictionary <string, object>()); arch6502 = new Mos6502Architecture(sc, "m6502", new Dictionary <string, object>()); m = new BasicProcessor(lines); host = new Mock <RewriterHost>(arch) { CallBase = true }; host.Setup(h => h.GetArchitecture("m6502")) .Returns(arch6502); base.Given_MemoryArea(new ByteMemoryArea(Address.Ptr16(0x800), new byte[10])); }
public DisassemblerTests() { this.sc = new ServiceContainer(); this.sc.AddService <ITestGenerationService>(new UnitTestGenerationService(sc)); this.arch = new Mos6502Architecture(sc, "mos6502"); }
public EmulatorTests() { this.sc = new ServiceContainer(); this.arch = new Mos6502Architecture(sc, "mos6502", new Dictionary <string, object>()); }
public EmulatorTests() { this.sc = new ServiceContainer(); this.arch = new Mos6502Architecture(sc, "mos6502"); }