1
0
mirror of synced 2024-11-15 01:57:36 +01:00

Make the logo show up on segaboot

This commit is contained in:
Bobby Dilley 2022-09-14 17:05:21 +01:00
parent 8cc876554a
commit e14a48743a
3 changed files with 89 additions and 7 deletions

View File

@ -56,6 +56,12 @@ static int detectGame()
return 0;
}
if (strstr(program_invocation_name, "lgj"))
{
config.game = LETS_GO_JUNGLE;
return 0;
}
config.game = UNKNOWN;
return 1;
}
@ -66,10 +72,16 @@ char *getGameName()
{
case SEGABOOT:
return "SEGABOOT";
case SEGABOOT_2_4:
return "SEGABOOT 2.4";
case SEGABOOT_2_6:
return "SEGABOOT 2.6";
case OUTRUN:
return "Outrun 2 SP";
case THE_HOUSE_OF_THE_DEAD_4:
return "The House of the Dead 4";
case LETS_GO_JUNGLE:
return "Let's Go Jungle! Lost on the Island of Spice";
default:
return "Unknown Game";
}

View File

@ -5,8 +5,11 @@
typedef enum {
UNKNOWN,
SEGABOOT,
SEGABOOT_2_4,
SEGABOOT_2_6,
THE_HOUSE_OF_THE_DEAD_4,
OUTRUN
OUTRUN,
LETS_GO_JUNGLE
} Game;
typedef struct

View File

@ -27,7 +27,12 @@
#define SERIAL0 2
#define SERIAL1 3
int hooks[4] = {-1, -1, -1, -1};
#define CPUINFO 0
#define OSRELEASE 1
int hooks[5] = {-1, -1, -1, -1};
FILE *fileHooks[2] = {NULL, NULL};
int fileRead[2] = {0, 0};
uint16_t basePortAddress = 0xFFFF;
@ -147,25 +152,25 @@ int open(const char *pathname, int flags)
if (strcmp(pathname, "/dev/lbb") == 0)
{
hooks[BASEBOARD] = open(HOOK_FILE_NAME, flags);
hooks[BASEBOARD] = _open(HOOK_FILE_NAME, flags);
return hooks[BASEBOARD];
}
if (strcmp(pathname, "/dev/i2c/0") == 0)
{
hooks[EEPROM] = open(HOOK_FILE_NAME, flags);
hooks[EEPROM] = _open(HOOK_FILE_NAME, flags);
return hooks[EEPROM];
}
if (strcmp(pathname, "/dev/ttyS0") == 0 || strcmp(pathname, "/dev/tts/0") == 0)
{
hooks[SERIAL0] = open(HOOK_FILE_NAME, flags);
hooks[SERIAL0] = _open(HOOK_FILE_NAME, flags);
return hooks[SERIAL0];
}
if (strcmp(pathname, "/dev/ttyS1") == 0 || strcmp(pathname, "/dev/tts/1") == 0)
{
hooks[SERIAL1] = open(HOOK_FILE_NAME, flags);
hooks[SERIAL1] = _open(HOOK_FILE_NAME, flags);
return hooks[SERIAL1];
}
@ -181,19 +186,44 @@ int open(const char *pathname, int flags)
FILE *fopen(const char *restrict pathname, const char *restrict mode)
{
FILE *(*_fopen)(const char *restrict pathname, const char *restrict mode) = dlsym(RTLD_NEXT, "fopen");
printf("FOpen %s\n", pathname);
printf("fopen %s\n", pathname);
if (strcmp(pathname, "/root/lindbergrc") == 0)
{
return _fopen("lindbergrc", mode);
}
if (strcmp(pathname, "/proc/cpuinfo") == 0)
{
fileRead[CPUINFO] = 0;
fileHooks[CPUINFO] = _fopen(HOOK_FILE_NAME, mode);
return fileHooks[CPUINFO];
}
return _fopen(pathname, mode);
}
FILE *fopen64(const char *pathname, const char *mode)
{
FILE *(*_fopen64)(const char *restrict pathname, const char *restrict mode) = dlsym(RTLD_NEXT, "fopen64");
printf("fopen64 %s\n", pathname);
if (strcmp(pathname, "/proc/sys/kernel/osrelease") == 0)
{
EmulatorConfig *config = getConfig();
config->game = SEGABOOT_2_6;
fileRead[OSRELEASE] = 0;
fileHooks[OSRELEASE] = _fopen64(HOOK_FILE_NAME, mode);
return fileHooks[OSRELEASE];
}
return _fopen64(pathname, mode);
}
int openat(int dirfd, const char *pathname, int flags)
{
int (*_openat)(int dirfd, const char *pathname, int flags) = dlsym(RTLD_NEXT, "openat");
printf("openat %s\n", pathname);
if (strcmp(pathname, "/dev/ttyS0") == 0 || strcmp(pathname, "/dev/ttyS1") == 0 || strcmp(pathname, "/dev/tts/0") == 0 || strcmp(pathname, "/dev/tts/1") == 0)
{
@ -219,6 +249,33 @@ int close(int fd)
return _close(fd);
}
char *fgets(char *str, int n, FILE *stream)
{
char *(*_fgets)(char *str, int n, FILE *stream) = dlsym(RTLD_NEXT, "fgets");
if (stream == fileHooks[OSRELEASE])
{
char *contents = "mvl";
strcpy(str, contents);
return str;
}
// This currently doesn't work
if (stream == fileHooks[CPUINFO])
{
char *contents = "model name\t: Intel(R) Celeron(R) CPU 3.00GHz\n";
strcpy(str, contents);
if(!fileRead[CPUINFO])
return str;
fileRead[CPUINFO] = 1;
return NULL;
}
return _fgets(str, n, stream);
}
ssize_t read(int fd, void *buf, size_t count)
{
int (*_read)(int fd, void *buf, size_t count) = dlsym(RTLD_NEXT, "read");
@ -332,6 +389,16 @@ int system(const char *command)
if (strcmp(command, "lspci | grep MPC8272 > /dev/null") == 0)
return 0;
if (strcmp(command, "uname -r | grep mvl") == 0)
{
EmulatorConfig *config = getConfig();
config->game = SEGABOOT_2_4;
return 0;
}
if (strstr(command, "hwclock") != NULL)
return 0;
return _system(command);
}