Probe Software Nintendo Famicom Music-Driver

From Video Game Music Preservation Foundation Wiki
Jump to: navigation, search
Probe Software Nintendo Famicom Music-Driver
Programmers Jeroen Tel
Language 6502 Assembly
Formats .NIN

Probe Software Nintendo Famicom Music-Driver is the official name of the sound driver used in all of Probe Software's NES games. It was programmed by Jeroen Tel, who was also the only person to use the driver. Jeroen has given the VGMPF permission to upload the source code for his music driver. You can find it here.

Jeroen wrote his music in 6502 assembly macros.

Release History

The first game to use the Probe Software Famicom Music-Driver was RoboCop 3, which was released both in North America and Europe. The last game to use the driver was Beauty and the Beast, which was only released in Europe. Despite Famicom being in the driver's title, none of the games using the driver were released in Japan.

At an unknown date, an unknown developer created Technocop, but the game and ROM were never released. However, Jeroen kept his source code over the years, and the music was converted into NSF.

Output

Jeroen's sound driver outputs to the RP2A03 and RP2A07. Like most NES drivers, when played on the RP2A07, the music plays a half-step lower and a little slower to account for the European 50 Hz refresh rate.

Games

Released Title Sample
1992-08-?? RoboCop 3 (NES)
1993-01-?? Overlord (NES)
1993-03-?? Alien 3 (NES)
1993-09-?? Bram Stoker's Dracula (NES)
1994-??-?? Beauty and the Beast (NES)
Unreleased Technocop (NES)

Technical

Frequency Registers

The game uses the frequency registers in a non-standard way. Most games would like frequency registers like this:

AD 06 4E 06 EF 05 9B 05, etc.

Instead, Jeroen's driver has these lines of code:

FRQTABLO	DB	$AD,$4A,$EF,$9B,$4B,$FE,$B5,$73,$30,$F5,$BD,$87 ;1
       	DB	$56,$25,$F8,$CD,$A5,$7F,$5B,$3A,$19,$FB,$DE,$C3 ;2
       	DB	$AA,$92,$7B,$66,$52,$3F,$2D,$1C,$0C,$FD,$EF,$E1 ;3
       	DB	$D4,$C9,$BD,$B3,$A9,$9F,$96,$8E,$86,$7E,$77,$70 ;4
       	DB	$6A,$64,$5E,$59,$54,$4F,$4A,$47,$42,$3E,$3B,$38 ;5
       	DB	$35,$31,$2E,$2C,$29,$27,$25,$23,$21,$1F,$1D,$1B ;6
       	DB	$1A,$19,$18,$16,$15,$14,$13,$12,$11,$10,$0F,$0E ;7
       	DB	$07	  	

FRQTABHI	DB	$06,$06,$05,$05,$05,$04,$04,$04,$04,$03,$03,$03 ;1
       	DB	$03,$03,$02,$02,$02,$02,$02,$02,$02,$01,$01,$01 ;2
       	DB	$01,$01,$01,$01,$01,$01,$01,$01,$01,$00,$00,$00 ;3
       	DB	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;4
       	DB	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;5
       	DB	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;6
       	DB	$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ;7
       	DB	$00

The "FRQTABHI" values correspond to the "FRQTABLO" values. For example, 06 in FRQTABHI corresponds to AD in FRQTABLO, and so forth. Here is the result:

C-8 = 07
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 = 1B
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 = 2E
C#6 = 31
C-6 = 35
B-5 = 38
A#5 = 3B
A-5 = 3E
G#5 = 42
G-5 = 47
F#5 = 4A
F-5 = 4F
E-5 = 54
D#5 = 59
D-5 = 5E
C#5 = 64
C-5 = 6A
B-4 = 70
A#4 = 77
A-4 = 7E
G#4 = 86
G-4 = 8E
F#4 = 96
F-4 = 9F
E-4 = A9
D#4 = B3
D-4 = BD
C#4 = C9
C-4 = D4
B-3 = E1
A#3 = EF
A-3 = FD
G#3 = 10C
G-3 = 11C
F#3 = 12D
F-3 = 13F
E-3 = 152
D#3 = 166
D-3 = 17B
C#3 = 192
C-3 = 1AA
B-2 = 1C3
A#2 = 1DE
A-2 = 1FB
G#2 = 219
G-2 = 23A
F#2 = 25B
F-2 = 27F
E-2 = 2A5
D#2 = 2CD
D-2 = 2F8
C#2 = 325
C-2 = 356
B-1 = 387
A#1 = 3BD
A-1 = 3F5
G#1 = 430
G-1 = 473
F#1 = 4B5
F-1 = 4FE
E-1 = 54B
D#1 = 59B
D-1 = 5EF
C#1 = 64A
C-1 = 6AD

Addresses

Alien 3: $1042F-$104D8
Beauty and the Beast: $14514-$145BD
Bram Stoker's Dracula: $1442F-$144D8
Overlord: $2C22F-$2C2D7
RoboCop 3: $1846E-$18516

Links