furnace/papers/doc/7-systems/x1_010.md
2022-03-09 01:17:16 +09:00

47 lines
2.8 KiB
Markdown

# Seta/Allumer X1-010
One of sound chip originally designed by Seta, mainly used at their arcade hardwares at late-80s to early-2000s.
It has 2 output channels, but no known hardware using this feature for stereo sound.
Later hardware paired this with external bankswitching logic, but its logic is not emulated now in current furnace revision.
Allumer one is just rebadged Seta's thing for use in their arcade hardwares.
It has 16 channels, and all channels can be switchable to PCM sample or wavetable playback mode.
Wavetable needs to paired with envelope, this feature is similar as AY PSG, but its shape are stored at RAM: it means it is user-definable.
In furnace, this chip is can be configurable for original arcade mono output or stereo output - it simulates early 'incorrect' emulation on some mono hardware, but it is also based on the assumption that each channel is connected to each output.
# waveform type
This chip supports 2 type waveforms, needs to paired external 8 KB RAM for use these features:
One is signed 8 bit mono waveform, it's operated like other wavetable based sound systems.
These are stored at the bottom half of RAM at common case.
Another one ("Envelope") is 4 bit stereo waveform, it's multiplied with above and calculates final output, Each nibble is used for each output channels.
These are stored at the upper half of RAM at common case.
Both waveforms are 128 byte fixed size, it's freely allocated at each half of RAM except channel register area: each half can be stored total 32/31 waveforms at once.
In furnace, You can set envelope shape split mode. When it sets, its waveform will be split to left half and right half for each outputs. each max size are 128 bytes, total 256 bytes.
# effects
- `10xx`: change wave.
- `11xx`: change envelope shape. (also wavetable)
- `17xx`: toggle PCM mode.
- `20xx`: set PCM frequency. (1 to FF)*
- `22xx`: set envelope mode.
- bit 0 sets whether envelope will affect this channel.
- bit 1 sets whether envelope one-shot mode. when it sets, channel is halted after envelope cycle is ended.
- bit 2 sets whether envelope shape split mode. when it sets, envelope shape will splitted to left half and right half.
- bit 3/5 sets whether the right/left shape will mirror the original one.
- bit 4/6 sets whether the right/left output will mirror the original one.
- `23xx`: set envelope period.
- `25xx`: slide envelope period up.
- `26xx`: slide envelope period down.
- `29xy`: enable auto-envelope mode.
- in this mode the envelope period is set to the channel's notes, multiplied by a fraction.
- `x` is the numerator.
- `y` is the denominator.
- if `x` or `y` are 0 this will disable auto-envelope mode.
* PCM frequency: 255 step, fomula: `step * (Chip clock / 8192)`; 1.95KHz to 498KHz if Chip clock is 16MHz.