<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 7, 2013 at 3:16 PM, gettimothy <span dir="ltr">&lt;<a href="mailto:gettimothy@zoho.com" target="_blank">gettimothy@zoho.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u><div><div style="font-size:10pt;font-family:Verdana,Arial,Helvetica,sans-serif">Eliot,<br><br>Re &quot;I mean good low-level programming skills.  Knowing how stacks and  address spaces are organized, what the machine&#39;s calling convention is,  what a system call looks like, etc, and what the current processor&#39;s  instruction set is, it&#39;s theory etc (is it a RISC or a CISC; does it  have delay slots, etc, etc).&quot;<br>
<br>Would an updated edition of Patterson and Hennessy be helpful here? My copy (like my c skills) is from 1993.<br></div></div></blockquote><div><br></div><div>nothing fundamental that affects Cog has changed in that time... it&#39;ll do just fine.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:Verdana,Arial,Helvetica,sans-serif"><br><br>t.<br><div><br>---- On Thu, 07 Nov 2013 13:54:03 -0800 <b>Eliot Miranda&lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt;</b> wrote ---- <br>
</div><div><div class="h5"><br><blockquote style="border-left:1px solid #0000ff;padding-left:6px;margin:0 0 0 5px"><div dir="ltr">Hi Timothy,<div><br><div>On Thu, Nov 7, 2013 at 12:33 PM, gettimothy <span dir="ltr">&lt;<a href="mailto:gettimothy@zoho.com" target="_blank">gettimothy@zoho.com</a>&gt;</span> wrote:<br>
 <blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u><div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif">Eliot,<br><br>Thank you so much for the reply.<br> <br>
