Hello its me from 2024. I made this back in 2017 and looking back I came across as abit annoying, so I apologize lol
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"
30 word RAM (you can write 8 bit values, but read 29 bit values)
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 an 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.
This is great!
How about word's smallest 16-bit computer? Also, how about (optional) ram/rom extensions?
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 )
Not for its time, it isn't.