public SadConsoleEmulatorLoop(
     SadConsoleEmulatorRenderer renderer,
     SadConsoleEmulatorInput input,
     SadConsoleEmulatorExecutor executor,
     int updateEmulatorEveryXFrame = 0)
 {
     _renderer = renderer;
     _input    = input;
     _executor = executor;
     _updateEmulatorEveryXFrame = updateEmulatorEveryXFrame;
     _frameCounter = 0;
 }
Example #2
0
        public void Start()
        {
            _options.EmulatorConfig.Validate();

            // Init CPU emulator
            var computer = SetupEmulator(_options.EmulatorConfig);

            // Create SadConsole renderer that reads screen data from emulator memory and displays it on a SadConsole screen/console
            var sadConsoleEmulatorRenderer = new SadConsoleEmulatorRenderer(
                GetSadConsoleScreen,
                computer.Mem,
                _options.EmulatorConfig.Memory.Screen);

            // Init emulator memory based on our configured memory layout
            sadConsoleEmulatorRenderer.InitEmulatorScreenMemory();

            // Create SadConsole input handler that forwards pressed keys to the emulator via memory addresses
            var sadConsoleEmulatorInput = new SadConsoleEmulatorInput(
                computer.Mem,
                _options.EmulatorConfig.Memory.Input);

            // Create SadConsole executor that executes instructions in the emulator until a certain memory address has been flagged that emulator code is done for current frame
            var sadConsoleEmulatorExecutor = new SadConsoleEmulatorExecutor(
                computer,
                _options.EmulatorConfig.Memory.Screen,
                _options.EmulatorConfig.StopAtBRK);

            // Create the main game loop class that invokes emulator and render to host screen
            var sadConsoleEmulatorLoop = new SadConsoleEmulatorLoop(
                sadConsoleEmulatorRenderer,
                sadConsoleEmulatorInput,
                sadConsoleEmulatorExecutor,
                updateEmulatorEveryXFrame: _options.EmulatorConfig.RunEmulatorEveryFrame);

            // Create the main SadConsole class that is responsible for configuring and starting up SadConsole with our preferred configuration.
            SadConsoleMain = new SadConsoleMain(
                _options.SadConsoleConfig,
                _options.EmulatorConfig.Memory.Screen,
                sadConsoleEmulatorLoop);

            // Start SadConsole. Will exit from this method after SadConsole window is closed.
            SadConsoleMain.Run();
        }