<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.mamedev.org/index.php?action=history&amp;feed=atom&amp;title=Yamaha_Rompler_RE</id>
	<title>Yamaha Rompler RE - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mamedev.org/index.php?action=history&amp;feed=atom&amp;title=Yamaha_Rompler_RE"/>
	<link rel="alternate" type="text/html" href="https://wiki.mamedev.org/index.php?title=Yamaha_Rompler_RE&amp;action=history"/>
	<updated>2026-05-09T12:46:48Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.mamedev.org/index.php?title=Yamaha_Rompler_RE&amp;diff=6481&amp;oldid=prev</id>
		<title>Galibert: /* General presentation */</title>
		<link rel="alternate" type="text/html" href="https://wiki.mamedev.org/index.php?title=Yamaha_Rompler_RE&amp;diff=6481&amp;oldid=prev"/>
		<updated>2019-03-20T12:56:16Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;General presentation&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:56, 20 March 2019&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==AWM2==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==AWM2==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===General presentation===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===General presentation===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The AWM2 is &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;in &lt;/del&gt;charge of handling the individual channels&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. &lt;/del&gt; &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;It&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The AWM2 is &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;a rompler, e.g. it plays the raw samples.  In &lt;/ins&gt;charge of handling the individual channels&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/ins&gt; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;it&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;manages reading the rom, decoding the samples, applying volume and&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;manages reading the rom, decoding the samples, applying volume and&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;pitch envelopes and lfos and filtering the result.  Each channel is&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;pitch envelopes and lfos and filtering the result.  Each channel is&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Galibert</name></author>
	</entry>
	<entry>
		<id>https://wiki.mamedev.org/index.php?title=Yamaha_Rompler_RE&amp;diff=6470&amp;oldid=prev</id>
		<title>Galibert: Created page with &quot;==AWM2== ===General presentation=== The AWM2 is in charge of handling the individual channels.  It manages reading the rom, decoding the samples, applying volume and pitch env...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.mamedev.org/index.php?title=Yamaha_Rompler_RE&amp;diff=6470&amp;oldid=prev"/>
		<updated>2019-03-16T18:07:59Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==AWM2== ===General presentation=== The AWM2 is in charge of handling the individual channels.  It manages reading the rom, decoding the samples, applying volume and pitch env...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==AWM2==&lt;br /&gt;
===General presentation===&lt;br /&gt;
The AWM2 is in charge of handling the individual channels.  It&lt;br /&gt;
manages reading the rom, decoding the samples, applying volume and&lt;br /&gt;
pitch envelopes and lfos and filtering the result.  Each channel is&lt;br /&gt;
then sent to the mixer for further processing.&lt;br /&gt;
&lt;br /&gt;
The sound data can be four formats (8 bits, 12 bits, 16 bits, and a&lt;br /&gt;
8-bits log format with roughly 10 bits of dynamic).  The rom bus is&lt;br /&gt;
25 bits address and 32 bits data wide.  It applies four filters to&lt;br /&gt;
the sample data, two of fixed type (low pass then highpass) and two&lt;br /&gt;
free 3-point FIR filters (used for yet another lowpass and&lt;br /&gt;
highpass).  Envelopes are handled automatically, and the final&lt;br /&gt;
panned result is sent to the mixer.&lt;br /&gt;
&lt;br /&gt;
===Sample addressing===&lt;br /&gt;
For each channel, four registers directly control the sample addressing:&lt;br /&gt;
* (32b) rom information&lt;br /&gt;
** bits 31-30: sample type&lt;br /&gt;
** bits 29-25: loop sample count, decimal part&lt;br /&gt;
** bits 24-0: loop start or end of sample address&lt;br /&gt;
* (32b) pre-loop sample count&lt;br /&gt;
* (32b) loop sample count&lt;br /&gt;
* (16b) replay frequency&lt;br /&gt;
&lt;br /&gt;
Sample format &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==MEG==&lt;br /&gt;
&lt;br /&gt;
The MEG is a DSP with 384 program steps connected to a 0x40000&lt;br /&gt;
samples ram.  Instructions are 64 bits wide, and to each instruction&lt;br /&gt;
is associated a 2.14 fixed point value, Every third instruction (pc&lt;br /&gt;
multiple of 3) can initiate a memory access to the reverb buffer&lt;br /&gt;
which will be completed two instructions later.  Each of those&lt;br /&gt;
instructions is associated to a 16-bits address offset value.&lt;br /&gt;
&lt;br /&gt;
The DSP also sports 256 rotating registers (e.g. register 1 at run&lt;br /&gt;
&amp;lt;n&amp;gt; becomes register 0 at run &amp;lt;n+1&amp;gt;) and 64 fixed registers.  The&lt;br /&gt;
fixed registers are used to store the results of reading the samples&lt;br /&gt;
ram and also communicate with the mixer.&lt;br /&gt;
&lt;br /&gt;
Every 44100th of a second the 384 program steps are run once in&lt;br /&gt;
order (no branches) to compute everything.&lt;br /&gt;
&lt;br /&gt;
24 LFO registers are available (possibly more).  The LFO registers&lt;br /&gt;
internal counters are 22 bits wide.  The LSB of the register gives&lt;br /&gt;
the increment per sample, encoded in a special 3.5 format.&lt;br /&gt;
With scale = 3bits and v = 5bits,&lt;br /&gt;
    step  = base[scale] + (v &amp;lt;&amp;lt; shift[scale])&lt;br /&gt;
    base  = { 0, 32, 64, 128, 256, 512,  1024, 2048 }&lt;br /&gt;
    shift = { 0,  0,  1,   2,   3,   4,     5,    6 }&lt;br /&gt;
