What is ELLO about?
In one sentence – to have fun building and learn in the process.
The focus is away from competing with the big guns, such as Raspberry and the likes, but rather an alternative option to enjoy building and programming a small and very unpretentious computing system, entirely from scratch.
So, what are the goals?
When started with the project, I set several important goals ahead:
1. To let the user be able to build the entire computer themselves.
This means to be as simple as possible hardware, built only with atomic components (no pre-assembled modules), and without significant compromises on its basic functionality.
As “basic functionality” I defined the following set of parameters:
a) To be able to use standard input and output devices – keyboard and monitor.
b) To have some available non-volatile storage.
c) To have some reasonable minimum amount of RAM.
d) To have some means to produce sound.
e) To have some expansion capabilities.
f) To be built only with parts which are large enough for handling even by the most inexperienced user. This significantly complicates the choice of components as it excludes almost every available modern microprocessor or microcontroller as they are all manufactured only as small surface-mount packages.
2. Not to use a heavy and resource consuming operating system.
Trumpeting about great hardware and then leave the user banging his or her head in the wall, and having to search the Internet every time they need to write something, gives no pleasure to the user nor teaches them anything other than developing proficiency in using search engines. Hence, anything including the word “Linux” falls automatically into the “no-no” category of choices.
I decided to make the ELLO in the same proven way as the early personal computers – a built-in interpreter to allow immediate integration with the system.
3. To offer a “meaningful” programming language.
The opinions what programming language should such small computer include, vary a lot indeed. About 99% of all similar systems today run some dialect of BASIC, which by itself is an excellent and powerful programming language.
In contrast to all, ELLO includes a tiny C interpreter!
In my view and with the full respect to BASIC, which was my first, just like to many others, C is the one truly “universal” programming language, and worthy to be learnt by anyone who wants to have a closer contact with programming. It is the de-facto “The Language” in the modern computing world, especially in the modern embedded computing world. C is also much more “unsafe” language with significantly lower tolerance for errors than BASIC or other alternatives, especially when working with direct access to the memory and the other hardware resources. While that might sound scary, it is also beneficial for the user to learn and work without having an error net which saves them from mistakes otherwise. Teaching careful programming and awareness of the system resources can do only good to any programmer.
Due to its powerful features and loose syntax, C is extremely difficult for implementation as a runtime interpreter – only a handful ever written, none of which able to work well in a small bare-metal OS-less system like the ELLO. I jumped on this additional challenge with great enthusiasm, but it still took many months of hard work and debugging to get it to the current level.
Of course, the C dialect running on the ELLO is much simpler than its typical desktop equivalents, but still includes all the original language elements and even adding some limited compliance with the C99 standard. Its execution speed is of course far from what a compiled program would be like, but it still serves quite well its purpose in this case.
Finally, I owe big thanks to Geoff Graham for the source of his “ASCII Video Terminal” which was a valuable reference for me for the video generation and support of a PS/2 keyboard, and saved me many hours of development.
Also, extending the thanks to Alan Ott for his excellent and simple to use open-source “M-Stack” which ELLO uses for the handling of USB console.