core, chd support
authorkub <derkub@gmail.com>
Mon, 8 Mar 2021 22:02:55 +0000 (23:02 +0100)
committerkub <derkub@gmail.com>
Mon, 8 Mar 2021 22:02:55 +0000 (23:02 +0100)
.gitmodules
Makefile
Makefile.libretro
configure
pico/cart.c
pico/cd/libchdr [new submodule]
platform/psp/emu.c
platform/psp/mp3.c
platform/psp/plat.c

index fc41256..1c07eb7 100644 (file)
@@ -7,6 +7,9 @@
 [submodule "pico/sound/emu2413"]
        path = pico/sound/emu2413
        url = https://github.com/digital-sound-antiques/emu2413.git
+[submodule "pico/cd/libchdr"]
+       path = pico/cd/libchdr
+       url = https://github.com/rtissera/libchdr
 [submodule "platform/common/minimp3"]
        path = platform/common/minimp3
        url = https://github.com/lieff/minimp3
index 7a40eb1..8725792 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -57,6 +57,7 @@ CFLAGS += -fno-common -fno-stack-protector -fno-guess-branch-probability -fno-ca
 endif
 
 # default settings
+use_libchdr ?= 1
 ifeq "$(ARCH)" "arm"
 use_cyclone ?= 1
 use_drz80 ?= 1
@@ -236,8 +237,39 @@ OBJS += platform/common/mp3_minimp3.o
 endif
 endif
 
-ifneq (,$(HAVE_LIBCHDR))
+ifeq (1,$(use_libchdr))
+# yuck, cmake looks like a nightmare to embed in a multi-platform make env :-/
+# Moreover, static library linking isn't working.
+# Reference all source files directly and hope for the best. Tested on linux,
+# might not work on other platforms, and misses autodetected optimizations.
 CFLAGS += -DUSE_LIBCHDR
+
+# chdr
+CHDR = pico/cd/libchdr
+CHDR_OBJS += $(CHDR)/src/libchdr_chd.o $(CHDR)/src/libchdr_cdrom.o
+CHDR_OBJS += $(CHDR)/src/libchdr_flac.o
+CHDR_OBJS += $(CHDR)/src/libchdr_bitstream.o $(CHDR)/src/libchdr_huffman.o
+
+# flac
+FLAC = $(CHDR)/deps/flac-1.3.3
+FLAC_OBJS += $(FLAC)/src/format.o $(FLAC)/src/lpc.o $(FLAC)/src/cpu.o
+FLAC_OBJS += $(FLAC)/src/metadata_object.o $(FLAC)/src/metadata_iterators.o
+FLAC_OBJS += $(FLAC)/src/bitmath.o $(FLAC)/src/bitreader.o $(FLAC)/src/md5.o
+FLAC_OBJS += $(FLAC)/src/memory.o $(FLAC)/src/fixed.o $(FLAC)/src/crc.o
+FLAC_OBJS += $(FLAC)/src/window.o $(FLAC)/src/stream_decoder.o
+$(FLAC_OBJS): CFLAGS += -DPACKAGE_VERSION=\"1.3.3\" -DFLAC__HAS_OGG=0
+$(FLAC_OBJS): CFLAGS += -DHAVE_LROUND -DHAVE_STDINT_H -DHAVE_STDLIB_H # ugh...
+
+# lzma
+LZMA = $(CHDR)/deps/lzma-19.00
+LZMA_OBJS += $(LZMA)/src/CpuArch.o $(LZMA)/src/Alloc.o $(LZMA)/src/LzmaEnc.o
+LZMA_OBJS += $(LZMA)/src/Sort.o $(LZMA)/src/LzmaDec.o $(LZMA)/src/LzFind.o
+LZMA_OBJS += $(LZMA)/src/Delta.o
+$(LZMA_OBJS): CFLAGS += -D_7ZIP_ST
+
+OBJS += $(CHDR_OBJS) $(FLAC_OBJS) $(LZMA_OBJS)
+CHDR_I = $(shell find $(CHDR) -name 'include')
+CFLAGS += $(patsubst %, -I%, $(CHDR_I)) # tsk...
 endif
 
 ifeq "$(PLATFORM_ZLIB)" "1"
index a7ef008..e1d4414 100644 (file)
@@ -564,8 +564,6 @@ asm_32xdraw = 0
 asm_32xmemory = 0
 endif
 
