<div dir="ltr">Hi Tim,<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Dec 26, 2013 at 10:54 AM, tim Rowledge <span dir="ltr">&lt;<a href="mailto:tim@rowledge.org" target="_blank">tim@rowledge.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class=""><div class="h5"><br>
On 26-12-2013, at 7:11 AM, marcelo Cortez &lt;<a href="mailto:jmdc_marcelo@yahoo.com.ar">jmdc_marcelo@yahoo.com.ar</a>&gt; wrote:<br>
<br>
&gt; hi<br>
&gt;<br>
&gt; I&#39;m developing over  Raspberry pi  with squeak and i need access to GPIO.<br>
&gt;<br>
&gt; Questions:<br>
&gt;<br>
&gt; How load FFI on Raspberry pi?<br>
&gt; Any link,paper , advice , pdf.<br>
&gt; be appreciated.<br>
<br>
</div></div>To get the FFI working for Pi (and indeed other ARM *nix machines) somebody would need to write any needed ARM assembler bits to interface to the apicall and/or libffi and/or whatever the current facility is called. There is some information on what is needed in the vm sources; see <a href="http://squeakvm.org/cgi-bin/viewvc.cgi/squeak/trunk/platforms/unix/plugins/SqueakFFIPrims/" target="_blank">http://squeakvm.org/cgi-bin/viewvc.cgi/squeak/trunk/platforms/unix/plugins/SqueakFFIPrims/</a> and start with 00README. Probably the best place to ask more specific questions about FFI would be the squeak vm-dev list (sign up at <a href="http://lists.squeakfoundation.org/mailman/listinfo/vm-dev" target="_blank">http://lists.squeakfoundation.org/mailman/listinfo/vm-dev</a>)<br>
</blockquote><div><br></div><div>Actually it is simpler than this, provided one starts from ThreadedFFIPlugin.  This is a replacement for the old FFIPlugin that uses very little assembler, and that in the form of asm statements.  The old FFIPlugin has two main problems, first that it needs a lots of assembler support, and second that it is not reentrant.  The latter follows from the former, in that the marshalling is done to a static buffer, and so making a call while nested will screw the pooch.</div>
<div><br></div><div>ThreadedFFIPlugin in contrast uses alloca to allocate space for outgoing arguments and is hence reentrant and written in C with two asm statements, getsp and setsp.  Better still ThreadedFFIPlugin was written with ARM (and PowerPC) in mind.  It has three subclasses, ThreadedIA32FFIPlugin, ThreadedARMFFIPlugin, &amp; ThreadedPPCBEFFIPlugin.  The first is fully functional (and has been in Cog since its release).  The second two are only a few days away from completion.  Let me invite anyone interested to have a go.</div>
<div><br></div><div>The secret to an alloca based implementation is that alloca, answering a stack-allocated array, provides space for outgoing arguments, so that subsequently calling a function pointer supplies he called function with its arguments.  This is slightly more complicated on an ABI with register arguments, such as ARM or PowerPC.  The extra work is to also marshal into a struct that holds the arguments, and instead of just calling the function pointer, one calls it with enough arguments to fill the register arguments, taken from the struct.</div>
<div><br></div><div>All the structure is there.  All it needs is someone with am ARM and some gumption to fill in the missing pieces.  I know all this works because I wrote (and/or rewrite) the VisualWorks VM&#39;s FFI to use alloca, including for ARM and PowerPC platforms.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">It’s definitely a job I have on my list of TO DO, but not high and there’s plenty of work piled up above it so please feel free to tackle it!<br>

<br>
It *might* be easier in the short term to write a vm plugin specifically for the Pi GPIO interface. You can find out quite a bit about the gpio programming fro mthe Pi forums and particularly from the Scratch forum where simplesi has done a great deal of clever stuff by using python to provide a connection for the Scratch remote sensor connection subsystem, and then driving the gpio from pythin. It’s certainly time there was as more direct interface for him to use.<br>
</blockquote><div> </div><div>It might.  But someone who understands the ARM ABI could probably get the ThreadedARMFFIPlugin working in a week or less. </div></div><div><br></div><div>I&#39;ll happily answer any and all questions in getting this to work.</div>
-- <br>best,<div>Eliot</div>
</div></div>