mirror of
https://github.com/libretro/beetle-psx-libretro.git
synced 2025-02-06 01:19:13 +00:00
Add CHD dependencies to Makefiles and namespace mednafen's md5 implementation to avoid conflicts
This commit is contained in:
parent
052a22cd8c
commit
a44baaefa8
1
Makefile
1
Makefile
@ -4,6 +4,7 @@ HAVE_OPENGL = 0
|
||||
HAVE_VULKAN = 0
|
||||
HAVE_JIT = 0
|
||||
HAVE_CDROM_NEW = 0
|
||||
HAVE_CHD = 1
|
||||
|
||||
CORE_DIR := .
|
||||
HAVE_GRIFFIN = 0
|
||||
|
@ -111,6 +111,15 @@ ifeq ($(NEED_CD), 1)
|
||||
FLAGS += -DNEED_CD
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_CHD), 1)
|
||||
FLAGS += -DHAVE_CHD -D_7ZIP_ST -DPACKAGE_VERSION=\"1.3.2\" -DFLAC_API_EXPORTS -DFLAC__HAS_OGG=0 -DHAVE_LROUND -DHAVE_STDINT_H -DHAVE_STDLIB_H -DHAVE_SYS_PARAM_H
|
||||
INCFLAGS += -I$(DEPS_DIR)/crypto -I$(DEPS_DIR)/flac-1.3.2/include -I$(DEPS_DIR)/flac-1.3.2/src/libFLAC/include -I$(DEPS_DIR)/lzma-16.04/C -I$(DEPS_DIR)/libchdr
|
||||
|
||||
ifeq ($(platform), win)
|
||||
FLAGS += -DHAVE_FSEEKO
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(NEED_TREMOR), 1)
|
||||
FLAGS += -DNEED_TREMOR
|
||||
endif
|
||||
@ -251,6 +260,8 @@ SOURCES_C += $(LIBKIRK_DIR)/aes.c \
|
||||
$(LIBKIRK_DIR)/kirk_engine.c \
|
||||
$(LIBKIRK_DIR)/sha1.c
|
||||
|
||||
|
||||
|
||||
SOURCES_C += $(LIBRETRO_DIR)/file/file_path.c
|
||||
|
||||
SOURCES_C += $(CORE_DIR)/pgxp/pgxp_cpu.c \
|
||||
@ -260,3 +271,54 @@ SOURCES_C += $(CORE_DIR)/pgxp/pgxp_cpu.c \
|
||||
$(CORE_DIR)/pgxp/pgxp_main.c \
|
||||
$(CORE_DIR)/pgxp/pgxp_mem.c \
|
||||
$(CORE_DIR)/pgxp/pgxp_value.c
|
||||
|
||||
ifeq ($(HAVE_CHD), 1)
|
||||
SOURCES_C += \
|
||||
$(DEPS_DIR)/crypto/md5.c \
|
||||
$(DEPS_DIR)/crypto/sha1.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/bitmath.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/bitreader.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/cpu.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/crc.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/fixed.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/fixed_intrin_sse2.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/fixed_intrin_ssse3.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/float.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/format.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_avx2.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_sse2.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_sse41.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/lpc_intrin_sse.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/md5.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/memory.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/metadata_iterators.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/metadata_object.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/stream_decoder.c \
|
||||
$(DEPS_DIR)/flac-1.3.2/src/libFLAC/window.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/Alloc.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/Bra86.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/Bra.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/BraIA64.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/CpuArch.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/Delta.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/LzFind.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/Lzma86Dec.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/Lzma86Enc.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/LzmaDec.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/LzmaEnc.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/LzmaLib.c \
|
||||
$(DEPS_DIR)/lzma-16.04/C/Sort.c \
|
||||
$(DEPS_DIR)/libchdr/bitstream.c \
|
||||
$(DEPS_DIR)/libchdr/cdrom.c \
|
||||
$(DEPS_DIR)/libchdr/chd.c \
|
||||
$(DEPS_DIR)/libchdr/flac.c \
|
||||
$(DEPS_DIR)/libchdr/huffman.c
|
||||
|
||||
ifeq ($(platform), win)
|
||||
SOURCES_C += $(DEPS_DIR)/flac-1.3.2/src/libFLAC/windows_unicode_filenames.c
|
||||
endif
|
||||
|
||||
SOURCES_CXX += \
|
||||
$(CDROM_DIR)/CDAccess_CHD.cpp
|
||||
endif
|
||||
|
34
libretro.cpp
34
libretro.cpp
@ -2331,13 +2331,13 @@ static bool disk_set_image_index(unsigned index)
|
||||
|
||||
// Mednafen PSX really doesn't support adding disk images on the fly ...
|
||||
// Hack around this.
|
||||
static void update_md5_checksum(CDIF *iface)
|
||||
static void mednafen_update_md5_checksum(CDIF *iface)
|
||||
{
|
||||
uint8 LayoutMD5[16];
|
||||
md5_context layout_md5;
|
||||
TOC toc;
|
||||
|
||||
md5_starts(&layout_md5);
|
||||
mednafen_md5_starts(&layout_md5);
|
||||
|
||||
#ifndef HAVE_CDROM_NEW
|
||||
TOC_Clear(&toc);
|
||||
@ -2345,20 +2345,20 @@ static void update_md5_checksum(CDIF *iface)
|
||||
|
||||
iface->ReadTOC(&toc);
|
||||
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.first_track);
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.last_track);
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.first_track);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.last_track);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
|
||||
|
||||
for (uint32 track = toc.first_track; track <= toc.last_track; track++)
|
||||
{
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
|
||||
}
|
||||
|
||||
md5_finish(&layout_md5, LayoutMD5);
|
||||
mednafen_md5_finish(&layout_md5, LayoutMD5);
|
||||
memcpy(MDFNGameInfo->MD5, LayoutMD5, 16);
|
||||
|
||||
char *md5 = md5_asciistr(MDFNGameInfo->MD5);
|
||||
char *md5 = mednafen_md5_asciistr(MDFNGameInfo->MD5);
|
||||
log_cb(RETRO_LOG_INFO, "[Mednafen]: Updated md5 checksum: %s.\n", md5);
|
||||
}
|
||||
|
||||
@ -2398,7 +2398,7 @@ static bool disk_replace_image_index(unsigned index, const struct retro_game_inf
|
||||
/* If we replace, we want the "swap disk manually effect". */
|
||||
extract_basename(retro_cd_base_name, info->path, sizeof(retro_cd_base_name));
|
||||
/* Ugly, but needed to get proper disk swapping effect. */
|
||||
update_md5_checksum(iface);
|
||||
mednafen_update_md5_checksum(iface);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -3037,7 +3037,7 @@ static MDFNGI *MDFNI_LoadCD(const char *devicename)
|
||||
{
|
||||
md5_context layout_md5;
|
||||
|
||||
md5_starts(&layout_md5);
|
||||
mednafen_md5_starts(&layout_md5);
|
||||
|
||||
for(unsigned i = 0; i < CDInterfaces.size(); i++)
|
||||
{
|
||||
@ -3048,18 +3048,18 @@ static MDFNGI *MDFNI_LoadCD(const char *devicename)
|
||||
#endif
|
||||
CDInterfaces[i]->ReadTOC(&toc);
|
||||
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.first_track);
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.last_track);
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.first_track);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.last_track);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[100].lba);
|
||||
|
||||
for(uint32 track = toc.first_track; track <= toc.last_track; track++)
|
||||
{
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
|
||||
md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].lba);
|
||||
mednafen_md5_update_u32_as_lsb(&layout_md5, toc.tracks[track].control & 0x4);
|
||||
}
|
||||
}
|
||||
|
||||
md5_finish(&layout_md5, LayoutMD5);
|
||||
mednafen_md5_finish(&layout_md5, LayoutMD5);
|
||||
}
|
||||
|
||||
if (MDFNGameInfo == NULL)
|
||||
|
@ -28,8 +28,12 @@
|
||||
#include "CDAccess.h"
|
||||
#include "CDAccess_Image.h"
|
||||
#include "CDAccess_CCD.h"
|
||||
#ifdef HAVE_PBP
|
||||
#include "CDAccess_PBP.h"
|
||||
#endif
|
||||
#ifdef HAVE_CHD
|
||||
#include "CDAccess_CHD.h"
|
||||
#endif
|
||||
|
||||
CDAccess::CDAccess()
|
||||
{
|
||||
@ -49,8 +53,9 @@ CDAccess *cdaccess_open_image(bool *success, const char *path, bool image_memcac
|
||||
else if(strlen(path) >= 4 && !strcasecmp(path + strlen(path) - 4, ".pbp"))
|
||||
return new CDAccess_PBP(path, image_memcache);
|
||||
#endif
|
||||
#ifdef HAVE_CHD
|
||||
else if (strlen(path) >= 4 && !strcasecmp(path + strlen(path) - 4, ".chd"))
|
||||
return new CDAccess_CHD(path, image_memcache);
|
||||
|
||||
#endif
|
||||
return new CDAccess_Image(success, path, image_memcache);
|
||||
}
|
||||
|
@ -42,8 +42,6 @@ class CDAccess_CHD : public CDAccess
|
||||
int LoadSBI(const char* sbi_path);
|
||||
void Cleanup(void);
|
||||
|
||||
bool Read_CHD_Hunk_RAW(uint8_t *buf, int32_t lba, CDRFILE_TRACK_INFO* track);
|
||||
|
||||
CDRFILE_TRACK_INFO Tracks[100]; // Track #0(HMM?) through 99
|
||||
struct cpp11_array_doodad
|
||||
{
|
||||
|
@ -30,7 +30,7 @@
|
||||
(b)[(i) + 3] = (uint8_t)((n) >> 24); \
|
||||
}
|
||||
|
||||
void md5_starts(struct md5_context *ctx)
|
||||
void mednafen_md5_starts(struct md5_context *ctx)
|
||||
{
|
||||
ctx->total[0] = 0;
|
||||
ctx->total[1] = 0;
|
||||
@ -40,7 +40,7 @@ void md5_starts(struct md5_context *ctx)
|
||||
ctx->state[3] = 0x10325476;
|
||||
}
|
||||
|
||||
void md5_process(struct md5_context *ctx, uint8_t data[64])
|
||||
void mednafen_md5_process(struct md5_context *ctx, uint8_t data[64])
|
||||
{
|
||||
uint32_t A, B, C, D, X[16];
|
||||
|
||||
@ -163,7 +163,7 @@ void md5_process(struct md5_context *ctx, uint8_t data[64])
|
||||
ctx->state[3] += D;
|
||||
}
|
||||
|
||||
void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
|
||||
void mednafen_md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
|
||||
{
|
||||
uint32_t left, fill;
|
||||
|
||||
@ -182,7 +182,7 @@ void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
|
||||
if (left && length >= fill)
|
||||
{
|
||||
memcpy((void*)(ctx->buffer + left), (void*)input, fill);
|
||||
md5_process(ctx, ctx->buffer);
|
||||
mednafen_md5_process(ctx, ctx->buffer);
|
||||
length -= fill;
|
||||
input += fill;
|
||||
left = 0;
|
||||
@ -190,7 +190,7 @@ void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
|
||||
|
||||
while (length >= 64)
|
||||
{
|
||||
md5_process(ctx, input);
|
||||
mednafen_md5_process(ctx, input);
|
||||
length -= 64;
|
||||
input += 64;
|
||||
}
|
||||
@ -199,7 +199,7 @@ void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length)
|
||||
memcpy((void*)(ctx->buffer + left), (void*)input, length);
|
||||
}
|
||||
|
||||
void md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input)
|
||||
void mednafen_md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input)
|
||||
{
|
||||
uint8_t buf[4];
|
||||
|
||||
@ -208,7 +208,7 @@ void md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input)
|
||||
buf[2] = input >> 16;
|
||||
buf[3] = input >> 24;
|
||||
|
||||
md5_update(ctx, buf, 4);
|
||||
mednafen_md5_update(ctx, buf, 4);
|
||||
}
|
||||
|
||||
static uint8_t md5_padding[64] =
|
||||
@ -219,7 +219,7 @@ static uint8_t md5_padding[64] =
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||
};
|
||||
|
||||
void md5_finish(struct md5_context *ctx, uint8_t digest[16])
|
||||
void mednafen_md5_finish(struct md5_context *ctx, uint8_t digest[16])
|
||||
{
|
||||
uint32_t last, padn;
|
||||
uint8_t msglen[8];
|
||||
@ -230,8 +230,8 @@ void md5_finish(struct md5_context *ctx, uint8_t digest[16])
|
||||
last = (ctx->total[0] >> 3) & 0x3F;
|
||||
padn = (last < 56) ? (56 - last) : (120 - last);
|
||||
|
||||
md5_update(ctx, md5_padding, padn);
|
||||
md5_update(ctx, msglen, 8);
|
||||
mednafen_md5_update(ctx, md5_padding, padn);
|
||||
mednafen_md5_update(ctx, msglen, 8);
|
||||
|
||||
PUT_UINT32(ctx->state[0], digest, 0);
|
||||
PUT_UINT32(ctx->state[1], digest, 4);
|
||||
@ -241,7 +241,7 @@ void md5_finish(struct md5_context *ctx, uint8_t digest[16])
|
||||
|
||||
|
||||
/* Uses a static buffer, so beware of how it's used. */
|
||||
char *md5_asciistr(uint8_t digest[16])
|
||||
char *mednafen_md5_asciistr(uint8_t digest[16])
|
||||
{
|
||||
static char str[33];
|
||||
static char trans[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
|
||||
|
@ -14,13 +14,13 @@ struct md5_context
|
||||
uint8_t buffer[64];
|
||||
};
|
||||
|
||||
void md5_starts(struct md5_context *ctx);
|
||||
void md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input);
|
||||
void md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length);
|
||||
void md5_finish(struct md5_context *ctx, uint8_t digest[16]);
|
||||
void mednafen_md5_starts(struct md5_context *ctx);
|
||||
void mednafen_md5_update_u32_as_lsb(struct md5_context *ctx, uint32_t input);
|
||||
void mednafen_md5_update(struct md5_context *ctx, uint8_t *input, uint32_t length);
|
||||
void mednafen_md5_finish(struct md5_context *ctx, uint8_t digest[16]);
|
||||
|
||||
/* Uses a static buffer, so beware of how it's used. */
|
||||
char *md5_asciistr(uint8_t digest[16]);
|
||||
char *mednafen_md5_asciistr(uint8_t digest[16]);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user