CESIL controlled Xmas tree on the Raspberry Pi

CESIL? What on earth is that, I hear you cry! Or maybe some of you are recoiling back in horror at the name of the 1970’s educational programming language stirring up bad memories…

Or you’ve read this months MagPi magazine and seen the article there!

Recent years have seen a resurgence in various activities to resurrect or re-create some of the very first computers that were built. The National Museum of Computing on the Benchley Park estate is home to many projects – and recent additions have been “Colossus” which was designed to break the Lorenz cipher and started working in 1943-1944, and the WITCH computer which came online in 1951 and was recently rebuilt and “rebooted” using most of the original parts in November 2012.

CESIL stands for: Computer Education in Schools Instructional Language. It was a simplified assembly language which students would write out on special coding sheets, then send off to their local computing centre and (hopefully!) get back the results of the run a week later – in time to fix any errors and wait another week…

So fast-forward 40 years or so and lets have some fun with CESIL, a few extensions to the language and a CESIL fairy-light controlled Xmas tree…

CESIL Operators or Instructions
Instruction Purpose
LOAD Transfer the number into the accumulator
STORE Transfer the accumulator into a named variable
JUMP Jump to the given label
JINEG Jump if the accumulator is negative
JIZERO Jump if the accumulator is zero
ADD Add a value
SUB Subtract
MUL Multiply
DIV Divide
HALT End program
IN Read a number from the keyboard
OUT Outputs the accumulator as a number
PRINT Prints a literal string (in “quotes”)
LINE Prints a new line
Extensions
JSR Jump to a Subroutine
RET Return from Subroutine
Tree Specifics
TREE Create the tree!
ROW Transfer the accumulator into the Row register
COL Transfer the accumulator into the Column Register
COLOUR Set the fairy light indicated by the Row and Column registers to the colour held in the accumulator
WAIT Pause for the given number of centiseconds – Also causes a display update.

A CESIL program is essentially three columns of text. The first column (which  can be blank) is the label – it’s a placeholder in the program which you can “jump” to from other parts of the program. The middle column is the operator – that’s the instruction to execute, and the final column is the operand – this is data for the instruction to use. This data may be the name of a label if it’s a jump  instruction, it may be a number or it may refer to a named memory store, or variable.

The CESIL machine has one register or accumulator. This implementation is limited to a maximum of 256 program lines and 256 variables.

My extensions to the CESIL machine have included 2 more registers to hold the row and column locations of the lamps and a colour instruction to set the lamp colour as well as a subroutine facility.

As an example: here is a simple CESIL program to print out a multiplication table:

# mtable:
#       Multiplication table generator

        line
        print   "Multiplication table generator"
        line
        print   "What table"
        in
        store   table

        load    1
        store   index

loop:
        load    index
        out
        print   " TIMES "
        load    table
        out
        print   " = "

        mul     index

        out
        line

        load    index
        add     1
        store   index
        sub     11
        jineg   loop
        halt

But maths is boring… So lets play with the xmas tree instead. Here is a picture of our tree with the bottom row of 8 lights red and the rest silver:

The CESIL powered xmas tree

This program makes all the fairy lights silver:

# silver:
#       Make the tree silver!
#       Note: We have 4 rows of 8 columns and
#       Row 0 is the bottom, column 0 is to the left

# Fire up the tree

        tree
        load    7       # code for silver
        store   colour

        load    3       # 3 into the Acc
loop:
        store   row-count
        row
        jsr     fill-row
        load    row-count
        sub     1
        jineg   done
        jump    loop

done:   halt

# fill-row:
#       8 columns in each of the 4 rows

fill-row:
        load    7
fill-loop:
        store   col-count
        col
        load    colour
        colour
        load    col-count
        sub     1
        jineg   fill-done
        jump    fill-loop

fillDone:
        ret
Fairy Light Colours
0 Black (Off) 8 Grey
1 Navy Blue 9 Blue
2 Green 10 Lime
3 Teal 11 Aqua
4 Maroon 12 Red
5 Purple 13 Pink
6 Olive 14 Yellow
7 Silver 15 White

Get the software

This CESIL interpreter is written in RTB (Return to BASIC), so the first thing you need to do is install the RTB interpreter if you don’t have it already.

Fetch the CESIL code and examples using GIT:

git clone git://git.drogon.net/cesil
cd cesil
rtb cesil

and off you go. Check the files in the cesil directory – you’ll find several examples including the multiplication table generator (mult), a prime number generator (primes) and a few other examples (all with filename extension .csl) the row-up.csl program contains some handy subroutines for filling the entire tree or one row or one column with a single colour…

You can stop any running CESIL program with the Q key on the keyboard, and pause it with the spacebar.

CESIL programs can be written using any text editor (e.g. nano, vim, etc.) and you can type in upper or lower case – they get translated to upper-case at load time. Filenames should have a .csl extension to them, but you don’t need to type that when loading a CESIL program into the interpreter.

And during December and January 2012, there is a little fun competition running to win one of my Raspberry Ladder boards – but to find out more about that, you’ll need to go and read the MagPi magazine article, or just email me (projects@drogon.net) with your programs by the 25th of January, 2013 and I’ll make the selection by the end of January.

Comments

CESIL controlled Xmas tree on the Raspberry Pi — 3 Comments

  1. Nice to see more memories of CESIL. I’ve been keeping the language alive on Windows since the late 90’s with compilers in Visual J++ and C#. I have a port of my compiler/runtime in standard Java that should work on the Pi but haven’t tried it yet and a half finished Java SWING base IDE – just the debugger to complete.

    Andrew

  2. This reminds me of a CESIL interpreter that I co-wrote with a school friend (honestly, he wrote more than I did!) around 1983 to run on the BBC Micro. At the time our CESIL programs were being hand coded on paper coding sheets and shipped off to ICL for processing, answers in class next week! The interpreter was a revelation for our school CESIL projects as we weren’t waiting a week only to find out that we had written something buggy. Good luck with all this work guys – I no longer feel the need to develop in the language but knowing that others are still having fun with it warms the heart!