8bit computer status so far
Okay, I’d like to give you guys an overview of the status of the 8bit computer build. (Also see video at the bottom of this post).
The Memory modules
First of, here’s the clock and the memory. I already described the clock module, the memory consists of three modules:
- the Memory Address Register (MA)
- the Memory (MEM) itself (256 bytes)
- the Memory Input (MI) module
The MA module
On the MA module, I built a switch to choose between Run / Programming mode. This also influences the MI module, so we can – in programming mode – set the address and input data into that memory location..
The MA module gives us control signals:
- MAI; open up for the bus and accept the address that’s on the bus into the MA register
- MAO: set the value out of the MA register on the bus
- MAC: Clear the MA register
The MEM module
The MEM module is of my own design, built on the basis of two AM9109 memory chips. In total, it holds 256 8bit bytes. It features two control signals:
- MI; open the memory (at the address pointed to by the MAr) up for the bus and accept the data that’s on the bus into that memory address
- MO; set the data form memory (pointed to by the MAr) on the bus
The Memory Input (MI) module
This module controls the input to memory. Based on the RUN / PROG mode switch mentioned earlier, memory input will come from the bus at the next clock cycle on the MI signal or from the onboard DIP switches after a press on the INPUT button.
The Instruction Register module
The IR modules holds the instruction that is to be executed. From here it will be used in the (future) Control Unit.
The IR module takes three control signals:
- IRI; open up for the bus and accept the data that’s on the bus into the IR register
- IRO: set the value out of the IR register on the bus
- IRC: Clear the IR register
Program Counter and ALU
Next are the Program Counter (PC), and the Arithmetic Logic Unit (ALU) together with two registers, the A register and the B register. Let’s have a look at a picture first.
The PC will control the flow of our program by incrementing the address and putting it on the bus in a controlled fashion to fetch the next instruction. It accepts the following control signals:
- CE; Count Enable; the PC is incremented at the next clock cycle
- CO; Counter Out; the value of the PC is put on the bus
- CI; Counter In; get the value of the PC from the bus, to facilitate jumps
A and B registers
The A and B registers are connected to the ALU, always. They hold the data that is to be computed with. They take the following control signals:
- AI / BI; open up for the bus and accept the data that’s on the bus into the A or B register
- AO / BO: set the value out of the A or B register on the bus
- AC / BC: Clear the A or B register
The Arithmetic and Logic Unit (ALU)
The ALU is where the work happens, the current one does adding and subtracting and a future ALU will also do shift and other logic operations. The current ALU accepts control signals:
- EO; (Sigma Out) get the result of the calculation and put it out on the bus
- SB; do subtraction instead of adding
The OUT register
This register holds the value that is to be displayed using some OUT instruction (yet to be developed).
OUT accepts three control signals:
- OI; open up for the bus and accept the data that’s on the bus into the OUT register
- OO: set the value out of the OUT register on the bus
- OC: Clear the OUT register
The new ALU
New ALU, I hear you say? And this one isn’t even finished yet… That’s right. A guy can dream, right?
This new ALU is built around the 74LS181 chip, that can do 4 bit arithmetic and logic operations. Combining two of them gives us an 8 bit wide ALU. More on this module later, but here’s a sneak peek:
See it at work
Here’s a little video I shot while the PC was counting and all the registers took the value of the PC in.