Close
0%
0%

DekatronPC

Silicon-free computer on vacuum and cold-cathode tubes with pure brainfuck instruction set

Similar projects worth following
Decatrons can do +1 and -1 operations by desing, so they are best devices for brainfuck instruction set.

As a next generation of BrainfuckPC, DekatronPC should have next characteristics:
> 8 instructions - pure brainfuck only without RLE;
> 10k or 100k IP counter;
> 256 data counter;
> Harvard architecture;
> Up to 40kHz clock(as A103 can do that) - 10kHz clock is acceptable;
> ROM and RAM size - currently unknown;
> RAM device - ferrite core memory

Motivation

DekatronPC is next project after BrainfuckPC relay computer. 

I made some architectural mistakes in relay computer and want to create more clear an much more insane device.

Overview

Harvard architecture with separate memory for code and data

30000 8-bit cells.

Decimal data representation

Instruction Set

Main point - pure brainfuck. If BrainfuckPC have fully-functional 16-bit adder and can ADD/SUB any 8-bit of 16-bit CONST, DekatronPC due to dekatron feature can do only +1 and -1.

DekatronPC instructionbrainfuck equivalent description
INC+Old value from current memory cell is loaded into dekatron counter, incremented and stored back
DEC-Old value from current memory cell is loaded into dekatron counter, decremented and stored back
ADA>Increment number of current memory cell (go forward through memory)
ADS<Decrement number of current memory cell (go backward through memory)
IN,Read ASCII symbol from terminal and store it in a current memory cell
OUT.Write value from current memory cell to a terminal
[[If value of current memory cell is not zero - do nothing.
If zero - increment IP pointer while the end of this loop is not founded
]]if value of current memory cell is zero - do nothing
If not zero - decrement IP pointer while the begining of this loop is not founded.
NOPn/aUsed for loop alignment

Architecture

Hardware, which can support described instruction set can be implemented on four reversible dekatron counters:

  1.  IP counter - can count from 0 to 999999 (6 dekatrons). Just represent current instruction number
  2. Loop level counter - can count from 0 to 999 (3 dekatrons). Used for cycles limits lookup
  3. AP counter - can count from 0 to 29999 (30000 memory cells ) (5 dekatrons). Just represent current memory cell
  4. Data counter - can count from 0 to 255 (3 dekatrons). Used for loading data from memory, modifying it, printing, reading and storing in memory

Just only 17 dekatrons are needed to make the whole device. But each dekatron require up to 10 vacuum tubes. 

MullardBook2Part3ValvesJan1971.pdf

valves and tubes datasheet

Adobe Portable Document Format - 10.48 MB - 02/02/2018 at 09:24

Preview
Download

Adobe Portable Document Format - 1.08 MB - 02/02/2018 at 09:23

Preview
Download

Adobe Portable Document Format - 748.14 kB - 02/02/2018 at 09:23