-#HAVE_LIBCHDR = 1
-
 CFLAGS += $(fpic)
 
 ifeq ($(findstring Haiku,$(shell uname -a)),)
index df0a61b..32ff0b4 100755 (executable)
--- a/configure
+++ b/configure
@@ -372,9 +372,10 @@ if check_libavcodec; then
   esac
 fi
 
-if check_libchdr; then
-  have_libchdr="yes"
-fi
+#if check_libchdr; then
+#  have_libchdr="yes"
+#  MAIN_LDLIBS="-lchdr $MAIN_LDLIBS"
+#fi
 
 # find what audio support we can compile
 if [ "x$sound_drivers" = "x" ]; then
@@ -426,7 +427,7 @@ echo "C compiler flags    $CFLAGS"
 echo "libraries           $MAIN_LDLIBS"
 echo "linker flags        $LDFLAGS"
 echo "libavcodec (mp3)    $have_libavcodec"
-echo "libchdr             $have_libchdr"
+#echo "libchdr             $have_libchdr"
 # echo "ARMv7 optimizations $have_armv7"
 
 echo "# Automatically generated by configure" > $config_mak
index 702947c..81fc7fb 100644 (file)
@@ -9,8 +9,6 @@
 \r
 #include "pico_int.h"\r
 #include <cpu/debug.h>\r
-#include <unzip/unzip.h>\r
-#include <zlib.h>\r
 \r
 #ifdef USE_LIBRETRO_VFS\r
 #include "file_stream_transforms.h"\r
@@ -21,6 +19,9 @@
 #include "libchdr/cdrom.h"\r
 #endif\r
 \r
+#include <unzip/unzip.h>\r
+#include <zlib.h>\r
+\r
 static int rom_alloc_size;\r
 static const char *rom_exts[] = { "bin", "gen", "smd", "iso", "sms", "gg", "sg" };\r
 \r
diff --git a/pico/cd/libchdr b/pico/cd/libchdr
new file mode 160000 (submodule)
index 0000000..cecbe84
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit cecbe84eb7ee1b0e5e558d15c2882a9d9be37794
index 179bf96..fa32175 100644 (file)
@@ -754,7 +754,7 @@ void emu_handle_resume(void)
        mp3_reopen_file();
 
 #if 0  // TODO
-       if (!(Pico_mcd->s68k_regs[0x36] & 1)/* && (Pico_mcd->scd.Status_CDC & 1)*/)
+       if (!(Pico_mcd->s68k_regs[0x36] & 1))
                cdd_change_track(cdd.index, cdd.lba);
 #endif
 }
index cc4fc1b..dc948ed 100644 (file)
@@ -452,24 +452,6 @@ void mp3_update(int *buffer, int length, int stereo)
 }
 
 
-int mp3_get_offset(void) // 0-1023
-{
-       unsigned int offs1024 = 0;
-       int cdda_on;
-
-       cdda_on = (PicoIn.AHW & PAHW_MCD) && (PicoIn.opt & POPT_EN_MCD_CDDA) && !(Pico_mcd->s68k_regs[0x36] & 1) &&
-                       /* TODO (Pico_mcd->scd.Status_CDC & 1) &&*/ mp3_handle >= 0;
-
-       if (cdda_on) {
-               offs1024  = mp3_src_pos << 7;
-               offs1024 /= mp3_src_size >> 3;
-       }
-       lprintf("offs1024=%u (%i/%i)\n", offs1024, mp3_src_pos, mp3_src_size);
-
-       return offs1024;
-}
-
-
 void mp3_reopen_file(void)
 {
        if (mp3_fname == NULL) return;
index 86b82a8..b1e7c61 100644 (file)
@@ -326,3 +326,14 @@ int _flush_cache (char *addr, const int size, const int op)
        sceKernelIcacheInvalidateRange(addr, size);
        return 0;
 }
+
+/* stubs for libflac (embedded in libchdr) */
+int chown(const char *pathname, uid_t owner, gid_t group) { return -1; }
+int chmod(const char *pathname, mode_t mode) { return -1; }
+int utime(const char *filename, const struct utimbuf *times) { return -1; }
+int fseeko64(FILE *stream, _off64_t offset, int whence)
+       { return fseeko(stream, offset, whence); }
+_off64_t ftello64(FILE *stream)
+       { return ftello(stream); }
+int posix_memalign(void **memptr, size_t alignment, size_t size)
+       { *memptr = memalign(alignment, size); return 0; }