Recreation of the MC14500-based WDR-1-Bit-Computer
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
Total_Schematic.pdfAll Schematics in one PDFAdobe Portable Document Format - 1.29 MB - 05/14/2020 at 19:58 |
|
|
Total_Layout.pdfAll Layouts in one PDFAdobe Portable Document Format - 692.55 kB - 05/14/2020 at 19:58 |
|
|
Total_BOM.xlsxTotal BOM for all PCBs to import right into Digikeysheet - 16.30 kB - 05/14/2020 at 19:58 |
|
|
memory.xlsxUpdated!sheet - 12.24 kB - 05/14/2020 at 19:40 |
|
|
cpuboard.schsch - 1.78 MB - 04/24/2020 at 18:11 |
|
Or how one should never trust existing footprint libraries without double and triple checking everything!
This morning I decided to finally test the Computer with all cards inserted and... no clock! Not only did I swapped X1 and X2 on the CPU board, which was quickly fixed with a bit of copper and a sharp knife, but the CPU's Reset Line constantly was held high, at which the Clock Circuit of the CPU gets halted. After measuring a few times, checking the datasheet and the schematic of the switch, I found the reason why:
One would assume that the Reset Line is connected to 5V when the button is pressed. The footprint fitted perfectly to the switch I ordered on digikey, and even the symbol was nearly the same as in the datasheet. The only thing that I miss to check, and that could go wrong: Pins swapped!
In the actual datasheet, 2 and 0 are by default connected. Sadly the default library I found for it (Part "5501" in library "switch") has Pin 1 and 2 swapped.
I have to admit, that I rushed the creation of these PCBs a little, as I guessed that with the current COVID situation, shipping would get worse from China. In the hope to safe time by using as many existing libraries and parts, mistakes happend. Time to fix all 4 Buttons/Switches, but after that everything should work. Depending on the amount of errors, there will be a revision B at some point.
Finally all boards have been fully assembled and powered-on individually to check if any of them are faulty - so far, so good! The next step will be to test them on the main board, enter basic commands and see if it's running. Here are the pictures so far:
Finally the PCBs from china arrived, and that with a corona-bonus in the delivery costs (70$ instead of the usual 20$ on DHL)
But at least, the PCBs all look as expected:
Found some time to assemble and test the main board as well. The Buck Converter delivered 5.04V - good enough for 1 bit computer! To my surprise, the card-edge-connectors hold the single PCB Modules better than expected as well, which were the only thing that worried me.
Last but not least, the CPU Board that holds the MC14500 ICU, together with a 8-Bit Input and 8-Bit Output IC. Instead of the MC14599 Input / Output chip, I use the MC14099BCP instead - or it's still available equivalent, the CD4099B, that is still sold and available on DigiKey.
With all boards organized and planned, there is nothing to start the production of them and ordering the components.
A classic computer build isn't fully classic to me, until there is a panel full with blinkenlights!
So of course, this is a goal for me as well. As LED Driver I just went with the same ones that were used on the original WDR computer, the ULN2003.
To my surprise, fitting two A4 schematic pages worth of LEDs, Drivers and Resistors onto a 100x100mm board (which 28mm is taken up by the Card-Edge Connector) was not that easily - but that didn't stop me of course.
Had to get a bit creative with the way the LEDs are arranged, but I think it works out just fine like that. Basic Letters and Numbers in the top copper layer provide the basic info to quickly see which LED represents which signal from the BUS.
With the mainboard taken care of, and a proper bus pinout defined, I decided to tackle the memory as next target. Compared to the original, I don't plan to use the old-style Intel 2112 RAM chips, but instead went for the cheapest non-volatile storage I could find on DigiKey:
The SST39SF010A
With it's 128k Bytes of flash memory, it's a beast compared to the original 256 Bytes of RAM. Not sure what I will do with so much RAM, but since it's also one of the cheapest solutions with 1.13CHF, I decided to stick with it.
To handle the 17 Address Lines, I use four 4-Bit Counters (74HCT193) which leaves only one address pin left - A0.
A0 is hooked to a jumper, which by default is connected to ground, so the Computer behaves just like the original WDR one. Alternatively and with bit of solder and a knife, it can be connected to the clock signal instead. This allows to turn it inot a interlaced memory board, which brings a 12bit wide IO structure, compared to the default 4bit one. More about it can be found in Motorola's handbook about the MC14500.
A layout goal for the Computer Cards, are to stay within 100 x 100 mm of size. Here's the resulting layout:
The connector on the right is hooked right up to the Address Counters, allowing to load a new address and to make it easier to implement a future, possible "jump & return" function.
After taking a closer look at the "BUS System" that the original 1-Bit-Computers used, I decided to make my own one which allowed for more flexbility. For that, I plan to use the card edge connector 6364666-1 by TE.
The mainboard is finally also done. Instead of no BUS slot but an expansion header, I added 4 unused expansion cards and the classic expansion header for downward compability. Also added a proper connector to add a external keyboard. The schematics are uploaded as .PDF together with a parts list.
(Also, still figuring out how this online HaDIO Web Editor works)
This is the BUS definition:
Pin Row 1 | Name | Description | Pin Row 2 | Name | Description |
1 | +5V | Voltage Rail | 62 | +5V | Voltage Rail |
2 | GND | Voltage Rail | 61 | GND | Voltage Rail |
3 | INST0 | Instructions (IO Address) | 60 | PCNT0 | Program Address / Counter |
4 | INST1 | Instructions (IO Address) | 59 | PCNT1 | Program Address / Counter |
5 | INST2 | Instructions (IO Address) | 58 | PCNT2 | Program Address / Counter |
6 | - | Omitted Pin & Hole | 57 | PCNT3 | Program Address / Counter |
7 | INST3 | Instructions (IO Address) | 56 | PCNT4 | Program Address / Counter |
8 | INST4 | Instructions (Actual Instruction) | 55 | PCNT5 | Program Address / Counter |
9 | INST5 | Instructions (Actual Instruction) | 54 | PCNT6 | Program Address / Counter |
10 | INST6 | Instructions (Actual Instruction) | 53 | PCNT7 | Program Address / Counter |
11 | INST7 | Instructions (Actual Instruction) | 52 | PCNT8 | Program Address / Counter |
12 | CLK IN | MC14500 Clock IN (Used to define the clock) | 51 | PCNT9 | Program Address / Counter |
13 | CLK OUT | MC14500 Clock Out (Used for Peripherals) | 50 | PCNT10 | Program Address / Counter |
14 | JMP | Jump Signal (Not used) | 49 | PCNT11 | Program Address / Counter |
15 | RTN | Return Signal (Not used) | 48 | PCNT12 | Program Address / Counter |
16 | FLAG 0 | Flag 0 Signal (Not used) | 47 | PCNT13 | Program Address / Counter |
17 | FLAG F | Flag F Signal (Causes the Program Counter to (Preset/) Reset | 46 | PCNT14 | Program Address / Counter |
18 | WR/!RD | Write / Read IO | 45 | PCNT15 | Program Address / Counter |
19 | DATA | Data BUS | 44 | OUT0 | Output |
20 | RR | Result Register Output | 43 | OUT1 | Output |
21 | MEMWRITE | Write-Enable Signal for the Program Memory | 42 | OUT2 | Output |
22 | RESET CPU | Resets the CPU and IO Peripherals | 41 | OUT3 | Output |
23 | IN0 | Input (connected to the Result Register) | 40 | OUT4 | Output |
24 | IN1 | Input | 39 | OUT5 | Output |
25 | IN2 | Input | 38 | OUT6 | Output |
26 | IN3 | Input | 37 | OUT7 | Output |
27 | IN4 | Input | 36 | N.U. | Not used, but routed on the Main Board |
28 | IN5 | Input (connected to Out 5 on CPU Board by a Jumper) | 35 | N.U. | Not used, but routed on the Main Board |
29 | IN6 | Input (connected to Out 6 on CPU Board by a Jumper) | 34 | N.U. | Not used, but routed on the Main Board |
30 | IN7 | Input (connected to Out 7 on CPU Board by a Jumper) | 33 | N.U. | Not used, but routed on the Main Board |
31 | N.U. | Not used, but routed on the Main Board | 32 | N.U. | Not used, but routed on the Main Board |
I've been looking for some documentation and data about both the computer and some of the special parts for a while now, and lucky there is a website that seems to provide a lot of scanned data and even pictures, with a second website showing a different-looking version of it.
1: http://wdr-1-bit-computer.talentraspel.de/
2: https://www.old-computers.com/museum/computer.asp?st=1&c=834 and
3: https://www.old-computers.com/museum/photos.asp?t=1&c=834&st=1
The training computer on the pictures from the old-computers website shows quite a some differences compared to the scanned documents and pictures on the wdr-1-bit-computer website. I assume that one computer was built according to the WDR instructions, while the other might have been built like it is printed on the cqDL Magazine.
It seems like the cqDL (lower schematic picture) version seems to have some additional features compared to the more lightweight WDR version, but it also looks like that both versions are software compatible to eachother. The idea of manually setable program address and to have another I/O-select-Address compared to the WDR version definitely will be integrated into my version, if not further expanded.
Both magazines provide excellent documentation and will be used as references. The WDR Magazine seems to be more a guide, teaching the very basics as well, but also shows many possible expansion modules and their features, while the cqDL Magazine prints it more compact.
Now the next step for me is to see which components are still available, where I can get them and which components I can replace with newer ones. I can imagine the biggest issue will be the 1-bit CPU MC14500 itself, but luckly I got 5 of them from ebay. But if I ever decide to turn this into a full kit, I gotta think of an alternative.
Create an account to leave a comment. Already have an account? Log In.
A very nice project, congrats!
Q: how do you enter programs?
I browsed some of the docs (including this one: http://wdr-1-bit-computer.talentraspel.de/documents/wdr_1-40.pdf ). The didactic approach is all but German ("Die wenigsten Schüler werden jemals im Berufsleben eigene professionelle Programme schreiben müssen, weder in Basic, Pascal, Logo, Elan oder sindt einer Sprache.")
Due to a bug, the only way currently to enter programs is via a flash programmer and popping the memory chip back in. Originally it should have been entered via the large digital keys and the dip switches, or alternatively via a keyboard that could be hooked up at the mainboard PCB.
The memory card features an additional connector to load the memory address, plus the write-memory line. This would allow a "debugger/programmer" card to be installed onto the system to have some sort of "in-circuit-programmer" capabilities for larger programs.
I thought of building something similar with a MAX II CPLD. Do you know of an analysis of data and control paths of the MC14500 besides the one below?
https://www.linurs.org/mc14500.html
Become a member to follow this project and never miss any updates
By using our website and services, you expressly agree to the placement of our performance, functionality, and advertising cookies. Learn More
A couple of us (https://hackaday.io/starhawk and https://hackaday.io/256byteram) on Hackaday have played around (independently) with the MC145000B.
These links may be of use:
http://tinymicros.com/mediawiki/images/e/ec/MC14500B_Handbook.pdf
and
http://tinymicros.com/mediawiki/images/6/65/MC14500B.pdf
The manual has a demonstrator design which is worth spending time reviewing.
Our focus was to build a similar CPU to the MC145000B using standard TTL/CMOS ICs.
Here is my 1 bit CPU:
https://cdn.hackaday.io/images/5494011505356439342.jpg
They are quite easy to design and rather fun to program. Quite good at programmable logic control (e.g. think of a traffic light controller). But completely useless for numerical operations.
Regards AlanX