示例#1
0
        /// <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);
        }
示例#2
0
        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)
            });
        }
示例#3
0
        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)
            });
        }
示例#4
0
        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)));
        }
示例#5
0
 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]));
 }
示例#6
0
 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]));
 }
示例#7
0
 public DisassemblerTests()
 {
     this.sc = new ServiceContainer();
     this.sc.AddService <ITestGenerationService>(new UnitTestGenerationService(sc));
     this.arch = new Mos6502Architecture(sc, "mos6502");
 }
示例#8
0
 public EmulatorTests()
 {
     this.sc   = new ServiceContainer();
     this.arch = new Mos6502Architecture(sc, "mos6502", new Dictionary <string, object>());
 }
示例#9
0
 public EmulatorTests()
 {
     this.sc   = new ServiceContainer();
     this.arch = new Mos6502Architecture(sc, "mos6502");
 }