Yamaha FM-Sound Synthesizer Unit documentation Ver:1.0 Made By: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
General | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This document contains short description about programming FM sound Synthesizer (YM2151) of the FM sound synthesizer unit(II), that was made by Yamaha for CX5M MSX computer, but that was also available for other MSX computers trough Yamaha Unit Connector UCN-01. This unit includes also D/A converter (YM3012), so 8 audio tone signals can be obtained at the R and L channels. The YM2151 has 8-note capability and it is also equipped with a noise generator, vibrato oscillator, amplitude modulation circuit, tonal effect generator and timer circuitry. 2 sets of timers are used and when a timer overflows an interrupt request takes place. This unit has also YM2148 chip, that has a MIDI function, keyboard scan function and it supports MODE 2 IRQ for CPU, but this document does not tell, how to use these features. Addresses, that are needed for accessing this chip can be anyway founded from address table. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
How to find the FM-Sound Synthesizer Unit | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Because Yamaha made a Unit Connector, that can be inserted to any expansion slot, it is not sure, that this Unit is always connected to slot #3. That means, that you have to find this with your own routine. The standard way to do that is to search text "MCHFM0" from address #80 in every slot. Here is a simple routine to do that, activate this slot, run your FM-program part and exit to previous routine.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Address Table | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Using the FM-Chip (Ready for write, timer overflows) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Status register
Writeable registers Register #00 (Not used) Register #01 (Test & LFO reset)
Register #02 - #07 (Not used) Register #08 (Key on)
Register #09 - #0E (Not used) REGISTER : #0F (NOISE ENABLE, NOISE FREQUENCY)
Register #10 (Not used) Register #11 (Clock A1)
Register #12 (Clock A2)
Register #13 (Clock B)
Register #14 (Clock Functions)
Register #15 - #17 (Not used) Register #18 (Low Frequency)
Register #19 (Phase and Amplitude modulation)
Register #1A (Not used) Register #1B (Control output & wave form select)
Register #1C-1F (Not used) Register #20 (Channel control)
Register #28-2F (Key code)
Register #30-37 (Key Fraction)
Register #38-3F (Phase & amplitude modulation sensitivity)
Register #40-5F (Detune & phase multiply)
Register #60-7F (Total level)
Register #80-9F (EG Attack)
Register #A0-BF (EG Decay 1)
ASE = Amplitude modulation Sensitivity Enable (1=enable) Register #C0-DF (EG Decay 2)
Register #E0-FF (EG Decay level, Release rate)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
How to handle external Yamaha keyboard | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Yamaha keyboards are easy to use. They have been divided to 8 separate rows, that each have 6 keys. When you want to read some key, you first have to select a row to read. This is done by sending this row number to #3FF2 in format:
This means, that you can calculate current row by using formula: [to #3FF2] = 2 ^ [ROW NUMBER 0-7] After this you need to wait a little while. Unfortunately I don't know how little, but something like one microsecond. Then you can read this address, and you will get a value in following format:
0=Pressed Current key number from bottom to up can be calculated by using formula: KEYNUMBER + ROW * 6 Please note, that YK-01 does not have few bottom keys at all. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Rest that I want to say | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
I want to thank "Greg_" about helping me to collect this information, I mean, that this information is not a offical documentation, but I have just collected it from different sources and rest is just generated by testing. Here are the Yamaha part-numbers for the most important chips, that are in FM-Sound Synthesizer Unit:
Greetings: |