Improvements to the Xerox Alto Mandelbrot drop runtime from 1 hour to 9 minutes
<i>&quot;However, Alto microcode is pretty crazy, so I&#x27;m not going to try a microcode Mandelbrot.&quot;</i><p>I don&#x27;t understand that logic, coming from somebody who has a restored Xerox Alto and wrote a Mandelbrot generator <i>in BCPL</i> for it <i>&quot;to learn how to use the Alto&#x27;s bitmapped display, not make the fastest Mandelbrot set&quot;</i>.<p>I also expect this guy will get source code for the &#x27;simple&#x27; things such as an OR instruction or a fixed-width multiplication instruction within a few weeks.<p>Edit: I’ve been browsing <a href="http:&#x2F;&#x2F;bitsavers.trailing-edge.com&#x2F;pdf&#x2F;xerox&#x2F;alto&#x2F;Alto_Hardware_Manual_Aug76.pdf" rel="nofollow">http:&#x2F;&#x2F;bitsavers.trailing-edge.com&#x2F;pdf&#x2F;xerox&#x2F;alto&#x2F;Alto_Hardw...</a>.<p>There apparently are only 16 basic micro-instructions (<i>”The ALU function field controls the SN74181 ALU. This device can do a total of 48 arithmetic and logical operations, most of which are relatively useless. The 4-bit field is mapped by a PROM into the 16 most useful functions”</i>), and <i>OR</i> is one of them:<p><pre><code>       ALUF  FIELD FUNCTION  
         0   BUS            (A)
         1   T              (B)
         2   BUS OR T*      (A+B)
         3   BUS AND T      (AB)
         4   BUS XOR T      (A XOR B)
         5   BUS + I*       (A PLUS I)
         6   BUS - I*       (A MINUS I)
         7   BUS + T        (A PLUS B)
        1OB  BUS - T        (A MINUS B)
        11B  BUS - T - 1    (A MINUS B MINUS I)
        12B  BUS + T + 1*   (A PLUS B PLUS I) 
        13B  BUS + SKIP*    (A PLUS I) 
        14B  BUS.T* (AND)   (AB) 
        15B  BUS AND NOT T  (A &amp; NOT B)
    16B-17B  UNDEFINED
</code></pre>
So, following the best source I have, (that PDF) which states:<p><i>”For the most part, since the Alto is such a simple machine, writing Alto microcode is a straightforward exercise in rule-following”</i><p>that shouldn’t be too hard, provided that there is a free spot for writing the microcode instruction, or that you can find an instruction to give up in exchange for a simple OR.<p>Edit 2: that PDF also describes the way you do an OR, so that apparently was the way to go:<p><i>”To &quot;or&quot; together the contents of ACO and ACI; results ACO:<p><pre><code>    COM 1.1
    AND 1,0
    ADC 1,0</code></pre>
”</i>