FM

From NeoGeo Development Wiki
Revision as of 23:19, 22 May 2018 by Hpman (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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)
$21
Bit 7 6 5 4 3 2 1 0
Def ?
Test register. Ignore or set to $00 for normal operation.
$22
Bit 7 6 5 4 3 2 1 0
Def - OnControl
LFO control and frequency (see below).
$28
Bit 7 6 5 4 3 2 1 0
Def Slot (OP4/OP3/OP2/OP1) -Channel
Key On/Off for each channel, with operators control.

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 (000 and 100).


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
Bit 7 6 5 4 3 2 1 0
Def F-Num 1
F-Numbers and Block (1/2)
$A5 $A6 $A5 $A6
Bit 7 6 5 4 3 2 1 0
Def - BlockF-Num 2
F-Numbers and Block (2/2)
(must set this first)
$B1 $B2 $B1 $B2
Bit 7 6 5 4 3 2 1 0
Def - FBALGO
Feedback (FB) and Algorithm (ALGO)
$B5 $B6 $B5 $B6
Bit 7 6 5 4 3 2 1 0
Def L RAMS-PMS
Left (L)/Right (R) output, AM Sense (AMS), and PM Sense (PMS)

2CH mode additional operator frequencies:

  • OP1 frequency is stored in the usual CH2 frequency registers ($A2/$A6)
  • write to Z80 ports 4/5
Address Data
OP2 OP3 OP4
$A8 $A9 $AA
Bit 7 6 5 4 3 2 1 0
Def 2CH * F-Num 1
2CH mode F-Num LSB
$AC $AD $AE
Bit 7 6 5 4 3 2 1 0
Def - 2CH * Block2CH * F-Num 2
2CH mode F-Num MSB & Block
(must set this first)

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
Bit 7 6 5 4 3 2 1 0
Def - DTMUL
Detune (DT) and Multiple (MUL)
$41-$4E
Bit 7 6 5 4 3 2 1 0
Def - Total Level
Total Level (Volume)
$51-$5E
Bit 7 6 5 4 3 2 1 0
Def KS -AR
Key Scale (KS) and Attack Rate (AR)
$61-$6E
Bit 7 6 5 4 3 2 1 0
Def AM -DR
AM On (AM) and Decay Rate (DR)
$71-$7E
Bit 7 6 5 4 3 2 1 0
Def - SR
Sustain Rate (SR)
$81-$8E
Bit 7 6 5 4 3 2 1 0
Def SL RR
Sustain Level (SL) and Release Rate (RR)
$91-$9E
Bit 7 6 5 4 3 2 1 0
Def - SSG-EG
Envelope generator (not to be confused with the SSG one)