FM: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(Fixed FM channels numbers) |
||
Line 27: | Line 27: | ||
*7 – 72.2Hz | *7 – 72.2Hz | ||
Channel numbering: | |||
Channel numbering: | |||
{|class="wikitable" | |||
!FM Channel | |||
!Binary Code | |||
|- | |||
| CH1 | |||
| 001 | |||
|- | |||
| CH2 | |||
| 010 | |||
|- | |||
| CH3 | |||
| 101 | |||
|- | |||
| CH4 | |||
| 110 | |||
|} | |||
This strange numbering seems to be due to the fact YM2610 is a YM2610B with 2 removed FM channels. | |||
=Channel registers= | =Channel registers= |
Revision as of 02:35, 19 June 2017
The FM (Frequency Modulation) is part of the YM2610 sound chip. It provides 4 channels, each having their own set of 4 operators, panning and amplitude values. It's the most used way of producing music in games.
Common registers
Address (Z80 port 4) | Data (Z80 port 5) | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
$22 |
|
LFO control and frequency (see below). | ||||||||||||||||||
$28 |
|
Key On/Off for each channel. |
LFO frequency values are as follows:
- 0 – 3.98Hz
- 1 – 5.56Hz
- 2 – 6.02Hz
- 3 – 6.37Hz
- 4 – 6.88Hz
- 5 – 9.63Hz
- 6 – 48.1Hz
- 7 – 72.2Hz
Channel numbering:
FM Channel | Binary Code |
---|---|
CH1 | 001 |
CH2 | 010 |
CH3 | 101 |
CH4 | 110 |
This strange numbering seems to be due to the fact YM2610 is a YM2610B with 2 removed FM channels.
Channel registers
Depending on which channel you want to write to, the Z80 ports used are different:
- Channels 1 & 2: Ports 4/5
- Channels 3 & 4: Ports 6/7
Address | Data | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CH1 | CH2 | CH3 | CH4 | CH1 | CH2 | CH3 | CH4 | |||||||||||||||||||
Port 4 | Port 6 | Port 5 | Port 7 | |||||||||||||||||||||||
$A1 | $A2 | $A1 | $A2 |
|
F-Numbers and Block (1/2) | |||||||||||||||||||||
$A5 | $A6 | $A5 | $A6 |
|
F-Numbers and Block (2/2) (must set this first) | |||||||||||||||||||||
$A9 | $AA | $A9 | $AA |
|
2CH - 2 Slot F-Numbers/Block (1/2) | |||||||||||||||||||||
$AD | $AE | $AD | $AE |
|
2CH - 2 Slot F-Numbers/Block (1/2) (must set this first) | |||||||||||||||||||||
$B1 | $B2 | $B1 | $B2 |
|
Feedback (FB) and Algorithm (ALGO) | |||||||||||||||||||||
$B5 | $B6 | $B5 | $B6 |
|
Left (L)/Right (R) output, AM Sense (AMS), and PM Sense (PMS) |
Operator registers
The ranges given for the address represent all of the parameter values. Each channel's operators are laid out as follows:
Operator | 1 | 2 | 3 | 4 |
---|---|---|---|---|
Channels 1, 3 | $x1 | $x5 | $x9 | $xD |
Channels 2, 4 | $x2 | $x6 | $xA | $xE |
Address | Data | |||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CH1 | CH2 | CH3 | CH4 | CH1 | CH2 | CH3 | CH4 | |||||||||||||||||||
Port 4 | Port 6 | Port 5 | Port 7 | |||||||||||||||||||||||
$31-$3E |
|
Detune (DT) and Multiple (MUL) | ||||||||||||||||||||||||
$41-$4E |
|
Total Level (Volume) | ||||||||||||||||||||||||
$51-$5E |
|
Key Scale (KS) and Attack Rate (AR) | ||||||||||||||||||||||||
$61-$6E |
|
AM On (AM) and Decay Rate (DR) | ||||||||||||||||||||||||
$71-$7E |
|
Sustain Rate (SR) | ||||||||||||||||||||||||
$81-$8E |
|
Sustain Level (SL) and Release Rate (RR) | ||||||||||||||||||||||||
$91-$9E |
|
Envelope generator (not to be confused with the SSG one) |