<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Community: Message List - Pitch detection/octave effect</title>
    <link>http://line6.com/support/community/support/effects/tonecore_development_kit?view=discussions</link>
    <description>Most recent forum messages</description>
    <language>en</language>
    <pubDate>Wed, 04 May 2011 04:43:28 GMT</pubDate>
    <generator>Jive SBS 4.5.7.0 (http://jivesoftware.com/products/clearspace/)</generator>
    <dc:date>2011-05-04T04:43:28Z</dc:date>
    <dc:language>en</dc:language>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/273483?tstart=0#273483</link>
      <description>&lt;!-- [DocumentBodyStart:0495d5d5-ab25-4b79-b5ad-01545a710c58] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;MC, yes, I was being bitten by the fixed point register behavior.&amp;#160; And I even put an entry about that in the FAQ I wrote way back when!&amp;#160; I'm not sure exactly how it's working at all, but I'm sure once I change it to use a general purpose register it will work perfect.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Panda, glad to see you chiming in after so long.&amp;#160; That's a good way to handle loading.&amp;#160; Probably better than what I'm doing - looking into P memory every time I do a lookup.&amp;#160; Though if you do this you blow both your P memory and X/Y memory.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Aight... hopefully next time I post I'll have a working sine wave and it will sound bitchin' &lt;img height="16px" src="http://l6c.scdn.line6.net/support/4.5.7/images/emoticons/happy.gif" width="16px"/&gt;.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:0495d5d5-ab25-4b79-b5ad-01545a710c58] --&gt;</description>
      <pubDate>Wed, 04 May 2011 04:43:27 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/273483?tstart=0#273483</guid>
      <dc:date>2011-05-04T04:43:27Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/273415?tstart=0#273415</link>
      <description>&lt;!-- [DocumentBodyStart:088ea585-b9e4-4bcb-b397-5ae8a4c8fd1f] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;For initializing tables in X or Y memory from program memory, you can define a global data section after the rest of your code:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span&gt; &lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;section P_DATA_MEMORY global&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;org&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;p: &lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;; Table values &lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;CONST_FOO_0&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;dc&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;$000000&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span style="font-family: 'courier new', courier;"&gt;CONST_FOO_1&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;dc&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;$000001&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;.....&lt;/p&gt;&lt;div style="padding-left: 30px;"&gt; &lt;/div&gt;&lt;div&gt;The in your initialization code, copy it to an address in X memory:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span&gt; &lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;; initialize table&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;move&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;#CONST_FOO_0,r0&amp;#160;&amp;#160;&amp;#160; ; address in program memory&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;move&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;#foo_table,r3&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ; address in X memory&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;do&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;#100,init_table_done ; repeat for number of entries&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;move&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;p:(r0)+,x1&lt;/span&gt;&lt;/p&gt;&lt;p style="padding-left: 30px;"&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;move&lt;/span&gt;&lt;span&gt;&lt;span style="font-family: 'courier new', courier;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 'courier new', courier;"&gt;x1,x:(r3)+&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 'courier new', courier;"&gt;init_table_done:&lt;/span&gt;&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Hope that helps.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:088ea585-b9e4-4bcb-b397-5ae8a4c8fd1f] --&gt;</description>
      <pubDate>Tue, 03 May 2011 23:45:05 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/273415?tstart=0#273415</guid>
      <dc:date>2011-05-03T23:45:05Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>1</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/273049?tstart=0#273049</link>
      <description>&lt;!-- [DocumentBodyStart:684acd68-dab9-463f-90ee-76225ca1dfd1] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;blockquote class="jive-quote"&gt;&lt;p&gt;audioartillery wrote:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;You're right, it's MOVEM not MOVEC.&amp;#160; I was confused. I'm honestly not very good at th 563xx assembly, I'm only really familiar with ARM processors.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I got it working but I'm a little confused.&amp;#160; Here is what I'm doing:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;blockquote class="jive-quote"&gt;&lt;p&gt;move #SINE_LOOKUP_001,x0 ; this is the 2nd index in my table&lt;/p&gt;&lt;p&gt;move x0,a&lt;/p&gt;&lt;p&gt;sub #$6,a ; &amp;lt;--------- account for address being off by 6&lt;/p&gt;&lt;p&gt;move a,r0&lt;/p&gt;&lt;p&gt;movem p:(r0),r1&lt;/p&gt;&lt;p&gt;move r1,x0&lt;/p&gt;&lt;p&gt;move x0,x:Debug_Read_from_DSP_3 ; &amp;lt;--------- I see the 2nd element in the table&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;As my comments indicate, my MOVEM instruction seems to be fetching from the address 6 words ahead of where I want it to.&amp;#160; Any idea what I'm doing wrong?&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;As far as the MCU initialization of X/Y mem, I think the simplest thing to do is to use the shared memory interface that is currently used to pass knob values and come up with some protocol that is used at boot time to transfer your gobs of data.&amp;#160; But with the linear interpolation I think my table will end up being quite small so this is a non-issue.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;It's hard to say for sure without seeing the rest of the code, but I doubt this is doing what you want:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;!--[CodeBlockStart:bfae13c6-d8ef-44d8-8787-4a8bf15a1e05]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;move #SINE_LOOKUP_001,x0
&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:bfae13c6-d8ef-44d8-8787-4a8bf15a1e05]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Since the destination is x0, the immediate data is treated as a signed fraction. What happens if you remove the offset by 6 logic, and force the immediate data to be interpreted as an unsigned integer like this?&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;!--[CodeBlockStart:0a06e73c-d127-4896-b6b3-ef0bf148f247]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;move #&amp;gt;SINE_LOOKUP_001,x0&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:0a06e73c-d127-4896-b6b3-ef0bf148f247]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Unless there's something else funky going on, I think you should be able to just do this:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;!--[CodeBlockStart:b0843f2a-2be1-4e15-8a6c-480b3371e1ba]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;move&amp;#160;&amp;#160;&amp;#160; #SINE_LOOKUP_001,r0
movem&amp;#160;&amp;#160; p:(r0),x0
move&amp;#160;&amp;#160;&amp;#160; x0,x:Debug_Read_from_DSP_3
&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:b0843f2a-2be1-4e15-8a6c-480b3371e1ba]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Note that you shouldn't need to force interpretation as an unsigned integer here since the destination is r0. Hopefully that helps a bit!&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Regarding the idea of initializing X or Y memory from the MCU, there isn't really a shared memory location as such. The MCU and DSP communicate via Serial Peripheral Interface (SPI), which is just a serial data bus. This is all managed with handshaking in a state machine. From the TCDDK Users Guide:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;!--[CodeBlockStart:9a910f41-0f0b-43a9-a1f4-90edcb5812d9]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;The Tx State consists of the following:
&amp;#160;&amp;#160;&amp;#160; 1. Send the Write command
&amp;#160;&amp;#160;&amp;#160; 2. Send the address of the DSP RAM location where data will be written
&amp;#160;&amp;#160;&amp;#160; 3. Send the data to write
&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:9a910f41-0f0b-43a9-a1f4-90edcb5812d9]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Inside the MCU code, there are a bunch of functions like this:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;!--[CodeBlockStart:aaa5e57e-dea7-4a41-b845-29f7cea65fee]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;static void vfnDSP_Knob1(void)
&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:aaa5e57e-dea7-4a41-b845-29f7cea65fee]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Having looked at this more, in retrospect it wouldn't be so horrible. You'd need to write a similar state function yourself, and add your function to the vfnDSP_CommunicationStateMachine array of function pointers. The vfnDSP_DebugVar4FromDSP() function resets the gu8DSP_CommunicationActualState variable, which simply loops over the array of function pointers. If you insert your function before vfnDSP_DebugVar4FromDSP() in the list, you could leave this alone, otherwise you'd have to adjust the looping logic. Inside of your state function, you'd send a single table entry for each call, incrementing the DSP address and pointer to your own data table. You would need to coordinate DSP memory locations with both sides, and if you choose to store your table in X memory, the work of storing that data DSP side is already taken care of for you in DoReadCommand() in the assembly template. Since this state machine is run every 1ms, you could initialize 1,000 entries in a second, which I think is more than fast enough that there's no need to worry about creating a separate program flow just for initialization.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I'm tempted to try this myself, but I'm running XP in a virtual image, which isn't happy making for flashing the MCU. I have access to physical Win7 machines, but the installer doesn't support Win7. I may have to give in and pick up a cheap netbook/notebook running XP for flashing the MCU.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:684acd68-dab9-463f-90ee-76225ca1dfd1] --&gt;</description>
      <pubDate>Tue, 03 May 2011 05:37:41 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/273049?tstart=0#273049</guid>
      <dc:date>2011-05-03T05:37:41Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/273040?tstart=0#273040</link>
      <description>&lt;!-- [DocumentBodyStart:cc4bd8be-0c77-4157-ab58-51312890f3ad] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;You're right, it's MOVEM not MOVEC.&amp;#160; I was confused. I'm honestly not very good at th 563xx assembly, I'm only really familiar with ARM processors.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I got it working but I'm a little confused.&amp;#160; Here is what I'm doing:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;blockquote class="jive-quote"&gt;&lt;p&gt;move #SINE_LOOKUP_001,x0 ; this is the 2nd index in my table&lt;/p&gt;&lt;p&gt;move x0,a&lt;/p&gt;&lt;p&gt;sub #$6,a ; &amp;lt;--------- account for address being off by 6&lt;/p&gt;&lt;p&gt;move a,r0&lt;/p&gt;&lt;p&gt;movem p:(r0),r1&lt;/p&gt;&lt;p&gt;move r1,x0&lt;/p&gt;&lt;p&gt;move x0,x:Debug_Read_from_DSP_3 ; &amp;lt;--------- I see the 2nd element in the table&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;As my comments indicate, my MOVEM instruction seems to be fetching from the address 6 words ahead of where I want it to.&amp;#160; Any idea what I'm doing wrong?&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;As far as the MCU initialization of X/Y mem, I think the simplest thing to do is to use the shared memory interface that is currently used to pass knob values and come up with some protocol that is used at boot time to transfer your gobs of data.&amp;#160; But with the linear interpolation I think my table will end up being quite small so this is a non-issue.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:cc4bd8be-0c77-4157-ab58-51312890f3ad] --&gt;</description>
      <pubDate>Tue, 03 May 2011 03:52:22 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/273040?tstart=0#273040</guid>
      <dc:date>2011-05-03T03:52:22Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>3</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/272712?tstart=0#272712</link>
      <description>&lt;!-- [DocumentBodyStart:55b7ba8e-2795-45d1-b3d2-58ce1cfb3284] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;blockquote class="jive-quote"&gt;&lt;p&gt;audioartillery wrote:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Wow, MC, that's a great analysis!&amp;#160; I will enable the interpolation once I have things working.&amp;#160; I finally was able to access the table the other night... movec was the magic instruction I was missing.&amp;#160; I'm still grabbing the wrong table entry but I'm sure I'll get the bugs out soon enough.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;You could have a lot more room for lookup tables if the MCU loaded X/Y memory from flash.&amp;#160; I think this is fundamentally possible but requires a change to the MCU code.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Glad you got that sorted out! After you brought up MOVEC, I figured I&amp;#160; should review the other MOVE types, and I can't help but think that&amp;#160; MOVEM seems more appropriate. In the family manual, the MOVEM&amp;#160; documentation lists "P:ea" and "P:aa" in the syntax section, but the&amp;#160; MOVEC documentation does not. That said, while the family manual is incredibly comprehensive, it's not always the easiest thing to figure out, so who knows.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I've been digging a lot into ways of loading the X and Y memory without initializing it from P memory, but it doesn't seem possible through normal means. The bootstrap ROM, which can't be changed by us, can start execution directly from PROM, or load the contents of an EPROM into PRAM then start execution, or can load data from Serial Host Interface (SHI) in one of 3 modes (slave SPI, slave I2C clock freeze enabled and slave I2C clock freeze disabled) into PRAM then start execution. None of these modes provide for initializing X or Y memory, and bootstrap mode is only triggered by a hard reset, so you couldn't for example hack around this by doing one bootstrap with PRAM code designed to initialize X and Y memory, then bootstrap again with PRAM code to do the DSP operations. There is a burn-in mode which tests X and Y memory, but this is a reserved mode and is only used for testing the chip.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Now, just because it's not possible through normal means doesn't mean it's not possible! The MCU is able to communicate with the DSP using the SPI protocol. You could flash the MCU with extra code containing lookup table values and other data you want stored in X and Y memory, then use the SPI to send that data to the DSP. The SPI is a synchronous, clocked protocol, so you'd have to coordinate all of that on both sides - the DSP would indicate it's ready for data, the MCU would send a chunk of data over the SPI, the DSP would read this data and store in X or Y memory as desired, the DSP would indicate it's ready for more data, etc. You'd be firmly out in no-man's land in terms of documentation and sample code, but it's theoretically possible. I'm not sure how far you could take this - the MCU has 16K of flash memory, which is more than enough to fill P, X and Y memory, but I'm not sure how much of that is already in use for other MCU tasks. You would also lose the convenience of loading your code through the TCDDK GUI while developing, since changes to data initialized for X and Y memory would require changes to the MCU code as well.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;It'd be interesting to see a working implementation of the above scheme, but I'd be inclined to push the initialization through P memory as far as possible before resorting to that! &lt;img height="16px" src="http://l6c.scdn.line6.net/support/4.5.7/images/emoticons/silly.gif" width="16px"/&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:55b7ba8e-2795-45d1-b3d2-58ce1cfb3284] --&gt;</description>
      <pubDate>Mon, 02 May 2011 06:56:20 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/272712?tstart=0#272712</guid>
      <dc:date>2011-05-02T06:56:20Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>4</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/272648?tstart=0#272648</link>
      <description>&lt;!-- [DocumentBodyStart:1baa1686-29fd-4ebc-92fa-3bd8d74c7856] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;I was feeling a bit curious about how good sine generation could be with a lookup table, so I did some experiments.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Here are the results with linear interpolation:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;table border="1" cellpadding="3" cellspacing="0" style="border: 1px solid rgb(0, 0, 0); width: 500px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);background-color: #6690bc;"&gt;&lt;span style="color: #ffffff;"&gt;&lt;strong&gt;Size&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;&lt;th align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);background-color: #6690bc;"&gt;&lt;span style="color: #ffffff;"&gt;&lt;strong&gt;SNR&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;&lt;th align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);background-color: #6690bc;"&gt;&lt;span style="color: #ffffff;"&gt;&lt;strong&gt;Noise&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;8&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;46.760919 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.4591494%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;16&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;59.993181 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;&lt;p&gt;0.1000785%&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;32&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;72.602406 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0234358%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;64&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;84.921192 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0056747%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;128&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;97.09963 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0013964%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;256&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;109.20907 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0003464%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;512&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;121.28429 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0000863%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;1024&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;133.34248 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0000215%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Here are the results without interpolation:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;table border="1" cellpadding="3" cellspacing="0" style="width: 500px; border: 1px solid rgb(0, 0, 0);"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);background-color: #6690bc;"&gt;&lt;span style="color: #ffffff;"&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;&lt;th align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);background-color: #6690bc;"&gt;&lt;span style="color: #ffffff;"&gt;&lt;strong&gt;SNR&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;&lt;th align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);background-color: #6690bc;"&gt;&lt;span style="color: #ffffff;"&gt;&lt;strong&gt;Noise&lt;/strong&gt;&lt;/span&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;8&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;23.755056 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;6.4900372%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;16&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;30.321217 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;3.0474681%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;32&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;36.622135 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;1.4753439%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;64&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;42.773921 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.7266143%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;128&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;48.860759 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.3605471%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;256&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;54.915114 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.1795743%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;512&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;60.952074 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0896182%&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;1024&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;66.981162 dB&lt;/td&gt;&lt;td align="center" style="border:1px solid black;border: 1px solid rgb(0, 0, 0);"&gt;0.0447653%&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I've attached the SciLab script I created to tinker with sine generation. Feel free to experiment with it yourself. The script is controlled by three parameters:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;!--[CodeBlockStart:843a0de8-4956-4e24-b7ad-5f5ec16298dd]--&gt;&lt;pre class="jive-pre"&gt;&lt;code class="jive-code"&gt;interpolate = %T; // controls whether interpolation is used