&lt;br /&gt;
The 21th bit of the counter inverts bits 20-0 on read, those are&lt;br /&gt;
interpreted as a 0-1 value, giving a sawtooth wave.&lt;br /&gt;
&lt;br /&gt;
8 mappings can be setup, which allow to manage rotating buffers in&lt;br /&gt;
the samples ram easily by automating masking and offset adding.  The&lt;br /&gt;
register format is: tttttsss oooooooo.  &amp;#039;t&amp;#039; is not understood&lt;br /&gt;
yet. &amp;#039;s&amp;#039; is the sub-buffer size, defined as 1 &amp;lt;&amp;lt; (10+s).  The base&lt;br /&gt;
offset is o &amp;lt;&amp;lt; 10.  There are no alignment issues, e.g. you can have&lt;br /&gt;
a buffer at 0x28000 which is 0x10000 samples long.&lt;br /&gt;
&lt;br /&gt;
==SWP30==&lt;br /&gt;
The SWP30 is the combination of a rompler called AWM2 (Advanced Wave&lt;br /&gt;
Memory 2) and an effects DSP called MEG (Multiple Effects&lt;br /&gt;
Generator).  It also includes some routing/mixing capabilities,&lt;br /&gt;
moving data between AWM2, MEG and serial inputs and outputs with&lt;br /&gt;
volume management capabilities everywhere.  Its clock is 33.9MHz and&lt;br /&gt;
the output is at 44100Hz stereo (768 cycles per sample pair) per dac&lt;br /&gt;
output.&lt;br /&gt;
&lt;br /&gt;
I/O wise, the chip has 8 generic audio serial inputs and 8 outputs&lt;br /&gt;
for external plugins, and two dac outputs.  The DAC outputs are&lt;br /&gt;
stereo, and so is the first generic input.  It&amp;#039;s unclear whether the&lt;br /&gt;
outputs and the other inputs are stereo.  The MU100 connects a&lt;br /&gt;
stereo ADC to the first input, and routes the third input and output&lt;br /&gt;
to the plugin boards, but not the left/right input clock, arguing&lt;br /&gt;
for mono.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Registers===&lt;br /&gt;
The chip interface presents 4096 16-bits registers in a 64x64 grid.&lt;br /&gt;
They all seem to be read/write.  Some of this grid is for&lt;br /&gt;
per-channel values for AWM2, but parts are isolated and renumbered&lt;br /&gt;
for MEG regisrers or for general control functions.&lt;br /&gt;
&lt;br /&gt;
Names we&amp;#039;ll use in the rest of the text:&lt;br /&gt;
* reg(y, x) is the register at address 2*(y*0x40 + x)&lt;br /&gt;
* ch&amp;lt;nn&amp;gt;  is reg(channel, xx) for a given AWG2 channel&lt;br /&gt;
* sy&amp;lt;nn&amp;gt;  is reg(nn/2, 0xe + (nn % 2))&lt;br /&gt;
* fp&amp;lt;nnn&amp;gt; is reg(nn/6, 0x21 + 2*(nn % 6))&lt;br /&gt;
* of&amp;lt;nn&amp;gt;  is reg(nn/2, 0x30 + (nn % 2))&lt;br /&gt;
* lfo&amp;lt;nn&amp;gt; is reg(nn/2, 0x3e + (nn % 2)) for nn = 0..17&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   Mixer:&lt;br /&gt;
&lt;br /&gt;
  The mixer gets the outputs of the AWM2, the MEG (for the previous&lt;br /&gt;
  sample) and the external inputs, attenuates and sums them according&lt;br /&gt;
  to its mapping instructions, and pushes the results to the MEG, the&lt;br /&gt;
  DACs and the external outputs.  The attenuations are 8-bits values&lt;br /&gt;
  is 4.4 floating point format (multiplies by (1-mant/2)*2**(-exp)).&lt;br /&gt;
  The routing is indicated through triplets of 16-bits values.&lt;br /&gt;
&lt;br /&gt;
  ch33       dry (msb) and reverb (lsb) attenuation for an AWM2 channel&lt;br /&gt;
  ch34       chorus (msb) and variation (lsb) atternuation&lt;br /&gt;
  ch35-37    routing for an AWM2 channel&lt;/div&gt;</summary>
		<author><name>Galibert</name></author>
	</entry>
</feed>