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
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.
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
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