What is ARA?

In previous blog posts I’ve mentioned some terms like “65xx ISA” and “Addressable Register Architecture (ARA).”  I suspect most software engineers have conceptual knowledge of instruction sets and their classification. As an example, the x86 instruction set is much more complex than the reduced instruction set of the ARM. This is where the terms CISC and RISC get thrown around and most conversations end. I felt compelled to do more research to deepen my conceptual knowledge and find out where ARA fits in the landscape of ISAs. That’s my goal of this post. If you’re looking for something more in-depth then you’ll likely have to keep looking but check out the Fun Facts before you go. A special thanks to my uncle Bill Mensch for providing information on ARA and tolerating my basic knowledge questions.

In order for me to understand ARA, I needed to get a better understanding of ISA. So, like most, I looked to the internet. I was not setting out to do a “deep dive” but just to gather enough information to get some context. The “aha” moment for me came when I discovered the separation between the ISA and the underlying microarchitecture of a microprocessor. A microarchitecture is a given way to implement an Instruction Set Architecture. I immediately saw similarities in the relationship between the Java Virtual Machine (JVM) specification and runtime being analogous to an ISA and microarchitecture. Oracle maintains JVM specifications (e.g. Java SE 7) that can be thought of like an Instruction Set Architecture. As most software engineers know, Oracle also offers a implementation (or runtime) of the JVM specification similar to how a microarchitecture implements an ISA. There are 40+ implementations of the JVM specification including the Dalvik and ART JVMs that make up the Android runtime. So, now it was clear to me the role of an ISA and I can start pestering uncle Billy about ARA. 🙂

Bill told me that he coined the term Addressable Register Architecture (ARA) about 5 years ago to describe the 65xx ISA. According to him, “…there had to be an essential architectural advantage to explain the extremely wide and successful application of the 6502 and it’s decedents (W65C02, W65C02S & W65C816)“. Bill explains his realization to me in an email:

…I realized that the wider data widths such as 64-bit floating point operations might be the key. So it was always related to by Motorola and others as “memory mapped IO” but no one actually looked at the fact that the floating point registers were in “page Zero” and could have been anywhere in memory. Page Zero was selected because it uses less machine cycles. Using a C compiler, other registers are stored in memory. Actually, all IO registers are “addressed” and that is how I arrived at defining the 65xx as an ARA. – Bill Mensch, Oct 2015

ARA gives 65xx ISA a unique identity which is neither CISC nor RISC. So, in my “layman’s world” I think of ARA as an ISA that is the “best of both worlds” sitting nicely in between CISC & RISC. This is where I leave you to continue exploring and digging deeper if you desire. This is a fascinating world that is extremely complex.

Before you leave, take a look at the Fun Facts, I think you’ll be surprised!

Fun Facts

Fun Fact #1: Did you know that a microarchitecture has more affect on power, energy and/or performance than instruction set architectures, e.g. CISC or RISC? Here’s a great EETimes blog post (RISC vs CISC: What’s the Difference?) that reveals this finding of a 4 year study from the Vertical Research Group.

Fun Fact #2: “The ARM engineers Steve Furber and Sophie (then Roger) Wilson visited me in my WDC Mesa offices the November-December time frame in 1983 asking me to design a 32-bit microprocessor which could have been best described as a RISC processor. They were partially funded by Apple for around $3M and Apple used the Acorn RISC Machine (ARM) in the failed Newton PDA. Acorn RISC Machine became Advanced RISC Machine and in an attempt to get away from the RISC identity became just ARM.” – Bill Mensch, June 2015

…Bill respectfully declined to design the 32-bit microprocessor for the ARM engineers.

Fun Fact #3: The 6502 made an appearance in the first Terminator movie! The T-800 HUD (Head Up Display) features 6502 assembly code. It was determined to be Apple-II code taken from Nibble Magazine. (http://www.pagetable.com/?p=64) The feature image is from the T-800 HUD.

A Guiding “Light” to Learning Clojure

I wrote a blog post (A Guiding “Light” to Learning Clojure) for Chariot Solutions on using LightTable as a tool for learning Clojure.

Here is a repost:

I’ve recently started learning Clojure after a little encouragement from co-worker of mine.  I’ve been developing in Java for a while now and spent the last 1 1/2 years with Groovy.  The Groovy experience was great and the use of closures certainly “whet my appetite” for functional programming.

