Smallest 8-bit Computer Ever!

  • NoVIcE
    6th Sep 2017 Member 7 Permalink

    Smallest Computer Ever.

    [if enough small computers are made, this thread and the "Smallest Computer Ever" save will be turned into a list of smallest computers]

    So, yeah. Thats the second smallest one 65*98.

    (8 Bit Computer (max number is 2^8 = 256))

     

    ARCHITECTURE:

     

    8-bit ALU

    4 registers

    1 "standby register"

    31 byte RAM

    31 instruction memory

    15 instructions

     

    CPU Speed is dictated by instruction speed, not by a clock.

    Varies between 0.2 - 3hz

     

     

    More information about its size

     

    Size:65*98
    Volume: 6370
    Particles: approx. 3800


    Particle value is approximate, because it creates and deletes particles as it works.

    Volume to screen volume ratio:
    6370:227104
                        0.0281

    Particles to screen max particles ratio:
    3800:227104
                        0.0167

     

    Density to volume ratio:

    3800:6370

                        0.5965

    Pretty dense, considering its kinda hard to fill half of the space a computer actually occupies. Think of your own real PC right now :)

     

    Also:

     

    If you are willing to stack as much of these in one conventional TPT screen, you will be able to get 30 of them without the I/O ports.

     

     

    What component does what:

    Different components are colored and labeled.

     

    Make your own program:

    You can see more information about how exactly to program the computer.

    All syntax is there. It has a built programmer in the save.

     

    Devices:

    Currently there is just 1 keypad, i should probably make it smaller. If you make any device, i can add it.

     

     

     

     

    Computer has an I/O port.

     

    Input - Input a number to the standby register. Associated with: Instruction 3 - IN, Input on IO Port, Direct input (8-bit).

    Output - Output a number from the standby register. Associated with: Instruction 14 - DISP.

     

     

    Standby Register

     

    The computer has a so called "Standby Register". It is used in some instructions.

    Its basically a normal register just like the other 4. Its used like a "mediator" between different operations. So if you want to load number 215 and save it to register 2, you should do that:

     

    IN 215

    SREG 2


    Implementing that register was to make the computer smaller. At least with my deisgn.

    Below, * means the instruction is using the "Standby Register".

     

    Instructions (15):

     

    1 ROL                -     Rotate Left (Actually shift) <register A>, then save in REG <register C>

    2 ROR                -     Rotate Right (Actually shift) <register A>, then save in REG <register C>

    3 IN                  -*   Input a number to the "Standby Register". Leave without operand to request input (outputs code 0x008000000) & waits for direct input on IO port, value goes into the "Standby Register".

     

    4 JUMP               -     Jump to a line in the instruction ROM

    5 JUMPIF A>B      -     Jump to a line, IF <register A> (>) <register B>, else increment instruction as usual

    6 JUMPIF A<B      -     Jump to a line, IF <register A> (<) <register B>, else increment instruction as usual

    7 JUMPIF A=B      -     Jump to a line, IF <register A> (=) <register B>, else increment instruction as usual

    8 SUB                 -     Subtract <register A> & <register B>, then save to <register C>

    9 SUM                -     Add        <register A> & <register B>, then save to <register C>

     

    10 LREG              -*   Load <register A> to "Standby Register"

    11 SREG              -*  Save the contents of the "Standby Register" to <register A>

    12 LRAM              -*  Load RAM to "Standby Register". Address is <operand A>. ***

    13 SRAM              -* Save the contents of the "Standby Register" to RAM. Address is <operand A>.

     

    14 DISP               -* DISP is basically sending whats in the "Standby Register" to the OUT port.

    15 HALT              -   Empty instruction. Stops the computer. Continues if and input is made, or the start button is pressed again.

     

    You may wonder what are those <register A> etc. Well, if you go to the programmator, you will actually see that in each instruction you can assign up to 3 operands (numbers, that may refer to a register or something else, like a RAM address etc. Whether it says <register A> or <operand A> its all the same, but named differently so you know when it uses registers and when that number goes somewhere else, its just a value the current instruction uses to feed to different components so it does different things.)

    A, referring to <register A>; <operand A>

    B, referring to <register B>; <operand B>

    C, referring to <register C>; <operand C>

    JMP, used in instructions 4,5,6,7. Goes into the instruction ROM addresser.

     

     

    Also:

    More information about instruction 12: LRAM and instruction 13: SRAM.

     

    Address number is not like a conventional number. They are in powers of 2.

    So address 7 for example should be written as 128. Address 8 is 256. Etc.

    This was done in order to make the computer smaller. Otherwise it would have needed some kind of decoder for the RAM.

     

     

    Sample Programs:

     


    Default: Fibonacci Sequence:

     

    IN 1

    SREG 1

    SREG 2

    SUM 1 2 1

    SUM 1 2 2

    LREG 1

    DISP

    LREG 2

    DISP

    JUMP 4

     

     

    This program does not print each number on new line. It can be done, but the code for new line, space are pre-coded in the RAM. Thats because the computer allows only 8-bit numbers to pass through the BUS and therefore the RAM. However, the display's fault is that it uses all 29-bits for displaying. So i pre-loaded them in the RAM, as when loading, the information is preserved and succesfully delivered through the BUS and the OUT port.

     

    Edited 23 times by NoVIcE. Last: 13th Jul 2018
  • docRoboRobert
    7th Sep 2017 Member 1 Permalink

    This is great!

  • nstorepro
    8th Sep 2017 Member 1 Permalink

    Wow that's pretty nice. With all of this space I could use it for testing my 8-bit ROMs. 

  • JosephAustin
    5th Dec 2017 Member 1 Permalink

    How about word's smallest 16-bit computer? Also, how about (optional) ram/rom extensions?

  • Ben_Ger
    5th Dec 2017 Member 1 Permalink

    Now all you need to do is program it to actually communicate with another one of your units and you are golden.

  • NoVIcE
    9th Dec 2017 Member 0 Permalink

    )

  • NoVIcE
    22nd Dec 2017 Member 0 Permalink

    JosephAustin:

    How about word's smallest 16-bit computer? Also, how about (optional) ram/rom extensions?

     

    Making it 16 bit would screw up the whole design. So, maybe I should start making even smaller, but 16bit computer now, yeah.

     

    Extensions would be really hard to implement, but not impossible without breaking the current desing, so i will try to do it, thanks )

  • Sam_Hayzen
    13th Jan 2018 Member 0 Permalink

    The header is a tad inaccurate.


  • Breaker4life
    13th Jan 2018 Member 0 Permalink

    @poodiepie (View Post)

     Not for its time, it isn't.