Importing Disk Drivers to New Drive

Overview of this phase:

  • Import System and Boot drivers into CONFIG
  • Import System driver into REX
  • Convert 63/ to 0/ with a new Boot Sector
  • Boot

Importing System and Boot drivers into CONFIG

This phase assumes that the LU0 has been successfully installed as LU63.
This example will copy the 6103 drivers from the Diablo D31 0/config to 63/config.
In order to import drivers into CONFIG, it is necessary to first add 2 new blocks to CONFIG.
But before making use of any blocks on LU63, it is necessary to reserve the 6 blocks which immediately follow DMAP. These blocks are reserved by IRIS on LU0 for nesting disc resident DISCSUBS. Try the following:

# FORMAT [5:256] 63/SWAP
# QUERY 63/SWAP

This will create a 6-block contiguous file, and reveal the header block address, which MUST immediately follow DMAP.

If DMAP used blocks 20 and 21, then SWAP should begin at 22 (using 23-27 for data). If SWAP is built anywhere else, then some other file is using blocks 22-27 and must be moved. This can be tricky. The general process here consists of (1) Delete SWAP; (2) clear up blocks 22-27 in this example; (3) rebuild SWAP and see if it used the right space.

The tricky part is freeing up the desired blocks. Use the previous INDEX listings to help identify what file is using the blocks needed by SWAP. If none of the files listed below are using that space, it is probably safe to copy it to LU0 for the time being, and then back to 63/ after SWAP is built successfully. The steps would be:

# COPY 0/filename = 63/filename
# DELETE 63/filename
# FORMAT [5:256] 63/SWAP
# QUERY 63/SWAP
# COPY 63/filename = 0/filename
# DELETE 0/filename

That assumes, of course, that only 1 file is in the way. If more than 1 file is involved, they all need to be moved and deleted the same way. Do this until SWAP is built in the correct place.
However, if the space is used by any of the following critical system files you will need another approach to free the space, since these files cannot be moved around. See alternate instructions at the end of this page.

INDEX, REX, ACCOUNTS, DMAP

Once the blocks following DMAP are safe, then add 2 new blocks to CONFIG. Note that disc drivers can only occupy certain CONFIG addresses.
The 6103 driver on D31-LU0 resides at 52000 (boot driver) and 52400 (system driver). For convenience, the same addresses will be used in 63/.

# DSP
 F63/CONFIG
 A 52000
 A 52400

This should append 2 new blocks, and respond with the corresponding RDA’s. For this example, assume that A-52000 = RDA 101, and A-52400 = RDA 132.
Now view their location in the CONFIG header.

H
D

The 2 new blocks should show up at locations 324 and 325 in the header.
Now copy the blocks containing the 6103 driver from LU0 to LU63. First, see where the driver is located.

F0/CONFIG
H
D

For this example, assume (324)=3330 and (325)=3331. Use Get (G) and Write (W) commands to copy the blocks. Be careful!

G0/3330
W77/101
G0/3331
W77/132

Now correct the Disc Driver table in 63/CONFIG at 1400 to reflect the new system driver. Since the drivers occur in exactly the same location in LU63 as in LU0, the easiest procedure is to copy the CONFIG table entry.

FCONFIG   (on D31 LU0)
D1400

Look for the 1.0 entry that was used to install 63/. It should indicate 52424 and 52303 as the driver entry points (in this example). The following 10 (octal) words describe the partition information. These 14 (octal) words should be copied to 63/CONFIG, but with the following changes:
— The entry in 63/CONFIG will start at 1400 (for system partition 0.0).
— The PART number must be zeroed. The partition entry in 0/config was setup to install DKP3, which has a PART constant of 140000. When the new LU0 is booted, it will be attached to DKP0, which has a PART constant of 0. So the entry should look something like this:

F63/CONFIG
E1400
1400: 1
1401: 52424
1402: 52303
1403: 1
1404: 0
1405: 0
1406: 0
1407: 14  ; or whatever the # cylinders were
1410: 0  ; PART
1411: 0  ; PART1
1412: 100  ; min. # blocks for new file
1413: 0
1414: 177777  ; terminate the table

That should complete the import of the drivers into CONFIG.

Import System driver into REX

The system driver is not loaded from CONFIG during the boot process. Instead, it is embedded in REX.
Most installations have it loaded as the highest part of REX, 77000+. If those blocks do not exist, then they must be appended before proceeding. This example will assume those blocks already exist for the old driver.

F63/REX
 D77000 ; verify this area exists
 D575 ; display the temporary Logical Unit Table in REX
 ; most likely it will look like this:
 575: 77037  77000  0

This means:
575: LUFIX is at 77037 (the system driver entry point)
576: LUVAR is at 77000 (the definition for partition 0.0)
577: The logical unit is zero.

The LUVAR for any partition consists of 013 words, and the LUFIX header (prior to the entry point) consists of 024 words, so that:
77000-77012 = LUVAR
77013-77036 = LUFIX header information
77037 = Driver Read/Write entry point
If these values are any different, adjust the following procedures accordingly.

Note, the CONFIG entry point for the 6103 is 52424, which means:
52400-52423 = LUFIX header information
52424 = Driver read/write entry point

So after copying the block of code from CONFIG to REX, the driver must be shifted 013 words to make room for the LUVAR table. After that, a new LUVAR table must be entered.

# DSP
F63/REX
H
D370  ; note the contents of 376 (which is 77000 in memory)

Assuming that the REX block in 376 is 2101 …

G 0/3331  ; system driver on LU0
W 77/2101  ; REX 77000
F 63/REX
D 77000  ; verify that it looks like the driver on LU0
M 77000,77360,77013  ; move the driver from 77000 to 77013
E77000  ; enter the LUVAR table
77000: 14  ; # cylinders (or whatever was correct)
77001: 0   ; PART
77002: 0   ; PART1
77003: 0   ; nu
77004: 1   ; Available block count (reset by SIR)
77005: 100 ; Min# blocks for new file
77006: 0   ; nu
77007: 7400 ; First unused RDA (will be set by SIR)
77010: 0    ; error counters
77011: 0
77012: 0

D 77000  ; verify entry

That should take care of REX.

Convert 63/ to 0/ and rewrite Boot Sector

Rebuilding the boot sector and writing a new Block 0 is a bit challenging, since IRIS contains special tests to protect the boot sector. Furthermore, the header block of every file contains the constant 77 to represent LU63. These all need to be reset to zero. XGEN to the rescue.
It is also necessary to get rid of the temporary SWAP file that was preserving the space following DMAP.

# DELETE 63/SWAP
# XGEN LU0
# REMOVE 63/

That should put the final touches on the LU to make it bootable.
Be sure to make a copy of the DKP file (using Windows Copy).
Change its name from MIGRATING.BIN to NEWIRIS0.6103 (or whatever).
Escape to the Simulator console and reconfigure it for a boot.

<CTL-F>
sim> DETACH DKP3
sim> DETACH DKP0
sim> SET DKP0 6103
sim> ATTACH DKP0 NEWIRIS0.6103.
sim> BOOT DKP0

Hopefully, it works!

Alternate Methods for freeing blocks from Critical Files

( to be completed sometime )

The basic strategy here is to locate some unused blocks on 63/, copy the contents of the needed block to the unused block, then modify the file header to reflect the newly used block.

Following this with a REMOVE and INSTALL with update DMAP with the new block usage, freeing up the blocks needed for SWAP.

If the offending file is INDEX, sometimes the needed block is empty, in which case the problem can be solved by shrinking INDEX by one block. But this requires modifying (a) the block list; (b) NBLK; (c) NRCD

Leave a Reply