I have replaced the low resolution screen-shot of the Hack Bitslice with the following PDF:
Attachment:
HACK_bitslice_regs_13.pdf
ALUThe ALU has two inputs which can be set to zero with control signals ZX and ZY (IC5, IC6) and also inverted/negated with NX and NY (IC3, IC4)
After zero and negation, the inputs enter a full adder (IC1, IC2), and then a 2 input MUX (IC9) which allows selection between the adder SUM output or the AND output of X and Y. IC10 allows the negation of the output and IC16 detects if the output is zero.
This combination of an ADD operation, or alternatively an AND operation allows a wide variety of functions to be derived - especially when used with selective zeroing and negation of the inputs and negation of the output (NO).
Whilst being flexible, it does require 6 control inputs (ZX, ZY, NX, NY, F, NO and Carry In). It is also a ripple carry adder - so the maximum speed of execution will be dictated by the carry propagation time, and the propagation delay of the gates used.
Address and Data MultiplexersIC7 forms a 2 input multiplexer - allowing the selection between the memory or the data register to form the Y input to the ALU.
IC8 selects between the output of the ALU or output from the ROM to be used as the input to the address register.
Address and Data RegistersThe Hack design has an address register (AREG) and a data register (DREG) - generally known as the accumulator. These registers consist of a D-type flip flop preceded by a 2 input data selector. You can either accept a new input or regenerate the previous register output. The logic here is similar to a 74xx377, which allows the Q output of the flip flop to be recirculated back to the D input via a 2 input mux - see below.
Program CounterThe Program Counter is a similar D flip flop (IC19) preceded with logic to allow it to be loaded from the address register via IC18, incremented by 1 by IC13 or reset.
Hack is a fairly simple accumulator based machine aimed at teaching the principles of cpus. It lacks the elegant addressing modes that make the coding easier. However it could be constructed in bitslice form, creating a machine of similar complexity to the PDP-8.
With instruction decoding and memory access the design would be about 1600 nand gates (400 packages).
Choosing 74xx86 quad XOR, 74xx157 data selectors, 74xx377 octal registers and 74xx283 4-bit adder would reduce the package count considerably.