changeset 2044:460e14497120

zlib support in vgmplay
author Michael Pavone <pavone@retrodev.com>
date Tue, 21 Sep 2021 23:03:18 -0700
parents a61b47d5489e
children dbbf0100f249
files dis.c vgmplay.c
diffstat 2 files changed, 39 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/dis.c	Tue Mar 09 22:47:51 2021 -0800
+++ b/dis.c	Tue Sep 21 23:03:18 2021 -0700
@@ -269,19 +269,21 @@
 		{
 			*cur = (*cur >> 8) | (*cur << 8);
 		}
-		uint32_t start = filebuf[2] << 16 | filebuf[3];
-		uint32_t int_2 = filebuf[0x68/2] << 16 | filebuf[0x6A/2];
-		uint32_t int_4 = filebuf[0x70/2] << 16 | filebuf[0x72/2];
-		uint32_t int_6 = filebuf[0x78/2] << 16 | filebuf[0x7A/2];
-		named_labels = add_label(named_labels, "start", start);
-		named_labels = add_label(named_labels, "int_2", int_2);
-		named_labels = add_label(named_labels, "int_4", int_4);
-		named_labels = add_label(named_labels, "int_6", int_6);
-		if (!def || !only) {
-			def = defer(start, def);
-			def = defer(int_2, def);
-			def = defer(int_4, def);
-			def = defer(int_6, def);
+		if (!address_off) {
+			uint32_t start = filebuf[2] << 16 | filebuf[3];
+			uint32_t int_2 = filebuf[0x68/2] << 16 | filebuf[0x6A/2];
+			uint32_t int_4 = filebuf[0x70/2] << 16 | filebuf[0x72/2];
+			uint32_t int_6 = filebuf[0x78/2] << 16 | filebuf[0x7A/2];
+			named_labels = add_label(named_labels, "start", start);
+			named_labels = add_label(named_labels, "int_2", int_2);
+			named_labels = add_label(named_labels, "int_4", int_4);
+			named_labels = add_label(named_labels, "int_6", int_6);
+			if (!def || !only) {
+				def = defer(start, def);
+				def = defer(int_2, def);
+				def = defer(int_4, def);
+				def = defer(int_6, def);
+			}
 		}
 	}
 	uint16_t *encoded, *next;
--- a/vgmplay.c	Tue Mar 09 22:47:51 2021 -0800
+++ b/vgmplay.c	Tue Sep 21 23:03:18 2021 -0700
@@ -23,6 +23,25 @@
 #define MCLKS_PER_Z80 15
 #define MCLKS_PER_PSG (MCLKS_PER_Z80*16)
 
+
+#ifdef DISABLE_ZLIB
+#define VGMFILE FILE*
+#define vgmopen fopen
+#define vgmread fread
+#define vgmseek fseek
+#define vgmgetc fgetc
+#define vgmclose fclose
+#else
+#include "zlib/zlib.h"
+#define VGMFILE gzFile
+#define vgmopen gzopen
+#define vgmread gzfread
+#define vgmseek gzseek
+#define vgmgetc gzgetc
+#define vgmclose gzclose
+#endif
+
+
 system_header *current_system;
 
 void system_request_exit(system_header *system, uint8_t force_release)
@@ -120,17 +139,17 @@
 	psg_context p_context;
 	psg_init(&p_context, MCLKS_NTSC, MCLKS_PER_PSG);
 
-	FILE * f = fopen(argv[1], "rb");
+	VGMFILE * f = vgmopen(argv[1], "rb");
 	vgm_header header;
-	fread(&header, sizeof(header), 1, f);
+	vgmread(&header, sizeof(header), 1, f);
 	if (header.version < 0x150 || !header.data_offset) {
 		header.data_offset = 0xC;
 	}
-	fseek(f, header.data_offset + 0x34, SEEK_SET);
+	vgmseek(f, header.data_offset + 0x34, SEEK_SET);
 	uint32_t data_size = header.eof_offset + 4 - (header.data_offset + 0x34);
 	uint8_t * data = malloc(data_size);
-	fread(data, 1, data_size, f);
-	fclose(f);
+	vgmread(data, 1, data_size, f);
+	vgmclose(f);
 
 	uint32_t mclks_sample = MCLKS_NTSC / 44100;
 	uint32_t loop_count = 2;