diff --git a/lumps/genmidi/Makefile b/lumps/genmidi/Makefile deleted file mode 100644 index 9f4860de..00000000 --- a/lumps/genmidi/Makefile +++ /dev/null @@ -1,16 +0,0 @@ - -CFLAGS = -Wall -OBJS = genmidi-gen.o oplinstrs.o instrnames.o - -genmidi.lmp : genmidi-gen - ./genmidi-gen $@ - -genmidi-gen : $(OBJS) - $(CC) $(LDFLAGS) $(OBJS) -o $@ - -%.o : %.c - $(CC) $(CFLAGS) -c $^ -o $@ - -clean: - rm -f $(OBJS) genmidi-gen genmidi.lmp - diff --git a/lumps/genmidi/orig/Makefile b/lumps/genmidi/orig/Makefile new file mode 100644 index 00000000..3d357047 --- /dev/null +++ b/lumps/genmidi/orig/Makefile @@ -0,0 +1,19 @@ + +CFLAGS = -Wall +OBJS = oplinstrs.o instrnames.o + +genmidi.lmp : genmidi-gen + ./genmidi-gen $@ + +genmidi-gen : $(OBJS) genmidi-gen.o + $(CC) $(LDFLAGS) $(OBJS) genmidi-gen.o -o $@ + +dump-sbi : $(OBJS) dump-sbi.o + $(CC) $(LDFLAGS) $(OBJS) dump-sbi.o -o $@ + +%.o : %.c + $(CC) $(CFLAGS) -c $^ -o $@ + +clean: + rm -f $(OBJS) genmidi-gen genmidi.lmp + diff --git a/lumps/genmidi/README b/lumps/genmidi/orig/README similarity index 51% rename from lumps/genmidi/README rename to lumps/genmidi/orig/README index 2b090056..ea9f445a 100644 --- a/lumps/genmidi/README +++ b/lumps/genmidi/orig/README @@ -1,6 +1,9 @@ -This code generates a functional GENMIDI lump using the free patch data -from the OpenBSD OPL MIDI driver. The result doesn't sound quite as +This is the "original" code previously used to generate a GENMIDI +lump, and the original set of patches. + +This code generates a functional GENMIDI lump using the free patch data +from the OpenBSD OPL MIDI driver. The result doesn't sound quite as good as the original Doom lump; however, most source ports don't use GENMIDI anyway nowadays, so this should be good enough. diff --git a/lumps/genmidi/orig/dump-sbi.c b/lumps/genmidi/orig/dump-sbi.c new file mode 100644 index 00000000..94b73a62 --- /dev/null +++ b/lumps/genmidi/orig/dump-sbi.c @@ -0,0 +1,94 @@ +// +// Copyright (c) 2011, Simon Howard +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of Freedoom project nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#include +#include +#include + +#include "oplvar.h" + +#define SBI_HEADER "SBI\x1a" + +struct sbi { + char header[4]; + char name[32]; + char opldata[16]; +}; + +extern char *genmidi_instr_names[]; + +static int is_null_instr(struct opl_operators *instrument) +{ + int i; + + for (i = 0; i < 10; ++i) { + if (instrument->ops[i] != 0x00) { + return 0; + } + } + + return 1; +} + +static void write_sbi(char *filename, char *instrname, struct opl_operators *opl) +{ + FILE *fs; + struct sbi data; + + memset(&data, 0, sizeof(data)); + memcpy(data.header, SBI_HEADER, 4); + strcpy(data.name, instrname); + memcpy(data.opldata, opl->ops, 16); + + fs = fopen(filename, "wb"); + fwrite(&data, 1, sizeof(data), fs); + fclose(fs); +} + +int main(int argc, char *argv[]) +{ + char filename[32]; + int i; + + for (i = 0; i < 175; ++i) { + if (is_null_instr(&opl2_instrs[i])) { + continue; + } + + if (i < 128) { + sprintf(filename, "instr%03i.sbi", i + 1); + } else { + sprintf(filename, "perc%02i.sbi", i - 128 + 35); + } + + write_sbi(filename, genmidi_instr_names[i], &opl2_instrs[i]); + } + + return 0; +} + diff --git a/lumps/genmidi/genmidi-gen.c b/lumps/genmidi/orig/genmidi-gen.c similarity index 93% rename from lumps/genmidi/genmidi-gen.c rename to lumps/genmidi/orig/genmidi-gen.c index ca8f9505..9588e62d 100644 --- a/lumps/genmidi/genmidi-gen.c +++ b/lumps/genmidi/orig/genmidi-gen.c @@ -83,6 +83,19 @@ static void write_sbi_data(FILE *fstream, unsigned char *data) fputc(0, fstream); } +static int is_null_instr(struct opl_operators *instrument) +{ + int i; + + for (i = 0; i < 10; ++i) { + if (instrument->ops[i] != 0x00) { + return 0; + } + } + + return 1; +} + static void write_instrument(FILE *fstream, struct opl_operators *instrument, int percussion) @@ -101,7 +114,12 @@ static void write_instrument(FILE *fstream, fputc(0x00, fstream); fputc(0x80, fstream); // finetune - fputc(0x00, fstream); // fixed note + + if (is_null_instr(instrument)) { // fixed note + fputc(0x00, fstream); + } else { + fputc(0x10, fstream); + } write_sbi_data(fstream, instrument->ops); write_sbi_data(fstream, instrument->ops + 11); @@ -143,7 +161,7 @@ static void output_genmidi(char *filename) write_header(fstream); - write_instrument_data(fstream, opl3_instrs); + write_instrument_data(fstream, opl2_instrs); write_instrument_names(fstream, genmidi_instr_names); fclose(fstream); diff --git a/lumps/genmidi/instrnames.c b/lumps/genmidi/orig/instrnames.c similarity index 100% rename from lumps/genmidi/instrnames.c rename to lumps/genmidi/orig/instrnames.c diff --git a/lumps/genmidi/oplinstrs.c b/lumps/genmidi/orig/oplinstrs.c similarity index 100% rename from lumps/genmidi/oplinstrs.c rename to lumps/genmidi/orig/oplinstrs.c diff --git a/lumps/genmidi/oplvar.h b/lumps/genmidi/orig/oplvar.h similarity index 100% rename from lumps/genmidi/oplvar.h rename to lumps/genmidi/orig/oplvar.h