MJ4 support and Rambo res patch.
This commit is contained in:
parent
a31c1a98c4
commit
57a609f974
@ -10,7 +10,6 @@
|
||||
|
||||
#include "config.h"
|
||||
#include "jvs.h"
|
||||
#include "serial.h"
|
||||
#include "passthrough.h"
|
||||
|
||||
#define SERIAL_STRING "FE11-X018012022X"
|
||||
|
@ -860,6 +860,28 @@ static int detectGame(uint32_t elf_crc)
|
||||
}
|
||||
break;
|
||||
|
||||
case MJ4_REVG:
|
||||
{
|
||||
config.gameTitle = "SEGA Network Taisen Mahjong MJ4";
|
||||
config.gameDVP = "DVP-0049G";
|
||||
config.gameID = "SBPN";
|
||||
config.gameStatus = WORKING;
|
||||
config.gameType = MAHJONG;
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case MJ4_EVO:
|
||||
{
|
||||
config.gameTitle = "SEGA Network Taisen Mahjong MJ4 Evolution";
|
||||
config.gameDVP = "DVP-0081";
|
||||
config.gameID = "SBTA";
|
||||
config.gameStatus = WORKING;
|
||||
config.gameType = MAHJONG;
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
{
|
||||
config.crc32 = UNKNOWN;
|
||||
@ -1042,6 +1064,9 @@ int readConfig(FILE *configFile, EmulatorConfig *config)
|
||||
else if (strcmp(command, "PRIMEVAL_HUNT_MODE") == 0)
|
||||
config->phMode = atoi(getNextToken(NULL, " ", &saveptr));
|
||||
|
||||
else if (strcmp(command, "MJ4_ENABLED_ALL_THE_TIME") == 0)
|
||||
config->phMode = atoi(getNextToken(NULL, " ", &saveptr));
|
||||
|
||||
else if (strcmp(command, "TEST_KEY") == 0)
|
||||
config->keymap.test = atoi(getNextToken(NULL, " ", &saveptr));
|
||||
|
||||
@ -1308,6 +1333,7 @@ int initConfig()
|
||||
config.fpsTarget = 60;
|
||||
config.noSDL = 0;
|
||||
config.phMode = 1;
|
||||
config.mj4EnabledAtT = 0;
|
||||
memset(&config.arcadeInputs.analogue_deadzone_start, 0, sizeof(config.arcadeInputs.analogue_deadzone_start));
|
||||
memset(&config.arcadeInputs.analogue_deadzone_middle, 0, sizeof(config.arcadeInputs.analogue_deadzone_middle));
|
||||
memset(&config.arcadeInputs.analogue_deadzone_end, 0, sizeof(config.arcadeInputs.analogue_deadzone_end));
|
||||
|
@ -34,6 +34,8 @@
|
||||
#define LETS_GO_JUNGLE 0xb1c8c901 // DVP-0011
|
||||
#define LETS_GO_JUNGLE_REVA 0xc697c4fb // DVP-0011A
|
||||
#define LETS_GO_JUNGLE_SPECIAL 0x240beedc // DVP-0036A
|
||||
#define MJ4_REVG 0x57813a7 // DVP-0049G
|
||||
#define MJ4_EVO 0xb785a0e9 // DVP-0081
|
||||
#define OUTRUN_2_SP_SDX 0x92c196d5 // DVP-0015
|
||||
#define OUTRUN_2_SP_SDX_REVA 0x4debd5f0 // DVP-0015A
|
||||
#define OUTRUN_2_SP_SDX_REVA_TEST 0x6b2d5c46 // DVP-0015A
|
||||
@ -112,7 +114,8 @@ typedef enum
|
||||
DRIVING,
|
||||
HARLEY,
|
||||
FIGHTING,
|
||||
ABC
|
||||
ABC,
|
||||
MAHJONG
|
||||
} GameType;
|
||||
|
||||
typedef enum
|
||||
@ -254,6 +257,7 @@ typedef struct
|
||||
int lgjRenderWithMesa;
|
||||
int noSDL;
|
||||
int phMode;
|
||||
int mj4EnabledAtT;
|
||||
ArcadeInputs arcadeInputs;
|
||||
int inputMode; // 0 = both, 1 = SDL/X11 only, 2 = EVDEV only
|
||||
int skipOutrunCabinetCheck;
|
||||
|
@ -1031,6 +1031,19 @@ char *__strdup(const char *string)
|
||||
return ___strdup(string);
|
||||
}
|
||||
|
||||
struct tm *localtime_r(const time_t *timep, struct tm *result)
|
||||
{
|
||||
struct tm *(*_localtime_r)(const time_t *, struct tm *) =
|
||||
(struct tm * (*)(const time_t *, struct tm *)) dlsym(RTLD_NEXT, "localtime_r");
|
||||
|
||||
if ((getConfig()->crc32 == MJ4_REVG || getConfig()->crc32 == MJ4_EVO) && getConfig()->mj4EnabledAtT == 1)
|
||||
{
|
||||
time_t target_time = 1735286445;
|
||||
struct tm *res = _localtime_r(&target_time, result);
|
||||
return res;
|
||||
}
|
||||
return _localtime_r(timep, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Prints formatted text in a way that avoids spamming identical lines.
|
||||
|
@ -654,6 +654,97 @@ void sdlEventABC(SDL_Event *event)
|
||||
}
|
||||
}
|
||||
|
||||
void sdlEventMahjong(SDL_Event *event)
|
||||
{
|
||||
switch (event->type)
|
||||
{
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP:
|
||||
{
|
||||
if (event->key.keysym.sym == SDLK_t)
|
||||
setSwitch(SYSTEM, BUTTON_TEST, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_s)
|
||||
setSwitch(PLAYER_1, BUTTON_SERVICE, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_5)
|
||||
incrementCoin(PLAYER_1, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_1)
|
||||
setSwitch(PLAYER_1, BUTTON_START, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_a)
|
||||
setSwitch(PLAYER_1, BUTTON_RIGHT, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_b)
|
||||
setSwitch(PLAYER_1, BUTTON_LEFT, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_c)
|
||||
setSwitch(PLAYER_1, BUTTON_UP, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_d)
|
||||
setSwitch(PLAYER_1, BUTTON_DOWN, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_e)
|
||||
setSwitch(PLAYER_1, BUTTON_1, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_f)
|
||||
setSwitch(PLAYER_1, BUTTON_2, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_g)
|
||||
setSwitch(PLAYER_1, BUTTON_3, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_h)
|
||||
setSwitch(PLAYER_1, BUTTON_4, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_i)
|
||||
setSwitch(PLAYER_1, BUTTON_5, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_j)
|
||||
setSwitch(PLAYER_1, BUTTON_6, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_k)
|
||||
setSwitch(PLAYER_1, BUTTON_7, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_l)
|
||||
setSwitch(PLAYER_2, BUTTON_RIGHT, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_m)
|
||||
setSwitch(PLAYER_2, BUTTON_LEFT, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_n)
|
||||
setSwitch(PLAYER_2, BUTTON_UP, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_o)
|
||||
setSwitch(PLAYER_2, BUTTON_DOWN, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_p)
|
||||
setSwitch(PLAYER_2, BUTTON_1, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_q)
|
||||
setSwitch(PLAYER_2, BUTTON_2, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_r)
|
||||
setSwitch(PLAYER_2, BUTTON_3, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_u)
|
||||
setSwitch(PLAYER_2, BUTTON_4, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_v)
|
||||
setSwitch(PLAYER_2, BUTTON_5, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_w)
|
||||
setSwitch(PLAYER_2, BUTTON_6, event->type == SDL_KEYDOWN);
|
||||
|
||||
else if (event->key.keysym.sym == SDLK_x)
|
||||
setSwitch(PLAYER_2, BUTTON_7, event->type == SDL_KEYDOWN);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void handleSdlEvents(SDL_Event *event)
|
||||
{
|
||||
// Return now if we're not emulating JVS or if EVDEV-only mode is enabled
|
||||
@ -675,6 +766,9 @@ void handleSdlEvents(SDL_Event *event)
|
||||
case ABC:
|
||||
sdlEventABC(event);
|
||||
break;
|
||||
case MAHJONG:
|
||||
sdlEventMahjong(event);
|
||||
break;
|
||||
default:
|
||||
// return XNextEventShooting(display, event_return, returnValue);
|
||||
break;
|
||||
|
@ -2932,6 +2932,83 @@ int initPatch()
|
||||
detourFunction(0x0807a9dc, gl_XGetProcAddressARB);
|
||||
}
|
||||
break;
|
||||
case MJ4_REVG:
|
||||
{
|
||||
setVariable(0x0acf85d4, 2);
|
||||
setVariable(0x0acf85d0, 2);
|
||||
setVariable(0x0acf85cc, 2);
|
||||
setVariable(0x0acf85c8, 2);
|
||||
setVariable(0x0acf85c0, 2);
|
||||
setVariable(0x0acf85bc, 2);
|
||||
|
||||
// Security
|
||||
detourFunction(0x08710c0a, amDongleInit);
|
||||
detourFunction(0x0870f6c5, amDongleIsAvailable);
|
||||
detourFunction(0x0870f6e2, amDongleIsDevelop);
|
||||
detourFunction(0x087100bb, amDongleUpdate);
|
||||
|
||||
// Fixes and patches to bypss network check
|
||||
amDipswContextAddr = (void *)0x0ad224fc; // Address of amDipswContext
|
||||
detourFunction(0x0870f458, amDipswInit);
|
||||
detourFunction(0x0870f4dc, amDipswExit);
|
||||
detourFunction(0x0870f551, amDipswGetData);
|
||||
detourFunction(0x0870f5c7, amDipswSetLed);
|
||||
|
||||
// detourFunction(0x080e286a, stubRetZero); // skip checks
|
||||
// detourFunction(0x080ed7f8, stubRetZero);
|
||||
// patchMemory(0x080e954b, "75");
|
||||
// patchMemory(0x08a4cb90, "00");
|
||||
// patchMemory(0x080e955d, "909090909090"); // test skip countdown
|
||||
|
||||
// setVariable(0x08534a33, 30);
|
||||
// setVariable(0x08534a42, 2);
|
||||
|
||||
patchMemory(0x080e2891, "eb");
|
||||
patchMemory(0x080ea049, "05");
|
||||
patchMemory(0x08a4cb90, "00");
|
||||
|
||||
patchMemory(0x0872bc4d, "2e2f72616d2f746f2e74787400"); // Patch /home/disk2 folder
|
||||
patchMemory(0x0872bc64, "2e2f72616d2f66726f6d2e74787400"); // Patch /home/disk2 folder
|
||||
patchMemory(0x0872bc7d, "2e2f72616d2f2e746d7000"); // Patch /home/disk2 folder
|
||||
patchMemory(0x0872bccd, "2e2f72616d00"); // Patch /home/disk2 folder
|
||||
patchMemory(0x0872bcdd, "2e2f666f6f3100"); // Patch /home/disk2 folder
|
||||
patchMemory(0x0872bcee, "2e2f666f6f3200"); // Patch /home/disk2 folder
|
||||
patchMemory(0x0872f3de, "2e2f72616d2f746d7000"); // Patch /home/disk2 folder
|
||||
patchMemory(0x08732fd3, "2e2f00"); // Patch /home/disk2 folder
|
||||
|
||||
// Mesa Patches
|
||||
if (getConfig()->GPUVendor != NVIDIA_GPU)
|
||||
{
|
||||
detourFunction(0x08050ebc, gl_ProgramStringARB);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MJ4_EVO:
|
||||
{
|
||||
detourFunction(0x08840b61, amDongleInit);
|
||||
detourFunction(0x0883f3ed, amDongleIsAvailable);
|
||||
detourFunction(0x0883f40a, amDongleIsDevelop);
|
||||
detourFunction(0x0883ff0e, amDongleUpdate);
|
||||
|
||||
// Fixes and patches to bypss network check
|
||||
amDipswContextAddr = (void *)0x0af8ff3c; // Address of amDipswContext
|
||||
detourFunction(0x0883f180, amDipswInit);
|
||||
detourFunction(0x0883f204, amDipswExit);
|
||||
detourFunction(0x0883f279, amDipswGetData);
|
||||
detourFunction(0x0883f2ef, amDipswSetLed);
|
||||
|
||||
patchMemory(0x080ea0d1, "909090909090");
|
||||
detourFunction(0x080e327c, stubRetZero); // skip checks
|
||||
detourFunction(0x080ee4fa, stubRetZero);
|
||||
patchMemory(0x080ea0bf, "75");
|
||||
patchMemory(0x08c035b8, "00");
|
||||
|
||||
if (getConfig()->GPUVendor != NVIDIA_GPU)
|
||||
{
|
||||
detourFunction(0x08051314, gl_ProgramStringARB);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -2167,15 +2167,15 @@ int initResolutionPatches()
|
||||
case RAMBO:
|
||||
{
|
||||
patchMemory(0x080c70d0, "9090909090"); // setresolutiontype
|
||||
patchMemory(0x08416df0, "5005"); // render res
|
||||
setVariable(0x08416df0, getConfig()->width); // render res
|
||||
setVariable(0x08416d60, getConfig()->width); // main res
|
||||
setVariable(0x08416d64, getConfig()->height);
|
||||
patchMemory(0x08416d68, "5005"); // Allwinres
|
||||
patchMemory(0x08416d6c, "0003");
|
||||
|
||||
// With this method you can get FullHD, but is very buggy.
|
||||
// patchMemory(0x080c70d0, "9090909090"); // setresolutiontype
|
||||
// patchMemory(0x08416df0, "8007"); // render res
|
||||
// patchMemory(0x08416d60, "8007"); // main res
|
||||
// patchMemory(0x08416d64, "3804");
|
||||
// patchMemory(0x08416d68, "8002"); // Allwinres
|
||||
// patchMemory(0x08416d6c, "E001");
|
||||
patchMemory(0x080ef960, "66ff"); // 2d
|
||||
patchMemory(0x0806b510, "b6"); // proper marker fix
|
||||
// patchMemory(0x0806b4f6, "c3"); //get rid of shot marker
|
||||
}
|
||||
break;
|
||||
case TOO_SPICY:
|
||||
@ -2338,6 +2338,25 @@ int initResolutionPatches()
|
||||
replaceCallAtAddress(0x0816355d, hummerRespatch);
|
||||
}
|
||||
break;
|
||||
case MJ4_REVG:
|
||||
{
|
||||
// Not Supported yet.
|
||||
// patchMemory(0x080524a1, "01"); // Enable Anti Alias
|
||||
// patchMemory(0x08053668, "b80a000000"); // Skips resolution set by the Dip Switches.
|
||||
// vf5FSwidth = (getConfig()->height * 4) / 3;
|
||||
// setVariable(0x08901598, vf5FSwidth);
|
||||
// setVariable(0x0890159c, getConfig()->height);
|
||||
// setVariable(0x089015a4, vf5FSwidth);
|
||||
|
||||
// setVariable(0x089015a8, getConfig()->height);
|
||||
|
||||
// setVariable(0x08901544, vf5FSwidth);
|
||||
// setVariable(0x08901548, getConfig()->height);
|
||||
|
||||
// setVariable(0x0890158c, vf5FSwidth);
|
||||
// setVariable(0x08901590, getConfig()->height);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -77,11 +77,11 @@ void glutInitSDL(int *argcp, char **argv)
|
||||
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); // Set the alpha size to 8 bits
|
||||
if (gId == AFTER_BURNER_CLIMAX || gId == AFTER_BURNER_CLIMAX_REVA || gId == AFTER_BURNER_CLIMAX_REVB ||
|
||||
gId == AFTER_BURNER_CLIMAX_SDX || gId == AFTER_BURNER_CLIMAX_SDX_REVA || gId == AFTER_BURNER_CLIMAX_SE ||
|
||||
gId == AFTER_BURNER_CLIMAX_SE_REVA || gId == R_TUNED || gId == VIRTUA_FIGHTER_5 ||
|
||||
gId == VIRTUA_FIGHTER_5_REVA || gId == VIRTUA_FIGHTER_5_REVB || gId == VIRTUA_FIGHTER_5_REVE ||
|
||||
gId == VIRTUA_FIGHTER_5_EXPORT || gId == VIRTUA_FIGHTER_5_R || gId == VIRTUA_FIGHTER_5_R_REVD || gId == VIRTUA_FIGHTER_5_R_REVG ||
|
||||
gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVA || gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB ||
|
||||
gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB_6000 || gId == GHOST_SQUAD_EVOLUTION || gId == SEGA_RACE_TV)
|
||||
gId == AFTER_BURNER_CLIMAX_SE_REVA || gId == R_TUNED || gId == VIRTUA_FIGHTER_5 || gId == VIRTUA_FIGHTER_5_REVA ||
|
||||
gId == VIRTUA_FIGHTER_5_REVB || gId == VIRTUA_FIGHTER_5_REVE || gId == VIRTUA_FIGHTER_5_EXPORT || gId == VIRTUA_FIGHTER_5_R ||
|
||||
gId == VIRTUA_FIGHTER_5_R_REVD || gId == VIRTUA_FIGHTER_5_R_REVG || gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVA ||
|
||||
gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB || gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB_6000 || gId == GHOST_SQUAD_EVOLUTION ||
|
||||
gId == SEGA_RACE_TV || gId == MJ4_REVG || gId == MJ4_EVO)
|
||||
{
|
||||
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
|
||||
}
|
||||
@ -105,18 +105,6 @@ void glutInitSDL(int *argcp, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// glEnable(GL_DEBUG_OUTPUT);
|
||||
// glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS); // Make the callback synchronous
|
||||
|
||||
// // Set the callback function
|
||||
// glDebugMessageCallback(openglDebugCallback2, NULL);
|
||||
|
||||
// // Example: generate a test message (optional, remove in production)
|
||||
// glDebugMessageInsert(
|
||||
// GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_ERROR, 1, GL_DEBUG_SEVERITY_HIGH, -1,
|
||||
// "Test message from "
|
||||
// "application!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1");
|
||||
|
||||
printf(" SDL RESOLUTION: %dx%d\n\n", getConfig()->width, getConfig()->height);
|
||||
|
||||
if (getConfig()->fullscreen)
|
||||
@ -154,12 +142,6 @@ void pollEvents()
|
||||
{
|
||||
SDL_Quit();
|
||||
}
|
||||
// if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
|
||||
// {
|
||||
// int newWidth = event.window.data1;
|
||||
// int newHeight = event.window.data2;
|
||||
// handleResize(newWidth, newHeight);
|
||||
// }
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -1,83 +0,0 @@
|
||||
#include <fcntl.h>
|
||||
#include <linux/serial.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <termios.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "serial.h"
|
||||
|
||||
#define TIMEOUT_SELECT 200
|
||||
|
||||
int setSerialAttributes(int fd, int myBaud)
|
||||
{
|
||||
struct termios options;
|
||||
int status;
|
||||
tcgetattr(fd, &options);
|
||||
|
||||
cfmakeraw(&options);
|
||||
cfsetispeed(&options, myBaud);
|
||||
cfsetospeed(&options, myBaud);
|
||||
|
||||
options.c_cflag |= (CLOCAL | CREAD);
|
||||
options.c_cflag &= ~PARENB;
|
||||
options.c_cflag &= ~CSTOPB;
|
||||
options.c_cflag &= ~CSIZE;
|
||||
options.c_cflag |= CS8;
|
||||
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
|
||||
options.c_oflag &= ~OPOST;
|
||||
|
||||
options.c_cc[VMIN] = 0;
|
||||
options.c_cc[VTIME] = 0; // One seconds (10 deciseconds)
|
||||
|
||||
tcsetattr(fd, TCSANOW, &options);
|
||||
|
||||
ioctl(fd, TIOCMGET, &status);
|
||||
|
||||
status |= TIOCM_DTR;
|
||||
status |= TIOCM_RTS;
|
||||
|
||||
ioctl(fd, TIOCMSET, &status);
|
||||
|
||||
usleep(100 * 1000); // 10mS
|
||||
|
||||
struct serial_struct serial_settings;
|
||||
|
||||
ioctl(fd, TIOCGSERIAL, &serial_settings);
|
||||
|
||||
serial_settings.flags |= ASYNC_LOW_LATENCY;
|
||||
ioctl(fd, TIOCSSERIAL, &serial_settings);
|
||||
|
||||
tcflush(fd, TCIOFLUSH);
|
||||
usleep(100 * 1000); // Required to make flush work, for some reason
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int readBytes(int fd, unsigned char *buffer, int amount)
|
||||
{
|
||||
fd_set fd_serial;
|
||||
struct timeval tv;
|
||||
|
||||
FD_ZERO(&fd_serial);
|
||||
FD_SET(fd, &fd_serial);
|
||||
|
||||
tv.tv_sec = 0;
|
||||
tv.tv_usec = TIMEOUT_SELECT * 1000;
|
||||
|
||||
int filesReadyToRead = select(fd + 1, &fd_serial, NULL, NULL, &tv);
|
||||
|
||||
if (filesReadyToRead < 1)
|
||||
return 0;
|
||||
|
||||
if (!FD_ISSET(fd, &fd_serial))
|
||||
return 0;
|
||||
|
||||
return read(fd, buffer, amount);
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
|
||||
int setSerialAttributes(int fd, int myBaud);
|
||||
int readBytes(int fd, unsigned char *buffer, int amount);
|
@ -990,6 +990,21 @@ void gl_ProgramStringARB(int target, int program_fmt, int program_len, char *pro
|
||||
program = newProgram;
|
||||
program_len = newProgramLen;
|
||||
}
|
||||
else if (gId == MJ4_REVG || gId == MJ4_EVO)
|
||||
{
|
||||
char *newProgram;
|
||||
if (target == GL_VERTEX_PROGRAM_ARB)
|
||||
{
|
||||
newProgram = replaceInBlock(program, mj4VsMesa, mj4VsMesaCount, "", "");
|
||||
}
|
||||
else if (target == GL_FRAGMENT_PROGRAM_ARB)
|
||||
{
|
||||
newProgram = replaceInBlock(program, mj4FsMesa, mj4FsMesaCount, "", "");
|
||||
}
|
||||
int newProgramLen = strlen(newProgram);
|
||||
program = newProgram;
|
||||
program_len = newProgramLen;
|
||||
}
|
||||
glProgramStringARB(target, program_fmt, program_len, program);
|
||||
|
||||
if ((gId == VIRTUA_FIGHTER_5 || gId == VIRTUA_FIGHTER_5_REVA || gId == VIRTUA_FIGHTER_5_REVB ||
|
||||
|
319
src/lindbergh/shader_work/mj4.h
Normal file
319
src/lindbergh/shader_work/mj4.h
Normal file
@ -0,0 +1,319 @@
|
||||
#ifndef MJ4_H
|
||||
#define MJ$_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
// Fragment
|
||||
SearchReplace mj4FsMesa[] = {
|
||||
{"OPTION NV_fragment_program2;", ""},
|
||||
{"SHORT TEMP", "TEMP"},
|
||||
{"SHORT OUTPUT", "OUTPUT"},
|
||||
|
||||
{"ADDR ", "ADD "},
|
||||
{"DP3R ", "DP3 "},
|
||||
{"RSQR ", "RSQ "},
|
||||
{"MADR ", "MAD "},
|
||||
{"MULR ", "MUL "},
|
||||
{"LITR ", "LIT "},
|
||||
{"MOVR ", "MOV "},
|
||||
{"MINR ", "MIN "},
|
||||
{"MAXR ", "MAX "},
|
||||
{"SEQR ", "#SEQR "},
|
||||
{"RCPR ", "RCP "},
|
||||
{"SLTR ", "SLT "},
|
||||
{"FLRR ", "FLR "},
|
||||
|
||||
{"SGERC ", "SGE "},
|
||||
{"SEQRC ", "#SEQRC "},
|
||||
{"SLTRC ", "SLT "},
|
||||
{"MULXC ", "MUL "},
|
||||
{"MOVXC ", "MOV "},
|
||||
{"SEQX ", "#SEQX "},
|
||||
{"MULX ", "MUL "},
|
||||
|
||||
{"MOVH ", "MOV "},
|
||||
{"MINH ", "MIN "},
|
||||
{"ADDH ", "ADD "},
|
||||
{"MADH ", "MAD "},
|
||||
{"MULH ", "MUL "},
|
||||
{"DP4H ", "DP4 "},
|
||||
{"RSQH ", "RSQ "},
|
||||
{"RCPH ", "RCP "},
|
||||
{"DP3H ", "DP3 "},
|
||||
{"LITH ", "LIT "},
|
||||
/*{"DP2H ", "#DP2H "},*/
|
||||
|
||||
{"MULH_SAT ", "MUL_SAT "},
|
||||
{"MULR_SAT ", "MUL_SAT "},
|
||||
|
||||
{"KIL ", "#KIL "},
|
||||
{"(NE.x)", " "},
|
||||
{"IF ", "#IF "},
|
||||
{"ELSE;", " "},
|
||||
{"ENDIF;", " "},
|
||||
{"(NE)", " "},
|
||||
{"(EQ)", " "},
|
||||
{"(EQ.x)", " "},
|
||||
|
||||
{"POWR ", "POW "}, // MJ4Evo
|
||||
{"POWH ", "POW "},
|
||||
{"MAXH ", "MAX "},
|
||||
{"NRMH H4.xyz, fragment.texcoord[4];",
|
||||
"DP3 H1.x, fragment.texcoord[4], fragment.texcoord[4];RSQ H1.x, H1.x;MUL H4.xyz, fragment.texcoord[4], H1.x;"},
|
||||
{"NRMH H6.xyz, fragment.texcoord[3];",
|
||||
"DP3 H1.x, fragment.texcoord[3], fragment.texcoord[3];RSQ H1.x, H1.x;MUL H6.xyz, fragment.texcoord[3], H1.x;"},
|
||||
|
||||
{"NRMH H0.xyz, H7;", "DP3 H4.x, H7, H7;RSQ H4.x, H4.x;MUL H0.xyz, H7, H4.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H0.xyz, H8;", "DP3 H4.x, H8, H8;RSQ H4.x, H4.x;MUL H0.xyz, H8, H4.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H7;", "DP3 H4.x, H7, H7;RSQ H4.x, H4.x;MUL H1.xyz, H7, H4.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H8;", "DP3 H4.x, H8, H8;RSQ H4.x, H4.x;MUL H1.xyz, H8, H4.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H6;", "DP3 H4.x, H6, H6;RSQ H4.x, H4.x;MUL H2.xyz, H6, H4.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H7;", "DP3 H4.x, H7, H7;RSQ H4.x, H4.x;MUL H2.xyz, H7, H4.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H8;", "DP3 H4.x, H8, H8;RSQ H4.x, H4.x;MUL H2.xyz, H8, H4.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H3.xyz, H6;", "DP3 H2.x, H6, H6;RSQ H2.x, H2.x;MUL H3.xyz, H6, H2.x;MOV H3.w, 0.0;"},
|
||||
{"NRMH H3.xyz, H7;", "DP3 H2.x, H7, H7;RSQ H2.x, H2.x;MUL H3.xyz, H7, H2.x;MOV H3.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H7;", "DP3 H3.x, H7, H7;RSQ H3.x, H3.x;MUL H4.xyz, H7, H3.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H8;", "DP3 H3.x, H8, H8;RSQ H3.x, H3.x;MUL H4.xyz, H8, H3.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H0;", "DP3 H2.x, H0, H0;RSQ H2.x, H2.x;MUL H5.xyz, H0, H2.x;MOV H5.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H2;", "DP3 H4.x, H2, H2;RSQ H4.x, H4.x;MUL H5.xyz, H2, H4.x;MOV H5.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H7;", "DP3 H4.x, H7, H7;RSQ H4.x, H4.x;MUL H5.xyz, H7, H4.x;MOV H5.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H8;", "DP3 H4.x, H8, H8;RSQ H4.x, H4.x;MUL H5.xyz, H8, H4.x;MOV H5.w, 0.0;"},
|
||||
|
||||
{"NRMH H6.xyz, H0;", "DP3 H3.x, H0, H0;RSQ H3.x, H3.x;MUL H6.xyz, H0, H3.x;MOV H6.w, 0.0;"},
|
||||
{"NRMH H6.xyz, H1;", "DP3 H3.x, H1, H1;RSQ H3.x, H3.x;MUL H6.xyz, H1, H3.x;MOV H6.w, 0.0;"},
|
||||
{"NRMH H6.xyz, H2;", "DP3 H3.x, H2, H2;RSQ H3.x, H3.x;MUL H6.xyz, H2, H3.x;MOV H6.w, 0.0;"},
|
||||
{"NRMH H6.xyz, H5;", "DP3 H3.x, H5, H5;RSQ H3.x, H3.x;MUL H6.xyz, H5, H3.x;MOV H6.w, 0.0;"},
|
||||
{"NRMH H6.xyz, H8;", "DP3 H3.x, H8, H8;RSQ H3.x, H3.x;MUL H6.xyz, H8, H3.x;MOV H6.w, 0.0;"},
|
||||
{"NRMH H6.xyz, H10;", "DP3 H3.x, H10, H10;RSQ H3.x, H3.x;MUL H6.xyz, H10, H3.x;MOV H6.w, 0.0;"},
|
||||
|
||||
{"NRMH H7.xyz, H0;", "DP3 H1.x, H0, H0;RSQ H1.x, H1.x;MUL H7.xyz, H0, H1.x;MOV H7.w, 0.0;"},
|
||||
{"NRMH H7.xyz, H1;", "DP3 H1.x, H1, H1;RSQ H1.x, H1.x;MUL H7.xyz, H1, H1.x;MOV H7.w, 0.0;"},
|
||||
{"NRMH H7.xyz, H5;", "DP3 H1.x, H5, H5;RSQ H1.x, H1.x;MUL H7.xyz, H5, H1.x;MOV H7.w, 0.0;"},
|
||||
{"NRMH H7.xyz, H6;", "DP3 H1.x, H6, H6;RSQ H1.x, H1.x;MUL H7.xyz, H6, H1.x;MOV H7.w, 0.0;"},
|
||||
{"NRMH H7.xyz, H7;", "DP3 H1.x, H7, H7;RSQ H1.x, H1.x;MUL H7.xyz, H7, H1.x;MOV H7.w, 0.0;"},
|
||||
{"NRMH H7.xyz, H9;", "DP3 H1.x, H9, H9;RSQ H1.x, H1.x;MUL H7.xyz, H9, H1.x;MOV H7.w, 0.0;"},
|
||||
|
||||
{"NRMH H8.xyz, H3;", "DP3 H1.x, H3, H3;RSQ H1.x, H1.x;MUL H8.xyz, H3, H1.x;MOV H8.w, 0.0;"},
|
||||
{"NRMH H8.xyz, H8;", "DP3 H1.x, H8, H8;RSQ H1.x, H1.x;MUL H8.xyz, H8, H1.x;MOV H8.w, 0.0;"},
|
||||
{"NRMH H9.xyz, H9;", "DP3 H1.x, H9, H9;RSQ H1.x, H1.x;MUL H9.xyz, H9, H1.x;MOV H9.w, 0.0;"},
|
||||
{"NRMH H10.xyz, H10;", "DP3 H1.x, H10, H10;RSQ H1.x, H1.x;MUL H10.xyz, H10, H1.x;MOV H10.w, 0.0;"},
|
||||
|
||||
{"NRMH H6.xyz, c[7];", "DP3 H2.x, c[7], c[7];RSQ H2.x, H2.x;MUL H6.xyz, c[7], H2.x;"},
|
||||
{"NRMH H6.xyz, c[10];", "DP3 H3.x, c[10], c[10];RSQ H3.x, H3.x;MUL H6.xyz, c[10], H3.x;"},
|
||||
{"NRMH H7.xyz, c[10];", "DP3 H3.x, c[10], c[10];RSQ H3.x, H3.x;MUL H7.xyz, c[10], H3.x;"},
|
||||
|
||||
{"NRMH H0.xyz, H1.xzww;",
|
||||
"MOV H5.x, H1.x; MOV H5.y, H1.z; MOV H5.z, H1.w; MOV H5.w, H1.w; DP3 H4.x, H5, H5; RSQ H4.x, H4.x; MUL H0.xyz, H5, H4.x;"},
|
||||
{"NRMH H0.xyz, H5.xzww;",
|
||||
"MOV H1.x, H5.x; MOV H1.z, H5.y; MOV H1.z, H5.w; MOV H1.w, H5.w; DP3 H3.x, H1, H1; RSQ H3.x, H3.x; MUL H0.xyz, H1, H3.x;"},
|
||||
{"NRMH H0.xyz, H6.xyww;",
|
||||
"MOV H1.x, H6.x; MOV H1.z, H6.y; MOV H1.z, H6.w; MOV H1.w, H6.w; DP3 H3.x, H1, H1; RSQ H3.x, H3.x; MUL H0.xyz, H1, H3.x;"},
|
||||
{"NRMH H1.xyz, H2.xyww;",
|
||||
"MOV H2.x, H2.x; MOV H2.y, H2.y; MOV H2.z, H2.w; MOV H2.w, H2.w; DP3 H3.x, H2, H2; RSQ H3.x, H3.x; MUL H1.xyz, H2, H3.x;"},
|
||||
{"NRMH H1.xyz, H3.xyww;",
|
||||
"MOV H2.x, H3.x; MOV H2.y, H3.y; MOV H2.z, H3.w; MOV H2.w, H3.w; DP3 H3.x, H2, H2; RSQ H3.x, H3.x; MUL H1.xyz, H2, H3.x;"},
|
||||
{"NRMH H2.xyz, H4.xyww;",
|
||||
"MOV H1.x, H4.x; MOV H1.y, H4.y; MOV H1.z, H4.w; MOV H1.w, H4.w; DP3 H0.x, H1, H1; RSQ H0.x, H0.x; MUL H2.xyz, H1, H0.x;"},
|
||||
{"NRMH H2.xyz, H5.xyww;",
|
||||
"MOV H1.x, H5.x; MOV H1.y, H5.y; MOV H1.z, H5.w; MOV H1.w, H5.w; DP3 H0.x, H1, H1; RSQ H0.x, H0.x; MUL H2.xyz, H1, H0.x;"},
|
||||
{"NRMH H2.xyz, H6.xyww;",
|
||||
"MOV H1.x, H6.x; MOV H1.y, H6.y; MOV H1.z, H6.w; MOV H1.w, H6.w; DP3 H0.x, H1, H1; RSQ H0.x, H0.x; MUL H2.xyz, H1, H0.x;"},
|
||||
|
||||
{"DP2H H0.x, H5.yxzw, H5.yxzw;", "MUL HC.x, H5.y, H5.y; MUL HC.y, H5.x, H5.x; ADD H0.x, HC.x, HC.y;"},
|
||||
{"DP2H H0.w, H6.yxzw, H6.yxzw;", "MUL HC.x, H6.y, H6.y; MUL HC.y, H6.x, H6.x; ADD H0.w, HC.x, HC.y;"},
|
||||
{"DP2H H1.w, H0.yxzw, H0.yxzw;", "MUL HC.x, H0.y, H0.y; MUL HC.y, H0.x, H0.x; ADD H1.w, HC.x, HC.y;"},
|
||||
{"DP2H H1.x, H1.yxzw, H1.yxzw;", "MUL HC.x, H1.y, H1.y; MUL HC.y, H1.x, H1.x; ADD H1.x, HC.x, HC.y;"},
|
||||
{"DP2H H1.y, H5.yxzw, H5.yxzw;", "MUL HC.x, H5.y, H5.y; MUL HC.y, H5.x, H5.x; ADD H1.w, HC.y, HC.y;"},
|
||||
{"DP2H H1.w, H1.yxzw, H1.yxzw;", "MUL HC.x, H1.y, H1.y; MUL HC.y, H1.x, H1.x; ADD H1.w, HC.x, HC.y;"},
|
||||
{"DP2H H1.x, H3.yxzw, H3.yxzw;", "MUL HC.x, H3.y, H3.y; MUL HC.y, H3.x, H3.x; ADD H1.x, HC.x, HC.y;"},
|
||||
{"DP2H H1.w, H6.yxzw, H6.yxzw;", "MUL HC.x, H6.y, H6.y; MUL HC.y, H6.x, H6.x; ADD H1.w, HC.x, HC.y;"},
|
||||
{"DP2H H2.w, H4.yxzw, H4.yxzw;", "MUL HC.x, H4.y, H4.y; MUL HC.y, H4.x, H4.x; ADD H2.w, HC.x, HC.y;"},
|
||||
{"DP2H H2.w, H5.yxzw, H5.yxzw;", "MUL HC.x, H5.y, H5.y; MUL HC.y, H5.x, H5.x; ADD H2.w, HC.x, HC.y;"}, // MJ4Evo
|
||||
|
||||
{"DP2H H0.w, H0.yxzw, H0.yxzw;", "MUL HC.x, H0.y, H0.y; MUL HC.y, H0.x, H0.x; ADD H0.w, HC.x, HC.y;"},
|
||||
{"DP2H H0.x, H0.yxzw, H0.yxzw;", "MUL HC.x, H0.y, H0.y; MUL HC.y, H0.x, H0.x; ADD H0.x, HC.x, HC.y;"},
|
||||
{"DP2H H0.w, H1.yxzw, H1.yxzw;", "MUL HC.x, H1.y, H1.y; MUL HC.y, H1.x, H1.x; ADD H0.w, HC.x, HC.y;"},
|
||||
{"DP2H H0.w, H2.yxzw, H2.yxzw;", "MUL HC.x, H2.y, H2.y; MUL HC.y, H2.x, H2.x; ADD H0.w, HC.x, HC.y;"},
|
||||
{"DP2H H0.w, H3.yxzw, H3.yxzw;", "MUL HC.x, H3.y, H3.y; MUL HC.y, H3.x, H3.x; ADD H0.w, HC.x, HC.y;"},
|
||||
{"DP2H H0.y, H3.yxzw, H3.yxzw;", "MUL HC.x, H3.y, H3.y; MUL HC.y, H3.x, H3.x; ADD H0.y, HC.x, HC.y;"},
|
||||
{"DP2H H0.w, H4.yxzw, H4.yxzw;", "MUL HC.x, H4.y, H4.y; MUL HC.y, H4.x, H4.x; ADD H0.w, HC.x, HC.y;"},
|
||||
{"DP2H H0.x, H4.yxzw, H4.yxzw;", "MUL HC.x, H4.y, H4.y; MUL HC.y, H4.x, H4.x; ADD H0.x, HC.x, HC.y;"},
|
||||
{"DP2H H0.y, H4.yxzw, H4.yxzw;", "MUL HC.x, H4.y, H4.y; MUL HC.y, H4.x, H4.x; ADD H0.y, HC.x, HC.y;"},
|
||||
{"DP2H H0.w, H5.yxzw, H5.yxzw;", "MUL HC.x, H5.y, H5.y; MUL HC.y, H5.x, H5.x; ADD H0.w, HC.x, HC.y;"},
|
||||
|
||||
{"DP2H H1.w, H2.yxzw, H2.yxzw;", "MUL HC.x, H2.y, H2.y; MUL HC.y, H2.x, H2.x; ADD H1.w, HC.x, HC.y;"},
|
||||
{"DP2H H1.w, H3.yxzw, H3.yxzw;", "MUL HC.x, H3.y, H3.y; MUL HC.y, H3.x, H3.x; ADD H1.w, HC.x, HC.y;"},
|
||||
{"DP2H H1.w, H4.yxzw, H4.yxzw;", "MUL HC.x, H4.y, H4.y; MUL HC.y, H4.x, H4.x; ADD H1.w, HC.x, HC.y;"},
|
||||
{"DP2H H1.y, H4.yxzw, H4.yxzw;", "MUL HC.x, H4.y, H4.y; MUL HC.y, H4.x, H4.x; ADD H1.y, HC.x, HC.y;"},
|
||||
{"DP2H H1.w, H5.yxzw, H5.yxzw;", "MUL HC.x, H5.y, H5.y; MUL HC.y, H5.x, H5.x; ADD H1.w, HC.x, HC.y;"},
|
||||
{"DP2H H2.x, H2.yxzw, H2.yxzw;", "MUL HC.x, H2.y, H2.y; MUL HC.y, H2.x, H2.x; ADD H2.x, HC.x, HC.y;"},
|
||||
{"DP2H H2.x, H5.yxzw, H5.yxzw;", "MUL HC.x, H5.y, H5.y; MUL HC.y, H5.x, H5.x; ADD H2.x, HC.x, HC.y;"},
|
||||
|
||||
{"NRMH H0.xyz, c[4];", "DP3 H2.x, c[4], c[4];RSQ H2.x, H2.x;MUL H0.xyz, c[4], H2.x;"},
|
||||
{"NRMH H1.xyz, c[4];", "DP3 H2.x, c[4], c[4];RSQ H2.x, H2.x;MUL H1.xyz, c[4], H2.x;"},
|
||||
{"NRMH H2.xyz, c[4];", "DP3 H1.x, c[4], c[4];RSQ H1.x, H1.x;MUL H2.xyz, c[4], H1.x;"},
|
||||
{"NRMH H3.xyz, c[4];", "DP3 H2.x, c[4], c[4];RSQ H2.x, H2.x;MUL H3.xyz, c[4], H2.x;"},
|
||||
{"NRMH H4.xyz, c[4];", "DP3 H3.x, c[4], c[4];RSQ H3.x, H3.x;MUL H4.xyz, c[4], H3.x;"},
|
||||
{"NRMH H5.xyz, c[4];", "DP3 H4.x, c[4], c[4];RSQ H4.x, H4.x;MUL H5.xyz, c[4], H4.x;"},
|
||||
|
||||
{"NRMH H0.xyz, c[7];", "DP3 H2.x, c[7], c[7];RSQ H2.x, H2.x;MUL H0.xyz, c[7], H2.x;"},
|
||||
{"NRMH H1.xyz, c[7];", "DP3 H2.x, c[7], c[7];RSQ H2.x, H2.x;MUL H1.xyz, c[7], H2.x;"},
|
||||
{"NRMH H2.xyz, c[7];", "DP3 H1.x, c[7], c[7];RSQ H1.x, H1.x;MUL H2.xyz, c[7], H1.x;"},
|
||||
{"NRMH H3.xyz, c[7];", "DP3 H2.x, c[7], c[7];RSQ H2.x, H2.x;MUL H3.xyz, c[7], H2.x;"},
|
||||
{"NRMH H4.xyz, c[7];", "DP3 H3.x, c[7], c[7];RSQ H3.x, H3.x;MUL H4.xyz, c[7], H3.x;"},
|
||||
{"NRMH H5.xyz, c[7];", "DP3 H2.x, c[7], c[7];RSQ H2.x, H2.x;MUL H5.xyz, c[7], H2.x;"},
|
||||
|
||||
{"NRMH H0.xyz, c[10];", "DP3 H1.x, c[10], c[10];RSQ H1.x, H1.x;MUL H0.xyz, c[10], H1.x;"},
|
||||
{"NRMH H1.xyz, c[10];", "DP3 H2.x, c[10], c[10];RSQ H2.x, H2.x;MUL H1.xyz, c[10], H2.x;"},
|
||||
{"NRMH H2.xyz, c[10];", "DP3 H3.x, c[10], c[10];RSQ H3.x, H3.x;MUL H2.xyz, c[10], H3.x;"},
|
||||
{"NRMH H3.xyz, c[10];", "DP3 H2.x, c[10], c[10];RSQ H2.x, H2.x;MUL H3.xyz, c[10], H2.x;"},
|
||||
{"NRMH H4.xyz, c[10];", "DP3 H3.x, c[10], c[10];RSQ H3.x, H3.x;MUL H4.xyz, c[10], H3.x;"},
|
||||
{"NRMH H5.xyz, c[10];", "DP3 H3.x, c[10], c[10];RSQ H3.x, H3.x;MUL H5.xyz, c[10], H3.x;"},
|
||||
|
||||
{"NRMH H0.xyz, fragment.texcoord[4];",
|
||||
"DP3 H1.x, fragment.texcoord[4], fragment.texcoord[4];RSQ H1.x, H1.x;MUL H0.xyz, fragment.texcoord[4], H1.x;"},
|
||||
{"NRMH H1.xyz, fragment.texcoord[4];",
|
||||
"DP3 H2.x, fragment.texcoord[4], fragment.texcoord[4];RSQ H2.x, H2.x;MUL H1.xyz, fragment.texcoord[4], H2.x;"},
|
||||
{"NRMH H2.xyz, fragment.texcoord[4];",
|
||||
"DP3 H1.x, fragment.texcoord[4], fragment.texcoord[4];RSQ H1.x, H1.x;MUL H2.xyz, fragment.texcoord[4], H1.x;"},
|
||||
{"NRMH H3.xyz, fragment.texcoord[4];",
|
||||
"DP3 H1.x, fragment.texcoord[4], fragment.texcoord[4];RSQ H1.x, H1.x;MUL H3.xyz, fragment.texcoord[4], H1.x;"},
|
||||
|
||||
{"NRMH H0.xyz, fragment.texcoord[3];",
|
||||
"DP3 H1.x, fragment.texcoord[3], fragment.texcoord[3];RSQ H1.x, H1.x;MUL H0.xyz, fragment.texcoord[3], H1.x;"},
|
||||
{"NRMH H1.xyz, fragment.texcoord[3];",
|
||||
"DP3 H2.x, fragment.texcoord[3], fragment.texcoord[3];RSQ H2.x, H2.x;MUL H1.xyz, fragment.texcoord[3], H2.x;"},
|
||||
{"NRMH H2.xyz, fragment.texcoord[3];",
|
||||
"DP3 H1.x, fragment.texcoord[3], fragment.texcoord[3];RSQ H1.x, H1.x;MUL H2.xyz, fragment.texcoord[3], H1.x;"},
|
||||
{"NRMH H3.xyz, fragment.texcoord[3];",
|
||||
"DP3 H1.x, fragment.texcoord[3], fragment.texcoord[3];RSQ H1.x, H1.x;MUL H3.xyz, fragment.texcoord[3], H1.x;"},
|
||||
{"NRMH H4.xyz, fragment.texcoord[3];",
|
||||
"DP3 H1.x, fragment.texcoord[3], fragment.texcoord[3];RSQ H1.x, H1.x;MUL H4.xyz, fragment.texcoord[3], H1.x;"},
|
||||
{"NRMH H5.xyz, fragment.texcoord[3];",
|
||||
"DP3 H1.x, fragment.texcoord[3], fragment.texcoord[3];RSQ H1.x, H1.x;MUL H5.xyz, fragment.texcoord[3], H1.x;"},
|
||||
|
||||
{"NRMH H0.xyz, H1.xyww;",
|
||||
"MOV H5.x, H1.x; MOV H5.y, H1.y; MOV H5.z, H1.w; MOV H5.w, H1.w; DP3 H4.x, H5, H5; RSQ H4.x, H4.x; MUL H0.xyz, H5, H4.x;"},
|
||||
{"NRMH H0.xyz, H2.xyww;",
|
||||
"MOV H5.x, H2.x; MOV H5.y, H2.y; MOV H5.z, H2.w; MOV H5.w, H2.w; DP3 H4.x, H5, H5; RSQ H4.x, H4.x; MUL H0.xyz, H5, H4.x;"},
|
||||
{"NRMH H0.xyz, H3.xyww;",
|
||||
"MOV H1.x, H3.x; MOV H1.y, H3.y; MOV H1.z, H3.w; MOV H1.w, H3.w; DP3 H2.x, H1, H1; RSQ H2.x, H2.x; MUL H0.xyz, H1, H2.x;"},
|
||||
{"NRMH H0.xyz, H4.xyww;",
|
||||
"MOV H1.x, H4.x; MOV H1.y, H4.y; MOV H1.z, H4.w; MOV H1.w, H4.w; DP3 H3.x, H1, H1; RSQ H3.x, H3.x; MUL H0.xyz, H1, H3.x;"},
|
||||
|
||||
{"NRMH H1.xyz, H0.xyww;",
|
||||
"MOV H2.x, H0.x; MOV H2.y, H0.y; MOV H2.z, H0.w; MOV H2.w, H0.w; DP3 H3.x, H2, H2; RSQ H3.x, H3.x; MUL H1.xyz, H2, H3.x;"},
|
||||
{"NRMH H1.xyz, H4.xyww;",
|
||||
"MOV H2.x, H4.x; MOV H2.y, H4.y; MOV H2.z, H4.w; MOV H2.w, H4.w; DP3 H3.x, H2, H2; RSQ H3.x, H3.x; MUL H1.xyz, H2, H3.x;"},
|
||||
{"NRMH H1.xyz, H5.xyww;",
|
||||
"MOV H4.x, H5.x; MOV H4.y, H5.y; MOV H4.z, H5.w; MOV H4.w, H5.w; DP3 H3.x, H4, H4; RSQ H3.x, H3.x; MUL H1.xyz, H4, H3.x;"},
|
||||
|
||||
{"NRMH H2.xyz, H3.xyww;",
|
||||
"MOV H1.x, H3.x; MOV H1.y, H3.y; MOV H1.z, H3.w; MOV H1.w, H3.w; DP3 H0.x, H1, H1; RSQ H0.x, H0.x; MUL H2.xyz, H1, H0.x;"},
|
||||
|
||||
{"NRMH H4.xyz, H2.xyww;",
|
||||
"MOV H1.x, H2.x; MOV H1.y, H2.y; MOV H1.z, H2.w; MOV H1.w, H2.w; DP3 H3.x, H1, H1; RSQ H3.x, H3.x; MUL H4.xyz, H1, H3.x;"},
|
||||
{"NRMH H4.xyz, H3.xyww;",
|
||||
"MOV H1.x, H3.x; MOV H1.y, H3.y; MOV H1.z, H3.w; MOV H1.w, H3.w; DP3 H2.x, H1, H1; RSQ H2.x, H2.x; MUL H4.xyz, H1, H2.x;"},
|
||||
|
||||
{"NRMH H5.xyz, H2.xyww;",
|
||||
"MOV H1.x, H2.x; MOV H1.y, H2.y; MOV H1.z, H2.w; MOV H1.w, H2.w; DP3 H3.x, H1, H1; RSQ H3.x, H3.x; MUL H5.xyz, H1, H3.x;"},
|
||||
{"NRMH H5.xyz, H3.xyww;",
|
||||
"MOV H4.x, H3.x; MOV H4.y, H3.y; MOV H4.z, H3.w; MOV H4.w, H3.w; DP3 H3.x, H4, H4; RSQ H3.x, H3.x; MUL H5.xyz, H4, H3.x;"},
|
||||
{"NRMH H5.xyz, H4.xyww;",
|
||||
"MOV H2.x, H4.x; MOV H2.y, H4.y; MOV H2.z, H4.w; MOV H2.w, H4.w; DP3 H3.x, H2, H2; RSQ H3.x, H3.x; MUL H5.xyz, H2, H3.x;"},
|
||||
|
||||
{"NRMH H6.xyz, H3.xyww;",
|
||||
"MOV H1.x, H3.x; MOV H1.y, H3.y; MOV H1.z, H3.w; MOV H1.w, H3.w; DP3 H2.x, H1, H1; RSQ H2.x, H2.x; MUL H6.xyz, H1, H2.x;"},
|
||||
{"NRMH H6.xyz, H4.xyww;",
|
||||
"MOV H2.x, H4.x; MOV H2.y, H4.y; MOV H2.z, H4.w; MOV H2.w, H4.w; DP3 H3.x, H2, H2; RSQ H3.x, H3.x; MUL H6.xyz, H2, H3.x;"},
|
||||
|
||||
{"NRMH H0.xyz, H4.xzww;",
|
||||
"MOV H1.x, H4.x; MOV H1.y, H4.z; MOV H1.z, H4.w; MOV H1.w, H4.w; DP3 H3.x, H1, H1; RSQ H3.x, H3.x; MUL H0.xyz, H1, H3.x;"},
|
||||
{"NRMH H4.xyz, H2.yzww;",
|
||||
"MOV H1.x, H2.y; MOV H1.y, H2.z; MOV H1.z, H2.w; MOV H1.w, H2.w; DP3 H3.x, H1, H1; RSQ H3.x, H3.x; MUL H4.xyz, H1, H3.x;"},
|
||||
|
||||
{"NRMH H0.xyz, H0;", "DP3 H2.x, H0, H0;RSQ H2.x, H2.x;MUL H0.xyz, H0, H2.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H0.xyz, H1;", "DP3 H2.x, H1, H1;RSQ H2.x, H2.x;MUL H0.xyz, H1, H2.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H0.xyz, H2;", "DP3 H1.x, H2, H2;RSQ H1.x, H1.x;MUL H0.xyz, H2, H1.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H0.xyz, H3;", "DP3 H2.x, H3, H3;RSQ H2.x, H2.x;MUL H0.xyz, H3, H2.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H0.xyz, H4;", "DP3 H2.x, H4, H4;RSQ H2.x, H2.x;MUL H0.xyz, H4, H2.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H0.xyz, H5;", "DP3 H1.x, H5, H5;RSQ H1.x, H1.x;MUL H0.xyz, H5, H1.x;MOV H0.w, 0.0;"},
|
||||
{"NRMH H0.xyz, H6;", "DP3 H4.x, H6, H6;RSQ H4.x, H4.x;MUL H0.xyz, H6, H4.x;MOV H0.w, 0.0;"},
|
||||
|
||||
{"NRMH H1.xyz, H0;", "DP3 H2.x, H0, H0;RSQ H2.x, H2.x;MUL H1.xyz, H0, H2.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H1;", "DP3 H2.x, H1, H1;RSQ H2.x, H2.x;MUL H1.xyz, H1, H2.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H2;", "DP3 H0.x, H2, H2;RSQ H0.x, H0.x;MUL H1.xyz, H2, H0.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H3;", "DP3 H2.x, H3, H3;RSQ H2.x, H2.x;MUL H1.xyz, H3, H2.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H4;", "DP3 H3.x, H4, H4;RSQ H3.x, H3.x;MUL H1.xyz, H4, H3.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H5;", "DP3 H2.x, H5, H5;RSQ H2.x, H2.x;MUL H1.xyz, H5, H2.x;MOV H1.w, 0.0;"},
|
||||
{"NRMH H1.xyz, H6;", "DP3 H4.x, H6, H6;RSQ H4.x, H4.x;MUL H1.xyz, H6, H4.x;MOV H1.w, 0.0;"},
|
||||
|
||||
{"NRMH H2.xyz, H0;", "DP3 H1.x, H0, H0;RSQ H1.x, H1.x;MUL H2.xyz, H0, H1.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H1;", "DP3 H0.x, H1, H1;RSQ H0.x, H0.x;MUL H2.xyz, H1, H0.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H2;", "DP3 H1.x, H2, H2;RSQ H1.x, H1.x;MUL H2.xyz, H2, H1.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H3;", "DP3 H1.x, H3, H3;RSQ H1.x, H1.x;MUL H2.xyz, H3, H1.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H4;", "DP3 H1.x, H4, H4;RSQ H1.x, H1.x;MUL H2.xyz, H4, H1.x;MOV H2.w, 0.0;"},
|
||||
{"NRMH H2.xyz, H5;", "DP3 H4.x, H5, H5;RSQ H4.x, H4.x;MUL H2.xyz, H5, H4.x;MOV H2.w, 0.0;"},
|
||||
|
||||
{"NRMH H3.xyz, H0;", "DP3 H2.x, H0, H0;RSQ H2.x, H2.x;MUL H3.xyz, H0, H2.x;MOV H3.w, 0.0;"},
|
||||
{"NRMH H3.xyz, H1;", "DP3 H4.x, H1, H1;RSQ H4.x, H4.x;MUL H3.xyz, H1, H4.x;MOV H3.w, 0.0;"},
|
||||
{"NRMH H3.xyz, H2;", "DP3 H1.x, H2, H2;RSQ H1.x, H1.x;MUL H3.xyz, H2, H1.x;MOV H3.w, 0.0;"},
|
||||
{"NRMH H3.xyz, H3;", "DP3 H2.x, H3, H3;RSQ H2.x, H2.x;MUL H3.xyz, H3, H2.x;MOV H3.w, 0.0;"},
|
||||
{"NRMH H3.xyz, H4;", "DP3 H1.x, H4, H4;RSQ H1.x, H1.x;MUL H3.xyz, H4, H1.x;MOV H3.w, 0.0;"},
|
||||
{"NRMH H3.xyz, H5;", "DP3 H2.x, H5, H5;RSQ H2.x, H2.x;MUL H3.xyz, H5, H2.x;MOV H3.w, 0.0;"},
|
||||
|
||||
{"NRMH H4.xyz, H0;", "DP3 H2.x, H0, H0;RSQ H2.x, H2.x;MUL H4.xyz, H0, H2.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H1;", "DP3 H0.x, H1, H1;RSQ H0.x, H0.x;MUL H4.xyz, H1, H0.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H2;", "DP3 H3.x, H2, H2;RSQ H3.x, H3.x;MUL H4.xyz, H2, H3.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H3;", "DP3 H2.x, H3, H3;RSQ H2.x, H2.x;MUL H4.xyz, H3, H2.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H4;", "DP3 H2.x, H4, H4;RSQ H2.x, H2.x;MUL H4.xyz, H4, H2.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H5;", "DP3 H2.x, H5, H5;RSQ H2.x, H2.x;MUL H4.xyz, H5, H2.x;MOV H4.w, 0.0;"},
|
||||
{"NRMH H4.xyz, H6;", "DP3 H3.x, H6, H6;RSQ H3.x, H3.x;MUL H4.xyz, H6, H3.x;MOV H4.w, 0.0;"},
|
||||
|
||||
{"NRMH H5.xyz, H1;", "DP3 H2.x, H1, H1;RSQ H2.x, H2.x;MUL H5.xyz, H1, H2.x;MOV H5.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H3;", "DP3 H1.x, H3, H3;RSQ H1.x, H1.x;MUL H5.xyz, H3, H1.x;MOV H5.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H4;", "DP3 H3.x, H4, H4;RSQ H3.x, H3.x;MUL H5.xyz, H4, H3.x;MOV H5.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H5;", "DP3 H2.x, H5, H5;RSQ H2.x, H2.x;MUL H5.xyz, H5, H2.x;MOV H5.w, 0.0;"},
|
||||
{"NRMH H5.xyz, H6;", "DP3 H4.x, H6, H6;RSQ H4.x, H4.x;MUL H5.xyz, H6, H4.x;MOV H5.w, 0.0;"},
|
||||
|
||||
{"NRMH H6.xyz, H4;", "DP3 H1.x, H4, H4;RSQ H1.x, H1.x;MUL H6.xyz, H4, H1.x;MOV H6.w, 0.0;"},
|
||||
{"NRMH H6.xyz, H6;", "DP3 H4.x, H6, H6;RSQ H4.x, H4.x;MUL H6.xyz, H6, H4.x;MOV H6.w, 0.0;"},
|
||||
{"NRMH H6.xyz, H7;", "DP3 H3.x, H7, H7;RSQ H3.x, H3.x;MUL H6.xyz, H7, H3.x;MOV H6.w, 0.0;"},
|
||||
|
||||
{"NRMH H7.xyz, H4;", "DP3 H1.x, H4, H4;RSQ H1.x, H1.x;MUL H7.xyz, H4, H1.x;MOV H7.w, 0.0;"}};
|
||||
|
||||
int mj4FsMesaCount = sizeof(mj4FsMesa) / sizeof(SearchReplace);
|
||||
|
||||
// Vertex
|
||||
SearchReplace mj4VsMesa[] = {{"OPTION NV_vertex_program3;", "#OPTION NV_vertex_program3;"},
|
||||
|
||||
{"BB1:", " "},
|
||||
{"BB2:", " "},
|
||||
{"BB3:", " "},
|
||||
{"BB4:", " "},
|
||||
{"BB5:", " "},
|
||||
{"BB6:", " "},
|
||||
{"BB7:", " "},
|
||||
{"BB8:", " "},
|
||||
{"BB9:", " "},
|
||||
/*{"MUL_SAT ", "MUL "},*/
|
||||
|
||||
{"MUL_SAT R0.w, R1.x, R0;", "MUL R0.w, R1.x, R0;MAX R0.w, R0.w, 0.0;MIN R0.w, R0.w, 1.0;"},
|
||||
{"MUL_SAT R1.x, R1, R0.w;", "MUL R1.x, R1, R0.w;MAX R1.x, R1.x, 0.0;MIN R1.x, R1.x, 1.0;"},
|
||||
{"MUL_SAT R1.w, R2, R1;", "MUL R1.w, R2, R1;MAX R1.w, R1.w, 0.0;MIN R1.w, R1.w, 1.0;"},
|
||||
{"MUL_SAT R1.w, R1.x, R0;", "MUL R1.w, R1.x, R0;MAX R1.w, R1.w, 0.0;MIN R1.w, R1.w, 1.0;"},
|
||||
{"MUL_SAT R2.w, R2, R1;", "MUL R2.w, R2, R1;MAX R2.w, R2.w, 0.0;MIN R2.w, R2.w, 1.0;"},
|
||||
{"MUL_SAT R3.x, R2.w, R1.w;", "MUL R3.x, R2.w, R1.w;MAX R3.x, R3.x, 0.0;MIN R3.x, R3.x, 1.0;"},
|
||||
|
||||
{"BRA ", "#BRA "},
|
||||
{"MOVC ", "MOV "},
|
||||
|
||||
{"ARL A0.x, vertex.attrib[15];", "ARL A0.x, vertex.attrib[15].x;"},
|
||||
{"(NE.x)", " "},
|
||||
{"(NE)", " "},
|
||||
{"SEQC", "#SEQC "}};
|
||||
|
||||
int mj4VsMesaCount = sizeof(mj4VsMesa) / sizeof(SearchReplace);
|
||||
|
||||
#endif
|
@ -10,6 +10,7 @@
|
||||
#include "hummer.h"
|
||||
#include "id.h"
|
||||
#include "lgj.h"
|
||||
#include "mj4.h"
|
||||
#include "or2.h"
|
||||
#include "primeval.h"
|
||||
#include "rambo.h"
|
||||
|
Loading…
x
Reference in New Issue
Block a user