register to
The 1900 was equally crufty. It also had no stack pointers and no dedicated subroutine call register either: A subroutine call at its most basic looked something like this:
LDA 4 #PARAMBLK [ pointer to arguments starting at PARAM JSR 3 MYSUB
which passed the pointer in accumulator 4 and left the return address in accumulator 3. Or, if arguments were under 24 bits you'd just put them in accumulators, Trivial example:
LDA 6 VAL1 LDA 7 VAL2 JSR 0 ADDER ... ... ADDDER ADD 7 6 [ Add accum 6 to accum 7 RTS 0 [ Return
The 1900 was quite efficient at running COBOL (claimed 6 machine instructions per COBOL Procedure Division statement) but was less good at handling stack based languages like Algol60 or 68. I don't recall seeing even a mention of a Pascal compiler and the first C compiler was barely a gleam in Kernighan & Richie's eyes.
vectors
Neat!
instruction
The nearest to that I've got was the General Purpose MacroGenerator, which came out of Cambridge Uni and could, among many other things, be used as a fairly basic assembler.
And, of course, Lex & YACC which are wonderful once you get your head round them though you can only get C out of it.
However, CoCo/R is an even better: its a bit easier to use because both lexer and parser are parts of one program, so there's only one input syntax definition file to write, it is available written in several languages (C,C++,Java,Pascal, Python,...) generates code for the language it is written in, and if you don't like the template file for its output its trivial to write another.
If you have a need for this type of program, I'd say Coco/R is the one to go for.