colorForth and the Art of the Impossible
Howerd Oakford, Inventio Software Ltd, 19 Oct 2001
"I choose a block of marble and chop off whatever I don't need" Auguste Rodin ( when asked how he managed to make his remarkable statues ).
The direction of computer science in the early twenty-first century is the same as the culture which is creating it – global, standardised uniformity. How refreshing to find a new programming environment which bucks the trend.
Chuck Moore described his ColorForth as "brutally simple". Using it has been compared to "programming an alien computer". It is gloriously non-standard.
· ColorForth uses only 27 of the 102 or more keys available, and the letters are not the ones printed on the keyboard. The Enter key is not used, and the space bar is used to enter a command.
· The font provided as standard is the conventional Latin alphabet, but is not in alphabetical order, and can be modified by the Icon editor to display any pattern you like.
· Characters are stored using Huffman encoding, not ASCII. Yes, ASCII is not used. 'a' is 5, not 97, 'b' is 19, not 98. Definitely not ASCII...
· The text editor stores pre-parsed Huffman encoded strings ( one or more 32 bit values ) into Blocks, and must Huffman decode before displaying them.
· One call to the BIOS to set up the video card is all that remains of the layers of operating system which usually cripple your PC.
So you've found a computer with the right sort of AGP ( or PCI ) video card, and ( in my case ) dug up an old multi-function ISA card with a compatible floppy disk chip and got colorForth to boot. What next?
The bottom right hand corner of the screen displays a table of the functions of the 27 active keys on your keyboard. Press "e" and the enter key, ( or "d" and the space bar as they are more commonly known, ) to start the editor.
Something like a Forth block appears on the screen, but without the line numbers, and in lots of different colours, and the keyboard pattern changes to show you the new set of functions which define the editor. "-" and "+" ( the "M" and "/" keys ) move up and down the blocks 2 at a time ( documentation is on odd numbered blocks ).
Having viewed the source, exit the editor ( by pressing the space bar ), and load the Icon editor by typing "icon" . You can now edit the font.
If you edit the pattern for a character which is currently being displayed on the screen you will see all occurrences of that character change. This is because there is a display task which continuously executes the Forth code following the word "show".
Everything you see on the screen is being continuously updated, at 24 Hz in my case, synchronised to the video display frame rate.
This is your opportunity to edit all of the character set to say, the Greek or Cyrillic alphabet, if that is what you are more comfortable with.
Type "save" to save the system to disk, but keep plenty of backups!
So you've learnt how to type using only 27 keys, to edit in colour, to setup a new keypad and actions. What next?
I visualise this new Forth environment as an infinitely large granite table, thinly marked out with a square grid. Each square is a Forth block. Some of the squares are filled by little islands of coloured text - these are the programs. One square is "home", where you start from. When you first run colorForth, this home square is the Forth outer interpreter, something like QUIT. If you type a Forth word's name here, you will execute it.
When you run one of these programs, you "jump" to that square, and you then see the world from there. Lets jump to the editor. The keypad actions change, and a new keypad display appears on the screen. The outer interpreter is no more, just editor functions. Now jump to the icon editor - yet another keypad design and set of functions.
ColorForth has several innovations - circular stacks, the splitting of the @ and ! atoms, the use of ones' complement subtraction and other improvements which have come out of Chuck's hardware designs.
But for me, the big one is the way that Chuck has applied the Forth “philosophy” to the Forth language, and created an environment which connects program context to the human brain in a simpler way :
The keypad display is a visual mnemonic for the program context and keypad actions. These actions have all of the possibilities that we are used to in Forth, but live in a world with even fewer boundaries.
In conventional computer languages the system is divided up into functionally different components – editor, compiler, linker, debugger, emulator etc. An interface is defined between each component, and often this is a file containing ASCII characters. ColorForth has utilities to create such a file, in order to interface to the rest of the world, but does not use this format internally. It is easy to overlook the magnitude of this last sentence.
What are the advantages of discarding so much that is taken as fundamental by the rest of the computing world? This is in fact the wrong question, because it assumes that the decision to use or discard each and every standard was made on the basis of its relative advantages or disadvantages, taken separately. If you start with that mindset you will discard colorForth at the first hurdle. It is discussing the pile of rubble on the floor, not the work of art.
ColorForth is the way it is because it is necessary to be that way. It has its roots in the reality of its own environment, not in layers of artificially constructed interfaces.
…of the Impossible
Suppose for a moment that a computer removed from a crashed alien craft was powered up and its software analysed. What would it be like?
The keyboard would be more likely to have 27 keys than 102. The QWERTY keyboard has evolved from mechanical typewriters which needed one key for each character. If the aliens are carbon-based life forms they probably have relatively few digits, like us, so 27 keys would be more than enough.
The use of two stacks and multiple small procedures ( i.e. Forth ) can be discovered by any sufficiently advanced civilisation as a good way to write programs, likewise Huffman coding is a universal expression of data compression using a binary tree.
ASCII is just an Earth-bound agreement. The “operating system” approach with its manifold API's is merely an artefact of 21st century Western business practices.
Is it possible that two different civilisations, separated by time and space, could discover the same reality? Could ET have created colorForth?
Many people have been using Forth to create programs which are impossible with any other language. ColorForth is one of those programs. I like it.