Hi Joan,
Regarding "Digital" my understanding from the Installation notes was that it would run on any platform:
Quote:
There is no installation required, just unpack the Digital.zip file, which is available for download. On Windows machines the EXE file can be executed, on Linux start the shell script and on MacOS the JAR file can be started directly. A Java Runtime Environment (at least JRE 8) is required to run Digital.
If there are any problems starting Digital on your system, please try to run Digital from a command line:
java -jar Digital.jar
More information here:
https://github.com/hneemann/DigitalThe term Bitslice refers to the way in which the overall architecture has been partitioned, mostly as a convenient method of simplifying the physical design.
The best place to start with this idea is with the ALU. For logical operations such as AND, OR, XOR these could be done using huge logic gate structures, say with 2 x 16 inputs, but since the bitwise logical operations can be done in isolation with no inputs other than the two bits being operated on (eg A3 and B3) then for convenience we can produce a 16-bit logic unit that consists of four identical 4-bit units placed side by side.
If we want to do addition, we would invariably start with a 4 bit adder (eg 74xx283) and build up the logic to support 4-bit addition feeding it with 4-bits from the accumulator and 4 bits from the data bus, with only the CarryOut signal being passed on to the next stage to the left.
You might wish to have a look at Dieter Muller's excellent article on ALU design to get a better idea of what I am proposing.
http://www.6502.org/users/dieter/a1/a1_4.htmSo my intended ALU is based on Dieter's design, built as a 4-bit wide modular design. As the module contains only 5 or 6 ICs it is very manageable to build and test.
Now extending this idea further, we can identify the other logic entities that need to be closely connected to the ALU. This includes the accumulator, the program counter and the register file. Again these devices are generally available as 4-bit wide TTL devices 74xx173 for the accumulator and other registers, 74xx161 for the program counter, and 74xx670 for a small 4-bit wide x 4 word register file. Again these devices use mostly "local" signals, with only control and carry signals being shared with adjacent modules. Again this makes of a simpler practical design.
Historically the PDP-8 was a bitslice design - consisting of twelve 1-bit slices, placed on 12 adjacent pcbs. Each slice held 1-bit of ALU, memory address register, memory buffer and program counter. If there was a fault on the machine, a single pcb slice could be exchanged for a working one.
I have set up a repository for my "Digital" sketches - which as the project progresses will document the various aspects of the design
https://github.com/monsonite/Suite-16Finally, onto Wozniak's "Sweet-16". Yes I agree, he was in the right place at the right time - and with a problem of performing 16-bit operations, on what was essentially a fairly resource limited 8-bit processor. Creating a 16-bit virtual machine, created an additional layer of abstraction, which made the task of programming easier. It's very similar to what Marcel has implemented on the Gigatron with his vCPU.
What I liked about the architecture, is that it extends from an "accumulator" machine, to an "accumulator plus 15 registers" machine. Whilst operations are still centred on the accumulator, the other operand can be locally available register, rather than an operand supplied from memory. This means that there is less requirement for memory accesses, and the overall speed of processing should be faster, with less memory access.
The architecture does not permit true register to register operations eg. ADD R5,R6 (as the MSP430 and almost all modern processors do) All operations have to go through the accumulator R0. However the register used as the 2nd operand can be defined as 4 bits within the 8-bit instruction width, and this leads to much simpler decoding, fewer ICs and a more efficient use of 8-bit memory for instructions. It also makes the assembly language a lot simpler to read with the ALU operation coded in the upper 4 bits and the register coded in the lower 4 bits.
There's a good article on Sweet-16 over on the 6502.org
http://www.6502.org/source/interpreters/sweet16.htmI'm going to use the Sweet-16 instruction set as a guide, but not rigidly adhere to all the same operations. As usual it will be a trade-off between useful instructions and hardware complexity. I'd like to introduce some compare, right-shift, and INC, DEC operations, and reduce some of the conditional branches, to leave space for set and clear carry. ( A bit like the "operate" instructions on the PDP-8).
Suite-16 is a work in progress, but the basics are just starting to come together. The project has been intended as a "brain-stretching" exercise, which will get me more involved over the next year in logic simulation, verilog and FPGAs, TTL breadboarding and software development.
regards
Ken
Edit: Corrected the wrong link to Sweet-16