71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Yamaha YM2151
 | |
| 
 | |
| the sound chip powering several arcade boards, the Sharp X1/X68000 and the Commander X16. Eight 4-op FM channels, with overpowered LFO and almost unused noise generator.
 | |
| 
 | |
| it also was present on several pinball machines and synthesizers of the era, and later surpassed by the YM2414 (OPZ) present in the world-famous TX81Z.
 | |
| 
 | |
| in most arcade boards the chip was used in combination with a PCM chip, like [SegaPCM](segapcm.md) or [OKI's line of ADPCM chips](oki.md).
 | |
| 
 | |
| # effects
 | |
| 
 | |
| - **`10xx`**: set noise frequency of channel 8 operator 4. 00 disables noise while 01 to 20 enables it.
 | |
| - **`11xx`**: set feedback of channel.
 | |
| - **`12xx`**: set operator 1 level.
 | |
| - **`13xx`**: set operator 2 level.
 | |
| - **`14xx`**: set operator 3 level.
 | |
| - **`15xx`**: set operator 4 level.
 | |
| - **`16xy`**: set multiplier of operator.
 | |
|   - `x` is the operator (1-4).
 | |
|   - `y` is the multiplier.
 | |
| - **`17xx`**: set LFO speed.
 | |
| - **`18xx`**: set LFO waveform. `xx` may be one of the following:
 | |
|   - `00`: saw
 | |
|   - `01`: square
 | |
|   - `02`: triangle
 | |
|   - `03`: noise
 | |
| - **`19xx`**: set attack of all operators.
 | |
| - **`1Axx`**: set attack of operator 1.
 | |
| - **`1Bxx`**: set attack of operator 2.
 | |
| - **`1Cxx`**: set attack of operator 3.
 | |
| - **`1Dxx`**: set attack of operator 4.
 | |
| - **`1Exx`**: set LFO AM depth.
 | |
| - **`1Fxx`**: set LFO PM depth.
 | |
| - **`30xx`**: enable envelope hard reset.
 | |
|   - this works by inserting a quick release and tiny delay before a new note.
 | |
| - **`50xy`**: set AM of operator.
 | |
|   - `x` is the operator (1-4). a value of 0 means "all operators".
 | |
|   - `y` determines whether AM is on.
 | |
| - **`51xy`**: set SL of operator.
 | |
|   - `x` is the operator (1-4). a value of 0 means "all operators".
 | |
|   - `y` is the value.
 | |
| - **`52xy`**: set RR of operator.
 | |
|   - `x` is the operator (1-4). a value of 0 means "all operators".
 | |
|   - `y` is the value.
 | |
| - **`53xy`**: set DT of operator.
 | |
|   - `x` is the operator (1-4). a value of 0 means "all operators".
 | |
|   - `y` is the value:
 | |
|     - 0: +0
 | |
|     - 1: +1
 | |
|     - 2: +2
 | |
|     - 3: +3
 | |
|     - 4: -0
 | |
|     - 5: -3
 | |
|     - 6: -2
 | |
|     - 7: -1
 | |
| - **`54xy`**: set RS of operator.
 | |
|   - `x` is the operator (1-4). a value of 0 means "all operators".
 | |
|   - `y` is the value.
 | |
| - **`55xy`**: set DT2 of operator.
 | |
|   - `x` is the operator (1-4). a value of 0 means "all operators".
 | |
|   - `y` is the value.
 | |
| - **`56xx`**: set DR of all operators.
 | |
| - **`57xx`**: set DR of operator 1.
 | |
| - **`58xx`**: set DR of operator 2.
 | |
| - **`59xx`**: set DR of operator 3.
 | |
| - **`5Axx`**: set DR of operator 4.
 | |
| - **`5Bxx`**: set D2R/SR of all operators.
 | |
| - **`5Cxx`**: set D2R/SR of operator 1.
 | |
| - **`5Dxx`**: set D2R/SR of operator 2.
 | |
| - **`5Exx`**: set D2R/SR of operator 3.
 | |
| - **`5Fxx`**: set D2R/SR of operator 4.
 | 