Ok, for me, when I learn something new I need to have tools that are not distracting so that I’m focused on the material.  In this case, I wanted to take a little time to view the tools landscape for Clojure while trying not get carried away.  After doing some research, I narrowed it down to a few options.  First, I’m a long time Intellij IDEA user so I could just download the La Clojure plugin (I did) to get a REPL, syntax highlighting, source code navigation, etc.  This is fine but it’s a bit of an overkill for just getting started with Clojure.  Intellij IDEA is a great IDE however, I wanted to stay open-minded to what else is out there.

Next, I tried configuring Vim for Clojure after seeing a co-worker work on a Clojure project with Vim.  The great thing about Vim is it’s lightweight editor that’s extremely fast.  If you’re proficient Vim user then you get things done quickly.  If you’re a basic Vim user (like me) then there’s a learning curve.  Regardless, I thought I’d give it a try by downloading and configuring VimClojure.  There is a way to configure Vim to dynamically work with Clojure to provide documentation lookup, REPL running in a Vim buffer, etc.  You have to build a Nailgun interface by downloading a client program and so on.  I eventually got a dynamic Clojure development tool in Vim but I found that I was focusing more on learning this Vim/VimClojure/Nailgun environment than on Clojure!  So, I reluctantly moved on.

I thought about jumping into the deep end with Emacs, which is the choice for most Clojure developers but I’m not an Emacs user (please don’t hold it against me).  I didn’t want to get involved in a big learning curve again.  I was feeling a bit like, “Hi, my name is Rod and I’m a tools-aholic”…this was starting to consume a lot of my time and taking away from what I set out to do…learn Clojure.

Well the tools story continues, in November 2012 I attended Clojure-conj in Raleigh, NC.  That’s where I saw Chris Granger present LightTable for the first time.  I was impressed with the presentation and thought to myself that I need to take a closer look at LightTable some time (not immediately but some time).  I was trying to resist the temptation and I did for a little while.  Well, three months later I “fell off the wagon” and took a “drink” of LightTable and I’m glad I did. 🙂

lighttable-welcome

 

This is not a review of LightTable nor a “HowTo”, I think of it more as getting the word out about a new and different kind of developer tool.  The UI is simple with a very modern look and color scheme.  My first impression was this could be a next generation Vim editor.  I found myself wanting to use the tool.  The intuitive UI is easy to use and it feels natural like you’re closer to the terminal.

Instarepl

What appeals to me the most happens to be one of LightTable’s guiding principles “Discover by doing”.  The REPL (Read-Eval-Print-Loop) provides an interactive session to write and execute code.  This isn’t something new to the “Lispers” since REPL has been around a long time.  However, the REPL (Instarepl) in LightTable takes things one step further.

Here’s your typical REPL TryClojure.  Simply write some Clojure code and get the result.

tryclojure-simple

 

Here’s the same basic example in LightTable’s Instarepl.

instarepl-simple

 

Ok, that’s cool, you see what you type on the left, which is mirrored on the right with the result.  However, it’s not much different than the Clojure REPL.  But wait, it gets better.

instarepl-func

 

Here’s a simple function that I pulled from Chris’ blog post.  You can see that the right side of Instarepl is just showing the function as it was written.  However, things change after writing code to call the function.

instarepl-func-eval

 

The right side shows the data flowing through the function.  It is pretty awesome to try various inputs and watch how the values flow through the code.  I’m not sure if Chris has officially coined a term for this feature but I’ve read it being referenced as “live evaluation” or “real-time evaluation and visualization”.  This is what makes me want to use LightTable even if nothing else works. 🙂  I have to wonder how this type of code “visualization” impacts TDD (Test-Driven Development).  It would be interesting to explore LightTable’s impact on TDD…sounds like a good blog post. 🙂

There are many more features to LightTable and I highly recommend that you watch the video on the LightTable web page and see Chris drive the IDE.  The version I’m currently using is 0.2.7 and some of the features that he demonstrates in the video I wasn’t able to get working.  However, there is a new 0.3.0 version coming out Feb.-Mar. timeframe and (according to Chris) this version is about “crafting an editing experience so a lot of things will be much, much better”…can’t wait, I have seen the Light!