Merge branch 'master' into tasks/add-lldb-support
This commit is contained in:
commit
27a874e3ba
|
@ -20,6 +20,8 @@ Which games are affected by the issue (please state if GBA or GB game):
|
||||||
|
|
||||||
Which games, if any, are NOT affected by the issue (please state if GBA or GB game):
|
Which games, if any, are NOT affected by the issue (please state if GBA or GB game):
|
||||||
|
|
||||||
|
Include screenshots of ROM Information (File > ROM Information):
|
||||||
|
|
||||||
### Option details
|
### Option details
|
||||||
|
|
||||||
Video driver (simple, opengl):
|
Video driver (simple, opengl):
|
||||||
|
|
|
@ -3612,7 +3612,7 @@ void remoteSendStatus()
|
||||||
s += 12;
|
s += 12;
|
||||||
CPUUpdateCPSR();
|
CPUUpdateCPSR();
|
||||||
v = reg[16].I;
|
v = reg[16].I;
|
||||||
sprintf(s, "10:%02x%02x%02x%02x;", (v & 255),
|
sprintf(s, "19:%02x%02x%02x%02x;", (v & 255),
|
||||||
(v >> 8) & 255,
|
(v >> 8) & 255,
|
||||||
(v >> 16) & 255,
|
(v >> 16) & 255,
|
||||||
(v >> 24) & 255);
|
(v >> 24) & 255);
|
||||||
|
@ -3700,19 +3700,26 @@ void remoteMemoryRead(char* p)
|
||||||
void remoteQuery(char* p)
|
void remoteQuery(char* p)
|
||||||
{
|
{
|
||||||
if (!strncmp(p, "fThreadInfo", 11)) {
|
if (!strncmp(p, "fThreadInfo", 11)) {
|
||||||
remotePutPacket("m-1");
|
remotePutPacket("m1");
|
||||||
} else if (!strncmp(p, "sThreadInfo", 11)) {
|
} else if (!strncmp(p, "sThreadInfo", 11)) {
|
||||||
remotePutPacket("l");
|
remotePutPacket("l");
|
||||||
} else if (!strncmp(p, "Supported", 9)) {
|
} else if (!strncmp(p, "Supported", 9)) {
|
||||||
remotePutPacket("PacketSize=1000");
|
remotePutPacket("PacketSize=1000");
|
||||||
} else if (!strncmp(p, "HostInfo", 8)) {
|
} else if (!strncmp(p, "HostInfo", 8)) {
|
||||||
remotePutPacket("cputype:12;cpusubtype:5;ostype:unknown;vendor:nintendo;endian:little;ptrsize:4;");
|
remotePutPacket("cputype:12;cpusubtype:5;ostype:unknown;vendor:nintendo;endian:little;ptrsize:4;");
|
||||||
|
} else if (!strncmp(p, "C", 1)) {
|
||||||
|
remotePutPacket("QC1");
|
||||||
|
} else if (!strncmp(p, "Attached", 8)) {
|
||||||
|
remotePutPacket("1");
|
||||||
|
} else if (!strncmp(p, "Symbol", 6)) {
|
||||||
|
remotePutPacket("OK");
|
||||||
} else if (!strncmp(p, "Rcmd,", 5)) {
|
} else if (!strncmp(p, "Rcmd,", 5)) {
|
||||||
p += 5;
|
p += 5;
|
||||||
std::string cmd = HexToString(p);
|
std::string cmd = HexToString(p);
|
||||||
dbgExecute(cmd);
|
dbgExecute(cmd);
|
||||||
remotePutPacket("OK");
|
remotePutPacket("OK");
|
||||||
} else {
|
} else {
|
||||||
|
fprintf(stderr, "Unknown packet %s\n", --p);
|
||||||
remotePutPacket("");
|
remotePutPacket("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -36,8 +35,6 @@
|
||||||
#define RETRO_DEVICE_GBA_ALT1 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1)
|
#define RETRO_DEVICE_GBA_ALT1 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 1)
|
||||||
#define RETRO_DEVICE_GBA_ALT2 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 2)
|
#define RETRO_DEVICE_GBA_ALT2 RETRO_DEVICE_SUBCLASS(RETRO_DEVICE_JOYPAD, 2)
|
||||||
|
|
||||||
#define ISHEXDEC ((codeLine[cursor]>='0') && (codeLine[cursor]<='9')) || ((codeLine[cursor]>='a') && (codeLine[cursor]<='f')) || ((codeLine[cursor]>='A') && (codeLine[cursor]<='F'))
|
|
||||||
|
|
||||||
static retro_log_printf_t log_cb;
|
static retro_log_printf_t log_cb;
|
||||||
static retro_video_refresh_t video_cb;
|
static retro_video_refresh_t video_cb;
|
||||||
static retro_input_poll_t poll_cb;
|
static retro_input_poll_t poll_cb;
|
||||||
|
@ -409,6 +406,8 @@ void retro_set_environment(retro_environment_t cb)
|
||||||
{ "vbam_soundfiltering", "Sound Filtering; 5|6|7|8|9|10|0|1|2|3|4" },
|
{ "vbam_soundfiltering", "Sound Filtering; 5|6|7|8|9|10|0|1|2|3|4" },
|
||||||
{ "vbam_gbHardware", "(GB) Emulated Hardware; Automatic|Game Boy Color|Super Game Boy|Game Boy|Game Boy Advance|Super Game Boy 2" },
|
{ "vbam_gbHardware", "(GB) Emulated Hardware; Automatic|Game Boy Color|Super Game Boy|Game Boy|Game Boy Advance|Super Game Boy 2" },
|
||||||
{ "vbam_showborders", "(GB) Show Borders; disabled|enabled|auto" },
|
{ "vbam_showborders", "(GB) Show Borders; disabled|enabled|auto" },
|
||||||
|
{ "vbam_turboenable", "Enable Turbo Buttons; disabled|enabled" },
|
||||||
|
{ "vbam_turbodelay", "Turbo Delay (in frames); 3|4|5|6|7|8|9|10|11|12|13|14|15|1|2" },
|
||||||
{ "vbam_layer_1", "Show layer 1; enabled|disabled" },
|
{ "vbam_layer_1", "Show layer 1; enabled|disabled" },
|
||||||
{ "vbam_layer_2", "Show layer 2; enabled|disabled" },
|
{ "vbam_layer_2", "Show layer 2; enabled|disabled" },
|
||||||
{ "vbam_layer_3", "Show layer 3; enabled|disabled" },
|
{ "vbam_layer_3", "Show layer 3; enabled|disabled" },
|
||||||
|
@ -887,6 +886,27 @@ static const unsigned binds[4][MAX_BUTTONS] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TURBO_BUTTONS 2
|
||||||
|
static bool turbo_enable = false;
|
||||||
|
static int turbo_delay = 3;
|
||||||
|
static int turbo_delay_counter[TURBO_BUTTONS] = {0};
|
||||||
|
|
||||||
|
static const unsigned turbo_binds[4][TURBO_BUTTONS] = {
|
||||||
|
{ 0, 0 }, // placeholder for no input
|
||||||
|
{
|
||||||
|
RETRO_DEVICE_ID_JOYPAD_X,
|
||||||
|
RETRO_DEVICE_ID_JOYPAD_Y
|
||||||
|
},
|
||||||
|
{
|
||||||
|
RETRO_DEVICE_ID_JOYPAD_A,
|
||||||
|
RETRO_DEVICE_ID_JOYPAD_X
|
||||||
|
},
|
||||||
|
{
|
||||||
|
RETRO_DEVICE_ID_JOYPAD_Y,
|
||||||
|
RETRO_DEVICE_ID_JOYPAD_X
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static void systemGbBorderOff(void);
|
static void systemGbBorderOff(void);
|
||||||
static void systemUpdateSolarSensor(int level);
|
static void systemUpdateSolarSensor(int level);
|
||||||
static uint8_t sensorDarkness = 0xE8;
|
static uint8_t sensorDarkness = 0xE8;
|
||||||
|
@ -1015,6 +1035,21 @@ static void update_variables(void)
|
||||||
else if (strcmp(var.value, "Super Game Boy 2") == 0)
|
else if (strcmp(var.value, "Super Game Boy 2") == 0)
|
||||||
gbEmulatorType = 5;
|
gbEmulatorType = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var.key = "vbam_turboenable";
|
||||||
|
|
||||||
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||||
|
{
|
||||||
|
bool val = !strcmp(var.value, "enabled");
|
||||||
|
turbo_enable = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
var.key = "vbam_turbodelay";
|
||||||
|
|
||||||
|
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
|
||||||
|
{
|
||||||
|
turbo_delay = atoi(var.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned has_frame;
|
static unsigned has_frame;
|
||||||
|
@ -1084,102 +1119,76 @@ void retro_cheat_reset(void)
|
||||||
gbCheatRemoveAll();
|
gbCheatRemoveAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ISHEXDEC \
|
||||||
|
((code[cursor] >= '0') && (code[cursor] <= '9')) || \
|
||||||
|
((code[cursor] >= 'a') && (code[cursor] <= 'f')) || \
|
||||||
|
((code[cursor] >= 'A') && (code[cursor] <= 'F')) || \
|
||||||
|
(code[cursor] == '-') \
|
||||||
|
|
||||||
void retro_cheat_set(unsigned index, bool enabled, const char* code)
|
void retro_cheat_set(unsigned index, bool enabled, const char* code)
|
||||||
{
|
{
|
||||||
/*
|
// 2018-11-30 - retrowertz
|
||||||
const char *begin, *c;
|
// added support GB/GBC multiline 6/9 digit Game Genie codes and Game Shark
|
||||||
|
|
||||||
begin = c = code;
|
char name[128] = {0};
|
||||||
|
unsigned cursor = 0;
|
||||||
|
char *codeLine = NULL;
|
||||||
|
int codeLineSize = strlen(code) + 5;
|
||||||
|
int codePos = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
if (!code)
|
codeLine = (char *)calloc(codeLineSize, sizeof(char));
|
||||||
return;
|
sprintf(name, "cheat_%d", index);
|
||||||
|
|
||||||
do {
|
|
||||||
if (*c != '+' && *c != '\0')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
char buf[32] = {0};
|
|
||||||
int len = c - begin;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
// make sure it's using uppercase letters
|
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
buf[i] = toupper(begin[i]);
|
|
||||||
buf[i] = 0;
|
|
||||||
|
|
||||||
begin = ++c;
|
|
||||||
|
|
||||||
if (len == 16)
|
|
||||||
cheatsAddGSACode(buf, "", false);
|
|
||||||
else {
|
|
||||||
char *space = strrchr(buf, ' ');
|
|
||||||
if (space != NULL) {
|
|
||||||
if ((buf + len - space - 1) == 4)
|
|
||||||
cheatsAddCBACode(buf, "");
|
|
||||||
else {
|
|
||||||
memmove(space, space+1, strlen(space+1)+1);
|
|
||||||
cheatsAddGSACode(buf, "", true);
|
|
||||||
}
|
|
||||||
} else if (log_cb)
|
|
||||||
log_cb(RETRO_LOG_ERROR, "[VBA] Invalid cheat code '%s'\n", buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
} while (*c++);
|
|
||||||
*/
|
|
||||||
|
|
||||||
std::string codeLine = code;
|
|
||||||
std::string name = "cheat_" + index;
|
|
||||||
int matchLength = 0;
|
|
||||||
std::vector<std::string> codeParts;
|
|
||||||
int cursor;
|
|
||||||
|
|
||||||
if (type == IMAGE_GBA) {
|
|
||||||
//Break the code into Parts
|
|
||||||
for (cursor = 0;; cursor++) {
|
for (cursor = 0;; cursor++) {
|
||||||
if (ISHEXDEC)
|
if (ISHEXDEC) {
|
||||||
matchLength++;
|
codeLine[codePos++] = toupper(code[cursor]);
|
||||||
else {
|
} else {
|
||||||
if (matchLength) {
|
switch (type) {
|
||||||
if (matchLength > 8) {
|
case IMAGE_GB:
|
||||||
codeParts.push_back(codeLine.substr(cursor - matchLength, 8));
|
if (codePos >= 7) {
|
||||||
codeParts.push_back(codeLine.substr(cursor - matchLength + 8, matchLength - 8));
|
if (codePos == 7 || codePos == 11) {
|
||||||
} else
|
codeLine[codePos] = '\0';
|
||||||
codeParts.push_back(codeLine.substr(cursor - matchLength, matchLength));
|
if (gbAddGgCheat(codeLine, name))
|
||||||
matchLength = 0;
|
log("Cheat code added: '%s'\n", codeLine);
|
||||||
|
} else if (codePos == 8) {
|
||||||
|
codeLine[codePos] = '\0';
|
||||||
|
if (gbAddGsCheat(codeLine, name))
|
||||||
|
log("Cheat code added: '%s'\n", codeLine);
|
||||||
|
} else {
|
||||||
|
codeLine[codePos] = '\0';
|
||||||
|
log("Invalid cheat code '%s'\n", codeLine);
|
||||||
}
|
}
|
||||||
|
codePos = 0;
|
||||||
|
memset(codeLine, 0, codeLineSize);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case IMAGE_GBA:
|
||||||
|
if (codePos >= 12) {
|
||||||
|
if (codePos == 12 ) {
|
||||||
|
for (i = 0; i < 4 ; i++)
|
||||||
|
codeLine[codePos - i] = codeLine[(codePos - i) - 1];
|
||||||
|
codeLine[8] = ' ';
|
||||||
|
codeLine[13] = '\0';
|
||||||
|
cheatsAddCBACode(codeLine, name);
|
||||||
|
log("Cheat code added: '%s'\n", codeLine);
|
||||||
|
} else if (codePos == 16) {
|
||||||
|
codeLine[16] = '\0';
|
||||||
|
cheatsAddGSACode(codeLine, name, true);
|
||||||
|
log("Cheat code added: '%s'\n", codeLine);
|
||||||
|
} else {
|
||||||
|
codeLine[codePos] = '\0';
|
||||||
|
log("Invalid cheat code '%s'\n", codeLine);
|
||||||
|
}
|
||||||
|
codePos = 0;
|
||||||
|
memset(codeLine, 0, codeLineSize);
|
||||||
}
|
}
|
||||||
if (!codeLine[cursor])
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (!code[cursor])
|
||||||
//Add to core
|
break;
|
||||||
for (cursor = 0; cursor < codeParts.size(); cursor += 2) {
|
|
||||||
std::string codeString;
|
|
||||||
codeString += codeParts[cursor];
|
|
||||||
|
|
||||||
if (codeParts[cursor + 1].length() == 8) {
|
|
||||||
codeString += codeParts[cursor + 1];
|
|
||||||
cheatsAddGSACode(codeString.c_str(), name.c_str(), true);
|
|
||||||
} else if (codeParts[cursor + 1].length() == 4) {
|
|
||||||
codeString += " ";
|
|
||||||
codeString += codeParts[cursor + 1];
|
|
||||||
cheatsAddCBACode(codeString.c_str(), name.c_str());
|
|
||||||
} else {
|
|
||||||
codeString += " ";
|
|
||||||
codeString += codeParts[cursor + 1];
|
|
||||||
log_cb(RETRO_LOG_ERROR, "Invalid cheat code '%s'\n", codeString.c_str());
|
|
||||||
}
|
|
||||||
log_cb(RETRO_LOG_INFO, "Cheat code added: '%s'\n", codeString.c_str());
|
|
||||||
}
|
|
||||||
} else if (type == IMAGE_GB) {
|
|
||||||
if (codeLine.find("-") != std::string::npos) {
|
|
||||||
if (gbAddGgCheat(code, ""))
|
|
||||||
log_cb(RETRO_LOG_INFO, "Cheat code added: '%s'\n", codeLine.c_str());
|
|
||||||
} else {
|
|
||||||
if (gbAddGsCheat(code, ""))
|
|
||||||
log_cb(RETRO_LOG_INFO, "Cheat code added: '%s'\n", codeLine.c_str());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
free(codeLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_input_descriptors(void)
|
static void update_input_descriptors(void)
|
||||||
|
@ -1193,6 +1202,8 @@ static void update_input_descriptors(void)
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "A" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" },
|
||||||
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Turbo B" },
|
||||||
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Turbo A" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" },
|
||||||
|
@ -1210,6 +1221,8 @@ static void update_input_descriptors(void)
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" },
|
||||||
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Turbo B" },
|
||||||
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_A, "Turbo A" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" },
|
||||||
|
@ -1227,6 +1240,8 @@ static void update_input_descriptors(void)
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_B, "A" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L, "L" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_R, "R" },
|
||||||
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_X, "Turbo B" },
|
||||||
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_Y, "Turbo A" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_SELECT, "Select" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_START, "Start" },
|
||||||
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" },
|
{ 0, RETRO_DEVICE_JOYPAD, 0, RETRO_DEVICE_ID_JOYPAD_L2, "Solar Sensor (Darker)" },
|
||||||
|
@ -1498,10 +1513,28 @@ uint32_t systemReadJoypad(int which)
|
||||||
|
|
||||||
uint32_t J = 0;
|
uint32_t J = 0;
|
||||||
|
|
||||||
if (retropad_layout)
|
if (retropad_layout) {
|
||||||
for (unsigned i = 0; i < MAX_BUTTONS; i++)
|
int i;
|
||||||
|
for (i = 0; i < MAX_BUTTONS; i++)
|
||||||
J |= input_cb(which, RETRO_DEVICE_JOYPAD, 0, binds[retropad_layout][i]) << i;
|
J |= input_cb(which, RETRO_DEVICE_JOYPAD, 0, binds[retropad_layout][i]) << i;
|
||||||
|
|
||||||
|
if (turbo_enable) {
|
||||||
|
/* Handle Turbo A & B buttons */
|
||||||
|
for (i = 0; i < TURBO_BUTTONS; i++) {
|
||||||
|
if (input_cb(which, RETRO_DEVICE_JOYPAD, 0, turbo_binds[retropad_layout][i])) {
|
||||||
|
if (!turbo_delay_counter[i])
|
||||||
|
J |= 1 << i;
|
||||||
|
turbo_delay_counter[i]++;
|
||||||
|
if (turbo_delay_counter[i] > turbo_delay)
|
||||||
|
/* Reset the toggle if delay value is reached */
|
||||||
|
turbo_delay_counter[i] = 0;
|
||||||
|
} else
|
||||||
|
/* If the button is not pressed, just reset the toggle */
|
||||||
|
turbo_delay_counter[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Do not allow opposing directions
|
// Do not allow opposing directions
|
||||||
if ((J & 0x30) == 0x30)
|
if ((J & 0x30) == 0x30)
|
||||||
J &= ~(0x30);
|
J &= ~(0x30);
|
||||||
|
|
|
@ -1968,7 +1968,6 @@ void MainFrame::GDBBreak()
|
||||||
|
|
||||||
if (connected) {
|
if (connected) {
|
||||||
remotePort = gdbPort;
|
remotePort = gdbPort;
|
||||||
debugger = true;
|
|
||||||
emulating = 1;
|
emulating = 1;
|
||||||
dbgMain = remoteStubMain;
|
dbgMain = remoteStubMain;
|
||||||
dbgSignal = remoteStubSignal;
|
dbgSignal = remoteStubSignal;
|
||||||
|
@ -1976,6 +1975,7 @@ void MainFrame::GDBBreak()
|
||||||
cmd_enable &= ~(CMDEN_NGDB_ANY | CMDEN_NGDB_GBA);
|
cmd_enable &= ~(CMDEN_NGDB_ANY | CMDEN_NGDB_GBA);
|
||||||
cmd_enable |= CMDEN_GDB;
|
cmd_enable |= CMDEN_GDB;
|
||||||
enable_menus();
|
enable_menus();
|
||||||
|
debugger = true;
|
||||||
} else {
|
} else {
|
||||||
remoteCleanUp();
|
remoteCleanUp();
|
||||||
}
|
}
|
||||||
|
@ -2004,6 +2004,7 @@ EVT_HANDLER_MASK(DebugGDBDisconnect, "Disconnect GDB", CMDEN_GDB)
|
||||||
dbgMain = NULL;
|
dbgMain = NULL;
|
||||||
dbgSignal = NULL;
|
dbgSignal = NULL;
|
||||||
dbgOutput = NULL;
|
dbgOutput = NULL;
|
||||||
|
remotePort = 0;
|
||||||
remoteCleanUp();
|
remoteCleanUp();
|
||||||
cmd_enable &= ~CMDEN_GDB;
|
cmd_enable &= ~CMDEN_GDB;
|
||||||
cmd_enable |= CMDEN_NGDB_GBA | CMDEN_NGDB_ANY;
|
cmd_enable |= CMDEN_NGDB_GBA | CMDEN_NGDB_ANY;
|
||||||
|
|
|
@ -13,7 +13,7 @@ export PERL_MAKE="${PERL_MAKE:-make}"
|
||||||
|
|
||||||
BUILD_ENV=$BUILD_ENV$(cat <<EOF
|
BUILD_ENV=$BUILD_ENV$(cat <<EOF
|
||||||
|
|
||||||
export BUILD_ROOT="\$BUILD_ROOT"
|
export BUILD_ROOT="\${BUILD_ROOT:-$BUILD_ROOT}"
|
||||||
|
|
||||||
export CC="\${CC:-gcc}"
|
export CC="\${CC:-gcc}"
|
||||||
export CXX="\${CXX:-g++}"
|
export CXX="\${CXX:-g++}"
|
||||||
|
@ -255,6 +255,7 @@ DIST_CONFIGURE_TYPES="$DIST_CONFIGURE_TYPES
|
||||||
glib autoreconf
|
glib autoreconf
|
||||||
graphviz autoreconf
|
graphviz autoreconf
|
||||||
docbook2x autoreconf
|
docbook2x autoreconf
|
||||||
|
libvorbis autoreconf
|
||||||
"
|
"
|
||||||
|
|
||||||
DIST_RELOCATION_TYPES="$DIST_RELOCATION_TYPES
|
DIST_RELOCATION_TYPES="$DIST_RELOCATION_TYPES
|
||||||
|
@ -292,6 +293,7 @@ DIST_PRE_BUILD="$DIST_PRE_BUILD
|
||||||
' Makefile;
|
' Makefile;
|
||||||
libx265 cd source;
|
libx265 cd source;
|
||||||
libsoxr rm -rf tests; mkdir tests; touch tests/CMakeLists.txt;
|
libsoxr rm -rf tests; mkdir tests; touch tests/CMakeLists.txt;
|
||||||
|
libvorbis rm -f autogen.sh;
|
||||||
XML-SAX sed -i.bak 's/-MXML::SAX/-Mblib -MXML::SAX/' Makefile.PL;
|
XML-SAX sed -i.bak 's/-MXML::SAX/-Mblib -MXML::SAX/' Makefile.PL;
|
||||||
docbook2x sed -i.bak 's/^\\( *SUBDIRS *= *.*\\)doc\\(.*\\)\$/\1\2/' Makefile.am; \
|
docbook2x sed -i.bak 's/^\\( *SUBDIRS *= *.*\\)doc\\(.*\\)\$/\1\2/' Makefile.am; \
|
||||||
sed -i.bak 's/^\\( *SUBDIRS *= *.*\\)documentation\\(.*\\)\$/\1\2/' xslt/Makefile.am;
|
sed -i.bak 's/^\\( *SUBDIRS *= *.*\\)documentation\\(.*\\)\$/\1\2/' xslt/Makefile.am;
|
||||||
|
@ -1335,6 +1337,10 @@ build_dist() {
|
||||||
dist_patch "$current_dist"
|
dist_patch "$current_dist"
|
||||||
dist_pre_build "$current_dist"
|
dist_pre_build "$current_dist"
|
||||||
|
|
||||||
|
ORIG_CPPFLAGS=$CPPFLAGS
|
||||||
|
ORIG_CFLAGS=$CFLAGS
|
||||||
|
ORIG_CXXFLAGS=$CXXFLAGS
|
||||||
|
ORIG_OBJCXXFLAGS=$OBJCXXFLAGS
|
||||||
ORIG_LDFLAGS=$LDFLAGS
|
ORIG_LDFLAGS=$LDFLAGS
|
||||||
ORIG_LIBS=$LIBS
|
ORIG_LIBS=$LIBS
|
||||||
|
|
||||||
|
@ -1344,6 +1350,10 @@ build_dist() {
|
||||||
export LDFLAGS="$CXXFLAGS $LDFLAGS"
|
export LDFLAGS="$CXXFLAGS $LDFLAGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CPPFLAGS="$CPPFLAGS $(eval puts "$(dist_extra_cppflags "$current_dist")")"
|
||||||
|
export CFLAGS="$CFLAGS $(eval puts "$(dist_extra_cflags "$current_dist")")"
|
||||||
|
export CXXFLAGS="$CXXFLAGS $(eval puts "$(dist_extra_cxxflags "$current_dist")")"
|
||||||
|
export OBJCXXFLAGS="$OBJCXXFLAGS $(eval puts "$(dist_extra_objcxxflags "$current_dist")")"
|
||||||
export LDFLAGS="$LDFLAGS $(eval puts "$(dist_extra_ldflags "$current_dist")")"
|
export LDFLAGS="$LDFLAGS $(eval puts "$(dist_extra_ldflags "$current_dist")")"
|
||||||
export LIBS="$LIBS $(eval puts "$(dist_extra_libs "$current_dist")")"
|
export LIBS="$LIBS $(eval puts "$(dist_extra_libs "$current_dist")")"
|
||||||
|
|
||||||
|
@ -1605,6 +1615,10 @@ build_dist() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
export CPPFLAGS="$ORIG_CPPFLAGS"
|
||||||
|
export CFLAGS="$ORIG_CFLAGS"
|
||||||
|
export CXXFLAGS="$ORIG_CXXFLAGS"
|
||||||
|
export OBJCXXFLAGS="$ORIG_OBJCXXFLAGS"
|
||||||
export LDFLAGS="$ORIG_LDFLAGS"
|
export LDFLAGS="$ORIG_LDFLAGS"
|
||||||
export LIBS="$ORIG_LIBS"
|
export LIBS="$ORIG_LIBS"
|
||||||
|
|
||||||
|
@ -2199,6 +2213,34 @@ dist_make_install_args() {
|
||||||
puts "$(table_line DIST_MAKE_INSTALL_ARGS $current_dist)" || :
|
puts "$(table_line DIST_MAKE_INSTALL_ARGS $current_dist)" || :
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dist_extra_cppflags() {
|
||||||
|
current_dist=$1
|
||||||
|
[ -n "$current_dist" ] || die 'dist_extra_cppflags: dist name required'
|
||||||
|
|
||||||
|
puts "$(table_line DIST_EXTRA_CPPFLAGS $current_dist)" || :
|
||||||
|
}
|
||||||
|
|
||||||
|
dist_extra_cflags() {
|
||||||
|
current_dist=$1
|
||||||
|
[ -n "$current_dist" ] || die 'dist_extra_cflags: dist name required'
|
||||||
|
|
||||||
|
puts "$(table_line DIST_EXTRA_CFLAGS $current_dist)" || :
|
||||||
|
}
|
||||||
|
|
||||||
|
dist_extra_cxxflags() {
|
||||||
|
current_dist=$1
|
||||||
|
[ -n "$current_dist" ] || die 'dist_extra_cxxflags: dist name required'
|
||||||
|
|
||||||
|
puts "$(table_line DIST_EXTRA_CXXFLAGS $current_dist)" || :
|
||||||
|
}
|
||||||
|
|
||||||
|
dist_extra_objcxxflags() {
|
||||||
|
current_dist=$1
|
||||||
|
[ -n "$current_dist" ] || die 'dist_extra_objcxxflags: dist name required'
|
||||||
|
|
||||||
|
puts "$(table_line DIST_EXTRA_OBJCXXFLAGS $current_dist)" || :
|
||||||
|
}
|
||||||
|
|
||||||
dist_extra_ldflags() {
|
dist_extra_ldflags() {
|
||||||
current_dist=$1
|
current_dist=$1
|
||||||
[ -n "$current_dist" ] || die 'dist_extra_ldflags: dist name required'
|
[ -n "$current_dist" ] || die 'dist_extra_ldflags: dist name required'
|
||||||
|
|
|
@ -71,9 +71,13 @@ fi
|
||||||
|
|
||||||
both_dists=$(list_remove_duplicates $both_dists)
|
both_dists=$(list_remove_duplicates $both_dists)
|
||||||
|
|
||||||
host_env() {
|
host_env_base() {
|
||||||
rm -f "$BUILD_ROOT/root"
|
rm -f "$BUILD_ROOT/root"
|
||||||
ln -sf "$BUILD_ROOT/host" "$BUILD_ROOT/root"
|
ln -sf "$BUILD_ROOT/host" "$BUILD_ROOT/root"
|
||||||
|
host_env_hook 2>/dev/null || :
|
||||||
|
}
|
||||||
|
|
||||||
|
host_env() {
|
||||||
if [ -z "$OCC" ]; then
|
if [ -z "$OCC" ]; then
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
OCC="\$CC"
|
OCC="\$CC"
|
||||||
|
@ -110,13 +114,28 @@ REQUIRED_CMAKE_ARGS="\$(puts "\$REQUIRED_CMAKE_ARGS" | sed 's/-DCMAKE_TOOLCHAIN_
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
host_env_hook 2>/dev/null || :
|
host_env_base 2>/dev/null || :
|
||||||
}
|
}
|
||||||
|
|
||||||
target_env() {
|
target_env_base() {
|
||||||
rm -f "$BUILD_ROOT/root"
|
rm -f "$BUILD_ROOT/root"
|
||||||
ln -sf "$BUILD_ROOT/target" "$BUILD_ROOT/root"
|
ln -sf "$BUILD_ROOT/target" "$BUILD_ROOT/root"
|
||||||
|
|
||||||
|
# make links to executables in the target as well
|
||||||
|
IFS=$NL
|
||||||
|
for exe in $(find "$BUILD_ROOT/host/bin" -maxdepth 1 -type f); do
|
||||||
|
IFS=$OIFS
|
||||||
|
basename=${exe##*/}
|
||||||
|
if ! path_exists "$BUILD_ROOT/target/bin/$basename"; then
|
||||||
|
ln -s "$exe" "$BUILD_ROOT/target/bin/$basename";
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS=$OIFS
|
||||||
|
|
||||||
|
target_env_hook 2>/dev/null || :
|
||||||
|
}
|
||||||
|
|
||||||
|
target_env() {
|
||||||
if [ -n "$OCC" ]; then
|
if [ -n "$OCC" ]; then
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
export CC="\$OCC"
|
export CC="\$OCC"
|
||||||
|
@ -140,18 +159,7 @@ $BUILD_ENV
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# make links to executables in the target as well
|
target_env_base 2>/dev/null || :
|
||||||
IFS=$NL
|
|
||||||
for exe in $(find "$BUILD_ROOT/host/bin" -maxdepth 1 -type f); do
|
|
||||||
IFS=$OIFS
|
|
||||||
basename=${exe##*/}
|
|
||||||
if ! path_exists "$BUILD_ROOT/target/bin/$basename"; then
|
|
||||||
ln -s "$exe" "$BUILD_ROOT/target/bin/$basename";
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS=$OIFS
|
|
||||||
|
|
||||||
target_env_hook 2>/dev/null || :
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# replace install artifact paths with absolute paths into host and target trees
|
# replace install artifact paths with absolute paths into host and target trees
|
||||||
|
@ -248,6 +256,12 @@ table_insert_after DISTS cmake "dlfcn https://github.com/dlfcn-win32/dlfcn-win32
|
||||||
|
|
||||||
table_line_replace DIST_CONFIGURE_TYPES dlfcn cmake
|
table_line_replace DIST_CONFIGURE_TYPES dlfcn cmake
|
||||||
|
|
||||||
|
if [ "$target_bits" -eq 32 ]; then
|
||||||
|
# this is necessary for a linkable libffi on i686 for whatever reason
|
||||||
|
# see: https://bugzilla.mozilla.org/show_bug.cgi?id=1336569
|
||||||
|
table_line_append DIST_EXTRA_CPPFLAGS libffi -DSYMBOL_UNDERSCORE
|
||||||
|
fi
|
||||||
|
|
||||||
libicu=libicu
|
libicu=libicu
|
||||||
|
|
||||||
if [ -n "$(table_line DISTS libicu-target || :)" ]; then
|
if [ -n "$(table_line DISTS libicu-target || :)" ]; then
|
||||||
|
|
|
@ -32,11 +32,15 @@ case "$MSYSTEM" in
|
||||||
export HOST_SYSTEM=i686-w64-mingw32
|
export HOST_SYSTEM=i686-w64-mingw32
|
||||||
sys_base=/mingw32
|
sys_base=/mingw32
|
||||||
export BUILD_ROOT="$HOME/vbam-build-msys2-i686"
|
export BUILD_ROOT="$HOME/vbam-build-msys2-i686"
|
||||||
|
target_bits=32
|
||||||
|
target_cpu=i686
|
||||||
;;
|
;;
|
||||||
MINGW64)
|
MINGW64)
|
||||||
export HOST_SYSTEM=x86_64-w64-mingw32
|
export HOST_SYSTEM=x86_64-w64-mingw32
|
||||||
sys_base=/mingw64
|
sys_base=/mingw64
|
||||||
export BUILD_ROOT="$HOME/vbam-build-msys2-x86_64"
|
export BUILD_ROOT="$HOME/vbam-build-msys2-x86_64"
|
||||||
|
target_bits=64
|
||||||
|
target_cpu=x86_64
|
||||||
;;
|
;;
|
||||||
MSYS)
|
MSYS)
|
||||||
exec "$0" "$@" -64
|
exec "$0" "$@" -64
|
||||||
|
@ -107,8 +111,6 @@ DIST_TAR_ARGS="
|
||||||
. "${0%/*}/../builder/mingw.sh"
|
. "${0%/*}/../builder/mingw.sh"
|
||||||
|
|
||||||
host_env() {
|
host_env() {
|
||||||
ln -sf "$BUILD_ROOT/host" "$BUILD_ROOT/root"
|
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
unset MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX CONFIG_SITE ACLOCAL_PATH PKG_CONFIG_PATH
|
unset MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX CONFIG_SITE ACLOCAL_PATH PKG_CONFIG_PATH
|
||||||
|
|
||||||
|
@ -120,11 +122,10 @@ $BUILD_ENV
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cd "$OPWD"
|
cd "$OPWD"
|
||||||
|
host_env_base 2>/dev/null || :
|
||||||
}
|
}
|
||||||
|
|
||||||
target_env() {
|
target_env() {
|
||||||
ln -sf "$BUILD_ROOT/target" "$BUILD_ROOT/root"
|
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
unset MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX CONFIG_SITE ACLOCAL_PATH PKG_CONFIG_PATH
|
unset MSYSTEM_PREFIX MSYSTEM_CARCH MSYSTEM_CHOST MINGW_CHOST MINGW_PREFIX MINGW_PACKAGE_PREFIX CONFIG_SITE ACLOCAL_PATH PKG_CONFIG_PATH
|
||||||
|
|
||||||
|
@ -136,6 +137,7 @@ $BUILD_ENV
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
cd "$OPWD"
|
cd "$OPWD"
|
||||||
|
target_env_base 2>/dev/null || :
|
||||||
}
|
}
|
||||||
|
|
||||||
table_line_append DIST_PRE_BUILD c2man ":; \
|
table_line_append DIST_PRE_BUILD c2man ":; \
|
||||||
|
|
Loading…
Reference in New Issue