Currently my low-level skills are atrophied and have organized my work-life to devote study time to regaining and improving them.<br>This is a great opportunity to contribute and get my chops up in the process.<br><br> When you refer to &#39;machine code&#39; and &#39;machine organization&#39; do you mean the Cog/Squeak VM&#39;s or the AMD 64 instruction set? (I lack both, but if you mean the VM, a good exercise in learning it would be writing some good documentation on it)<br>
 </div></div></blockquote><div><br></div><div>I mean good low-level programming skills.  Knowing how stacks and address spaces are organized, what the machine&#39;s calling convention is, what a system call looks like, etc, and what the current processor&#39;s instruction set is, it&#39;s theory etc (is it a RISC or a CISC; does it have delay slots, etc, etc).</div>
 <div><br></div><div>So first things first.  Get the stack VM wokring in 64-bits.</div><div><br></div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif">
 <br>From your reply, I guess I would best be of use getting the Stack VM working in 64 bits--its something I am currently attempting to do.<br><br>I have a tri-boot machine--Windows 7, Linux with 32 bit compat  libs--where I can run smalltalk, and a pure 64 bit boot, where I cannot  run smalltalk.<br>
 </div></div></blockquote><div><br></div><div>OK, but right now you&#39;ll want to be in Smalltalk, and for quite a while.</div><div> </div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
 <div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif">I am currently attempting  to get the source code from  <a href="http://www.squeakvm.org/squeak64/" target="_blank">http://www.squeakvm.org/squeak64/</a> <tt>Squeak-3.8a-2.src.tar.gz to compile on </tt>the pure 64 box. <br>
 The Quick Start steps failed, so I am now setting about studying the source code in merge64/platforms/unix/vm/sqUnixMain.c as it looks like the entry point for the VM.<br>In the back of my mind, I am wondering if this is even the right approach to take..<br>
 </div></div></blockquote><div><br></div><div>It&#39;s not :-).</div><div> </div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif">
 What do you think is the best approach to take?<br></div></div></blockquote><div><br></div><div>Read the latest two articles on my blog (<a href="http://www.mirandabanda.org/cogblog/2013/09/05/a-spur-gear-for-cog/" target="_blank">A Spur gear for Cog</a> &amp; <a href="http://www.mirandabanda.org/cogblog/2013/09/13/lazy-become-and-a-partial-read-barrier/" target="_blank">Lazy Become</a>).</div>
 <div>Make a VMMaker image (see e.g. <a href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=create%20a%20cog%20vmmaker%20image&amp;source=web&amp;cd=1&amp;cad=rja&amp;ved=0CCsQFjAA&amp;url=http%3A%2F%2Fwww.mirandabanda.org%2Fcogblog%2Fbuild-image%2F&amp;ei=sQp8UsnDL8GLjALn6oDICQ&amp;usg=AFQjCNHoDMjPg2Sy7huxuOSDrTIyHo_RNw&amp;sig2=s3vx6j1rl73gdHq37BMiiQ&amp;bvm=bv.56146854,d.cGE" target="_blank">Cog Blog :: Building a Cog Development Image</a>).</div>
 <div>Then read SpurMemoryManager, /especially/ its class comment.</div><div>Then read its subclasses Spur32BitMemoryManager (functional) &amp; Spur64BitMemoryManager (completely untested).</div><div>Then read SpurBootstrap32.</div>
 <div>Try and create a 32-bit Spur image and run it.</div><div>Then try and implement SpurBootstrap64.</div><div>Try and create a 64-bit Spur image and run it.<br></div><div><br></div><div>This is /lots/ of work.  In particular the last two steps require some significant design.</div>
 <div>So start slowly and see how you get on.</div><div> </div><div><br></div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif">
 Cordially,<br><br>t<br><div><br>---- On Thu, 07 Nov 2013 10:54:01 -0800 <b>Eliot Miranda&lt;<a href="mailto:eliot.miranda@gmail.com" target="_blank">eliot.miranda@gmail.com</a>&gt;</b> wrote ---- <br></div><div><div> <br>
<blockquote style="border-left:1px solid #0000ff;padding-left:6px;margin:0 0 0 5px"><div dir="ltr">Hi Timothy,<br><div><br><br><div>On Thu, Nov 7, 2013 at 7:02 AM, gettimothy <span dir="ltr">&lt;<a href="mailto:gettimothy@zoho.com" target="_blank">gettimothy@zoho.com</a>&gt;</span> wrote:<br>
  <blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u><div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif">Is there any chance Cog could be made to run on AMD64 natively without 32 bit libs?<br>
  </div></div></blockquote><div><br></div><div>Yes, that&#39;s a goal of my current work.  Spur has a common object representation between 32- and 64-bits.  Getting to a native Stack VM on AMD64 should be straight-forward.  Getting to a Cog VM on AMD64 also requires writing a code generator for AMD64.  That&#39;s actually a fun project.  It involves configuring a Bochs plugin for an AMD64/IA32 simulator, and then writing a CogIA64Compiler subclass of CogAbstractInstruction.</div>
  <div><br></div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif"><br>If so, I would like to help out with whoever takes up this task. I would need direction, however as I have been do app development for too many years and my sys skills are atrophied.<br>
  </div></div></blockquote><div><br></div><div>How strong are your low-level skills?  You&#39;ll need to be quite familiar with machine code, basic machine organization, etc.  If you&#39;re not then you could instead have a go at getting the Stack VM working in 64-bits, and that would involve getting the 64-bit VM simulator working in VMMaker.</div>
  <div><br></div><div>It will be great to have another collaborator!</div><div><br></div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:verdana,arial,helvetica,sans-serif">
  <br>t.<br><br><br><br><br><div><br>---- On Thu, 07 Nov 2013 06:01:00 -0800 <b>Bob Arning&lt;<a href="mailto:arning315@comcast.net" target="_blank">arning315@comcast.net</a>&gt;</b> wrote ---- <br></div><br><blockquote style="border-left:1px solid #0000ff;padding-left:6px;margin:0 0 0 5px">
               <div text="#000000" bgcolor="#FFFFFF"><div>     <font face="Georgia">It&#39;s absolutely none of my business what tools       others choose to use, but I will say this:<br>       <br>       Having more of this process in Smalltalk and less in other       (arcane) languages increases the confidence that, should we lose       someone&#39;s services, others could step up to fill the gap.<br>
         <br>       Cheers,<br>       Bob<br>       <br>     </font>     <div>On 11/7/13 8:28 AM, Igor Stasenko       wrote:<br>     </div>     </div><blockquote><a href="mailto:Ec7Xf8-DaANjijv1beYiqxBApPntNg@mail.gmail.com" target="_blank">Ec7Xf8-DaANjijv1beYiqxBApPntNg@mail.gmail.com</a>&quot; type=&quot;cite&quot;&gt;       <div>
  <div><div dir="ltr"><br>         <div><br>           <br>           <div>On 7 November 2013 08:58, Tobias Pape             <span dir="ltr">&lt;<a href="mailto:Das.Linux@gmx.de" target="_blank">Das.Linux@gmx.de</a>&gt;</span>             wrote:<br>
               <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hey Tim and all,<br>               <div>                 <div>On 07.11.2013, at 05:00, Ron Teitelbaum                   &lt;<a href="mailto:ron@usmedrec.com" target="_blank">ron@usmedrec.com</a>&gt;                   wrote:<br>
                     <br>                   &gt; Hey Tim,<br>                   &gt;<br>                   &gt; Göran and Eliot have been discussing this.  I                   just talked to Eliot about it<br>                   &gt; yesterday.  He said he was happy to support cmake                   but didn&#39;t want to have to<br>
                     &gt; do the work himself.  I&#39;m hoping that the work                   Göran is doing on this now<br>                   &gt; can be turned over to Eliot when it is finished.                    I think there is agreement<br>
                     &gt; that combining the excellent work of pharo build                   with Eliot&#39;s new vm work is<br>                   &gt; a very good thing to do.  The work to merge the                   build environments is<br>
                     &gt; already being done at 3D ICC.  We are working on                   this for the Mac also but<br>                   &gt; have not discussed it with Ian yet.<br>                   &gt;<br>                   &gt; Ron Teitelbaum<br>
                     &gt;<br>                   &gt;&gt; -----Original Message-----<br>                   &gt;&gt; From: <a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>                   [mailto:<a href="mailto:squeak-dev-" target="_blank">squeak-dev-</a><br>
                     &gt;&gt; <a href="mailto:bounces@lists.squeakfoundation.org" target="_blank">bounces@lists.squeakfoundation.org</a>]                   On Behalf Of tim Rowledge<br>                   &gt;&gt; Sent: Wednesday, November 06, 2013 9:04 PM<br>
                     &gt;&gt; To: The general-purpose Squeak developers                   list<br>                   &gt;&gt; Subject: Re: [squeak-dev] A Bounty for                   CMake-ifying stack/Cog vm build<br>                   &gt; process<br>
                     &gt;&gt;<br>                   &gt;&gt;<br>                   &gt;&gt; Wow, no interest? Is it because make is                   painful or because nobody needs to<br>                   &gt;&gt; make any more money?<br>
                     <br>                   <br>                 </div>               </div>               I actually have interest but I am currently reluctant,<br>               for time-capturing reasons in my personal and work life.<br>
                 <br>               However, Here is what I would do:<br>               <br>               • Start from Ians CMake work, and try to generalize it for               the<br>                 non-Linux platforms<br>
                 • Windows would be kind-of straight-forward,<br>               • For OS X, I would really want to have the Cocoa-based VM               stuff<br>                 (aka Squeak VM 5.4.7.x) integrated and proper Xcode               files<br>
                   generated, especially to be able to have iOS VMs built               automatically.<br>                  Here, some information from John McIntosh would be               helpfull, especially<br>                 a simple walk-through.<br>
                    I have some experience with that[1]<br>               <br>               <br>               Despite all admiration I have for the way the PharoVM is               built, there is one<br>               thing that bothers me:<br>
                 • You first somehow generate the VM sources (which is               fine, and the automated way is amazing)<br>               • THEN, the a Script generates CMake-Files<br>               • CMake then generates Makefiles<br>
                 • and then finally a vm is compiled.<br>               This is one generating step too much, for my taste.<br>               Personally, I&#39;d prefer CMake to just pick up the C-files               generated by VMMaker,<br>
                 so that adding a new platform does not need to change the               VMMaker…</blockquote>             <div><br>             </div>             <div>The main big issue with &#39;platform-neutral&#39; static               source files, that they tend to<br>
               </div>             <div>grow with tons of #ifdef-s over time, reducing               readability and creating a mess.<br>               <br>             </div>             <div>My point is that one or another way you have to deal               with platform differences,<br>
               </div>             <div>and the way how i prefer to do it is using smalltalk               code,<br>             </div>             <div>but not .m4 files, or .cmake files, or writing a medium               novel long configuration files<br>
               </div>             <div>using strange (better to say weird) scripting DSL.<br>             </div>             <div>I can express all build process logic in smalltalk,               which does not lessens the amount<br>
                 of work to deal with all platform nuances and dependencies               etc, but at least it allows me to organize and shape it<br>               into some manageable form, which is easy to change &amp;               learn.<br>
               </div>             <div> <br>             </div>             <div> And another difference is, that i prefer working with               browser &amp; classes than<br>               with dozens of directories and files lying here and there.<br>
                 <br>             </div>             <div>But sure thing, it is a question of taste. If you               prefer to maintain this:<br>               -------------------------<br>               MACRO (INTERNAL_PLUGIN plugin)<br>
                   SET (plugin_sources &quot;&quot;)<br>                 IF (DEFINED ${plugin}_sources)<br>                   SET (plugin_sources ${${plugin}_sources})<br>                 ELSE (DEFINED ${plugin}_sources)<br>
                     FOREACH (dir ${src}/vm/intplugins ${cross}/plugins               ${unix}/plugins)<br>                     SET (tmp &quot;&quot;)<br>                     AUX_SOURCE_DIRECTORY (${dir}/${plugin} tmp)<br>
                     STRING_APPEND (plugin_sources &quot;${tmp}&quot;)<br>                     ENDFOREACH (dir)<br>                 ENDIF (DEFINED ${plugin}_sources)<br>                 IF (DEFINED ${plugin}_extra_sources)<br>
                   STRING_APPEND (plugin_sources               &quot;${${plugin}_extra_sources}&quot;)<br>                   ENDIF (DEFINED ${plugin}_extra_sources)<br>                 FILE (WRITE ${bld}/${plugin}/CMakeLists.in &quot;&quot;)<br>
                 FOREACH (dir ${unix}/plugins ${unix})<br>                   FILE_APPEND (${bld}/${plugin}/CMakeLists.in               ${dir}/${plugin}/build.cmake)<br>                   ENDFOREACH (dir)<br>                 FILE_APPEND (${bld}/${plugin}/CMakeLists.in               ${config}/PluginInternal.cmake)<br>
                 CONFIGURE_FILE (${bld}/${plugin}/CMakeLists.in               ${bld}/${plugin}/CMakeLists.txt @ONLY)<br>                   ADD_SUBDIRECTORY (${bld}/${plugin} ${bld}/${plugin})<br>               ENDMACRO (INTERNAL_PLUGIN)<br>
               --------------------------<br>             </div>             <div>And/or this:<br>               --------------------------<br>                 AC_INIT([<a href="http://config.h.in" target="_blank">config.h.in</a>])<br>
               <br>               SVNREV=`grep &#39;\$Rev: &#39;               ${srcdir}/../../../platforms/Cross/vm/sqSCCSVersion.h \<br>                         | sed &#39;s/.*$Rev: \([[0-9]][[0-9]]*\).*/\1/&#39;`<br>               AC_VM_VERSION(4,0,${SVNREV},4,2,0)<br>
               <br>               topdir=`cd ${srcdir}/../../..; pwd`<br>               cfgdir=`cd ${srcdir}; pwd`<br>                 <br>               AC_ARG_WITH(src,<br>               [  --with-src=dir          generated src directory               [default=src]],<br>
               [ vmmsrc=&quot;${with_src}&quot;],<br>               [ vmmsrc=&quot;src&quot;])<br>                 <br>               vmmdir=&quot;${topdir}/${vmmsrc}&quot;<br>               <br>               if test ! -d &quot;${topdir}/${vmmsrc}&quot;; then<br>
                 if test -d &quot;${topdir}/platforms/unix/${vmmsrc}&quot;; then<br>                     vmmdir=&quot;${topdir}/platforms/unix/${vmmsrc}&quot;<br>                   AC_MSG_RESULT([using built-in src directory])<br>
                 fi<br>               fi<br>               <br>               AC_MSG_RESULT(${vmmdir})<br>                 <br>               blddir=`pwd`<br>               <br>               AC_ARG_WITH(vmmcfg,<br>               [  --with-vmmcfg=dir        vm configuration directory               containing <a href="http://plugins.int" target="_blank">plugins.int</a> and               plugins.ext [default=.]],<br>
                 [ vmmcfg=&quot;${with-vmmcfg}&quot;],<br>               [ vmmcfg=&quot;${blddir}&quot;])<br>               <br>               # Compiling a Cogit VM or not?  If so, need a cogit$o,               cointerp, etc.<br>
                 <br>               AC_ARG_ENABLE(cogit,<br>               [  --enable-cogit            compile a cogit VM               [default=yes]],<br>               cogit=&quot;no&quot;, cogit=&quot;yes&quot;)<br>               AC_SUBST(cogit)<br>
                 <br>               #AC_ARG_ENABLE(jit,<br>               #[  --enable-jit            enable J4 support               [default=no]],<br>               #JIT=&quot;yes&quot;, JIT=&quot;no&quot;)<br>               #<br>
                 #test $JIT = &quot;yes&quot; &amp;&amp; J_CFLAGS=&quot;-DJ_ENABLED&quot;<br>               #AC_SUBST(J_CFLAGS)<br>               <br>               # Check the generated src dir looks sane<br>               <br>
                 AC_CHECK_VMM_DIR<br>               <br>               AC_SUBST(topdir)<br>               AC_SUBST(cfgdir)<br>               AC_SUBST(vmmdir)<br>               AC_SUBST(vmmcfg)<br>               AC_SUBST(blddir)<br>
                 <br>               SQ_VERSION=${SQ_MAJOR}.${SQ_MINOR}-${SQ_UPDATE}<br>               <br>               AC_DEFINE_UNQUOTED(SQ_VERSION, &quot;${SQ_VERSION}&quot;)<br>               <br>               AC_SUBST(SQ_MAJOR)<br>
                 AC_SUBST(SQ_MINOR)<br>               AC_SUBST(SQ_UPDATE)<br>               AC_SUBST(SQ_VERSION)<br>               <br>               VM_VERSION=${VM_MAJOR}.${VM_MINOR}-${VM_RELEASE}<br>               <br>
               AC_DEFINE_UNQUOTED(VM_VERSION, &quot;${VM_VERSION}&quot;)<br>                 <br>               AC_SUBST(VM_MAJOR)<br>               AC_SUBST(VM_MINOR)<br>               AC_SUBST(VM_RELEASE)<br>               AC_SUBST(VM_VERSION)<br>
               <br>               # libdir contains ${exec_prefix}, so we have to default               and expand early<br>                 test &quot;x$prefix&quot; = xNONE &amp;&amp;               prefix=$ac_default_prefix<br>
               test &quot;x$exec_prefix&quot; = xNONE &amp;&amp;               exec_prefix=&#39;${prefix}&#39;<br>               imgdir=`eval echo ${libdir}/squeak`<br>                 expanded_relative_imgdir=`eval echo               lib/squeak/${VM_VERSION}`<br>
               plgdir=&#39;${imgdir}/&#39;`eval echo ${VM_VERSION}`<br>               <br>               AC_SUBST(imgdir)<br>               AC_SUBST(expanded_relative_imgdir)<br>                 AC_SUBST(plgdir)<br>               <br>
               AC_DEFINE(OS_TYPE, &quot;unix&quot;)<br>               <br>               AC_CANONICAL_HOST<br>               <br>               host_cpu=`echo $host | sed &#39;s,-.*,,&#39;`<br>                 host=`echo $host | sed &#39;s,-unknown,,&#39;`<br>
               <br>               AC_SUBST(host)<br>               AC_SUBST(host_cpu)<br>               AC_SUBST(host_vendor)<br>               AC_SUBST(host_os)<br>                 ----------------------------<br>               <br>
             </div>             <div>instead of plain smalltalk code, it is up to you.<br>               <br>             </div>             <div>But that&#39;s about &#39;too much&#39; for my taste. <br>               </div>
             <div><br>             </div>             <div><br>             </div>             <div><br>             </div>             <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                 But if the community is positive to just move to the Pharo               way of<br>               building VMs, I&#39;d be fine with that, since that would               unify a lot<br>               of infrastructure :)<br>
                 <br>               Best<br>                       -Tobias<br>               <br>               [1] <a href="https://github.com/krono/self/blob/cmake/vm/cmake/mac_osx.cmake" target="_blank">https://github.com/krono/self/blob/cmake/vm/cmake/mac_osx.cmake</a><br>
                 <br>               <br>               <br>               <br>               <br>               <br>               <br>             </blockquote>           </div>           <br>           <br clear="all">           <br>
             -- <br>           Best regards,<br>           Igor Stasenko.         </div>       </div>       <br>       <fieldset></fieldset>       <br>       <pre> </pre>     </div></div></blockquote>     <br>    <br></div>
  </blockquote><br></div></div><br><br> <br></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div> </div></div> <br></blockquote><br></div></div></div></div><br><br> <br></blockquote></div><br>
<br clear="all"><div><br></div>-- <br>best,<div>Eliot</div> </div></div> <br></blockquote><br></div></div></div></div><br><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>best,<div>Eliot</div>
</div></div>