                              VRCVII CHIP INFO
                              ------ ---- ----

                                     By:


                                Kevin Horton
                             khorton@iquest.net
                             
                             
                             
                             
                             The RENES Project:
                             Reverse-engineering
                                 the world.



V1.50 11/15/99 Added another instrument table
V1.00 11/14/99 First release version of this doc
V0.20 11/10/99 Added very, very, very preliminary register findings
V0.10 11/05/99 Document started, pinned out chip and audio thingy

VRCVII (VRC7)  (48 pin standard 600mil wide DIP)
------------- 

This chip is used in only one Konami game that I know of- Lagrange Point.
I heard rumours it was used in another game, so if someone could provide
info and/or a ROM image, that would help immensely.  It handles ROM 
bankswitching as well as sound generation.  The sound generation is done 
using FM synthesis, so the music sounds like "Adlib" OPL2 music.  Due to 
extra sound, this is a Famicom-only chip like its cousin the 
VRCVI. (See the VRCVI doc for more info).  The "FM core" on this chip
appears to be an almost exact match to the YM2413, minus the "rhythm
section", and with only 6 channels instead of 9.

"VII" of "VRCVII" is "7" for the roman numeral challenged.


This chip appears to generate all of its audio internally, which is then
fed to a small hybrid (aka "black blob") that does the audio interfacing
to the Famicom proper.  It is physically a small ceramic substrate with
an 8 pin SMD chip on it (probably an op-amp), and what appears to be three
0805 sized SMD chip parts (capacitors most likely, since resistors can be
formed on the substrate).  The whole works is then coated with a black
dipped epoxy coating, and the smooth side (opposite the parts) is then
marked with an identifying part number and the pin 1 dot.


Here's the pinout for it:

                        Front Side (parts facing away)

                            +-----------------+  1- Audio in from Famicom
                            |      054002     |  2- Audio out to Famicom
                            |@                |  3,7 - Ground
                            +-----------------+  4-6 - NC
                             | | | | | | | | |   8- Audio from VRCVII
                             1 2 3 4 5 6 7 8 9   9- +5V





Legend:
-------

(s) means this pin connects to the System
(r) this only connects to the ROM
(w) this is a SRAM/WRAM connection only
PRG : these connect to the PRG ROM and/or fami's PRG pins
WRAM : this hooks to the WRAM

Note: There is a 3.58Mhz ceramic resonator connected to the "X1" and "X2" 
pins.  it is the three-pin style with internal caps tied to the third pin
which is grounded.
                                  
