NES playroutine identifier

Discuss NSF files, FamiTracker, MML tools, or anything else related to NES music.

Moderator: Moderators

User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

NES playroutine identifier

Post by Karmic »

I have started work on a configuration file for sidid, but instead of identifying C64 players, it identifies NSF players. I have also created a small modification of the original program, so it looks for NSFs instead of SIDs.

The signature file is not complete, but I'd like your thoughts on this.
Rahsennor
Posts: 479
Joined: Thu Aug 20, 2015 3:09 am

Re: NES playroutine identifier

Post by Rahsennor »

I was actually thinking of integrating something similar into my NSF player. Consider me interested.
tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: NES playroutine identifier

Post by tepples »

HertzDevil had a similar idea.


It's not traditional to use .exe with UNIX executables. You can usually detect the difference between UNIX and Windows by the absence or presence of the COMSPEC environment variable.

Code: Select all

# Use .exe only on Windows, which defines COMSPEC
ifdef COMSPEC
DOTEXE:=.exe
else
DOTEXE:=
endif
EXENAME:=nsfid$(DOTEXE)

.PHONY: all
all: $(EXENAME)

$(EXENAME): nsfid.c
	gcc $^ -Wall -O3 -s -o $@
This makefile incorporates COMSPEC as well as three other changes:
  • You can strip debugging symbols from the output while linking by using -s in the command line that produces the executable.
  • Use two automatic variables so that the makefile doesn't repeat itself: $^ means "name of all dependencies", and $@ means "name of the target".
  • Target names that do not refer to an actual file, such as all, clean, and the like, need to be declared .PHONY so that Make doesn't get confused if there's an actual file by that name.
Some error checking is missing. -Wall in GCC 4.8.5 includes -Wunused-result, and you're ignoring return values of several standard library functions declared with attribute warn_unused_result:
  • getcwd at lines 100, 175, 321
  • chdir at lines 174, 177, 333, 335
  • fscanf at line 199
  • fread at line 199, 390
Once I compiled the program and ran it from a terminal, the output was as follows:

Code: Select all

.../nsfid$ ./nsfid
Using configfile 
No signatures defined!
It's traditional, if a required argument is missing, to recommend on stderr that the user run programname --help.

Usage is somewhat confusing, as it works only on directories, not individual files.

Code: Select all

.../nsfid$ NSFIDCFG=./nsfid.cfg ./nsfid ~/Music/old_nt2_nsfs
emerald_hill.nsf                                         NerdTracker_II
meatspin.nsf                                             NerdTracker_II
fuga7777.nsf                                             NerdTracker_II
Opentris.nsf                                             NerdTracker_II
bomblodev2.nsf                                           NerdTracker_II
dy-covers.nsf                                            NerdTracker_II
Butterfly.nsf                                            NerdTracker_II

Detected players:
NerdTracker_II           7

Statistics:
Identified               7
Unidentified             0
Total files examined     7
.../nsfid$ NSFIDCFG=./nsfid.cfg ./nsfid ~/Music/old_nt2_nsfs/dy-covers.nsf
Using configfile ./nsfid.cfg

Statistics:
Identified               0
Unidentified             0
Total files examined     0
I ran it against the development folder for my own music engine, whose source code can be browsed:

Code: Select all

.../nsfid$ NSFIDCFG=./nsfid.cfg ./nsfid ~/develop/pently 
Using configfile ./nsfid.cfg

Statistics:
Identified               0
Unidentified             1
Total files examined     1
Any tips on making signatures that are distinctive yet resilient to minor changes in new versions of the engine, beyond those listed on the sidid GitHub project?
User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

Re: NES playroutine identifier

Post by Karmic »

User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

Re: NES playroutine identifier

Post by Karmic »

Been a while since I posted anything related to this. Here's a new signature file, with a whole lot more added :)

And sorry, but no update to the program. I am not proficient at all in C++ :/
Attachments
nsfid.zip
(4.12 KiB) Downloaded 718 times
User avatar
NovaSquirrel
Posts: 483
Joined: Fri Feb 27, 2009 2:35 pm
Location: Fort Wayne, Indiana
Contact:

Re: NES playroutine identifier

Post by NovaSquirrel »

This update only contains the config file, and the link with the actual program in the first post is dead.
tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: NES playroutine identifier

Post by tepples »

Here's the program
Attachments
nsfid-1.09.zip
(47.8 KiB) Downloaded 706 times
User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

Re: NES playroutine identifier

Post by Karmic »

Another update. I also added information to the unknown id's in the nsfid.nfo file, so if you have any info on these then please feel free to tell me.
Attachments
nsfid.zip
(50.91 KiB) Downloaded 699 times
tepples
Posts: 22705
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: NES playroutine identifier

Post by tepples »

I decided to look at how you're detecting Pently in the new cfg:

Code: Select all

Damian_Yerrick
DE ?? ?? 10 ?? BD ?? ?? 9D ?? ?? B5 ?? 85 ?? B5 ?? 85 ?? 18 69 END
(Pently)
BD ?? ?? 1D ?? ?? D0 ?? A5 ?? D0 ?? E0 08 F0 ?? A9 30 9D 00 40 END
You've correctly determined that pentlysound.s is on the whole less volatile than pentlymusic.s. I matched both snippets to parts of the pently_update_one_ch subroutine there:
  1. The first snippet is the "playback rate divider" and "fetch the instruction" parts of sound effect envelope processing.
  2. The second snippet is the code immediately preceding it, which mutes a channel if its sound effect has finished and its instrument is silent.
Incidentally, after reviewing this subroutine, I see room to optimize "fetch the instruction". I may act on it later.
User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

Re: NES playroutine identifier

Post by Karmic »

Another update.

I'd like to ask out of curiosity, is anyone actually using this tool for anything? If so, then what for? Don't worry too much about the answer, I'll continue work on this regardless :p
Attachments
nsfid.zip
(51.23 KiB) Downloaded 694 times
User avatar
B00daW
Posts: 586
Joined: Thu Jan 03, 2008 1:48 pm

Re: NES playroutine identifier

Post by B00daW »

Hey, Karmic, do you think you can post this up at like GitHub or something? (People could push updates to the database.) It would be nice if this was also incorporated into NSFPlay and VirtuaNSF too. :)
User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

Re: NES playroutine identifier

Post by Karmic »

B00daW wrote:Hey, Karmic, do you think you can post this up at like GitHub or something? (People could push updates to the database.)
Seems like a good idea, but I have a hard time thinking that anyone would actually bother. Aside from HertzDevil maybe, but I think he has his own solution already.
User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

Re: NES playroutine identifier

Post by Karmic »

Time to update this thing again.

Note that "?FCP3_Unknown_1" is a player used on quite a few Famicompo Pico 3 entries, but due to the compo's anonymous nature I can't provide a proper name for now.
Attachments
nsfid.zip
(51.23 KiB) Downloaded 670 times
User avatar
Karmic
Posts: 306
Joined: Sun Jun 05, 2016 2:10 am
Location: Canada
Contact:

Re: NES playroutine identifier

Post by Karmic »

Another small update with only a few fixes for existing IDs. Still 356 unidentified NSFs in Knurek's archive.
Attachments
nsfid.zip
(51.33 KiB) Downloaded 677 times
User avatar
Gil-Galad
Posts: 321
Joined: Sat Nov 13, 2004 9:43 pm
Location: Ohio, USA
Contact:

Re: NES playroutine identifier

Post by Gil-Galad »

I am definitely going to be messing with this program. I have skimmed through all the files and I'm about to fire it up soon.
Post Reply