Files
Main_MiSTer/main.cpp
Martin Donlon ad695d0848 Video mode switching optimizations.
Reduce cost of setting video mode information when using
vsync_adjust=1/2 or vscale_mode=4/5 from 90ms to 5ms (worst case, most
instances are less than 1ms).

Split video initialization into video_init and video_set_mode.
video_init is called once, video_set_mode is called whenever the mode
changes.

Split hdmi_config into hdmi_config_init and hdmi_config_set_mode. Same
as video_, hdmi_config_init does the bulk of the initialization,
hdmi_config_set_mode is just for parameters that can change based on the
mode.

Load video filter data in loadScalerCfg and persist it.

Calculate a digest for scaler data and use that to determine whether new
data needs to be sent.

Only send gamma information if the filename has changed.

Offload fb module parameter writing to a separate thread via the new
offload system.

Reduce the amount of work being done in set_vrr_mode when vrr is
disabled.
2022-07-18 16:30:00 -07:00

93 lines
2.1 KiB
C++

/*
Copyright 2005, 2006, 2007 Dennis van Weeren
Copyright 2008, 2009 Jakub Bednarski
Copyright 2012 Till Harbaum
This file is part of Minimig
Minimig is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
Minimig is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sched.h>
#include <inttypes.h>
#include <ctype.h>
#include <string.h>
#include "menu.h"
#include "user_io.h"
#include "input.h"
#include "fpga_io.h"
#include "scheduler.h"
#include "osd.h"
#include "offload.h"
const char *version = "$VER:" VDATE;
int main(int argc, char *argv[])
{
// Always pin main worker process to core #1 as core #0 is the
// hardware interrupt handler in Linux. This reduces idle latency
// in the main loop by about 6-7x.
cpu_set_t set;
CPU_ZERO(&set);
CPU_SET(1, &set);
sched_setaffinity(0, sizeof(set), &set);
offload_start();
fpga_io_init();
DISKLED_OFF;
printf("\nMinimig by Dennis van Weeren");
printf("\nARM Controller by Jakub Bednarski");
printf("\nMiSTer code by Sorgelig\n\n");
printf("Version %s\n\n", version + 5);
if (argc > 1) printf("Core path: %s\n", argv[1]);
if (argc > 2) printf("XML path: %s\n", argv[2]);
if (!is_fpga_ready(1))
{
printf("\nGPI[31]==1. FPGA is uninitialized or incompatible core loaded.\n");
printf("Quitting. Bye bye...\n");
exit(0);
}
FindStorage();
user_io_init((argc > 1) ? argv[1] : "",(argc > 2) ? argv[2] : NULL);
#ifdef USE_SCHEDULER
scheduler_init();
scheduler_run();
#else
while (1)
{
if (!is_fpga_ready(1))
{
fpga_wait_to_reset();
}
user_io_poll();
input_poll(0);
HandleUI();
OsdUpdate();
}
#endif
return 0;
}