322 lines
9.8 KiB
Plaintext
322 lines
9.8 KiB
Plaintext
|
VRCVII CHIP INFO
|
||
|
------ ---- ----
|
||
|
|
||
|
By:
|
||
|
|
||
|
|
||
|
Kevin Horton
|
||
|
khorton@iquest.net
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
The RENES Project:
|
||
|
Reverse-engineering
|
||
|
the world.
|
||
|
|
||
|
|
||
|
|
||
|
V0.10 11/05/99 Document started, pinned out chip and audio thingy
|
||
|
V0.20 11/10/99 Added very, very, very preliminary register findings
|
||
|
v1.00 11/14/99 First release version of this doc
|
||
|
|
||
|
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)
|
||
|
|
||
|
"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 : ???tooof
|
||
|
|
||
|
f: Upper bit of frequency
|
||
|
o: Octave Select
|
||
|
t: Channel trigger.
|
||
|
?: Dunno what these do yet (No audible effect)
|
||
|
|
||
|
---
|
||
|
|
||
|
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
|
||
|
|
||
|
k: Key Scale Level
|
||
|
o: Output Level
|
||
|
|
||
|
---
|
||
|
|
||
|
03 - ---qweee
|
||
|
|
||
|
-: Not used: Write 0's
|
||
|
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
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
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---
|