http://www.64kib.com/redmine/http://www.64kib.com/redmine/redmine/favicon.ico?16973035742019-11-09T08:56:24Z64kibEclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8572019-11-09T08:56:24Zfoft
<ul><li><strong>Tracker</strong> changed from <i>Bug</i> to <i>Feature</i></li></ul> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8582019-11-09T08:56:55Zfoft
<ul></ul><p>Have a dual 8250 working, though it doesn't fit in the smaller boards. Investigating why, memory or logic...</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8622019-11-09T09:00:49Zfoft
<ul></ul><p>Logic utilization (in ALMs) 9,808 / 9,430 ( 104 % )</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8632019-11-09T09:03:03Zfoft
<ul></ul><p>600 alms each, will use mono sid I guess. Or make it a generic and enable on the larger boards?</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8642019-11-09T09:05:00Zfoft
<ul></ul><p>Also got this potential USB sharing, that'd save 750 ALMS. Each request/reply is host initiated, so no reason can't share one. Keepalives would need to go to both ports. Not sure how complex that'd be! Perhaps I plumb the output to both, with a mux for when I send explicit in/out requests?</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8652019-11-12T21:02:03Zfoft
<ul></ul><p>Actually the issue with fitting in v2 is block ram, not ALMs. Though its always good to save ALMs!</p>
<p>The sid tables take 14KB each. So for stereo sid its 28KB. Anyway I do not even have 14KB to spare on v2...</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8662019-11-12T21:04:46Zfoft
<ul></ul><p>I loaded the tables in to octave to take a look.</p>
Observations...
<ul>
<li>Not a simple curve</li>
<li>Lots of zeros, >80% in some cases </li>
<li>Quite a lot of dupes</li>
</ul>
<p>dupes:</p>
<blockquote><blockquote>
<p>log2(numel(unique(ps)))</p>
</blockquote></blockquote>
<p>ans = 6.5699</p>
<blockquote><blockquote>
<p>log2(numel(unique(st)))</p>
</blockquote></blockquote>
<p>ans = 4.7549</p>
<blockquote><blockquote>
<p>log2(numel(unique(p_t)))</p>
</blockquote></blockquote>
<p>ans = 5.8074</p>
<blockquote><blockquote>
<p>log2(numel(unique(pst)))</p>
</blockquote></blockquote>
<p>ans = 4.5850</p>
<p>zeros:</p>
<blockquote><blockquote>
<p>sum(ps==0)/numel(ps)</p>
</blockquote></blockquote>
<p>ans = 0.63379</p>
<blockquote><blockquote>
<p>sum(st==0)/numel(st)</p>
</blockquote></blockquote>
<p>ans = 0.86743</p>
<blockquote><blockquote>
<p>sum(p_t==0)/numel(p_t)</p>
</blockquote></blockquote>
<p>ans = 0.58545</p>
<blockquote><blockquote>
<p>sum(pst==0)/numel(pst)</p>
</blockquote></blockquote>
<p>ans = 0.89331</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8672019-11-12T21:18:25Zfoft
<ul></ul><p>Wondering about some kind of bit map of unpopulated locations (reducing locations) or a 2nd lookup layer (reducing bits)</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8682019-11-12T21:19:02Zfoft
<ul></ul><p>Also wondering if the clk frequency is important (not enable), I see some state table increment on every clock, which is reset on enable</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8692019-11-12T21:19:21Zfoft
<ul></ul><p>It sounds good to me, but not sure what it is meant to sound like!!</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8702019-11-17T20:07:56Zfoft
<ul></ul><p>Did some research over the weekend. Generating these isn't a terribly trivial problem!</p>
<p>I tried for some time to generate in matlab. I came up with a pretty good solution for wave 3: triangle + sawtooth. Actually its sawtooth + 2 sawtooth since the triangle is inverted. Anyway this worked pretty well:<br /> tmp = zeros(size(a));<br /> for k=1:12<br /> pre =k-4;<br /> post = k;<br /> if pre<1<br /> pre = 1;<br /> end<br /> if post>12<br /> post = 12;<br /> end<br /> idx = pre:post;<br /> if a(idx) == b(idx);<br /> tmp(k) = b(k);<br /> end<br /> end<br />i.e. and and if in conflict, ground the 4 adjacent bits.</p>
<p>Was struggling with the pulse + triangle one, now come up with an easy answer for that one yet!</p>
<p>Anyway found some description of what is going on in the libsidplayfp + some functions to generate:<br />libsidplayfp-2.0.1/src/builders/residfp-builder/residfp/WaveformCalculator.cpp</p>
<p>Also the wave files are here:<br /><a class="external" href="https://bel.fi/alankila/c64-sw/combined-waveforms/sidwaves/">https://bel.fi/alankila/c64-sw/combined-waveforms/sidwaves/</a></p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=8712019-11-17T20:10:43Zfoft
<ul><li><strong>File</strong> <a href="/redmine/attachments/93">sidbits.tar.bz2</a> <a class="icon-only icon-download" title="Download" href="/redmine/attachments/download/93/sidbits.tar.bz2">sidbits.tar.bz2</a> added</li></ul><p>Attaching some of the octave files from investigating this for reference + the wave files + other useful bits I found online.</p> EclaireXL - Feature #84: Add SIDhttp://www.64kib.com/redmine/issues/84?journal_id=9042021-01-14T09:35:50Zfoft
<ul></ul><p>I have implemented my own better sid core now which I will back-port to Eclaire.</p>