コード例 #1
0
ファイル: Program.cs プロジェクト: tuday2/MBBSEmu
        private void Execute(string[] args)
        {
            var realMode = args.Length == 1 && (args[0].Equals("-realmode") || args[0].Equals("-real"));

            if (realMode)
            {
                memoryCore = realModeMemoryCore = new RealModeMemoryCore(logger: null);
            }
            else
            {
                memoryCore = protectedModeMemoryCore = new ProtectedModeMemoryCore(null);
            }

            mbbsEmuCpuCore      = new CpuCore(logger: null);
            mbbsEmuCpuRegisters = (ICpuRegisters)mbbsEmuCpuCore;
            mbbsEmuCpuCore.Reset(memoryCore, null, null, null);

            // Reset
            mbbsEmuCpuRegisters.Zero();
            mbbsEmuCpuCore.Reset();
            memoryCore.Clear();
            mbbsEmuCpuCore.Registers.CS = 0x1000;
            mbbsEmuCpuCore.Registers.DS = 2;
            mbbsEmuCpuCore.Registers.IP = 0;

            var instructions = new Assembler(16);
            var label_start  = instructions.CreateLabel();
            var label_loop   = instructions.CreateLabel();

            instructions.Label(ref label_start);
            instructions.mov(__word_ptr[0], 1);
            instructions.Label(ref label_loop);
            instructions.mov(ax, __word_ptr[0]);
            instructions.cmp(ax, 0x7FFF);
            instructions.je(label_start);
            instructions.inc(__word_ptr[0]);
            instructions.jmp(label_loop);

            CreateCodeSegment(instructions);
            CreateDataSegment(new ReadOnlySpan <byte>());

            _isRunning = true;
            new Thread(RunThread).Start();
            new Thread(MonitorThread).Start();

            Console.ReadKey();
            _isRunning = false;
        }
コード例 #2
0
        protected ExportedModuleTestBase(string modulePath)
        {
            _serviceResolver = new ServiceResolver(fakeClock, SessionBuilder.ForTest($"MBBSDb_{RANDOM.Next()}"));
            var textVariableService = _serviceResolver.GetService <ITextVariableService>();

            mbbsEmuMemoryCore   = mbbsEmuProtectedModeMemoryCore = new ProtectedModeMemoryCore(_serviceResolver.GetService <ILogger>());
            mbbsEmuCpuCore      = new CpuCore(_serviceResolver.GetService <ILogger>());
            mbbsEmuCpuRegisters = mbbsEmuCpuCore;

            var testModuleConfig = new ModuleConfiguration {
                ModulePath = modulePath, ModuleEnabled = true
            };

            mbbsModule = new MbbsModule(FileUtility.CreateForTest(), fakeClock, _serviceResolver.GetService <ILogger>(), testModuleConfig, mbbsEmuProtectedModeMemoryCore);

            testSessions = new PointerDictionary <SessionBase>();
            testSessions.Allocate(new TestSession(null, textVariableService));
            testSessions.Allocate(new TestSession(null, textVariableService));

            majorbbs = new HostProcess.ExportedModules.Majorbbs(
                _serviceResolver.GetService <IClock>(),
                _serviceResolver.GetService <ILogger>(),
                _serviceResolver.GetService <AppSettings>(),
                _serviceResolver.GetService <IFileUtility>(),
                _serviceResolver.GetService <IGlobalCache>(),
                mbbsModule,
                testSessions,
                _serviceResolver.GetService <IAccountKeyRepository>(),
                _serviceResolver.GetService <IAccountRepository>(),
                textVariableService);

            galgsbl = new HostProcess.ExportedModules.Galgsbl(
                _serviceResolver.GetService <IClock>(),
                _serviceResolver.GetService <ILogger>(),
                _serviceResolver.GetService <AppSettings>(),
                _serviceResolver.GetService <IFileUtility>(),
                _serviceResolver.GetService <IGlobalCache>(),
                mbbsModule,
                testSessions,
                textVariableService);

            mbbsEmuCpuCore.Reset(
                mbbsEmuMemoryCore,
                (ordinal, functionOrdinal) => ExportedFunctionDelegate(ordinal, functionOrdinal, offsetsOnly: false),
                null,
                null);
        }
コード例 #3
0
ファイル: CpuTestBase.cs プロジェクト: tuday2/MBBSEmu
        protected CpuTestBase()
        {
            mbbsEmuMemoryCore   = mbbsEmuProtectedModeMemoryCore = new ProtectedModeMemoryCore(logger: null);
            mbbsEmuCpuCore      = new CpuCore(logger: null);
            mbbsEmuCpuRegisters = mbbsEmuCpuCore;

            pit = new ProgrammableIntervalTimer(logger: null, fakeClock, mbbsEmuCpuCore);

            mbbsEmuCpuCore.Reset(
                mbbsEmuMemoryCore,
                null,
                null,
                new Dictionary <int, IIOPort>
            {
                { 0x40, pit },
                { 0x41, pit },
                { 0x42, pit },
                { 0x43, pit },
            });
        }
コード例 #4
0
ファイル: BasicCpu.cs プロジェクト: jcurl/CpuId
        private void Initialize(ICpuRegisters register)
        {
            CpuRegisters = register;

            CpuIdRegister vendorFunction = register.GetCpuId(VendorIdFunction, 0);

            if (vendorFunction == null)
            {
                return;
            }
            FunctionCount = vendorFunction.Result[0];
            VendorId      = GetVendorId(vendorFunction);

            CpuIdRegister extendedFunction = register.GetCpuId(ExtendedFunction, 0);

            if (extendedFunction == null)
            {
                return;
            }
            if ((extendedFunction.Result[0] & ExtendedFunction) != 0)
            {
                ExtendedFunctionCount = extendedFunction.Result[0] & 0x7FFFFFFF;
            }
        }
コード例 #5
0
ファイル: LoggerExtensions.cs プロジェクト: tuday2/MBBSEmu
        public static void InfoStack(this ILogger l, ICpuRegisters registers, IMemoryCore memory)
        {
            var output = new StringBuilder();

            l.Info("------------------------------------------");
            l.Info($"SP: {registers.SP:X4}  BP: {registers.BP:X4}");
            l.Info("------------------------------------------");
            for (var i = ushort.MaxValue; i >= registers.SP; i -= 2)
            {
                if (i == registers.SP && i == registers.BP)
                {
                    output.Append("BP/SP-->");
                }

                if (i != registers.SP && i == registers.BP)
                {
                    output.Append("   BP-->");
                }

                if (i == registers.SP && i != registers.BP)
                {
                    output.Append("   SP-->");
                }

                if (i != registers.SP && i != registers.BP)
                {
                    output.Append("        ");
                }

                output.Append(
                    $"{i:X4} [ {memory.GetWord(registers.SS, (ushort) (i-1)):D5} 0x{memory.GetWord(registers.SS, (ushort) (i-1)):X4} ] {i-1:X4}");

                l.Info(output);
                output.Clear();
            }
        }
コード例 #6
0
ファイル: Galme.cs プロジェクト: tuday2/MBBSEmu
 public void SetRegisters(ICpuRegisters registers)
 {
     Registers = registers;
 }
コード例 #7
0
ファイル: Galmsg.cs プロジェクト: tuday2/MBBSEmu
 public void SetRegisters(ICpuRegisters registers)
 {
     return;
 }