Assembler

I wanted to write a combined test program to exercise all the instructions, so I can tell whether I've broken something when I make a change. It quickly became apparent that writing any sizeable program with the tools I had so far would be a very tedious exercise.

So, I wrote an assembler. Yes, this is cheating slightly, since the builders of the original EDSAC had no such luxury available, but I figure I've already served my time doing hand assembly during my 8-bit era, and I want to finish this project some time during my life.

Here's a sample program:
#
# Hello World
#
A i_out F # Initialise the Output instruction
T out F
A msg_len F # Initialise the char counter
T count F
loop: A count F # Decrement the char counter
A k_m1 F
G stop F # End of the message?
T count F
out: O F # This instruction is modified to address succcessive chars
A out F # Increment the address in the Output instruction
A k_2 F
T out F
F loop F # Go back for next char
stop: Z F # Finished

i_out: O msg F # Initial value of Output instruction
k_m1: -1 F # Constants
k_2: 2 F
count: 0 F # Char counter
msg_len: 12 F # Length of message
msg: 'aHELLO WORLD' # Message to print ('a' is Letters Shift)