Sound Routine (NES Driver)
Sound Routine (サウンドルーチン) is the name of the sound driver used by several composers at Advance Communication Company. It was used to create music and sound effects for the NES for at least 13 games. It was also used in one Famicom Disk System game, but the FDS expansion channel was not implemented. The name of the driver was revealed in Moeru! Oniisan (FC), in which it is listed in the Special Thanks list. (サウンドルーチン 4 ごう)
The code for the sound driver appears to be based on Yoshiaki Inose's sound driver. It is possible Osamu Kasai and Masaaki Harada, two of the main composers at ACC, also helped in programming the driver, as they have been credited for programming in some games. We contacted Michiharu Hasuya to see if he programmed it, but he said he didn't know.
Based on the code of the driver, it appears that users wrote music and sound effects in 6502 assembly machine code. This would make sense, as Hasuya explained he had to write the music in hexadecimal.
The first game believed to be developed by Advance Communication to use the driver was Patlabor The Mobile Police for the Famicom Disk System (though it isn't confirmed they developed it). The instrument design is similar to the instrument design used in Hasuya's sound engine. In the later games from around 1988+, the instruments became more unique, as they had tremolo and vibrato added to them. Besides that, the most notable difference is that the triangle channel usually plays in octaves, the lower octave being played one frame before the square and noise channels play a note.
There are two known versions of the sound driver. While Cycle Race Road Man uses the second variant of the driver, it uses a different frequency table, with only the first octave being programmed. In addition, the second and third versions of this driver have two different versions; one tuned normally, and the other tuned 29 cents up, approximately a ¼ step (microtone) sharp (A=447.4Hz).
It is unknown what native formats were used to store the music, but, like all NES games, the machine code can be logged to NSF. The driver doesn't appear to have the ability to use the DPCM channel of the RP2A03.
(Note: While most of the engine's games use these frequency registers, there are a few games such as Ys III which have a different frequency set.)
Interestingly, Version 2 uses the same exact frequency table as Hudson's TurboGrafx-16 sound driver. Because ACC developed games for Hudson Soft, it is likely Hudson provided a frequency table for them to use.
B-7 = 0E A#7 = 0F A-7 = 10 G#7 = 11 G-7 = 12 F#7 = 13 F-7 = 14 E-7 = 15 D#7 = 16 D-7 = 18 C#7 = 19 C-7 = 1A B-6 = 1C A#6 = 1D A-6 = 1F G#6 = 21 G-6 = 23 F#6 = 25 F-6 = 27 E-6 = 29 D#6 = 2C D-6 = 2F C#6 = 31 C-6 = 34 B-5 = 37 A#5 = 3B A-5 = 3E G#5 = 42 G-5 = 46 F#5 = 4A F-5 = 4E E-5 = 53 D#5 = 58 D-5 = 5D C#5 = 63 C-5 = 69 B-4 = 6F A#4 = 75 A-4 = 7C G#4 = 84 G-4 = 8C F#4 = 94 F-4 = 9D E-4 = A6 D#4 = B0 D-4 = BA C#4 = C5 C-4 = D1 B-3 = DD A#3 = EB A-3 = F9 G#3 = 107 G-3 = 117 F#3 = 128 F-3 = 139 E-3 = 14C D#3 = 160 D-3 = 174 C#3 = 18B C-3 = 1A2 B-2 = 1BB A#2 = 1D5 A-2 = 1F1 G#2 = 20F G-2 = 22E F#2 = 24F F-2 = 272 E-2 = 298 D#2 = 2BF D-2 = 2E9 C#2 = 315 C-2 = 344 B-1 = 376 A#1 = 3AB A-1 = 3E2 G#1 = 41D G-1 = 45C F#1 = 49E F-1 = 4E5 E-1 = 52F D#1 = 57E D-1 = 5D2 C#1 = 62A C-1 = 688 B-0 = 6EC A#0 = 755 A-0 = 7C5 G#0 = 83B G-0 = 8B8 F#0 = 93D F-0 = 9CA E-0 = A5E D#0 = AFC D-0 = BA4 C#0 = C55 C-0 = D10
B-7 = 0E A#7 = 0F A-7 = 10 G#7 = 11 G-7 = 12 F#7 = 13 F-7 = 14 E-7 = 15 D#7 = 16 D-7 = 18 C#7 = 19 C-7 = 1A B-6 = 1C A#6 = 1D A-6 = 1F G#6 = 21 G-6 = 23 F#6 = 25 F-6 = 27 E-6 = 2A D#6 = 2C D-6 = 2F C#6 = 32 C-6 = 35 B-5 = 38 A#5 = 3B A-5 = 3F G#5 = 43 G-5 = 47 F#5 = 4B F-5 = 4F E-5 = 54 D#5 = 59 D-5 = 5F C#5 = 64 C-5 = 6A B-4 = 71 A#4 = 78 A-4 = 7F G#4 = 86 G-4 = 8E F#4 = 97 F-4 = A0 E-4 = A9 D#4 = B3 D-4 = BE C#4 = CA C-4 = D6 B-3 = E2 A#3 = F0 A-3 = FE G#3 = 10D G-3 = 11E F#3 = 12F F-3 = 141 E-3 = 154 D#3 = 168 D-3 = 17E C#3 = 194 C-3 = 1AC B-2 = 1C6 A#2 = 1E1 A-2 = 1FD G#2 = 21C G-2 = 23C F#2 = 25E F-2 = 282 E-2 = 2A9 D#2 = 2D1 D-2 = 2FC C#2 = 329 C-2 = 359 B-1 = 38C A#1 = 3C2 A-1 = 3FB G#1 = 439 G-1 = 479 F#1 = 4BC F-1 = 504 E-1 = 54E D#1 = 59E D-1 = 5F5 C#1 = 64E C-1 = 6AF B-0 = 6EC A#0 = 755 A-0 = 7C5 G#0 = 83B G-0 = 8B8 F#0 = 93D F-0 = 9CA E-0 = A5E D#0 = AFC D-0 = BA4 C#0 = C55 C-0 = D10
Interestingly, the "0th" octave has the same frequency registers as the 2nd version, making them out of tune.
B-0 = 714 A#0 = 780 A-0 = 7F2 G#0 = 86B G-0 = 8EB F#0 = 973 F-0 = A02 E-0 = A9B D#0 = B3C D-0 = BE7 C#0 = C9C C-0 = D5D
Cycle Race Road Man: $104A8
Tama & Friends: $5DD3