MOD1 MSR Operating System Implementation

An implementation/simulation of the MOD1 MSR (Mass Storage Resident) operating system and programming environment is available. This provides an easy way to manipulate files on mass storage media (Disk Packs). This feature is implemented as a set of java virtual extensions. See Virtual Series 2000 Extensions for more on virtual software extensions.

Features of "File Support C" and "Volume Preparation C" are implemented in the menu "Disk Util". These allow initialization of a volume, mapping (listing) of a volume, and allocation (create) and deallocation (delete) of files. See information in Basic Operation.

Access to files (data) in programs is through the MOD1MSIO virtual macros package, invoked (loaded) using the "MAC" assembler directive as described in Easycoder Assembler Implementation. Apart from the non-standard virtual extension "MAC", the macros are used as described in the original MOD1 documentation, with the following exceptions:

Here is a sample program to read a file named "MYFILE01" and print it, simplified for clarity.

At card (line) 00050 is the modern (non-standard) extension to EasyCoder to load a macro library.

At line 00070 is the initialization of MIOC, declaring instance "A". Note that, in this implementation, all of MIOC/MPIOC is in a virtual runtime and thus consumes no extra program memory, making most parameters to MIOC irrelevant.

Beginning at line 00090 is the definition of the MCA for "MYFILE01".

At line 00190 the file is opened for input-only. Note, any failures at this point cause an EXIT call which is fatal/terminal.

At line 00200 one item is read from the file. Note, a Data EXIT for EOF will cause a graceful end to the program, checked on line 00330.

In the case of a graceful end, the file is closed on line 00250.

System Files

All of these system files are Partitioned Sequential files. Currently, "*DRS1LIB" is not used (native macros not yet supported). "*DRS1GO" is the default output file for the "Disk Image" option of the assembler. "*DRS1RES" is the only input for MOD1 executables. Executables are managed using the menu option "Executable Function" under "Disk Util".
File NamePurposeItem, Record, Block length
*DRS1RESResident Executable Images250, 250, 250
*DRS1GOAssembler Output Executables250, 250, 250
*DRS1LIBUnspecialized Macros80, 250, 250

Bootstrap

A disk volume may be made bootable using the Bootstrap Generator function. The images brfloader.out and mod1loader.out form the content of the boot track, and are included in H2000.jar. They may be created using the Easycoder source files brfloader.ezc and mod1loader.ezc, respectively (and replaced in the jar). Using EasyCoder.jar, brfloader.ezc is assembled using the "Bootstrap" output format, and mod1loader.ezc is assemble using the "BRT (plain)" output format. Note that brfloader.ezc requires a series of SW/SI instructions at the beginning in order to restore punctuation after bootstrap. If this code is modified, the current SW/SI instruction block should be removed and then assemble brfloader with both "Bootstrap" and "SW/SI" checked, then insert the resulting brfloader.swi file (back) into brfloader.ezc and assemble once again (without "SW/SI").

When booting, this code expects a partitioned-sequential file name "*DRS1RES" that contains an executable program image in the member named "SUPER101" (visibility is not checked). This program will be loaded and executed whenever the code boots or is entered again ("normal program exit"). If SUPER1 is made resident, then it should intercept the entry calls and prevent mod1loader from redundantly loading SUPER1.

The code for SUPER1 is in superv.ezc, and may be assembled using the built-in H2000 Assemble function, with the "Disk Image" option (if "*DRS1RES" exists). The "*DRS1RES" file may be created on any volume using the "Allocate File" function. The file must have a item, record, and block size of 250 and an index size (and data allocation) sufficient for storing the desired set of programs.

SUPER1 (as implemented by superv.ezc) will print READY on the console typewriter and wait for a 6-character command. The command must be either "EXΔΔΔΔ" or "TESTΔΔ". After entering the 6th character, enter one more space to confirm the command or any other character to abort and return to READY. If the command is not recognized, "WHAT?" will be printed. After the command is accepted, enter the 8 character program and segment name of a program on the resident ("EX") or go ("TEST") file, then press RETURN. If the program can be found and loaded, it will be executed. If the program exits by a standard monitor method, then the supervisor will be reloaded and the READY state reached. If the program does not exit using a standard monitor method, and has not corrupted the communications area, then setting the SR to 86 decimal (126 octal) and pressing RUN should restore the READY state. Otherwise, it will be necessary to boot from the disk pack again.

TODO: Managing the "*DRS1RES" program library.