Chip is physically marked: "VRV VII 053982"

                                  .----\/----.
             *1 (RAM&s) CHR /OE - |01      48| - NC
             *1 (RAM&s) CHR /CE - |02      47| - M2 (s)
                            GND - |03      46| - /CE WRAM (w)
                        (s) R/W - |04      45| - PRG /A15 (s) (aka /CE)
                       (s) /IRQ - |05      44| - PRG ROM /CE (r)
                  (s) CIRAM A11 - |06      43| - Audio Out
                        (s) PD0 - |07      42| - +5V
                        (s) PD1 - |08      41| - NC
                        (s) PD2 - |09      40| - NC
                        (s) PD3 - |10      39| - NC
                        (s) PD4 - |11      38| - NC
                        (s) PD5 - |12      37| - NC
                        (s) PD6 - |13      36| - CHR RAM A12
                        (s) PD7 - |14      35| - CHR RAM A11
                            +5V - |15      34| - CHR RAM A10
                     (s) PRG A5 - |16      33| - CHR A12 (s)
                     Crystal X2 - |17      32| - CHR A11 (s)
                     Crystal X1 - |18      31| - CHR A10 (s)
                     (s) PRG A4 - |19      30| - +5V
                (r) PRG ROM A13 - |20      29| - PRG A14 (s)
                (r) PRG ROM A14 - |21      28| - PRG A13 (s)
                (r) PRG ROM A15 - |22      27| - PRG A12 (s)
                (r) PRG ROM A16 - |23      26| - PRG ROM A18 (r)
                            GND - |24      25| - PRG ROM A17 (r)
                                  |          |
                                  `----------'

                                     VRCVII


*1: these connect to both the CHR RAM's pins and the card edge.

Note: the NC pins 37-41 most likely for CHR ROM bankswitching.  Since this
cart uses CHR RAM these obviously weren't used ;-)

Registers:  (sound related only)
----------  

All sound registers are accessed through only two physical registers.

9010:
-----

This is the index register.  You write the desired register number here.

9030:
-----

This is the data register.  Data written here is stored in the register
pointed to by the above index register.

There are 6 channels, each containing three registers, and 8 custom 
instrument control registers.


Sound Registers:
----------------

00h - 07h : Custom instrument registers.  See below for info.

---

10h - 15h : ffffffff

f: Lower 8 bits of frequency

---

20h - 25h : --atooof

f: Upper bit of frequency
o: Octave Select 
t: Channel trigger.
a: Sustain on/off switch
-: Not used, write 0's

---

30h - 35h : iiiivvvv

i: Instrument number
v: Volume 

Instrument numbers 01h-0fh are fixed and cannot be changed.

Instrument number 00h is the "programmable" one.

To program the custom instrument, you load registers 00h-07h with the 
desired parameters for it.  All channels set to instrument 00h will
then use this instrument.  Note that you can only program one custom
instrument at a time.



How do the frequency registers work?  
------------------------------------

To generate a tone, you must select an octave and a frequency value.  The
frequency values stay the same for say, the note "C", while the octave
bits determine which octave "C" lies in.  This makes your note lookup table
quite small.

o = 000 is octave 0
o = 001 is octave 1
.
.
.
o = 111 is octave 7


    49722*freqval
F = -------------
    2^(19-octave)


Where: 

F = output frequency in Hz
freqval = frequency register value
octave = desired octave (starting at 0)


Custom Instrument Registers (00-07)
-----------------------------------

Note: I will not provide too extensive documentation of the instrument
registers since their functions are identical to those of the OPL2 chip,
commonly found on Adlib/Soundblaster/compatible cards, and there is alot
of information out on how to program these.  I will use terminology 
similar to that found in said documents.  My VRC7 "emulator" test program
I wrote simply re-arranged and tweaked the register writes to correspond
with the OPL2 registers.

Here's a link to a good document about this chip:

http://www.ccms.net/~aomit/oplx/

The tremolo depth is set to 4.3db and the vibrato depth is set to 14 cent
(in reguards to OPL2 settings; to achieve this you would write 0C0h to
OPL register 0BDh). All operator connections are fixed in FM mode. (Where
Modulator modulates the Carrier).

---


00 (Modulator) - tvskmmmm
01 (Carrier)

t: Tremolo Enable
v: Vibrato Enable
s: Sustain Enable
k: KSR
m: Multiplier

---

02 - kkoooooo (Modulator)

k: Key Scale Level
o: Output Level

---

03 - kk-qweee

-: Not used: Write 0's
k: Key Scale Level (Carrier)
q: Carrier Waveform
w: Modulator Waveform

Note: There are only two waveforms available.  Sine and rectified sine (only
      the positive cycle of the sine; negative cycle "chopped off".)

e: Feedback Control

---

04 (Modulator) - aaaadddd
05 (Carrier)

a: Attack
d: Decay

---

06 (Modulator) - ssssrrrr
07 (Carrier)

s: Sustain
r: Release



Register Settings for the 15 fixed instruments.
-----------------------------------------------

*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*
C                                                                       C
A These instruments are not 100% correct!  There is no way to extract   A
U the register settings from the chip short of an electron microscope.  U
T I have "tuned" these instruments best I could, though I know a couple T
I are not exactly right.  Use them at your own perl!  If someone wants  I
O to waste all day tuning a new set, please let me know what you get.   O
N                                                                       N
*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*CAUTION*


                                   Register
                                   --------

                            00 01 02 03 04 05 06 07
                            -----------------------
                        0 | -- -- -- -- -- -- -- --
                        1 | 05 03 10 06 74 A1 13 F4
                        2 | 05 01 16 00 F9 A2 15 F5
                        3 | 01 41 11 00 A0 A0 83 95
                        4 | 01 41 17 00 60 F0 83 95
                        5 | 24 41 1F 00 50 B0 94 94
                        6 | 05 01 0B 04 65 A0 54 95
                        7 | 11 41 0E 04 70 C7 13 10
           Instrument   8 | 02 44 16 06 E0 E0 31 35
           ----------   9 | 48 22 22 07 50 A1 A5 F4
                        A | 05 A1 18 00 A2 A2 F5 F5
                        B | 07 81 2B 05 A5 A5 03 03
                        C | 01 41 08 08 A0 A0 83 95
                        D | 21 61 12 00 93 92 74 75
                        E | 21 62 21 00 84 85 34 15
                        F | 21 62 0E 00 A1 A0 34 15


                          This is my register table
                          -------------------------


I originally generated this table via listening to the output sound
of the real chip and using a patch editor on my PC to edit up an OPL2
sound-alike.

                                   Register
                                   --------

                            00 01 02 03 04 05 06 07
                            -----------------------
                        0 | -- -- -- -- -- -- -- --
                        1 | 31 22 23 07 F0 F0 E8 F7
                        2 | 03 31 68 05 F2 74 79 9C
                        3 | 01 51 72 04 F1 D3 9D 8B
                        4 | 22 61 1B 05 C0 A1 F8 E8
                        5 | 22 61 2C 03 D2 A1 A7 E8
                        6 | 31 22 FA 01 F1 F1 F4 EE
                        7 | 21 61 28 06 F1 F1 CE 9B
           Instrument   8 | 27 61 60 00 F0 F0 FF FD
           ----------   9 | 60 21 2B 06 85 F1 79 9D
                        A | 31 A1 FF 0A 53 62 5E AF
                        B | 03 A1 70 0F D4 A3 94 BE
                        C | 2B 61 E4 07 F6 93 BD AC
                        D | 21 63 ED 07 77 F1 C7 E8
                        E | 21 61 2A 03 F3 E2 B6 D9
                        F | 21 63 37 03 F3 E2 B6 D9

                           Someone sent me this one
                           ------------------------


A friend sent me this table, and it does indeed sound a bit better.  Note
I added tremolo and vibrato bits to this since they were missing.




So how accurate is this info, anyways?
--------------------------------------

I believe the info to be 100% accurate.  The pinout was generated with the
help of a multimeter and my Super-8 with both an NES cart and the Fami cart
plugged in.  (this allows me to measure between my known "control" board
with the unknown "experimental" board to generate the connections).  
Register info was gleaned via writing test code and listening and capturing
the resultant audio stream for analysis.  




---EOF---
