CONFIG Structure

CONFIG has multiple sections, each with its own purpose.
All of the following information is for R7.5.

400 == System Fields

400: 30400  ; desired BSA (block swap area) must be >= 30400
401: 20000  ; desired partition size (400 word incr), max 40000, min 1000
402: 0      ; # partitions to fit in lower mem
403: 2      ; # partitions to fit in upper mem
404: 0      ; # lockable partitions

600 == System Info Table Constants

Only the first part of the INFO table is contained here.
See this page for details.


1000 == Memory Resident Discsubs

This is simply a list of discsub number to be made memory resident during SIR. There is one discsub number per word, and a 177777 terminates the list.

Note: do NOT attempt to make discsubs 110 or 113 memory resident. Due to faulty linkage, they will trap or corrupt the running system. ( 110 = BASIC CALL 96 // 113 = BASIC CALL 93 ).


1400 == Table of Active Disc Drivers and Partitions

This area identifies which disc drivers are to be made memory resident by SIR, and what Disc Partitions those drivers will support.

Each driver to be made memory resident as a 4-word definition, followed by one or more partition definitions of 10 words (octal) each. The table is then terminated by a 177777 word.
LU0 must always be represented by the very first driver and its first partition.

The 4-word driver definition is as follows:
0: ( any non-zero value. SIR will put the actual LUFIX pointer here )
1: ( address in CONFIG of a driver entry point == LUFIX )
2: ( address in CONFIG of a BZUP entry point == READ )
3: ( # of partitions to follow )
Each Partition entry is as follows:
0: ( zero. SIR will put a LUVAR address here)
1: ( minimum user level to install)
2: ( max user to install )
3: ( # cylinders in partition )
4: ( PART == info for driver, usually identifying a physical drive )
5: ( PART1 == info for driver, usually the cylinder offset on a drive )
6: ( Minimum # blocks for creating new file )
7: ( zero: not used )

When SIR (System Initialization Routine) loads the drivers into memory, it writes the mem-res LUFIX pointer in word zero of the driver definition, and it puts the actual LUVAR pointer into word zero of each partition definition.

In practice, words 1 and 2 for the “User Level” are simply set to zero. This allows the MANAGER account to INSTALL the partition.

Word 6 is called the minimum # blocks needed to create a new file. Its real purpose is to reserve blocks for expanding existing files. You will often see it set to something small like 020 or 030, but it might be safer to set it to a larger number like 0100.

Here is an example layout, showing Diablo 31 as the primary driver, and a 6103 as a secondary driver. For visibility, the addresses have been adjusted differently than would normally be seen in DSP.

1400: 1   2024   2703     2  
1404: 0      0      0   313        0   0  100  0
1414: 0      0      0   313    40000   0  100  0
1424: 1  52424  52303     1
1430: 0      0      0    20   140000   0  100  0
1440: 177777

The Diablo 31 system driver entry point is 2024 in CONFIG. The Diablo 31 BZUP driver READ entry is at 2703 in CONFIG. This is considered Driver #0 and must be the system driver. The 1st partition is the Logical zero that is running IRIS.
There are 2 partitions defined for the D31, each with 313 cylinders.
One is on physical drive 0, the other on drive 1 (represented by 40000).
The 2nd partition can be installed with # INSTALL 0.1

The 6103 driver entry point is at 52424, its BZUP version is at 52303. This is considered Driver #1.
One partition is defined for the 6103, with 20 cylinders on drive 3 (140000).
It can be installed with # INSTALL 1.0


2000 + == Actual Disc Drivers (both system level and BZUP)

 

Leave a Reply