Bootstrapping
- Cristiana Dinculescu
- Dec 2, 2020
- 1 min read

For those of you native to the digital world, let me introduce the series of Coral 11 mini-computers, made in Romania by ITC. They were almost perfect "clones" of the PDP-11 series (of DEC), including the rather weird PDP-endian format (a 32-bit integer stored as two 16-bit words in big-endian, but the words themselves are little-endian). Oh, well!
The OS was pretty decent, multi-user real-time, just that... the machine was totally empty, there was no ROM. So, how was it started?
The front panel had lights and switches you had to press to enter a micro code, depositing the address of the peripherical device from where to read the "Bootstrap Loader". To keep it short, the bootstrap loader was a self-modifying piece of code, in assembly MACRO-11:
LOAD = 0x7400 ; Buffer address
0x7744 016701 BEGIN: MOV DEVICE, R1 ; Get Device CSR
0x7746 000026
0x7750 012702 LOOP: MOV (PC)+, R2 ; Get buffer offset
0x7752 000352 OFFSET: 0352
0x7754 005211 INC @R1 ; Turn on reader
0x7756 105711 READY: TSTB @R1 ; Done?
0x7760 100376 BPL READY
0x7762 116162 MOVB 2(R1), LOAD(R2) ; Transfer
0x7764 000002
0x7766 0x7400
0x7770 005267 INC OFFSET ; Bump buffer offset
0x7772 177756
0x7774 000765 BR LOOP
0x7776 yyyyyy DEVICE: yyyyyy ; Input device CSR address I got my own, on punch tape, the second day at work and I used it a couple years, until the computer's God said: "Let there be ROM!"



Thanks! Seems like another lifetime :)
Love it. my first commercial job was writing macro32 assembler for Vax to support Data entry of swift messaging transactions (logical finance). Was reading the code above and filled with nostalgia