Merge pull request #69 from retro-wertz/master

Cleanup
This commit is contained in:
Twinaphex 2019-08-06 05:44:56 +02:00 committed by GitHub
commit 71e4b7b375
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 137 additions and 127 deletions

View File

@ -1,6 +1,11 @@
#ifndef GB_H #ifndef GB_H
#define GB_H #define GB_H
#define gbWidth 160
#define gbHeight 144
#define sgbWidth 256
#define sgbHeight 224
const int GB_C_FLAG = 0x10; const int GB_C_FLAG = 0x10;
const int GB_H_FLAG = 0x20; const int GB_H_FLAG = 0x20;
const int GB_N_FLAG = 0x40; const int GB_N_FLAG = 0x40;
@ -55,6 +60,8 @@ void setColorizerHack(bool value);
bool allowColorizerHack(void); bool allowColorizerHack(void);
extern int gbHardware; extern int gbHardware;
extern int gbRomType; // gets type from header 0x147
extern int gbBattery; // enabled when gbRamSize != 0
extern struct EmulatedSystem GBSystem; extern struct EmulatedSystem GBSystem;

View File

@ -246,6 +246,7 @@ static char dummy_state[735 * 2];
&name, sizeof(type) \ &name, sizeof(type) \
} }
#ifndef __LIBRETRO__
// Old save state support // Old save state support
static variable_desc gbsound_format[] = { static variable_desc gbsound_format[] = {
@ -355,7 +356,6 @@ enum {
nr52 nr52
}; };
#ifndef __LIBRETRO__
static void gbSoundReadGameOld(int version, gzFile gzFile) static void gbSoundReadGameOld(int version, gzFile gzFile)
{ {
if (version == 11) { if (version == 11) {

View File

@ -27,30 +27,6 @@ int flashDeviceID = 0x1b;
int flashManufacturerID = 0x32; int flashManufacturerID = 0x32;
int flashBank = 0; int flashBank = 0;
static variable_desc flashSaveData[] = {
{ &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) },
{ &flashSaveMemory[0], SIZE_FLASH512 },
{ NULL, 0 }
};
static variable_desc flashSaveData2[] = {
{ &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) },
{ &flashSize, sizeof(int) },
{ &flashSaveMemory[0], SIZE_FLASH1M },
{ NULL, 0 }
};
static variable_desc flashSaveData3[] = {
{ &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) },
{ &flashSize, sizeof(int) },
{ &flashBank, sizeof(int) },
{ &flashSaveMemory[0], SIZE_FLASH1M },
{ NULL, 0 }
};
void flashInit() void flashInit()
{ {
memset(flashSaveMemory, 0xff, sizeof(flashSaveMemory)); memset(flashSaveMemory, 0xff, sizeof(flashSaveMemory));
@ -63,49 +39,6 @@ void flashReset()
flashBank = 0; flashBank = 0;
} }
#ifdef __LIBRETRO__
void flashSaveGame(uint8_t*& data)
{
utilWriteDataMem(data, flashSaveData3);
}
void flashReadGame(const uint8_t*& data, int)
{
utilReadDataMem(data, flashSaveData3);
}
#else // !__LIBRETRO__
void flashSaveGame(gzFile gzFile)
{
utilWriteData(gzFile, flashSaveData3);
}
void flashReadGame(gzFile gzFile, int version)
{
if (version < SAVE_GAME_VERSION_5)
utilReadData(gzFile, flashSaveData);
else if (version < SAVE_GAME_VERSION_7) {
utilReadData(gzFile, flashSaveData2);
flashBank = 0;
flashSetSize(flashSize);
} else {
utilReadData(gzFile, flashSaveData3);
}
}
void flashReadGameSkip(gzFile gzFile, int version)
{
// skip the flash data in a save game
if (version < SAVE_GAME_VERSION_5)
utilReadDataSkip(gzFile, flashSaveData);
else if (version < SAVE_GAME_VERSION_7) {
utilReadDataSkip(gzFile, flashSaveData2);
} else {
utilReadDataSkip(gzFile, flashSaveData3);
}
}
#endif
void flashSetSize(int size) void flashSetSize(int size)
{ {
// log("Setting flash size to %d\n", size); // log("Setting flash size to %d\n", size);
@ -279,3 +212,70 @@ void flashWrite(uint32_t address, uint8_t byte)
break; break;
} }
} }
static variable_desc flashSaveData3[] = {
{ &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) },
{ &flashSize, sizeof(int) },
{ &flashBank, sizeof(int) },
{ &flashSaveMemory[0], SIZE_FLASH1M },
{ NULL, 0 }
};
#ifdef __LIBRETRO__
void flashSaveGame(uint8_t*& data)
{
utilWriteDataMem(data, flashSaveData3);
}
void flashReadGame(const uint8_t*& data, int)
{
utilReadDataMem(data, flashSaveData3);
}
#else // !__LIBRETRO__
static variable_desc flashSaveData[] = {
{ &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) },
{ &flashSaveMemory[0], SIZE_FLASH512 },
{ NULL, 0 }
};
static variable_desc flashSaveData2[] = {
{ &flashState, sizeof(int) },
{ &flashReadState, sizeof(int) },
{ &flashSize, sizeof(int) },
{ &flashSaveMemory[0], SIZE_FLASH1M },
{ NULL, 0 }
};
void flashSaveGame(gzFile gzFile)
{
utilWriteData(gzFile, flashSaveData3);
}
void flashReadGame(gzFile gzFile, int version)
{
if (version < SAVE_GAME_VERSION_5)
utilReadData(gzFile, flashSaveData);
else if (version < SAVE_GAME_VERSION_7) {
utilReadData(gzFile, flashSaveData2);
flashBank = 0;
flashSetSize(flashSize);
} else {
utilReadData(gzFile, flashSaveData3);
}
}
void flashReadGameSkip(gzFile gzFile, int version)
{
// skip the flash data in a save game
if (version < SAVE_GAME_VERSION_5)
utilReadDataSkip(gzFile, flashSaveData);
else if (version < SAVE_GAME_VERSION_7) {
utilReadDataSkip(gzFile, flashSaveData2);
} else {
utilReadDataSkip(gzFile, flashSaveData3);
}
}
#endif

