initial fce ultra 0.81 import
[fceu.git] / Documentation / tech / cpu / NESSOUND.txt
CommitLineData
c62d2810 1The NES sound channel guide 1.8
2Written by Brad Taylor.
3btmine@hotmail.com
4
5Last updated: July 27th, 2000.
6
7All results were obtained by studying prior information available (from
8nestech 1.00, and postings on NESDev from miscellanious people), and through
9a series of experiments conducted by me. Results acquired by individuals
10prior to my reverse-engineering have been double checked, and final results
11have been confirmed. Credit is due to those individual(s) who contributed
12any information in regards to the the miscellanious sound channels wihtin
13the NES.
14
15A special thanks goes out to Matthew Conte, for his expertise on
16pseudo-random number generation (amoung other things), which allowed for the
17full reverse engineering of the NES's noise channel to take place. Without
18his help, I would still be trying to find a needle in a haystack, as far as
19the noise's method of pseudo-random number generation goes. Additionally,
20his previous findings / reverse engineering work on the NES's sound hardware
21really got the ball of NES sound emulation rolling. If it weren't for Matt's
22original work, this document wouldn't exist.
23
24Thanks to Kentaro Ishihara, for his excellent work on finding the difference
25in upward frequency sweep between the 2 square wave channels.
26
27****************
28* Introduction *
29****************
30
31The 2A03 (NES's integrated CPU) has 4 internal channels to it that have the
32ability to generate semi-analog sound, for musical playback purposes. These
33channels are 2 square wave channels, one triangle wave channel, and a noise
34generation channel. This document will go into full detail on every aspect
35of the operation and timing of the mentioned sound channels.
36
37
38*******************
39* Channel details *
40*******************
41
42Each channel has different characteristics to it that make up it's
43operation.
44
45The square channel(s) have the ability to generate a square wave frequency
46in the range of 54.6 Hz to 12.4 KHz. It's key features are frequency sweep
47abilities, and output duty cycle adjustment.
48
49The triangle wave channel has the ability to generate an output triangle
50wave with a resolution of 4-bits (16 steps), in the range of 27.3 Hz to 55.9
51KHz. The key features this channel has is it's analog triangle wave output,
52and it's linear counter, which can be set to automatically disable the
53channel's sound after a certain period of time has gone by.
54
55The noise channel is used for producing random frequencys, which results in
56a "noisey" sounding output. Output frequencys can range anywhere from 29.3
57Hz to 447 KHz. It's key feature is it's pseudo- random number generator,
58which generates the random output frequencys heard by the channel.
59
60
61*****************
62* Frame counter *
63*****************
64
65The 2A03 has an internal frame counter. It has the ability to generate 60 Hz
66(1/1 framerate), 120 Hz (1/2 framerate), and 240 Hz (1/4 framerate) signals,
67used by some of the sound hardware. The 1/4 framerate is calculated by
68taking twice the CPU clock speed (3579545.454545 Hz), and dividing it by
6914915 (i.e., the divide-by-14915 counter is decremented on the rising AND
70falling edge of the CPU's clock signal).
71
72
73************************
74* Sound hardware delay *
75************************
76
77After resetting the 2A03, the first time any sound channel(s) length counter
78contains a non-zero value (channel is enabled), there will be a 2048 CPU
79clock cycle delay before any of the sound hardware is clocked. After the 2K
80clock cycles go by, the NES sound hardware will be clocked normally. This
81phenomenon only occurs prior to a system reset, and only occurs during the
82first 2048 CPU clocks for any sound channel prior to a sound channel being
83enabled.
84
85The information in regards to this delay is only provided to keep this
86entire document persistently accurate on the 2A03's sound hardware, but may
87not be 100% accurate in itself. I haven't done much tests on the behaviour
88of this delay (mainly because I don't care, as I view it as a inconvenience
89anyway), so that's why I believe there could be some inaccuracies.
90
91
92************************
93* Register Assignments *
94************************
95
96The sound hardware internal to the 2A03 has been designated these special
97memory addresses in the CPU's memory map.
98
99$4000-$4003 Square wave 1
100$4004-$4007 Square wave 2 (identical to the first, except for upward
101frequency sweeps (see "sweep unit" section))
102$4008-$400B Triangle
103$400C-$400F Noise
104$4015 Channel enable / length counter status
105
106Note that $4015 is the only R/W register. All others are write only (attempt
107to read them will most likely result in a returned 040H, due to heavy
108capacitance on the NES's data bus). Reading a "write only" register, will
109have no effect on the specific register, or channel.
110
111Every sound channel has 4 registers affiliated with it. The description of
112the register sets are as follows:
113
114+----------------+
115| Register set 1 |
116+----------------+
117
118$4000(sq1)/$4004(sq2)/$400C(noise) bits
119---------------------------------------
1200-3 volume / envelope decay rate
1214 envelope decay disable
1225 length counter clock disable / envelope decay looping enable
1236-7 duty cycle type (unused on noise channel)
124
125$4008(tri) bits
126---------------
1270-6 linear counter load register
1287 length counter clock disable / linear counter start
129
130
131+----------------+
132| Register set 2 |
133+----------------+
134
135$4001(sq1)/$4005(sq2) bits
136--------------------------
1370-2 right shift amount
1383 decrease / increase (1/0) wavelength
1394-6 sweep update rate
1407 sweep enable
141
142$4009(tri)/$400D(noise) bits
143----------------------------
1440-7 unused
145
146
147+----------------+
148| Register set 3 |
149+----------------+
150
151$4002(sq1)/$4006(sq2)/$400A(Tri) bits
152-------------------------------------
1530-7 8 LSB of wavelength
154
155$400E(noise) bits
156-----------------
1570-3 playback sample rate
1584-6 unused
1597 random number type generation
160
161
162+----------------+
163| Register set 4 |
164+----------------+
165
166$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits
167--------------------------------------------------
1680-2 3 MS bits of wavelength (unused on noise channel)
1693-7 length counter load register
170
171
172+--------------------------------+
173| length counter status register |
174+--------------------------------+
175
176$4015(read)
177-----------
1780 square wave channel 1
1791 square wave channel 2
1802 triangle wave channel
1813 noise channel
1824 DMC (see "DMC.TXT" for details)
1835-6 unused
1847 IRQ status of DMC (see "DMC.TXT" for details)
185
186
187+-------------------------+
188| channel enable register |
189+-------------------------+
190
191$4015(write)
192------------
1930 square wave channel 1
1941 square wave channel 2
1952 triangle wave channel
1963 noise channel
1974 DMC channel (see "DMC.TXT" for details)
1985-7 unused
199
200
201************************
202* Channel architecture *
203************************
204
205This section will describe the internal components making up each individual
206channel. Each component will then be described in full detail.
207
208Device Triangle Noise Square
209------ -------- ------ ------
210triangle step generator X
211linear counter X
212programmable timer X X X
213length counter X X X
2144-bit DAC X X X
215volume/envelope decay unit X X
216sweep unit X
217duty cycle generator X
218wavelength converter X
219random number generator X
220
221
222+-------------------------+
223| Triangle step generator |
224+-------------------------+
225
226This is a 5-bit, single direction counter, and it is only used in the
227triangle channel. Each of the 4 LSB outputs of the counter lead to one input
228on a corresponding mutually exclusive XNOR gate. The 4 XNOR gates have been
229strobed together, which results in the inverted representation of the 4 LSB
230of the counter appearing on the outputs of the gates when the strobe is 0,
231and a non-inverting action taking place when the strobe is 1. The strobe is
232naturally connected to the MSB of the counter, which effectively produces on
233the output of the XNOR gates a count sequence which reflects the scenario of
234a near- ideal triangle step generator (D,E,F,F,E,D,...,2,1,0,0,1,2,...). At
235this point, the outputs of the XNOR gates will be fed into the input of a
2364-bit DAC.
237
238This 5-bit counter will be halted whenever the Triangle channel's length or
239linear counter contains a count of 0. This results in a "latching"
240behaviour; the counter will NOT be reset to any definite state.
241
242On system reset, this counter is loaded with 0.
243
244The counter's clock input is connected directly to the terminal count output
245pin of the 11-bit programmable timer in the triangle channel. As a result of
246the 5-bit triangle step generator, the output triangle wave frequency will
247be 32 times less than the frequency of the triangle channel's programmable
248timer is set to generate.
249
250
251+----------------+
252| Linear counter |
253+----------------+
254
255The linear counter is only found in the triangle channel. It is a 7-bit
256presettable down counter, with a decoded output condition of 0 available
257(not exactly the same as terminal count). Here's the bit assignments:
258
259$4008 bits
260----------
2610-6 bits 0-6 of the linear counter load register (NOT the linear counter
262itself)
2637 linear counter start
264
265The counter is clocked at 240 Hz (1/4 framerate), and the calculated length
266in frames is 0.25*N, where N is the 7-bit loaded value. The counter is
267always being clocked, except when 0 appears on the output of the counter. At
268this point, the linear counter & triangle step counter clocks signals are
269disabled, which results in both counters latching their current state (the
270linear counter will stay at 0, and the triangle step counter will stop, and
271the channel will be silenced due to this).
272
273The linear counter has 2 modes: load, and count. When the linear counter is
274in load mode, it essentially becomes transparent (i.e. whatever value is
275currently in, or being written to $4008, will appear on the output of the
276counter). Because of this, no count action can occur in load mode. When the
277mode changes from load to count, the counter will now latch the value
278currently in it, and start counting down from there. In the count mode, the
279current value of $4008 is ignored by the counter (but still retained in
280$4008). Described below is how the mode of the linear counter is set:
281
282Writes to $400B
283---------------
284cur mode
285--- ----
2861 load
2870 load (during the write cycle), count
288
289Cur is the current state of the MSB of $4008.
290
291Writes to $4008
292---------------
293old new mode
294--- --- ----
2950 X count
2961 0 no change (during the write cycle), count
2971 1 no change
298
299Old and new represent the state(s) of the MSB of $4008. Old is the value
300being replaced in the MSB of $4008 on the write, and new is the value
301replacing the old one.
302
303"no change" indicates that the mode of the linear counter will not change
304from the last.
305
306
307+--------------------+
308| Programmable timer |
309+--------------------+
310
311The programmable timer is a 11-bit presettable down counter, and is found in
312the square, triangle, and noise channel(s). The bit assignments are as
313follows:
314
315$4002(sq1)/$4006(sq2)/$400A(Tri) bits
316-------------------------------------
3170-7 represent bits 0-7 of the 11-bit wavelength
318
319$4003(sq1)/$4007(sq2)/$400B(Tri) bits
320-------------------------------------
3210-2 represent bits 8-A of the 11-bit wavelength
322
323Note that on the noise channel, the 11 bits are not available directly. See
324the wavelength converter section, for more details.
325
326The counter has automatic syncronous reloading upon terminal count
327(count=0), therefore the counter will count for N+1 (N is the 11-bit loaded
328value) clock cycles before arriving at terminal count, and reloading. This
329counter will typically be clocked at the 2A03's internal 6502 speed (1.79
330MHz), and produces an output frequency of 1.79 MHz/(N+1). The terminal
331count's output spike length is typically no longer than half a CPU clock.
332The TC signal will then be fed to the appropriate device for the particular
333sound channel (for square, this terminal count spike will lead to the duty
334cycle generator. For the triangle, the spike will be fed to the triangle
335step generator. For noise, this signal will go to the random number
336generator unit).
337
338
339+----------------+
340| Length counter |
341+----------------+
342
343The length counter is found in all sound channels. It is essentially a 7-bit
344down counter, and is conditionally clocked at a frequency of 60 Hz.
345
346When the length counter arrives at a count of 0, the counter will be stopped
347(stay on 0), and the appropriate channel will be silenced.
348
349The length counter clock disable bit, found in all the channels, can also be
350used to halt the count sequence of the length counter for the appropriate
351channel, by writing a 1 out to it. A 0 condition will permit counting
352(unless of course, the counter's current count = 0). Location(s) of the
353length counter clock disable bit:
354
355$4000(sq1)/$4004(sq2)/$400C(noise) bits
356---------------------------------------
3575 length counter clock disable
358
359$4008(tri) bits
360---------------
3617 length counter clock disable
362
363To load the length counter with a specified count, a write must be made out
364to the length register. Location(s) of the length register:
365
366$4003(sq1)/$4007(sq2)/$400B(tri)/$400F(noise) bits
367--------------------------------------------------
3683-7 length
369
370The 5-bit length value written, determines what 7-bit value the length
371counter will start counting from. A conversion table here will show how the
372values are translated.
373
374 +-----------------------+
375 | bit3=0 |
376 +-------+---------------+
377 | |frames |
378 |bits +-------+-------+
379 |4-6 |bit7=0 |bit7=1 |
380 +-------+-------+-------+
381 |0 |05 |06 |
382 |1 |0A |0C |
383 |2 |14 |18 |
384 |3 |28 |30 |
385 |4 |50 |60 |
386 |5 |1E |24 |
387 |6 |07 |08 |
388 |7 |0E |10 |
389 +-------+-------+-------+
390
391 +---------------+
392 | bit3=1 |
393 +-------+-------+
394 |bits | |
395 |4-7 |frames |
396 +-------+-------+
397 |0 |7F |
398 |1 |01 |
399 |2 |02 |
400 |3 |03 |
401 |4 |04 |
402 |5 |05 |
403 |6 |06 |
404 |7 |07 |
405 |8 |08 |
406 |9 |09 |
407 |A |0A |
408 |B |0B |
409 |C |0C |
410 |D |0D |
411 |E |0E |
412 |F |0F |
413 +-------+-------+
414
415The length counter's real-time status for each channel can be attained. A 0
416is returned for a zero count status in the length counter (channel's sound
417is disabled), and 1 for a non-zero status. Here's the bit description of the
418length counter status register:
419
420$4015(read)
421-----------
4220 length counter status of square wave channel 1
4231 length counter status of square wave channel 2
4242 length counter status of triangle wave channel
4253 length counter status of noise channel
4264 length counter status of DMC (see "DMC.TXT" for details)
4275-6 unused
4287 IRQ status of DMC (see "DMC.TXT" for details)
429
430Writing a 0 to the channel enable register will force the length counters to
431always contain a count equal to 0, which renders that specific channel
432disabled (as if it doesn't exist). Writing a 1 to the channel enable
433register disables the forced length counter value of 0, but will not change
434the count itself (it will still be whatever it was prior to the writing of
4351).
436
437Bit description of the channel enable register:
438
439$4015(write)
440------------
4410 enable square wave channel 1
4421 enable square wave channel 2
4432 enable triangle wave channel
4443 enable noise channel
4454 enable DMC channel (see "DMC.TXT" for details)
4465-7 unused
447
448Note that all 5 used bits in this register will be set to 0 upon system
449reset.
450
451
452+-----------+
453| 4-bit DAC |
454+-----------+
455
456This is just a standard 4-bit DAC with 16 steps of output voltage
457resolution, and is used by all 4 sound channels.
458
459On the 2A03, square wave 1 & 2 are mixed together, and are available via pin
4601. Triangle & noise are available on pin 2. These analog outputs require a
461negative current source, to attain linear symmetry on the various output
462voltage levels generated by the channel(s) (moreover, to get the sound to be
463audible). Since the NES just uses external 100 ohm pull-down resistors, this
464results in the output waveforms being of very small amplitude, but with
465minimal linearity asymmetry.
466
467
468+------------------------------+
469| Volume / envelope decay unit |
470+------------------------------+
471
472The volume / envelope decay hardware is found only in the square wave and
473noise channels.
474
475$4000(sq1)/$4004(sq2)/$400C(noise)
476----------------------------------
4770-3 volume / envelope decay rate
4784 envelope decay disable
4795 envelope decay looping enable
480
481When the envelope decay disable bit (bit 4) is set (1), the current volume
482value (bits 0-3) is sent directly to the channel's DAC. However, depending
483on certain conditions, this 4-bit volume value will be ignored, and a value
484of 0 will be sent to the DAC instead. This means that while the channel is
485enabled (producing sound), the output of the channel (what you'll hear from
486the DAC) will either be the 4-bit volume value, or 0. This also means that a
4874-bit volume value of 0 will result in no audible sound. These conditions
488are as follows:
489
490- When hardware in the channel wants to disable it's sound output (like the
491length counter, or sweep unit (square channels only)).
492
493- On the negative portion of the output frequency signal coming from the
494duty cycle / random number generator hardware (square wave channel / noise
495channel).
496
497When the envelope decay disable bit is cleared, bits 0-3 now control the
498envelope decay rate, and an internal 4-bit down counter (hereon the envelope
499decay counter) now controls the channel's volume level. "Envelope decay" is
500used to describe the action of the channel's audio output volume starting
501from a certain value, and decreasing by 1 at a fixed (linear) rate (which
502produces a "fade-out" sounding effect). This fixed decrement rate is
503controlled by the envelope decay rate (bits 0-3). The calculated decrement
504rate is 240Hz/(N+1), where N is any value between $0-$F.
505
506When the channel's envelope decay counter reaches a value of 0, depending on
507the status of the envelope decay looping enable bit (bit 5, which is shared
508with the length counter's clock disable bit), 2 different things will
509happen:
510
511bit 5 action
512----- ------
5130 The envelope decay count will stay at 0 (channel silenced).
5141 The envelope decay count will wrap-around to $F (upon the next clock
515cycle). The envelope decay counter will then continue to count down
516normally.
517
518Only a write out to $4003/$4007/$400F will reset the current envelope decay
519counter to a known state (to $F, the maximum volume level) for the
520appropriate channel's envelope decay hardware. Otherwise, the envelope decay
521counter is always counting down (by 1) at the frequency currently contained
522in the volume / envelope decay rate bits (even when envelope decays are
523disabled (setting bit 4)), except when the envelope decay counter contains a
524value of 0, and envelope decay looping (bit 5) is disabled (0).
525
526
527+------------+
528| Sweep unit |
529+------------+
530
531The sweep unit is only found in the square wave channels. The controls for
532the sweep unit have been mapped in at $4001 for square 1, and $4005 for
533square 2.
534
535The controls
536------------
537Bit 7 when this bit is set (1), sweeping is active. This results in
538real-time increasing or decreasing of the the current wavelength value (the
539audible frequency will decrease or increase, respectively). The wavelength
540value in $4002/3 ($4006/7) is constantly read & updated by the sweep.
541Modifying the contents of $4002/3 will be immediately audible, and will
542result in the sweep now starting from this new wavelength value.
543
544Bits 6-4 These 3 bits represent the sweep refresh rate, or the frequency at
545which $4002/3 is updated with the new calculated wavelength. The refresh
546rate frequency is 120Hz/(N+1), where N is the value written, between 0 and
5477.
548
549Bit 3 This bit controls the sweep mode. When this bit is set (1), sweeps
550will decrease the current wavelength value, as a 0 will increase the current
551wavelength.
552
553Bits 2-0 These bits control the right shift amount of the new calculated
554sweep update wavelength. Code that shows how the sweep unit calculates a new
555sweep wavelength is as follows:
556
557bit 3
558-----
5590 New = Wavelength + (Wavelength >> N)
5601 New = Wavelength - (Wavelength >> N) (minus an additional 1, if using
561square wave channel 1)
562
563where N is the the shift right value, between 0-7.
564
565Note that in decrease mode, for subtracting the 2 values:
5661's compliment (NOT) is being used for square wave channel 1
5672's compliment (NEG) is being used for square wave channel 2
568
569This information is currently the only known difference between the 2 square
570wave channels.
571
572On each sweep refresh clock, the Wavelength register will be updated with
573the New value, but only if all 3 of these conditions are met:
574
575- bit 7 is set (sweeping enabled)
576- the shift value (which is N in the formula) does not equal to 0
577- the channel's length counter contains a non-zero value
578
579Notes
580-----
581There are certain conditions that will cause the sweep unit to silence the
582channel, and halt the sweep refresh clock (which effectively stops sweep
583action, if any). Note that these conditions pertain regardless of any sweep
584refresh rate values, or if sweeping is enabled/disabled (via bit 7).
585
586- an 11-bit wavelength value less than $008 will cause this condition
587- if the sweep unit is currently set to increase mode, the New calculated
588wavelength value will always be tested to see if a carry (bit $B) was
589generated or not (if sweeping is enabled, this carry will be examined before
590the Wavelength register is updated) from the shift addition calculation. If
591carry equals 1, the channel is silenced, and sweep action is halted.
592
593
594+----------------------+
595| Duty cycle generator |
596+----------------------+
597
598The duty cycle generator takes the fequency produced from the 11-bit
599programmable timer, and uses a 4 bit counter to produce 4 types of duty
600cycles. The output frequency is then 1/16 that of the programmable timer.
601The duty cycle hardware is only found in the square wave channels. The bit
602assignments are as follows:
603
604$4000(sq1)/$4004(sq2)
605---------------------
6066-7 Duty cycle type
607
608 duty (positive/negative)
609val in clock cycles
610--- ---------------
61100 2/14
61201 4/12
61310 8/ 8
61411 12/ 4
615
616Where val represents bits 6-7 of $4000/$4004.
617
618The output frequency at this point will now be fed to the volume/envelope
619decay hardware.
620
621
622+----------------------+
623| Wavelength converter |
624+----------------------+
625
626The wavelength converter is only used in the noise channel. It is used to
627convert a given 4-bit value to an 11-bit wavelength, which then is sent to
628the noise's own programmable timer. Here is the bit descriptions:
629
630$400E bits
631----------
6320-3 The 4-bit value to be converted
633
634Below is a conversion chart that shows what 4-bit value will represent the
63511-bit wavelength to be fed to the channel's programmable timer:
636
637value octave scale CPU clock cycles (11-bit wavelength+1)
638----- ------ ----- --------------------------------------
6390 15 A 002
6401 14 A 004
6412 13 A 008
6423 12 A 010
6434 11 A 020
6445 11 D 030
6456 10 A 040
6467 10 F 050
6478 10 C 065
6489 9 A 07F
649A 9 D 0BE
650B 8 A 0FE
651C 8 D 17D
652D 7 A 1FC
653E 6 A 3F9
654F 5 A 7F2
655
656Octave and scale information is provided for the music enthusiast programmer
657who is more familiar with notes than clock cycles.
658
659
660+-------------------------+
661| Random number generator |
662+-------------------------+
663
664The noise channel has a 1-bit pseudo-random number generator. It's based on
665a 15-bit shift register, and an exclusive or gate. The generator can produce
666two types of random number sequences: long, and short. The long sequence
667generates 32,767-bit long number patterns. The short sequence generates
66893-bit long number patterns. The 93-bit mode will generally produce higher
669sounding playback frequencys on the channel. Here is the bit that controls
670the mode:
671
672$400E bits
673----------
6747 mode
675
676If mode=0, then 32,767-bit long number sequences will be produced (32K
677mode), otherwise 93-bit long number sequences will be produced (93-bit
678mode).
679
680The following diagram shows where the XOR taps are taken off the shift
681register to produce the 1-bit pseudo-random number sequences for each mode.
682
683mode <-----
684---- EDCBA9876543210
68532K **
68693-bit * *
687
688The current result of the XOR will be transferred into bit position 0 of the
689SR, upon the next shift cycle. The 1-bit random number output is taken from
690pin E, is inverted, then is sent to the volume/envelope decay hardware for
691the noise channel. The shift register is shifted upon recieving 2 clock
692pulses from the programmable timer (the shift frequency will be half that of
693the frequency from the programmable timer (one octave lower)).
694
695On system reset, this shift register is loaded with a value of 1.
696
697