From 6b41ad2c163736df081ad02a9af0db125f69ff10 Mon Sep 17 00:00:00 2001 From: Len Shustek Date: Thu, 17 Apr 2025 21:48:20 -0700 Subject: [PATCH] add assembler file format output; other minor changes --- README.txt | 14 +++--- miditones.c | 117 ++++++++++++++++++++++++++++++++++---------------- miditones.exe | Bin 33280 -> 34304 bytes 3 files changed, 90 insertions(+), 41 deletions(-) diff --git a/README.txt b/README.txt index 4fab864..71bc5dc 100644 --- a/README.txt +++ b/README.txt @@ -64,7 +64,7 @@ MIDITONES may also prove useful for other simple music synthesizers. There are various forks of this code, and of the Playtune players, on Githib. - + *** THE PROGRAM MIDITONES is written in standard ANSI C and is meant to be executed from the @@ -104,8 +104,8 @@ If the user specifies the full .mid filename, the .mid or .MID extension will be dropped and the remaining name will be used as . - The input file is .mid, and the output filename(s) - are the base file name with .c, .h, .bin, and/or .log extensions. + The input file is .mid, and the output filename(s) are + the base file name with .c, .h, .bin, .asm, .inc, and/or .log extensions. The following commonly-used command-line options can be specified: @@ -122,7 +122,8 @@ Playtune players that can check the header to know what data to expect. -b Generate a binary file with the name .bin, instead of a - C-language source file with the name .c. + C-language source file with the name .c. This is useful + to create a file that can be input to Miditones_scroll. -t=n Generate the bytestream so that at most "n" tone generators are used. The default is 6 tone generators, and the maximum is 16. The program @@ -140,6 +141,9 @@ -dp Generate Arduino IDE-dependent C code that uses PROGMEM for the bytestream. + -asm1802 Generate assembler code for the Cosmac Elf 1802 microprocessor + -asm6502 Generate assembler code for the MOS technology 6502 microprocessor + -k=n Change the musical key of the output by n chromatic notes. -k=-12 goes one octave down, -k=12 goes one octave up, etc. @@ -256,4 +260,4 @@ Any subsequent header bytes included in the length are currently undefined and should be ignored by players. - Len Shustek, 2011 to 2021; see the change log. + Len Shustek, 2011 to 2025; see the change log. diff --git a/miditones.c b/miditones.c index 9844af1..3d2fd1a 100644 --- a/miditones.c +++ b/miditones.c @@ -66,6 +66,7 @@ MIDITONES may also prove useful for other simple music synthesizers. There are various forks of this code, and of the Playtune players, on Githib. + *** THE PROGRAM @@ -106,8 +107,8 @@ If the user specifies the full .mid filename, the .mid or .MID extension will be dropped and the remaining name will be used as . - The input file is .mid, and the output filename(s) - are the base file name with .c, .h, .bin, and/or .log extensions. + The input file is .mid, and the output filename(s) are + the base file name with .c, .h, .bin, .asm, .inc, and/or .log extensions. The following commonly-used command-line options can be specified: @@ -124,7 +125,8 @@ Playtune players that can check the header to know what data to expect. -b Generate a binary file with the name .bin, instead of a - C-language source file with the name .c. + C-language source file with the name .c. This is useful + to create a file that can be input to Miditones_scroll. -t=n Generate the bytestream so that at most "n" tone generators are used. The default is 6 tone generators, and the maximum is 16. The program @@ -142,6 +144,9 @@ -dp Generate Arduino IDE-dependent C code that uses PROGMEM for the bytestream. + -asm1802 Generate assembler code for the Cosmac Elf 1802 microprocessor + -asm6502 Generate assembler code for the MOS technology 6502 microprocessor + -k=n Change the musical key of the output by n chromatic notes. -k=-12 goes one octave down, -k=12 goes one octave up, etc. @@ -258,11 +263,11 @@ Any subsequent header bytes included in the length are currently undefined and should be ignored by players. - Len Shustek, 2011 to 2021; see the change log. + Len Shustek, 2011 to 2025; see the change log. *---------------------------------------------------------------------------------------- * The MIT License (MIT) -* Copyright (c) 2011,2013,2015,2016,2019,2021 Len Shustek +* Copyright (c) 2011,2013,2015,2016,2019,2021,2025 Len Shustek * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -394,10 +399,13 @@ (Thanks to Jonathan Oakley for providing an example of the problem.) -But sometimes, to reduce the number of tone generators, it's helpful to eliminate identical notes. So add a -noduplicates option to do just that. +10 April 2025, Len Shustek, V2.5 + -Put the length of the song as a comment at the end of the generated source code. + -Add -asm1802 and -asm6502 options, adopting changes from GitHub user fourstix. future version ideas - -Perhaps elide "note off/note on" event sequences for the same note that + -Perhaps elide "note off/note on" event sequences for the same note that become adjacent because of -delaymin. Does that happen much, or at all? -Allow the flexibility to specify note timing on a track-by-track or @@ -409,7 +417,7 @@ future version ideas channel 8 // organ options -attacktime=1000 -sustainlevel=80% -releasetime=100 -notemin=200 */ -#define VERSION "2.4" +#define VERSION "2.5" /*-------------------------------------------------------------------------------------------- @@ -601,7 +609,10 @@ struct track_header { bool loggen, logparse, parseonly, strategy1, strategy2, binaryoutput, define_progmem, volume_output, instrumentoutput, percussion_ignore, percussion_translate, do_header, - gen_restart, scorename, showskipped, noduplicates; + gen_restart, scorename, showskipped, noduplicates, asm_output; +char *comment = "//"; // default start of comment +char *hex = "0x"; // default start of hex constant +char *byteop = ""; // what assembler psuedo-op indicates a byte constant FILE *infile, *outfile, *logfile; uint8_t *buffer, *hdrptr; unsigned long buflen; @@ -708,7 +719,7 @@ void SayUsage(char *programName) { "", "Use: miditones ", " input file will be .mid", - " output file will be .bin or .c or .h", + " output file will be .bin, .c, .h, .asm, or .inc", " log file will be .log", "", "Commonly-used options:", @@ -733,6 +744,8 @@ void SayUsage(char *programName) { " -r terminate output file with \"restart\" instead of \"stop\" command", " -s1 strategy 1: favor track 1", " -s2 strategy 2: try to assign tracks to specific tone generators", + " -asm1802 generate assembler code for the 1802 microprocessor", + " -asm6502 generate assembler code for the 6502 microprocessor", " -showskipped display information about each note that had to be skipped", " -noduplicates remove identical notes playing on different channels", " -delaymin=x minimum delay is x msec, to save bytestream space", @@ -771,6 +784,10 @@ int HandleOptions (int argc, char *argv[]) { else if (opt_key(arg, "pi")) percussion_ignore = true; else if (opt_key(arg, "pt")) percussion_translate = true; else if (opt_key(arg, "r")) gen_restart = true; + else if (opt_key(arg, "asm1802")) { + asm_output = true; comment = ";"; byteop = " db "; hex = "$"; outfile_maxitems = 16; } + else if (opt_key(arg, "asm6502")) { + asm_output = true; comment = ";"; byteop = " .byte "; hex = "$"; outfile_maxitems = 16; } else if (opt_int(arg, "delaymin", &tempint, 1, 1000)) delaymin_usec = tempint * 1000; else if (opt_int(arg, "releasetime", &tempint, 0, INT_MAX)) releasetime_usec = tempint * 1000; else if (opt_int(arg, "notemin", &tempint, 0, INT_MAX)) notemin_usec = tempint * 1000; @@ -801,7 +818,7 @@ int HandleOptions (int argc, char *argv[]) { return firstnonoption; } void print_command_line (FILE *file, int argc, char *argv[]) { - fprintf (file, "// command line: "); + fprintf (file, "%s command line: ", comment); for (int i = 0; i < argc; i++) fprintf (file, "%s ", argv[i]); fprintf (file, "\n"); } @@ -888,12 +905,15 @@ uint32_t rev_long (uint32_t val) { /* account for new items in the non-binary output file and generate a newline every so often. */ -void outfile_items (int n) { +void outfile_items(int n) { outfile_bytecount += n; outfile_itemcount += n; - if (!binaryoutput && outfile_itemcount >= outfile_maxitems) { - fprintf (outfile, "\n"); - outfile_itemcount = 0; } } + if (!binaryoutput) { + if (outfile_itemcount >= outfile_maxitems) { + if (asm_output) fprintf(outfile, "\n%s", byteop); + else fprintf(outfile, ",\n"); + outfile_itemcount = 0; } + else fprintf(outfile, ", "); } } //******* structures for recording track, channel, and tone generator status @@ -1076,8 +1096,13 @@ void remove_queue_entry(int ndx) { // remove the oldest queue entry putc(CMD_INSTRUMENT | tgnum, outfile); putc(tg->note.instrument, outfile); outfile_bytecount += 2; } + else if (asm_output) { + fprintf(outfile, "%s%02X", hex, CMD_INSTRUMENT | tgnum); + outfile_items(1); + fprintf(outfile, "%3d", tg->note.instrument); + outfile_items(1); } else { - fprintf(outfile, "0x%02X,%d, ", CMD_INSTRUMENT | tgnum, tg->note.instrument); + fprintf(outfile, "0x%02X,%d", CMD_INSTRUMENT | tgnum, tg->note.instrument); outfile_items(2); } } } if (loggen) fprintf(logfile, " play tgen %d %s\n", tgnum, describe(&q->note)); tg->playing = true; @@ -1093,12 +1118,20 @@ void remove_queue_entry(int ndx) { // remove the oldest queue entry if (volume_output) { putc(tg->note.volume, outfile); outfile_bytecount +=1; } } + else if (asm_output) { + fprintf(outfile, "%s%02X", hex, CMD_PLAYNOTE | tgnum); + outfile_items(1); + fprintf(outfile, "%3d", tg->note.note); + outfile_items(1); + if (volume_output) { + fprintf(outfile, "%3d", tg->note.volume); + outfile_items(1); } } else { if (volume_output == 0) { - fprintf(outfile, "0x%02X,%d, ", CMD_PLAYNOTE | tgnum, tg->note.note); + fprintf(outfile, "0x%02X,%d", CMD_PLAYNOTE | tgnum, tg->note.note); outfile_items(2); } else { - fprintf(outfile, "0x%02X,%d,%d, ", CMD_PLAYNOTE | tgnum, tg->note.note, tg->note.volume); + fprintf(outfile, "0x%02X,%d,%d", CMD_PLAYNOTE | tgnum, tg->note.note, tg->note.volume); outfile_items(3); } } } else { if (loggen) fprintf(logfile, " *** at %lu.%03lu msec no free generator; skipping %s\n", @@ -1117,8 +1150,13 @@ void generate_delay(unsigned long delta_msec) { // output a delay command putc((byte)(delta_msec >> 8), outfile); putc((byte)(delta_msec & 0xff), outfile); outfile_bytecount += 2; } + else if (asm_output) { + fprintf(outfile, "%s%02X", hex, (byte)(delta_msec >> 8)); + outfile_items(1); + fprintf(outfile, "%s%02X", hex, (byte)(delta_msec & 0xff)); + outfile_items(1); } else { - fprintf(outfile, "%ld,%ld, ", delta_msec >> 8, delta_msec & 0xff); + fprintf(outfile, "%ld,%ld", delta_msec >> 8, delta_msec & 0xff); outfile_items(2); } } } // output all queue elements which are at the oldest time or at most "delaymin" later @@ -1156,7 +1194,7 @@ void pull_queue(void) { putc(CMD_STOPNOTE | tgnum, outfile); outfile_bytecount += 1; } else { - fprintf(outfile, "0x%02X, ", CMD_STOPNOTE | tgnum); + fprintf(outfile, "%s%02X", hex, CMD_STOPNOTE | tgnum); outfile_items(1); } if (loggen) fprintf(logfile, " stop tgen %d %s\n", tgnum, describe(&tg->note)); tg->stopnote_pending = false; @@ -1356,7 +1394,7 @@ void find_next_note (int tracknum) { tag = "copyright"; goto show_text; case 0x03: tag = "track name"; - if (tracknum == 0 && !parseonly && !binaryoutput) { + if (tracknum == 0 && !parseonly && !binaryoutput && !asm_output) { /* Incredibly, MIDI has no standard for recording the name of the piece! Track 0's "trackname" is often used for that so we output it to the C file as documentation. */ fprintf (outfile, "// "); @@ -1622,8 +1660,9 @@ void process_track_data(void) { putc(gen_restart ? CMD_RESTART : CMD_STOP, outfile); outfile_bytecount +=1; } else { - fprintf(outfile, "0x%02X};", gen_restart ? CMD_RESTART : CMD_STOP); - outfile_items(1); + fprintf(outfile, "%s%02X", hex, gen_restart ? CMD_RESTART : CMD_STOP); + ++outfile_bytecount; + if (!asm_output) fprintf(outfile, "};"); fprintf(outfile, "\n"); } } @@ -1647,7 +1686,7 @@ int main (int argc, char *argv[]) { SayUsage (argv[0]); exit (4); } filebasename = argv[argno]; - + // strip off trailing .mid or .MID extension if provided by user basenamelen = strlength(filebasename); if (basenamelen > 4 && @@ -1696,7 +1735,7 @@ int main (int argc, char *argv[]) { miditones_strlcat (filename, ".bin", MAXPATH); outfile = fopen (filename, "wb"); } else { - miditones_strlcat (filename, scorename ? ".h" : ".c", MAXPATH); + miditones_strlcat (filename, asm_output ? (scorename ? ".inc" : ".asm") : (scorename ? ".h" : ".c"), MAXPATH); outfile = fopen (filename, "w"); } if (!outfile) { fprintf (stderr, "Unable to open output file %s\n", filename); @@ -1708,27 +1747,29 @@ int main (int argc, char *argv[]) { if (!binaryoutput) { /* create header of C file that initializes score data */ time_t rawtime; time (&rawtime); - fprintf (outfile, "// Playtune bytestream for file \"%s.mid\" ", filebasename); + fprintf (outfile, "%s Playtune bytestream for file \"%s.mid\" ", comment, filebasename); fprintf (outfile, "created by MIDITONES V%s on %s", VERSION, asctime (localtime (&rawtime))); print_command_line (outfile, argc, argv); if (channel_mask != 0xffff) - fprintf (outfile, "// Only the masked channels were processed: %04X\n", channel_mask); + fprintf (outfile, "%s Only the masked channels were processed: %04X\n", comment, channel_mask); if (keyshift != 0) - fprintf (outfile, "// Keyshift was %d chromatic notes\n", keyshift); + fprintf (outfile, "%s Keyshift was %d chromatic notes\n", comment, keyshift); if (define_progmem) { fprintf (outfile, "#ifdef __AVR__\n"); fprintf (outfile, "#include \n"); fprintf (outfile, "#else\n"); fprintf (outfile, "#define PROGMEM\n"); fprintf (outfile, "#endif\n"); } - fprintf (outfile, "const unsigned char PROGMEM %s [] = {\n", + if (asm_output) // create the assembler label for the score + fprintf(outfile, "\n%s:\n%s", filebasename, byteop); + else fprintf (outfile, "const unsigned char PROGMEM %s [] = {\n", scorename ? filebasename : "score"); - if (do_header) { // write the C initialization for the file header - fprintf (outfile, "'P','t', 6, 0x%02X, 0x%02X, ", file_header.f1, file_header.f2); + if (do_header) { // write the initialization for the file header + fprintf (outfile, "'P','t', 6, %s%02X, %s%02X, ", hex, file_header.f1, hex, file_header.f2); fflush (outfile); file_header_num_tgens_position = ftell (outfile); // remember where the number of tone generators is - fprintf (outfile, "%2d, // (Playtune file header)\n", file_header.num_tgens); + fprintf (outfile, "%2d%s %s (Playtune file header)\n%s", file_header.num_tgens, asm_output ? "" : ",", comment, byteop); outfile_bytecount += 6; } } else if (do_header) { // write the binary file header int i; @@ -1773,11 +1814,14 @@ int main (int argc, char *argv[]) { // generate the ending commentary if (!binaryoutput) { - fprintf(outfile, "\n// This %ld byte score contains %d notes and uses %d tone generator%s\n", - outfile_bytecount, note_on_commands, num_tonegens_used, + fprintf(outfile, "\n%s This %ld byte score contains %d notes and uses %d tone generator%s.\n", + comment, outfile_bytecount, note_on_commands, num_tonegens_used, num_tonegens_used == 1 ? "" : "s"); + fprintf(outfile, "%s It encodes %u.%03u seconds of music with %d tempo change%s.\n", + comment, (unsigned)(timenow_usec / 1000000), (unsigned)(timenow_usec / 1000 % 1000), + tempo_changes, tempo_changes == 1 ? "" : "s"); if (notes_skipped) - fprintf(outfile, "// %d notes had to be skipped\n", notes_skipped); } + fprintf(outfile, "%s %d notes had to be skipped.\n", comment, notes_skipped); } printf(" %s %d tone generators were used.\n", num_tonegens_used < num_tonegens ? "Only" : "All", num_tonegens_used); if (notes_skipped) @@ -1793,8 +1837,9 @@ int main (int argc, char *argv[]) { " (Consider recompiling with MAX_TRACKNOTES bigger than %d, to allow more simultaneous notes.)\n", noteinfo_overflow, noteinfo_notfound, MAX_CHANNELNOTES); printf(" %ld bytes of score data were generated, ", outfile_bytecount); - printf("representing %u.%03u seconds of music with %d tempo changes\n", - (unsigned)(timenow_usec / 1000000), (unsigned)(timenow_usec / 1000 % 1000), tempo_changes); + printf("encoding %u.%03u seconds of music with %d tempo change%s.\n", + (unsigned)(timenow_usec / 1000000), (unsigned)(timenow_usec / 1000 % 1000), + tempo_changes, tempo_changes == 1 ? "" : "s"); if (delaymin_usec) printf(" %ld delays were removed because the minimum delay of %u msec caused events to be merged\n", delays_saved, (unsigned)(delaymin_usec / 1000)); diff --git a/miditones.exe b/miditones.exe index 07e6d9ce2cddbffe9c6591747a32bb0793c16e2d..832d376f737b5f8d1459d649c42287255adf5b18 100644 GIT binary patch literal 34304 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