View File

@ -1235,6 +1235,7 @@ DEFINE_ALU_INSN_C(1F, 3F, MVNS, YES)
int mult = (opcode & 0x0F); \ int mult = (opcode & 0x0F); \
uint32_t rs = reg[(opcode >> 8) & 0x0F].I; \ uint32_t rs = reg[(opcode >> 8) & 0x0F].I; \
int acc = (opcode >> 12) & 0x0F; /* or destLo */ \ int acc = (opcode >> 12) & 0x0F; /* or destLo */ \
maybe_unused(acc); \
int dest = (opcode >> 16) & 0x0F; /* or destHi */ \ int dest = (opcode >> 16) & 0x0F; /* or destHi */ \
OP; \ OP; \
SETCOND; \ SETCOND; \

View File

@ -19,6 +19,9 @@ const uint64_t TICKS_PER_SECOND = 16777216;
#define SAVE_GAME_VERSION_10 10 #define SAVE_GAME_VERSION_10 10
#define SAVE_GAME_VERSION SAVE_GAME_VERSION_10 #define SAVE_GAME_VERSION SAVE_GAME_VERSION_10
#define gbaWidth 240
#define gbaHeight 160
enum { enum {
GBA_SAVE_AUTO = 0, GBA_SAVE_AUTO = 0,
GBA_SAVE_EEPROM, GBA_SAVE_EEPROM,

View File

@ -588,6 +588,7 @@ static struct {
int soundDSBValue; int soundDSBValue;
} state; } state;
#ifndef __LIBRETRO__
// Old GBA sound state format // Old GBA sound state format
static variable_desc old_gba_state[] = { static variable_desc old_gba_state[] = {
SKIP(int, soundPaused), SKIP(int, soundPaused),
@ -673,6 +674,7 @@ variable_desc old_gba_state2[] = {
SKIP(int, sound3ForcedOutput), SKIP(int, sound3ForcedOutput),
{ NULL, 0 } { NULL, 0 }
}; };
#endif
// New state format // New state format
static variable_desc gba_state[] = { static variable_desc gba_state[] = {

View File

@ -6,8 +6,7 @@ SOURCES_CXX :=
SOURCES_CXX += \ SOURCES_CXX += \
$(CORE_DIR)/libretro/libretro.cpp \ $(CORE_DIR)/libretro/libretro.cpp \
$(CORE_DIR)/libretro/UtilRetro.cpp \ $(CORE_DIR)/libretro/UtilRetro.cpp \
$(CORE_DIR)/libretro/SoundRetro.cpp \ $(CORE_DIR)/libretro/SoundRetro.cpp
$(CORE_DIR)/libretro/scrc32.cpp
SOURCES_CXX += \ SOURCES_CXX += \
$(CORE_DIR)/apu/Gb_Oscs.cpp \ $(CORE_DIR)/apu/Gb_Oscs.cpp \

View File

@ -8,6 +8,7 @@
#include "SoundRetro.h" #include "SoundRetro.h"
#include "libretro.h" #include "libretro.h"
#include "libretro_core_options.h" #include "libretro_core_options.h"
#include "scrc32.h"
#include "../System.h" #include "../System.h"
#include "../Util.h" #include "../Util.h"
@ -40,27 +41,20 @@ static retro_environment_t environ_cb;
retro_audio_sample_batch_t audio_batch_cb; retro_audio_sample_batch_t audio_batch_cb;
static retro_set_rumble_state_t rumble_cb; static retro_set_rumble_state_t rumble_cb;
static char retro_system_directory[4096]; static char retro_system_directory[2048];
static char biosfile[4096]; static char biosfile[4096];
static float sndFiltering = 0.5f; static float sndFiltering = 0.5f;
static bool sndInterpolation = true; static bool sndInterpolation = true;
static bool can_dupe = false; static bool can_dupe = false;
static bool usebios = false; static bool usebios = false;
static unsigned retropad_device[4] = {0}; static unsigned retropad_device[4] = {0};
static const double FramesPerSecond = (16777216.0 / 280896.0); // 59.73 static const double FramesPerSecond = (16777216.0 / 280896.0); // 59.73
static const long SampleRate = 32768; static const long SampleRate = 32768;
static const int GBWidth = 160; static unsigned width = gbaWidth;
static const int GBHeight = 144; static unsigned height = gbaHeight;
static const int SGBWidth = 256;
static const int SGBHeight = 224;
static const int GBAWidth = 240;
static const int GBAHeight = 160;
static unsigned width = 240;
static unsigned height = 160;
static EmulatedSystem* core = NULL; static EmulatedSystem* core = NULL;
static IMAGE_TYPE type = IMAGE_UNKNOWN; static IMAGE_TYPE type = IMAGE_UNKNOWN;
static unsigned current_gbPalette; static unsigned current_gbPalette = 0;
static bool opt_colorizer_hack = false; static bool opt_colorizer_hack = false;
uint16_t systemColorMap16[0x10000]; uint16_t systemColorMap16[0x10000];
@ -220,9 +214,6 @@ static void set_gbColorCorrection(int value)
gbColorOption = value; gbColorOption = value;
} }
extern int gbRomType; // gets type from header 0x147
extern int gbBattery; // enabled when gbRamSize != 0
static bool gb_hasrtc(void) static bool gb_hasrtc(void)
{ {
switch (gbRomType) { switch (gbRomType) {
@ -745,13 +736,11 @@ static void load_image_preferences(void)
"NONE" "NONE"
}; };
char buffer[5]; bool found = false;
bool hasRumble = false;
buffer[0] = rom[0xac]; char buffer[12];
buffer[1] = rom[0xad]; unsigned i = 0, found_no = 0;
buffer[2] = rom[0xae]; unsigned long romCrc32 = crc32(0, rom, romSize);
buffer[3] = rom[0xaf];
buffer[4] = 0;
cpuSaveType = GBA_SAVE_AUTO; cpuSaveType = GBA_SAVE_AUTO;
flashSize = SIZE_FLASH512; flashSize = SIZE_FLASH512;
@ -759,12 +748,26 @@ static void load_image_preferences(void)
rtcEnabled = false; rtcEnabled = false;
mirroringEnable = false; mirroringEnable = false;
log("GameID in ROM is: %s\n", buffer); log("File CRC32 : 0x%08X\n", romCrc32);
bool found = false; buffer[0] = 0;
int found_no = 0; for (i = 0; i < 12; i++) {
if (rom[0xa0 + i] == 0)
break;
buffer[i] = rom[0xa0 + i];
}
for (int i = 0; i < 512; i++) { buffer[i] = 0;
log("Game Title : %s\n", buffer);
buffer[0] = rom[0xac];
buffer[1] = rom[0xad];
buffer[2] = rom[0xae];
buffer[3] = rom[0xaf];
buffer[4] = 0;
log("Game Code : %s\n", buffer);
for (i = 0; i < 512; i++) {
if (!strcmp(gbaover[i].romid, buffer)) { if (!strcmp(gbaover[i].romid, buffer)) {
found = true; found = true;
found_no = i; found_no = i;
@ -773,7 +776,6 @@ static void load_image_preferences(void)
} }
if (found) { if (found) {
log("Found ROM in vba-over list.\n");
log("Name : %s\n", gbaover[found_no].romtitle); log("Name : %s\n", gbaover[found_no].romtitle);
rtcEnabled = gbaover[found_no].rtcEnabled; rtcEnabled = gbaover[found_no].rtcEnabled;
@ -789,12 +791,10 @@ static void load_image_preferences(void)
} }
// gameID that starts with 'F' are classic/famicom games // gameID that starts with 'F' are classic/famicom games
mirroringEnable = (buffer[0] == 0x46) ? true : false; mirroringEnable = (buffer[0] == 'F') ? true : false;
if (!cpuSaveType) { if (!cpuSaveType)
log("Scrapping ROM for save type.\n");
utilGBAFindSave(romSize); utilGBAFindSave(romSize);
}
saveType = cpuSaveType; saveType = cpuSaveType;
@ -802,7 +802,12 @@ static void load_image_preferences(void)
flashSetSize(flashSize); flashSetSize(flashSize);
rtcEnable(rtcEnabled); rtcEnable(rtcEnabled);
rtcEnableRumble(!rtcEnabled);
// game code starting with 'R' or 'V' has rumble support
if ((buffer[0] == 'R') || (buffer[0] == 'V'))
hasRumble = true;
rtcEnableRumble(!rtcEnabled && hasRumble);
doMirroring(mirroringEnable); doMirroring(mirroringEnable);
@ -811,7 +816,7 @@ static void load_image_preferences(void)
log("cpuSaveType : %s.\n", savetype[cpuSaveType]); log("cpuSaveType : %s.\n", savetype[cpuSaveType]);
if (cpuSaveType == 3) if (cpuSaveType == 3)
log("flashSize : %d.\n", flashSize); log("flashSize : %d.\n", flashSize);
if (cpuSaveType == 1) else if (cpuSaveType == 1)
log("eepromSize : %d.\n", eepromSize); log("eepromSize : %d.\n", eepromSize);
log("mirroringEnable : %s.\n", mirroringEnable ? "Yes" : "No"); log("mirroringEnable : %s.\n", mirroringEnable ? "Yes" : "No");
} }
@ -854,8 +859,8 @@ static void gba_init(void)
} }
CPUInit(biosfile, usebios); CPUInit(biosfile, usebios);
width = GBAWidth; width = gbaWidth;
height = GBAHeight; height = gbaHeight;
CPUReset(); CPUReset();
} }
@ -883,13 +888,13 @@ static void gb_init(void)
gbCPUInit(biosfile, usebios); gbCPUInit(biosfile, usebios);
if (gbBorderOn) { if (gbBorderOn) {
width = gbBorderLineSkip = SGBWidth; width = gbBorderLineSkip = sgbWidth;
height = SGBHeight; height = sgbHeight;
gbBorderColumnSkip = (SGBWidth - GBWidth) >> 1; gbBorderColumnSkip = (sgbWidth - gbWidth) >> 1;
gbBorderRowSkip = (SGBHeight - GBHeight) >> 1; gbBorderRowSkip = (sgbHeight - gbHeight) >> 1;
} else { } else {
width = gbBorderLineSkip = GBWidth; width = gbBorderLineSkip = gbWidth;
height = GBHeight; height = gbHeight;
gbBorderColumnSkip = gbBorderRowSkip = 0; gbBorderColumnSkip = gbBorderRowSkip = 0;
} }
@ -1171,7 +1176,7 @@ static void update_variables(bool startup)
if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
{ {
int lastpal = current_gbPalette; unsigned lastpal = current_gbPalette;
if (!strcmp(var.value, "black and white")) if (!strcmp(var.value, "black and white"))
current_gbPalette = 0; current_gbPalette = 0;
@ -1443,6 +1448,7 @@ void retro_cheat_set(unsigned index, bool enabled, const char* code)
memset(codeLine, 0, codeLineSize); memset(codeLine, 0, codeLineSize);
} }
break; break;
default: break;
} }
if (!code[cursor]) if (!code[cursor])
break; break;
@ -1646,11 +1652,11 @@ void systemFrame(void)
void systemGbBorderOn(void) void systemGbBorderOn(void)
{ {
bool changed = ((width != SGBWidth) || (height != SGBHeight)); bool changed = ((width != sgbWidth) || (height != sgbHeight));
width = gbBorderLineSkip = SGBWidth; width = gbBorderLineSkip = sgbWidth;
height = SGBHeight; height = sgbHeight;
gbBorderColumnSkip = (SGBWidth - GBWidth) >> 1; gbBorderColumnSkip = (sgbWidth - gbWidth) >> 1;
gbBorderRowSkip = (SGBHeight - GBHeight) >> 1; gbBorderRowSkip = (sgbHeight - gbHeight) >> 1;
struct retro_system_av_info avinfo; struct retro_system_av_info avinfo;
retro_get_system_av_info(&avinfo); retro_get_system_av_info(&avinfo);
@ -1663,9 +1669,9 @@ void systemGbBorderOn(void)
static void systemGbBorderOff(void) static void systemGbBorderOff(void)
{ {
bool changed = ((width != GBWidth) || (height != GBHeight)); bool changed = ((width != gbWidth) || (height != gbHeight));
width = gbBorderLineSkip = GBWidth; width = gbBorderLineSkip = gbWidth;
height = GBHeight; height = gbHeight;
gbBorderColumnSkip = gbBorderRowSkip = 0; gbBorderColumnSkip = gbBorderRowSkip = 0;
struct retro_system_av_info avinfo; struct retro_system_av_info avinfo;

View File

@ -1,10 +1,6 @@
#ifndef _S_CRC32_H #ifndef _S_CRC32_H
#define _S_CRC32_H #define _S_CRC32_H
#ifdef __cplusplus
extern "C" {
#endif
static const unsigned long crc_table[256] = { static const unsigned long crc_table[256] = {
0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
@ -87,8 +83,4 @@ unsigned long crc32(unsigned long crc, const unsigned char* buf, unsigned int le
return crc ^ 0xffffffffL; return crc ^ 0xffffffffL;
} }
#ifdef __cplusplus
}
#endif
#endif #endif