Preview
Download

  • The fastest soviet dekatrons!

    Artem Kashkanov04/03/2019 at 19:23 0 comments

    Yeah!!!! I got 22 pcs of the fastest soviet dekatron-poliatron A103 - It can count on 50kHz!

    I need only 17 for Dekatron PC, so now I have enough dekatrons to build machine...

  • I Found 4Kbytes of ferrite core memory!

    Artem Kashkanov11/07/2018 at 08:19 5 comments

    One module contain 128 * 16 bits of ferrite core memory

    What's inside? a lot of thin ferrite plates with a lot of holes

    It's perfect inside:

    And I have 16 of them!

  • A lot of connectors

    Artem Kashkanov09/05/2018 at 05:36 0 comments

    Great gift from my subscriber.

    I'l use this connector to interconnect lamp computer blocks.

  • Magnetic punched card reader

    Artem Kashkanov08/22/2018 at 07:52 0 comments

    This strange devices are used for reading punched card with 14x32 holes. In some holes short-cut turn should be placed.  If turn is presented - coil return signal corresponded to log. 1, if not - log.0

    I will use this devices in DekatronPC to input my programs into PC memory.

  • Punched tape writer and reader

    Artem Kashkanov04/25/2018 at 06:14 0 comments

    I bought beautiful staff - punched tape reader (Left) and writer (Right)

    They uses standard 25mm tape.  Writed has 8-bit mechanism. Reader can eat 8, 7 and 5 bit tapes with two different sizes.

    Waiting holidays to tear down and repair. They should work, but need some inspection

  • DekatronPC arch first assumptions

    Artem Kashkanov04/21/2018 at 07:48 0 comments

      I woke up and drew this.

      Some comments:

      1. Harvard arch - two ferrite core modules. One for program, another - for data. Each one has decade address input.
      2. Main dekatron counters - at least, four:
        1. Data counter. From 0 to 255.
        2. Address Pointer counter. From 0 to 10^4 or 10^5
        3. Instruction Pointer counter. From 0 to 10^4 or 10^5 too.
        4. Loop Stack counter. Up to 100 or 1000. For looking up opening instruction of current cycle (as we can have inner loop)
      3. Dekatron counters has decade output, so we should use some converter to BIN, or use weak memory filling.
      4. For program loading I want to use punch tape. I already have punch tape reader and writer!
      5. Want to find old CRT terminal for Console In/Out operations.

  • Nixie Tube Counter

    Artem Kashkanov03/31/2018 at 07:42 1 comment

    My friend found very interesting schema. Wneh we do not use any special counting devices - e.g. neon tiratrons or dekatrons, but counting directly on nixie. Want to try this schema.

    It look like as classic schema on tiratrons, but here we have built-in tiratrons in nixie tube. Very interesting and compact... But use diodes... So not acceptable for silicon-free project.

  • Native Brainfuck Loop Implementation on Dekatron Counters

    Artem Kashkanov02/09/2018 at 12:38 0 comments

    On dekatron bi-directional counter we can do only Load/Store and Increment/Decrement operation I try to understand how can we implement native Brainfuck loops.

    In brainfuck language Loops are marked with '[' and ']' instructions. If on executing ']' instruction current data value is not null - we should return to IP after '[' instruction.

    Loops can be nested with very deep stack levels. So, let's first add Word-length register and store IP value of last '[' instruction:

    If we execute ']' instruction and see, that our stored value is valid and we need to do next loop iteration - we just load this IP.

    If we should fall through to the IP after ']', we go there and send invalidating signal to our cache value.

    As a result if we need to go to the beginning of outerLoop we should find beginning IP value.

    Let's add IpStack Counter. It's max value would be the limitation of max stack level. For example we can count from 0 to 1000 - just need 3 dekatrons, or 10 tiratrons (for tiratron counter).

    So each loop end we increment Stack counter, and for loop beginnings - decrement it. And do IP decrement. When IpStack becomes to be zero it means that we found outerLoop beginning. We can load this IP to cache and start performing yet another iteration of the loop.

  • One dekatron unit

    Artem Kashkanov02/02/2018 at 09:20 2 comments

View all 9 project logs

Enjoy this project?

Share

Discussions

Dave's Dev Lab wrote 04/16/2018 at 22:14 point

Hey Artem! the witch document you have is a very old version, i have an updated one with new graphics and corrections - https://github.com/prpplague/witch_dev/blob/master/documentation/harwell-ee-1951-txt.pdf

also, all of the WITCH documentation i have can be found in my github including recreated drawings: 

https://github.com/prpplague/witch_dev/tree/master/documentation

  Are you sure? yes | no

Artem Kashkanov wrote 04/21/2018 at 07:39 point

Wow! Thanks for clearing the document!

  Are you sure? yes | no

roelh wrote 02/03/2018 at 18:34 point

Hi Artem,

sounds like a nice project !

In your title you talk about 'other cold cathode tubes' , so I think you will like the clock with neon tube counters made by a Dutch guy:

http://www.pa3fwm.nl/projects/neonclock/

I don't know how may decatrons you have, but instead of a brainf*ck computer you could perhaps build a more 'real' computer like the witch (that you will know):

https://hackaday.io/project/19955-witch-e-decimal-based-computer

But you could build a version with real decatrons instead of chip counters. You could be the first one to build a computer or calculator without transistors or chips (tubes only).

The witch uses decatrons (quite a lot) for the main memory. If you plan to use ferrite memory,  you will need the decatrons and other tubes just for control functions, and then the 30 that I see on your picture might be enough.

The 'real' computer, as I see it, will only have move, increment and decrement functions. But you will need several pointers to memory, and a displacement in the instruction, to create a indirect-with-displacement addressing mode that will lead to an efficient processor. Increment and decrement can be done by your decatrons. In another implementation, increment and decrement would only need a shift and an XOR gate, to count in a LFSR sequence. 

Your 'real' computer could demonstrate arithmetic and trig/log calculations, as well as playing Tetris or other fun stuff.

  Are you sure? yes | no

Artem Kashkanov wrote 02/03/2018 at 20:37 point

Thanks for your advices! 

I know about Dutch guy clock - I thought to build the same one using MTX-90 tiratrons, but why to create yet another clock... 

Currently I have 25 dekatrons - USSR models: A101, A102, A103 It might be enough to build architerture like BfPC - with three bi-directional counters - IP counter, AP counter and Data value counter.  

Anyway I have no idea how this project will look like, just assume the same arch as my current project, but you noticed right thing - this would be silicon-less device.

Mandatory requirement - tubes only (with some few relays).  

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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