lookup_size = 128; // size of lookup table
lookup_mult = 10; // controls number of data points between lookup table values&lt;/code&gt;&lt;/pre&gt;&lt;!--[CodeBlockEnd:843a0de8-4956-4e24-b7ad-5f5ec16298dd]--&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Note that the lookup table only defines the first 1/4 of a sine period, and then symmetry is used for the rest of the period.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;It's interesting that you can get better results with a 32 value lookup table with interpolation than a 1024 value lookup table without interpolation. Since you can't really create a lookup table bigger than 1024 (if you plan on having any other code at any rate), this makes it pretty clear that interpolation will be critical for better results. Real world 24 bit systems give a dynamic range of 120 dB, so with a 512 value lookup table and linear interpolation, you could generate a sine wave that would be indistinguishable from a pure sine wave at that bit depth. Personally, I think I'd go with a lookup table of 64 or 128 values and linear interpolation. A 16 bit system provides a theoretical max of 96 dB and real world 90 dB of dynamic range, so 64 would be slightly below and 128 would be slightly above what you need for a 16 bit system. Considering the limitations of the platform, I don't think generating sine waves at better than CD quality accuracy would be a top priority.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I also looked into using some better interpolation methods - polynomial interpolation, spline interpolation, etc. They can give much better results, but they also get quite complicated - for example, even with only 8 values in your lookup table, you'd need to calculate a 7th degree polynomial, and then you need to worry about oscillation artifacts (Runge's phenomenon) too. Spline interpolation only requires cubic polynomials and doesn't suffer from the same artifacts, but then you need a different cubic polynomial between each lookup value, which is going to be messy in assembly and chew up more code space. Considering how good the results can be with a small lookup table and linear interpolation, I'd be inclined to just add more data points before resorting to more complicated interpolation. Of course, for something other than a simple sine wave or on a different platform, better interpolation methods might make more sense.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:1baa1686-29fd-4ebc-92fa-3bd8d74c7856] --&gt;</description>
      <pubDate>Mon, 02 May 2011 00:20:08 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/272648?tstart=0#272648</guid>
      <dc:date>2011-05-02T00:20:08Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>6</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/272660?tstart=0#272660</link>
      <description>&lt;!-- [DocumentBodyStart:ab60ce88-79e4-4e9f-8f7f-b1a30946ed76] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;Wow, MC, that's a great analysis!&amp;#160; I will enable the interpolation once I have things working.&amp;#160; I finally was able to access the table the other night... movec was the magic instruction I was missing.&amp;#160; I'm still grabbing the wrong table entry but I'm sure I'll get the bugs out soon enough.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;You could have a lot more room for lookup tables if the MCU loaded X/Y memory from flash.&amp;#160; I think this is fundamentally possible but requires a change to the MCU code.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:ab60ce88-79e4-4e9f-8f7f-b1a30946ed76] --&gt;</description>
      <pubDate>Mon, 02 May 2011 01:14:08 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/272660?tstart=0#272660</guid>
      <dc:date>2011-05-02T01:14:08Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>5</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/272033?tstart=0#272033</link>
      <description>&lt;!-- [DocumentBodyStart:f66758c9-d457-4eb5-8156-1549801acaa7] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;The table size is 1024 words but only 1/4 of that is necessary to store in memory due to symmetry.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;I was playing with this last night and I'm stuck on the stupidest thing:&amp;#160; just putting the table in memory and using it.&amp;#160; Originally I just stuck it in the program memory somewhere but can't seem to read values from that.&amp;#160; So I put it in X memory but I don't think that actually gets loaded by the MCU at boot time.&amp;#160; I guess I need to keep the table in X memory but initialize it from P memory?&amp;#160; Annoying.&amp;#160; If anyone has some example code for this I'd take it.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:f66758c9-d457-4eb5-8156-1549801acaa7] --&gt;</description>
      <pubDate>Fri, 29 Apr 2011 19:32:32 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/272033?tstart=0#272033</guid>
      <dc:date>2011-04-29T19:32:32Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>7</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/271911?tstart=0#271911</link>
      <description>&lt;!-- [DocumentBodyStart:8299319a-da1b-45b0-a2f2-366deaab5316] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;blockquote class="jive-quote"&gt;&lt;p&gt;audioartillery wrote:&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;Thanks guys, yes, I've already put in a lookup table for the sine generation, just need to squash a bug or two.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The artifacts exist in my simulation.&amp;#160; When the SNR gets small the algorithm kind of goes to hell.&amp;#160; Even as it is it's a useful algorthm.&amp;#160; One effect I'd like to make is a colored noise synthesizer (noise with a noise power curve that centers around the current note).&amp;#160; And this is entirely suitable for that kind of thing.&lt;/p&gt;&lt;/blockquote&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;How many lookup table values did you use? Taking advantage of symmetry and periodicity and then applying interpolation, I suppose it wouldn't be so bad. Did you use linear interpolation, or something higher order (Cauchy, Lagrange, etc)?&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:8299319a-da1b-45b0-a2f2-366deaab5316] --&gt;</description>
      <pubDate>Fri, 29 Apr 2011 16:47:59 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/271911?tstart=0#271911</guid>
      <dc:date>2011-04-29T16:47:59Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>8</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
    <item>
      <title>Re: Pitch detection/octave effect</title>
      <link>http://line6.com/support/message/271007?tstart=0#271007</link>
      <description>&lt;!-- [DocumentBodyStart:371a0514-f19a-4d20-b857-361c443535a9] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;Thanks guys, yes, I've already put in a lookup table for the sine generation, just need to squash a bug or two.&lt;/p&gt;&lt;p style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;The artifacts exist in my simulation.&amp;#160; When the SNR gets small the algorithm kind of goes to hell.&amp;#160; Even as it is it's a useful algorthm.&amp;#160; One effect I'd like to make is a colored noise synthesizer (noise with a noise power curve that centers around the current note).&amp;#160; And this is entirely suitable for that kind of thing.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:371a0514-f19a-4d20-b857-361c443535a9] --&gt;</description>
      <pubDate>Wed, 27 Apr 2011 15:22:30 GMT</pubDate>
      <author>support@line6.com</author>
      <guid>http://line6.com/support/message/271007?tstart=0#271007</guid>
      <dc:date>2011-04-27T15:22:30Z</dc:date>
      <clearspace:dateToText>2 years, 1 month ago</clearspace:dateToText>
      <clearspace:replyCount>9</clearspace:replyCount>
      <clearspace:objectType>0</clearspace:objectType>
    </item>
  </channel>
</rss>

