Hacker News new | past | comments | ask | show | jobs | submit login
Assembly Evolution P1: Accessing Memory and the strange case of the Intel 4004 (julien-oster.de)
4 points by alecco on Oct 15, 2011 | hide | past | favorite | 3 comments



The 4004 is not the ancestor of the 8008; it was a completely different processor family with different antecedents. The 4004 came from Busicom in Japan and was designed by Masatoshi Shima; the 8008 followed an architecture developed by Victor Poor at Computer Terminal Corporation (later Datapoint).

Tom Pittman wrote an assembler for the 4004 which was shipped in a EPROM with the earliest development board. I (Dennis Allison) wrote the resident assembler for the Intel Development System which targeted the 4004 and its successor, the 4040. The 4040 was essentially a 4004 with logical operations as well as arithmetic ones.

The native assembler had to be completely compatible with the cross assembler which ran on IBM 360 machines (256KB partition) which was written by Bill Byerly. The cross assembler was interesting since it was completely driven by a mechanically generated bottom-up parser.

The native development system assembler fit in 4KB of EPROM memory and included a bootstrap monitor and a rudimentary paper-tape editor. For large to moderate programs, the development system needed a memory extension as there was precious little space to for the symbol table in a bare bones development system. It was slow, but designed to work with a 10CPS teletype.

The architecture of the 4004 was targeted to calculator-like devices and not general purpose computing. The chip family included:

    * 4001 - 256-bit mask ROM and 4-bit I/O device,
    * 4002 - 320-bit RAM and 4-bit I/O device,
    * 4003 - 10-bit shift register,
    * 4008 and 4009 - standard memory and I/O interface set. 
The 4002 memory was organized into four blocks, each block consisting of 16 4-bit words and 4 4-bit status values rather than providing a uniform 80 nibble address space. The architecture presumed that the 16-nibble blocks would be used to hold floating point or fixed point data and the 4 status registers would hold exponent and scaling information.


> The 4004 is not the ancestor of the 8008; it was a completely different processor family with different antecedents.

Sorry, I didn't mean to imply that the 4004 was really an ancestor of the 8008, which is why I wrote:

> Overall, it bears little to no resemblance to its successor in name, the Intel 8008 (except for the internal stack, which both had--I will cover that in another posting).

I am pretty sure that the 8008 has its name because of the 4004, at least that is what Wikipedia told me (not a reliable source, I know). I will fix the article to make that more clear.

I have no experience with CPU-design, though, so I wrote the article from a ("modern") assembler developer's perspective.

Thanks for your comment, really interesting tidbits!





Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: