AMD 2900 Chipset Research

Exploring the 2900 family bit slice chip set.

Similar projects worth following
Looking into the AMD 2900 bit slice chipset gathering information for future microcoded TTL cpu projects.

Working with mondern tools and vintage chips I am looking into the use of AMD's 2900 family of chips. The plans are to extend this knowledge into the design of bit sliced computers. 

The first part of this will be to access the functionality of the AM2901 4 bit slice ALU. This 40 pin dip chip contains the ALU section of a CPU.  This chips are designed to work together so you can extend the size of the ALU 4 bits at a time. In the documentation notes on setting up 64 bit ALUs.  When using multiple slices carry operations can be sped up using AM2902 look a head  carry chip. This is the same as what can be done with 74X181 ALUs.

Internally 16 four bit words of dual port ram. This ram is accessed by addressing it through the A and B ports of the chip.  A 1 word scratch pad register Q.  A one word data in port and a one word output port. 

There are Up/Down shift functions avalible for RAM and the Q register. A strange quirk of the shifter is that you can shift the RAM address Or The RAM and the Q register. 

Read more »

  • 1 × AM2901B bitslice ALU
  • 1 × Arduino Mega 2560

  • Side Tracked

    Rey Morta06/01/2020 at 05:02 3 comments

    I got side tracked for a bit. I have a 16 bit alu wired up. Its not the most photogentic project. To simplify working I made a stack of PCB board with AM2901 chips. The common signals travel vertically via stacking headers. This still needs fully tested. 

    I am still hung up on how I will setup the Microcode seqencer. I have in my possession all three options for AM2909, AM2910 and AM2910 chips. The current issue I am running into is the microcode map (ROM) for using 8 bit instruction requires memmory with 8 address lines and 12 data lines. 

    In other news I found a write up via Dangerous Prototype, Ken Shirriff did a post on the internal silicon of the AM2901.  Found here:

  • Side Notes

    Rey Morta03/28/2020 at 05:14 0 comments

    Just a couple of side notes. 

    Technically the AM2901  can be wired an used as a universal shift register offering both parallel and serial loading along with parallel and serial outputs. It is strangely possible to operate to serial streams shifting in at the same time. You would only be able output one value in parallel at a time. The controlling for this would be slightly akward. It is also possible to work with with this chip as a up/down counter with preload. 

    Doing either of these would be both expensiveand a waste of a more functional chip. 

  • Day 4

    Rey Morta03/25/2020 at 04:44 0 comments

    Spent some time writting micro op setup for testing chips. I went through my personal collection of chips and they all passed. 

    Read more »

  • Day 3

    Rey Morta03/24/2020 at 21:53 0 comments

    More frustrations today. Nothing seems to work when using Port B as a source. I broke down are wrote and made an automated program to scan through the possible 3 micro op combanations to preform:

    Set Ram[0] to 3

    Set Ram[3] to 4

    RegA[0]  + RegB[3].

    I knew from yesteraday that Source 7 (Data port, Zero) ) would allow me to write to ram. The program I set up would clear all of the Ram contents and the Q register Set ram locations 0 and 3 then try every combination of sources and destinations. It would report back if the results matched. 

    This did not go well. 

    After hours of trouble shooting and chip swapping I found the problem. The 5 volt supply off the Arduino was not strong enough for the AM2901 and was being dragged down to ~4 volts. 

    Powering the AM2901 off of a seperate power supply fixed the issue. 

  • Day 2

    Rey Morta03/24/2020 at 21:26 0 comments

    One my first day at this I was able to communitcate with the chip and access some of the functioanlities. A lot of this was achived by straight out brute forcing the inputs of the chip and watching the result. While this was time consuming I did confirm functinallity of a few micro ops. 

    This was done by setting the function to 0 for add and setting the carry pin high. I would set the source and destination values that I wanted to check with A port and B port 0. Then just pulse the clock. With certain settings this should create a counter. This was charted out on a spread sheet and varifed against the AM2901 data sheet. 

    I was able to determin how to read and write to the ram and the Q registers doing this. Functions using the B address port of ram seem flakey.  More brute forcing is envolved. 

  • Day 1

    Rey Morta03/24/2020 at 18:50 0 comments

    Wiring up the AM2901 to the Arduino Mega and getting a responce.  To start out I have only wired access to 2 of the address lines for the registers.  The output port from the AM2901B was held enabled. 


    Carry in 
    14,15,16,17Data Out (Y)
    30,31,32ALU Source
    33,34,35ALU Function
    36,37,38ALU Desitnation 
    50,51,52,53Data In (F)
    RAM0 to RAM3
    Q 0 to Q 3
    Held HighA2, A3
    B2, B3
    Held LowF output enable.

    Bit order for ports do not follow pin order

View all 6 project logs

Enjoy this project?



Peabody1929 wrote 01/25/2021 at 19:32 point

For 8 bit instructions, you do not need a microstore with 8 address lines and 12 data lines.  The idea is to "decode" portions of the instruction to drive the 2901 directly.  For example, divide the 8 bit instruction into three fields: 4 bits for opcode, 2 bits for register 1 select and 2 bits for register 2 select.  The 4 bit opcode is wired to microstore address lines.  Each of the register fields are wired to the 2901 register fields.  The microstore drives the rest of the 2901 signals directly.  The net result is a smaller, narrower microstore.  

  Are you sure? yes | no

Rey Morta wrote 01/26/2021 at 03:22 point

I keep over thinking this. I need to keep things simple to start. There is always a second version. 

  Are you sure? yes | no

Dave's Dev Lab wrote 01/25/2021 at 02:54 point

any updates on this project?

  Are you sure? yes | no

Rey Morta wrote 01/26/2021 at 03:07 point

Unfortunately not at this time. It is for good reasons though. I got a new job ended up spending a few months looking for a house much closer to work. I'm still sorting out the move. 

I appreciate having you check in. I'm still rolling around what my next steps should be. When I get settled in. Peabody1929 commented a little while ago with a good reality check for not over bloating things from the get go. 

  Are you sure? yes | no

Dave's Dev Lab wrote 01/26/2021 at 03:59 point

dandy! sounds like good reasons indeed! look forward to seeing some updates!

  Are you sure? yes | no

Bharbour wrote 06/01/2020 at 23:16 point

There is a book called "Bit-Slice Microprocessor Design" by John Mick and Jim Brick that was a standard book for digital design engineers in the 1980's. It has a lot of information on designing with the AMD 2900 family. As common as it was, used copies should be available still.

  Are you sure? yes | no

Dave's Dev Lab wrote 06/02/2020 at 01:24 point

excellent book! i picked it up a couple years ago!

  Are you sure? yes | no

Rey Morta wrote 06/02/2020 at 01:41 point


Actually I have looked through that book a couple times. BitSavers has
a full scan of it available. I'll put the link into my reference section. 

  Are you sure? yes | no

Dave's Dev Lab wrote 06/01/2020 at 17:56 point

dandy! looking forward to some insights! i've been reading up on these for a while for my own DIY CPU projects!

  Are you sure? yes | no

Does this project spark your interest?

Become a member to follow this project and never miss any updates