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; }
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); }
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 }, }); }
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; } }
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(); } }
public void SetRegisters(ICpuRegisters registers) { Registers = registers; }
public void SetRegisters(ICpuRegisters registers) { return; }