Will have to seek out the music programmer with 6502 asm programming knowledge presumably on a separate mission.
I have experience deciphering NES music engines. I can take a peek at this today and let you know my findings.
I won't input any songs for you, but hopefully I'll get enough information so you'll be able to input them yourself.
To do anything with this, you'll need a hex editor. You can use the built-in hex editor in FCEUX, or you can use a separate program like HxD.
What I found so far:
Songs tables start at offset 0x16CBD. Each song has 12 bytes in this table. The first song has these bytes:
30 5B 8D (Pulse 0)
01 8E A6 (Pulse 1)
02 8E 90 (Triangle)
03 5E 91 (Percussion)
The first byte in these groupings indicate which audio channel to initialize. I imagine this is more useful for sound effects --- for music tracks, just leave them as they are.
The following 2 bytes are the pointer to the score (music) data. Add 0xE010 to get the ROM offset from the pointer. Example: Pulse 0 has "5B 8D", so it's music data starts at $8D5B + 0xE010 = 0x16D6B
Pulse and Triangle channels seem to playback their score as expected on their designated channel. Whereas the percussion seems to impact Noise and
DMC, as well as being able to trigger sound effect playback as part of the music (in the first level music, an alarm clock sound effect plays on Pulse 0 in the song's intro, but it plays independently of Pulse 0's score -- so I assume it's triggered by the percussion score).
Score data is a sequence of notes with the occasional command code slipped in to do effects. Pulse and Triangle likely have a very different set of commands from percussion.
For pulse & tri, codes are below. Not again percussion is probably very different and I haven't looked at it yet:
- $0x - $Bx = C, C#, D, D#, E, F, F#, etc ... with 'x' denoting the note length.
Example, '03' plays a C tone with a length of 3. '16' plays a C# tone with a length of 6 (twice as long).
A length of 0 is treated as a length of $10
- $Cx = rest (play no tone) for a length of 'x'
- $D0 through $FF are command codes, but I haven't deciphered any of them yet.
Example... Pulse 0 starts with the below score data:
D1 B3 81 00 E2 (a bunch of setup commands, probably setting up tempo, octave, and envelope pattern)
91 (first audible note)
D7 B6 83 A8 F1 (more commands, probably changing envelope pattern and duty cycle)
B1 (same note, intercut with rests)
C7 (long rest, the alarm clock sound plays during this rest)
E9 71 E9 30 E2 (more commands)
That's all I have so far.
The Konami music driver is pretty complicated because it has support for a lot of weird effects. It'd be a lot of work to decipher it all, and before I do anymore work, I'd want to know if this is useful to you at all, or if this is just mumbo-jumbo that you're not going to care about.