A typical Molecular 18 software development kit for LOS comprised:
Programmers normally prepared their coding sheets at their desk. When you were ready to try out your code, you found an available terminal in the computer room and used the OP utility to load it in six-digit octal words. Beginners would first write all the octal machine code onto the coding sheets but after a little practice this became counter-productive except occasionally, when constructing subroutine control words for example. With just the two registers, page addressing, a modest instruction set and the adoption of octal notation everyone quickly became expert at assembling machine code on the fly at the terminal, especially as the OP utility echoed back the assembler decode as you typed.
No matter how carefully you checked your code, there was always a fair chance it would crash first time. So you always warned anyone else on the machine before you ran a test, waited two or three seconds so they could save their work to disc, then let it rip. Whilst your test ran you could use the OP utility to examine or indeed amend any memory location. Thanks to page addressing you could easily find your code and data and watch what was happening. If your test crashed you could inspect the debris through the control panel. Any subsequent amendments needed to coding sheets would be clearly marked with an asterisk in the margin, to be rubbed out after loading.
By the 1990's I often worked remotely, logging-on through an intermediate Epson QX10 using a 300bps modem connection to load whole new programs directly onto users' live systems. This would only be done by prior arrangement after everyone had gone home; when the time came to run the new code it could be a little nerve-racking knowing that any crash could not be dealt with until the next morning.
Completed coding sheets were stored in Foolscap Lever Arch files in Overlay Module sequence, with record layouts and any other overview information at the front. A complete set of documentation for one client could run to five hefty volumes, which we would carry with us on site visits.
A reconstruction of the first edition (October 1977) of the LOS Programmers’ Manual, with some later additions from LOS Bulletins as dated.
On-line Security (Immediate back-up of all disc updates)
Sort Utility (A disc file sort using a combination of the Quicksort and Bubblesort algorithms)
All discs used by an installation carry a loadable copy of LOS in a reserved area. Executing the five-step Bootstrap code (manually pre-loaded at core address 00/0100) instructs the Drive 70 Disc Controller to read the 128-word Boot Sector 000000 from its exchangeable disc into core starting at address 00/0000. Execution then loops (i.e. waits) at 00/0104 until the instruction at 00/0104 is overwritten by the Boot Sector.
Throughout normal operation of LOS the five-step bootstrap is retained at 00/0100, enabling a quick reboot from the control panel should this become necessary. In the original Molecular 18 MK 1 the bootstrap was twelve steps located at 7/1600, where it proved particularly vulnerable to being wiped out by program bugs (such as calling Clear Block of Core with an incorrect length parameter). Moving the bootstrap to 00/0100 meant it survived most software crashes. Furthermore, it minimised the number of control panel switch flicks required to reload the bootstrap when necessary. Anyone who had to talk or be talked over the phone through the process of loading the bootstrap flick by flick appreciated the relative robustness and brevity of the LOS bootstrap.
The following are downloadable PDF files of the original hand written coding sheets, opening in a new window.
The "raw" LOS code as at Version 92 (February 1979)
- Page 00 (Zero Page)
- Bootstrap, resident Constants, Initiator support tables and templates.
- Page 01
- Resident Library routines, Interrupt Handler.
- Page 02
- Resident Library routines, Mains Off handler, Task 0 (System task), Device Interrupt Service table, Command routine.
- Page 03
- Printer Service templates, On-line Security routines, Resident Library routines.
- Page 04
- Resident Library routines, Printer Control Program.
- Page 05
- Initiator support routines and templates.
- Page 06
- Initiator, DRI tape punch utility, Recovery routine, Disc Service templates.
- Page 07
- Resident ISAM routines, Printer Service templates, Resident system text.
- Page 10
- OP utility Decode routine, Initiator support routines and templates.
- Page 11
- Start-up Intercept routine, Stand-alone OP utility as at LOS Version 88 (August 1978).
- Page 12
- Resident Spooling routines, resident File Handling routines, resident Disc Access support routines.
- Page 13
- Resident Input/Output Library routines, resident File Handling support routines, Task Scheduler.
The Initiator (at 06/0000) converts the raw LOS into a functioning operating system by reading the installation's configuration table to create the required task partitions, device drivers and any associated workspace. It then executes any recovery copying requested by the control panel switch settings. Next it opens all active file tables, loads resident overlays, reads the system control record, launches all tasks and survives thereafter as Task 0, the resident System Task at 02/0600.
Workspace for device drivers, printer buffers, file tables etc. is obtained (by calling the resident Getmain routine JSBR IZ 1704) from the Free Core Table in the Configuration Table, plus the table at 10/1600 of unused memory within LOS.
If disc drives are ready and no recovery copying is required, a reboot and initiation is accomplished in under one second.