2022-01-16 06:10:43 +00:00
# NES
the console from Nintendo that plays Super Mario Bros. and helped revive the agonizing video game market in the US during mid-80s.
2022-10-16 05:53:05 +00:00
also known as Famicom. it is a five-channel sound generator: first two channels play pulse wave with three different duty cycles, third is a fixed-volume triangle channel, fourth is a noise channel (can work in both pseudo-random and periodic modes) and fifth is a (D)PCM sample channel.
2022-01-16 06:10:43 +00:00
# effects
2022-04-29 05:18:51 +00:00
- `11xx` : write to delta modulation counter.
- this may be used to attenuate the triangle and noise channels.
- will not work if a sample is playing.
2022-01-16 06:10:43 +00:00
- `12xx` : set duty cycle or noise mode of channel.
- may be 0-3 for the pulse channels and 0-1 for the noise channel.
2022-02-01 23:28:48 +00:00
- `13xy` : setup sweep up.
- `x` is the time.
- `y` is the shift.
- set to 0 to disable it.
- `14xy` : setup sweep down.
- `x` is the time.
- `y` is the shift.
2022-05-02 08:42:40 +00:00
- set to 0 to disable it.
2022-10-25 05:43:03 +00:00
- `15xx` : set envelope mode.
- `0` : envelope + length counter (volume represents envelope duration).
- `1` : length counter (volume represents output volume).
- `2` : looping envelope (volume represents envelope duration).
- `3` : constant volume (default; volume represents output volume).
- pulse and noise channels only.
- you may need to apply a phase reset (using the macro) to make the envelope effective.
- `16xx` : set length counter.
- see table below for possible values.
- this will trigger phase reset.
- `17xx` : set frame counter mode.
- `0` : 4-step.
- NTSC: 120Hz sweeps and lengths; 240Hz envelope.
- PAL: 100Hz sweeps and lengths; 200Hz envelope.
- Dendy: 118.9Hz sweeps and lengths; 237.8Hz envelope.
- `1` : 5-step.
- NTSC: 96Hz sweeps and lengths; 192Hz envelope.
- PAL: 80Hz sweeps and lengths; 160Hz envelope.
- Dendy: 95.1Hz sweeps and lengths; 190.2Hz envelope.
2022-05-02 08:42:40 +00:00
- `18xx` : set PCM channel mode.
- `00` : PCM (software).
- `01` : DPCM (hardware).
2022-10-16 05:53:05 +00:00
- when in DPCM mode, samples will sound muffled (due to its nature), availables pitches are limited and loop point is ignored.
2023-05-05 06:29:54 +00:00
- `19xx` : set triangle linear counter.
- `00` to `7F` set the counter.
- `80` and higher halt it.
2023-05-05 05:59:55 +00:00
- `20xx` : set DPCM frequency.
- only works in DPCM mode.
- see table below for possible values.
# DPCM frequency table
val | NTSC | PAL
----|-----------|-----------
00 | 4181.7Hz | 4177.4Hz
01 | 4709.9Hz | 4696.6Hz
02 | 5264.0Hz | 5261.4Hz
03 | 5593.0Hz | 5579.2Hz
04 | 6257.9Hz | 6023.9Hz
05 | 7046.3Hz | 7044.9Hz
06 | 7919.3Hz | 7917.2Hz
07 | 8363.4Hz | 8397.0Hz
08 | 9419.9Hz | 9446.6Hz
09 | 11186.1Hz | 11233.8Hz
0A | 12604.0Hz | 12595.5Hz
0B | 13982.6Hz | 14089.9Hz
0C | 16884.6Hz | 16965.4Hz
0D | 21306.8Hz | 21315.5Hz
0E | 24858.0Hz | 25191.0Hz
0F | 33143.9Hz | 33252.1Hz
2022-10-25 05:43:03 +00:00
# length counter table
val | raw | NTSC | PAL | Dendy | NTSC 5-step | PAL 5-step | Dendy 5-step
----|-----|-------|-------|-------|-------------|------------|--------------
00 | 10 | 83ms | 100ms | 84ms | 104ms | 125ms | 105ms
01 | 254 | 2.1s | 2.5s | 2.1s | 2.6s | 3.2s | 2.7s
02 | 20 | 166ms | 200ms | 168ms | 208ms | 250ms | 210ms
03 | 2 | 17ms | 20ms | 17ms | 21ms | 25ms | 21ms
04 | 40 | 333ms | 400ms | 336ms | 417ms | 500ms | 421ms
05 | 4 | 33ms | 40ms | 34ms | 42ms | 50ms | 42ms
06 | 80 | 667ms | 800ms | 673ms | 833ms | 1.0s | 841ms
07 | 6 | 50ms | 60ms | 50ms | 63ms | 75ms | 63ms
08 | 160 | 1.3s | 1.6s | 1.3s | 1.7s | 2.0s | 1.7s
09 | 8 | 67ms | 80ms | 67ms | 83ms | 100ms | 84ms
0A | 60 | 500ms | 600ms | 505ms | 625ms | 750ms | 631ms
0B | 10 | 83ms | 100ms | 84ms | 104ms | 125ms | 105ms
0C | 14 | 117ms | 140ms | 118ms | 146ms | 175ms | 147ms
0D | 12 | 100ms | 120ms | 101ms | 125ms | 150ms | 126ms
0E | 26 | 217ms | 260ms | 219ms | 271ms | 325ms | 273ms
0F | 14 | 117ms | 140ms | 118ms | 145ms | 175ms | 147ms
10 | 12 | 100ms | 120ms | 101ms | 125ms | 150ms | 126ms
11 | 16 | 133ms | 160ms | 135ms | 167ms | 200ms | 168ms
12 | 24 | 200ms | 240ms | 202ms | 250ms | 300ms | 252ms
13 | 18 | 150ms | 180ms | 151ms | 188ms | 225ms | 189ms
14 | 48 | 400ms | 480ms | 404ms | 500ms | 600ms | 505ms
15 | 20 | 167ms | 200ms | 168ms | 208ms | 250ms | 210ms
16 | 96 | 800ms | 960ms | 807ms | 1.0s | 1.2s | 1.0s
17 | 22 | 183ms | 220ms | 185ms | 229ms | 275ms | 231ms
18 | 192 | 1.6s | 1.9s | 1.6s | 2.0s | 2.4s | 2.0s
19 | 24 | 200ms | 240ms | 202ms | 250ms | 300ms | 252ms
1A | 72 | 600ms | 720ms | 606ms | 750ms | 900ms | 757ms
1B | 26 | 217ms | 260ms | 219ms | 271ms | 325ms | 273ms
1C | 16 | 133ms | 160ms | 135ms | 167ms | 200ms | 168ms
1D | 28 | 233ms | 280ms | 235ms | 292ms | 350ms | 294ms
1E | 32 | 267ms | 320ms | 269ms | 333ms | 400ms | 336ms
1F | 30 | 250ms | 300ms | 252ms | 313ms | 375ms | 315ms
reference: [NESdev ](https://www.nesdev.org/wiki/APU_Length_Counter )