|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 153216 (0x25680) Types: TextFile Names: »D48«
└─⟦2294a1cd1⟧ Bits:30005867/disk06.imd Dokumenter (RCSL m.m.) └─⟦this⟧ »D48«
i T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 1. GENERAL DESCRIPTION .................................... 1 2. LOGIC INTERCONNECTION .................................. 2 3. PROGRAMMING THE DMA-CHANNEL ............................ 3 4. PROGRAMMING THE Z80A-CTC ............................... 5 5. PROGRAMMING OF THE WDC701 .............................. 6 5.1 Task Files Basics ................................. 6 5.2 Register Array .................................... 6 5.3 Register Definitions .............................. 6 5.3.1 Command Register ........................... 6 5.3.2 Status Register ............................ 6 5.3.3 SDH Register ............................... 7 5.3.4 Cylinder Number ............................ 8 5.3.5 Sector Number .............................. 8 5.3.6 Sector Count ............................... 8 5.3.7 Error Register ............................. 8 5.3.8 Write Precomp .............................. 9 5.3.9 Data Register .............................. 9 5.4 Status Registers .................................. 9 5.5 Status Register Bits .............................. 10 5.5.1 Error ...................................... 10 5.5.2 Data Request ............................... 10 5.5.3 Seek Complete .............................. 10 5.5.4 Write Fault ................................ 10 5.5.5 Ready ...................................... 10 5.5.6 Busy ....................................... 11 5.6 Error Register Bits ............................... 11 5.6.1 DAM Not Found .............................. 11 5.6.2 TR000 Error ................................ 11 5.6.3 Aborted Command ............................ 11 5.6.4 ID Not Found ............................... 11 5.6.5 CRC Error ID ............................... 12 5.6.6 CRC Error Data ............................. 12 5.6.7 Bad Block Detect ........................... 12 \f ii T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _(_c_o_n_t_i_n_u_e_d_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 6. COMMANDS ............................................... 13 6.1 Command Summary ................................... 13 6.1.1 Stepping Rates ............................. 14 6.1.2 DMA Read ................................... 14 6.2 Type I Commands ................................... 14 6.2.1 Restore .................................... 14 6.2.2 Seek ....................................... 15 6.3 Type II Commands .................................. 15 6.3.1 Read Sector ................................ 16 6.3.1.1 Implied Seek ...................... 16 6.3.1.2 Retries ........................... 16 6.3.1.3 Auto Restore ...................... 16 6.3.1.4 Hard Errors ....................... 17 6.3.1.5 Error Severity Levels ............. 17 6.3.1.6 Normal Completion ................. 18 6.4 Type III Commands ................................. 18 6.4.1 Write Sector ............................... 18 6.4.1.1 Implied Seek ...................... 18 6.4.1.2 Retries ........................... 19 6.4.1.3 Auto Restore ...................... 19 6.4.1.4 Hard Errors ....................... 19 6.4.2 Format Track ............................... 19 6.4.2.1 Implied Seek ...................... 20 6.4.2.2 Track Format ...................... 21 7. FORMATTING ............................................. 22 7.1 Formatting a Track ................................ 22 7.2 Interleaving ...................................... 22 \f F_ 1_._ _ _ _ _ _ _ _ _G_E_N_E_R_A_L_ _D_E_S_C_R_I_P_T_I_O_N_ 1. This manual is a description of the Winchester Disk Controller WDC701 connected to the RC702 microcomputer system. The control- ler WDC701 is based on the WD1000 Winchester disk controller from WESTERN DIGITAL CORPORATION. The interconnection to RC702 is made using WCT701 Winchester Controller Terminals and WCA701 Winches- ter Controller Adapter. WCA701 is housed in RC702 and contains the interconnection cable and WDC701. WCT701 is housed in the same chassis as the first Winchester Disk Drive. The interconnec- tion is shown in fig. 1. \f F_ 2_._ _ _ _ _ _ _ _ _L_O_G_I_C_ _I_N_T_E_R_C_O_N_N_E_C_T_I_O_N_ 2. Information to and from the controller is made using the 8 regis- ters in the WDC701. The addresses used are 60 (Hex) to 67 (Hex). Data transfer between the controller and the memory is done using the DMA channel No 0. An interrupt from the controller is in the WCA701 supplied to a Z80A-CTC integrated circuit, which converts the interrupt, so it fits the Z80A-CPU. Programming is divided into three parts: 1) Programming the DMA-channel No 0 2) Programming the Z80A-CTC to the interrupt circuit 3) Programming the five commands to the WDC701 \f F_ 3_._ _ _ _ _ _ _ _ _P_R_O_G_R_A_M_M_I_N_G_ _T_H_E_ _D_M_A_-_C_H_A_N_N_E_L_ 3. WDC701 uses channel No 0 of the DMA-circuit. The device number is F0 to FF. The DMA in RC702 is based on Am9517A from Advanced Micro Devices or 8237A from Intel. Programming information may be supplied from one of the two companies. \f F_ Figure 1: Interconnection RC702 to Winchester. \f F_ 4_._ _ _ _ _ _ _ _ _P_R_O_G_R_A_M_M_I_N_G_ _T_H_E_ _Z_8_0_A_-_C_T_C_ 4. The Z80A-CTC circuit is only used to change the interrupt from the controller to fit the Z80A system. The Z80A-CTC contains four channels and only channel No. 0 is used. The device numbers are 44 (Hex) to 47 (Hex). The Z80A-CTC is supplied from Zilog and programming information may be supplied from this company. \f F_ 5_._ _ _ _ _ _ _ _ _P_R_O_G_R_A_M_M_I_N_G_ _O_F_ _T_H_E_ _W_D_C_7_0_1_ 5. 5_._1_ _ _ _ _ _ _ _T_a_s_k_ _F_i_l_e_s_ _B_a_s_i_c_s_ 5.1 The WDC701 performs all disk functions through a set of registers called the Task File. These registers are loaded with parameters such as Sector Number, Cylinder Number etc. prior to issuing a command. The registers are selected the following way. 5_._2_ _ _ _ _ _ _ _R_e_g_i_s_t_e_r_ _A_r_r_a_y_ 5.2 M_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _D_e_v_i_c_e_ _A_d_d_r_e_s_s_ _(_H_e_x_)_ _ _ _ _ _ _ _I_n_p_u_t_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _O_u_t_p_u_t_ _ _ _ _ _ _ _ _ _ _ _ 60 Data Register Data Register 61 Error Register Write Precomp 62 Sector Count Sector Count 63 Sector Number Sector Number 64 Cylinder Low Cylinder Low 65 Cylinder High Cylinder High 66 Size/Drive/Head Size/Drive/Head P_ _6_7_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _S_t_a_t_u_s_ _R_e_g_i_s_t_e_r_ _ _ _ _ _C_o_m_m_a_n_d_ _R_e_g_i_s_t_e_r_ _ 5_._3_ _ _ _ _ _ _ _R_e_g_i_s_t_e_r_ _D_e_f_i_n_i_t_i_o_n_s_ 5.3 5_._3_._1_ _ _ _ _ _C_o_m_m_a_n_d_ _R_e_g_i_s_t_e_r_ 5.3.1 All commands are loaded into this register after the task regis- ters have been set. T_h_e_ _C_o_m_m_a_n_d_ _R_e_g_i_s_t_e_r_ _i_s_ _a_ _w_r_i_t_e_-_o_n_l_y_ _r_e_g_i_s_-_ t_e_r_. 5_._3_._2_ _ _ _ _ _S_t_a_t_u_s_ _R_e_g_i_s_t_e_r_ 5.3.2 After execution of a command, the Status Register is internally\f loaded with status information pertaining to the command ex- ecuted. The Host must read this register to determine successful execution of the command. The Status Register is a read-only re- gister; it cannot be written to by the host. If the busy bit is set, no other bits in this register are valid. 5_._3_._3_ _ _ _ _ _S_D_H_ _R_e_g_i_s_t_e_r_ 5.3.3 This register contains the sector Size, Drive select and Head select bits. The SDH register is a R/W register organized as follows: M_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Bit _ _7_ _ _ _ _6_ _ _ _ _5_ _ _ _ _4_ _ _ _ _3_ _ _ _ _2_ _ _ _ _1_ _ _ _ _0_ _ _ Function 0 Sec. Drive Head P_ _ _ _ _ _ _ _ _S_i_z_e_ _ _ _ _ _ _S_e_l_e_c_t_ _ _ _ _ _ _S_e_l_e_c_t_ _ _ _ _ M_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Bit Bit Sector Size _ _ _6_ _ _ _ _ _ _5_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0 0 256 Bytes 0 1 512 - P_ _ _ _1_ _ _ _ _ _ _1_ _ _ _ _ _ _ _ _ _1_2_8_ _-_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ M_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Bit Bit Drive Selected _ _ _4_ _ _ _ _ _ _3_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0 0 Drive Sel 0 0 1 - - 1 1 0 - - 2 P_ _ _ _1_ _ _ _ _ _ _1_ _ _ _ _ _ _ _ _ _-_ _ _ _ _ _-_ _ _ _3_ _ _ _ _ _ _ _ _ _ M_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Bit Bit Bit Head Selected _ _ _2_ _ _ _ _ _ _1_ _ _ _ _ _ _0_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 0 0 0 Head 0 0 0 1 - 1 0 1 0 - 2 0 1 1 - 3 1 0 0 - 4 1 0 1 - 5 1 1 0 - 6 P_ _ _ _1_ _ _ _ _ _ _1_ _ _ _ _ _ _1_ _ _-_ _ _ _ _7_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \f 5_._3_._4_ _ _ _ _ _C_y_l_i_n_d_e_r_ _N_u_m_b_e_r_ 5.3.4 These two registers form the cylinder number where the head is to be positioned on a Seek, Read or Write command. Internally, a se- parate set of Cylinder register values is maintained for each drive. The two least significant bits of the Cylinder High regis- ter form the most significant bits of the cylinder number as il- lustrated below. C_y_l_i_n_d_e_r_ _H_i_g_h_ C_y_l_i_n_d_e_r_ _L_o_w_ M_ Register bits: 76543210 76543210 P_ Cylinder bits: A9 76543210 5_._3_._5_ _ _ _ _ _S_e_c_t_o_r_ _N_u_m_b_e_r_ 5.3.5 This register is loaded with the desired sector number prior to a Read or Write command. The Sector Number register is a R/W regis- ter and may be read or written to by the host. 5_._3_._6_ _ _ _ _ _S_e_c_t_o_r_ _C_o_u_n_t_ 5.3.6 This register is loaded with the number of sectors to be format- ted during a Format command. During the Format command, this re- gister is decremented to zero and must be re-loaded for each for- mat operation. 5_._3_._7_ _ _ _ _ _E_r_r_o_r_ _R_e_g_i_s_t_e_r_ 5.3.7 This register contains specific fault information pertaining to the last command executed. This register is valid only if the Error bit in the Status register is set. The Error Register is read only. \f 5_._3_._8_ _ _ _ _ _W_r_i_t_e_ _P_r_e_c_o_m_p_ 5.3.8 The Write Precompensation Register holds the cylinder number where the RWC line will be asserted and Write Precompensation logic is to be turned on. This write-only register is loaded with the cylinder number divided by 4 to achieve a range of 1024 cylinders. E.g. if write precompensation is desired for cylinder 128 (80 Hex) and higher, this register must be loaded with 32 (20 Hex). The Write Precompensation delay is fixed at 10 nanoseconds from nomimal. Write Precompensation must start at cylinder xx (yy Hex). 5_._3_._9_ _ _ _ _ _D_a_t_a_ _R_e_g_i_s_t_e_r_ 5.3.9 This register is via the DMA-Controller connected to the main memory, and should not be read from or written to directly from the CPU. 5_._4_ _ _ _ _ _ _ _S_t_a_t_u_s_ _R_e_g_i_s_t_e_r_s_ 5.4 There are two registers in the WDC701 that are used to monitor the execution of commands. They are the Status Register and the Error Register. Each bit of these registers is used to define a particular type of status or eror condition: M_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _B_i_t_ _ _ _ _ _ _ _ _S_t_a_t_u_s_ _R_e_g_i_s_t_e_r_ _ _ _ _ _ _ _ _ _ _ _ _ _E_r_r_o_r_ _R_e_g_i_s_t_e_r_ _ _ _ _ _ _ _ _ _ _ _ 7 Busy Bad Block Detect 6 Ready CRC Error - Data Field 5 Write Fault CRC Error - ID Field 4 Seek Complete ID Not Found 3 Data Request - - - 2 - - Aborted Command 1 - - TR000 Error P_ _0_ _ _ _ _ _ _ _ _ _ _E_r_r_o_r_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _D_A_M_ _N_o_t_ _F_o_u_n_d_ _ _ _ _ _ _ _ _ _ _ _ _ \f 5_._5_ _ _ _ _ _ _ _S_t_a_t_u_s_ _R_e_g_i_s_t_e_r_ _B_i_t_s_ 5.5 5_._5_._1_ _ _ _ _ _E_r_r_o_r_ 5.5.1 Indicates, when set that one or more bits are set in the Error Register. It provides an efficient means of checking for an error condition by the host. This bit is reset on receipt of a new com- mand. 5_._5_._2_ _ _ _ _ _D_a_t_a_ _R_e_q_u_e_s_t_ 5.5.2 Functions identically to the DRQ line. When set, it indicates that the sector buffer is ready to accept data or contains data to be read out by the host. The data request bit is reset when the sector buffer has been fully read from or written to. Normal- ly, the host need not consult this bit to determine if a byte should be transferred. 5_._5_._3_ _ _ _ _ _S_e_e_k_ _C_o_m_p_l_e_t_e_ 5.5.3 Indicates the condition of the seek complete line on the selected drive. 5_._5_._4_ _ _ _ _ _W_r_i_t_e_ _F_a_u_l_t_ 5.5.4 Indicates the condition of the Write Fault Line on a selected drive. The WD1000 will not execute any command if this bit is set. 5_._5_._5_ _ _ _ _ _R_e_a_d_y_ 5.5.5 Indicates the condition of the Ready line of the selected drive. The WDC701 will not execute any commands unless the ready bit is set. \f 5_._5_._6_ _ _ _ _ _B_u_s_y_ 5.5.6 After issuing a command, this bit will be set indicating that the DWC701 is busy executing a command. No other bits or registers are valid when this bit is set. 5_._6_ _ _ _ _ _ _ _E_r_r_o_r_ _R_e_g_i_s_t_e_r_ _B_i_t_s_ 5.6 5_._6_._1_ _ _ _ _ _D_A_M_ _N_o_t_ _F_o_u_n_d_ 5.6.1 Will be set during a Read Sector command if, after successfully identifying the ID field, the Data Address mark was not detected within 16 bytes of ID field. 5_._6_._2_ _ _ _ _ _T_R_0_0_0_ _E_r_r_o_r_ 5.6.2 Will be set during a Restore command if, after issuing 1023 step- ping pulses, TRACK 000 line was not asserted by the drive. 5_._6_._3_ _ _ _ _ _A_b_o_r_t_e_d_ _C_o_m_m_a_n_d_ 5.6.3 Indicates that a valid command has been received that cannot be executed based on status information from the drive. E.g. if a write sector command has been issued while the Write Fault line is set, the Aborted command bit will be set. Interrogation of the Status and/or Error Registers by the host must be performed to determine the cause of failure. 5_._6_._4_ _ _ _ _ _I_D_ _N_o_t_ _F_o_u_n_d_ 5.6.4 When set, this bit indicates that an ID field containing a spec- ified cylinder, head, sector number or sector size was not found. \f 5_._6_._5_ _ _ _ _ _C_R_C_ _E_r_r_o_r_ _I_D_ 5.6.5 Indicates that a CRC error was encountered in an ID field. 5_._6_._6_ _ _ _ _ _C_R_C_ _E_r_r_o_r_ _D_a_t_a_ 5.6.6 Indicates that a CRC error was encountered in a data field during a Read Sector Command. 5_._6_._7_ _ _ _ _ _B_a_d_ _B_l_o_c_k_ _D_e_t_e_c_t_ 5.6.7 Indicates that a Bad Block mark has been detected in the spec- ified ID field. If the command issued was a write sector command, no writing will be performed. If generated from a read sector command, the data field will not be read. Note that bad block will not be detected if the flaw is in the ID field. \f F_ 6_._ _ _ _ _ _ _ _ _C_O_M_M_A_N_D_S_ 6. The WDC701 executes five easy-to-use macro commands. Most com- mands feature automatic 'implied' seek, which means that the host system need not tell the WDC701 where the R/W heads of each drive are or when to move them. The controller automatically performs all needed retries on all errors encountered including data CRC errors. If the R/W head mis-positions, the WDC701 will automati- cally perform a restore and a re-seek. If the error is completely unrecoverable, the WDC701 will simulate a normal completion to simplify the host system's software. Commands are executed by loading the command byte into the Com- mand Register while the controller is not busy (controller will not be busy if it has completed the previous command). The task file must be loaded prior to issuing a command. No command will execute if the Seek Complete or Ready lines are false or if the Write Fault line is true. Normally it is not necessary to poll these signals before issuing a command. If the WDC701 receives a command that is not defined in the following table, undefined re- sults will occur. 6_._1_ _ _ _ _ _ _ _C_o_m_m_a_n_d_ _S_u_m_m_a_r_y_ 6.1 For ease of discussion, commands are divided into three types which are summarized in the following table: M_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Bits _T_y_p_e_ _ _ _ _C_o_m_m_a_n_d_ _ _ _ _ _ _ _ _ _ _ _7_ _ _ _6_ _ _ _5_ _ _ _4_ _ _ _3_ _ _ _2_ _ _ _1_ _ _ _0_ _ _ _ _I_ _ _ _ _ _ _ _R_e_s_t_o_r_e_ _ _ _ _ _ _ _ _ _ _ _0_ _ _ _0_ _ _ _0_ _ _ _1_ _ _ _r_3_ _ _r_2_ _ _r_1_ _ _r_0_ _ _ _I_ _ _ _ _ _ _ _S_e_e_k_ _ _ _ _ _ _ _ _ _ _ _ _ _ _0_ _ _ _1_ _ _ _1_ _ _ _1_ _ _ _r_3_ _ _r_2_ _ _r_1_ _ _r_0_ _ _ _I_I_ _ _ _ _ _ _R_e_a_d_ _S_e_c_t_o_r_ _ _ _ _ _ _ _0_ _ _ _0_ _ _ _1_ _ _ _0_ _ _ _D_ _ _ _0_ _ _ _0_ _ _ _0_ _ _ _ _I_I_I_ _ _ _ _ _W_r_i_t_e_ _S_e_c_t_o_r_ _ _ _ _ _ _0_ _ _ _0_ _ _ _1_ _ _ _1_ _ _ _0_ _ _ _0_ _ _ _0_ _ _ _0_ _ _ _ P_ _I_I_I_ _ _ _ _ _F_o_r_m_a_t_ _T_r_a_c_k_ _ _ _ _ _ _0_ _ _ _1_ _ _ _0_ _ _ _1_ _ _ _0_ _ _ _0_ _ _ _0_ _ _ _0_ _ _ _ \f 6_._1_._1_ _ _ _ _ _S_t_e_p_p_i_n_g_ _R_a_t_e_s_ 6.1.1 M_ _ _ _ _ _ _ _ _ _ _ _ _r_3_-_r_0_ _-_ _S_t_e_p_p_i_n_g_ _R_a_t_e_ _ _ _ _ _ _ _ _ 0000 = 10 S 1000 = 4.0 mS 0001 = 0.5 mS 1001 = 4.5 mS 0010 = 1.0 mS 1010 = 5.0 mS 0011 = 1.5 mS 1011 = 5.5 mS 0100 = 2.0 mS 1100 = 6.0 mS 0101 = 2.5 mS 1101 = 6.5 mS 0110 = 3.0 mS 1110 = 7.0 mS P_ _0_1_1_1_ _=_ _3_._5_ _m_S_ _ _ _ _ _ _ _ _ _ _ _ _ _1_1_1_1_ _=_ _7_._5_ _m_S_ _ Stepping rate of ms is used: 6_._1_._2_ _ _ _ _ _D_M_A_ _R_e_a_d_ 6.1.2 D = 1 for DMA Mode which is used here. 6_._2_ _ _ _ _ _ _ _T_y_p_e_ _I_ _C_o_m_m_a_n_d_s_ 6.2 These commands simply position the R/W heads of the selected drive. Both commands have explicit stepping rate fields. The lower four bits of these commands form the stepping rate. 6_._2_._1_ _ _ _ _ _R_e_s_t_o_r_e_ 6.2.1 The Restore command is used to calibrate the position of the R/W head on each drive by stepping the head outward until the TR000 line goes true. Upon receipt of the Restore command, the Busy bit in the Status Register is set. Cylinder High and Cylinder Low Registers are cleared. The lower four bits of the command byte are stored in the stepping rate register for subsequent implied seeks. The state of Seek Complete, Ready and Write Fault are sampled, and if an error condition exists, the Aborted command bit in the Error Register is set, the Error bit in the Status Register is set, an interrupt is generated and the Busy bit is reset. \f If no errors are encountered thus far, the internal head position register for the selected drive is cleared. The TR000 line is sampled. If TR000 is true, an interrupt is generated and the Busy bit is reset. If TR000 is not true, stepping pulses at a rate de- termined by the stepping rate field are issued until the TR000 line is activated. When TR000 is activated, the Busy bit is reset and an interrupt is issued. If the TR000 line is not activated within 1023 stepping pulses, the TR000 Error bit in the Error Re- gister and the Error bit in the Status Register are set, the Busy bit is reset and an interrupt is issued. 6_._2_._2_ _ _ _ _ _S_e_e_k_ 6.2.2 The Seek command positions the R/W head to a certain cylinder. It is primarily used to start two or more concurrent seeks on drives that support buffered stepping. Upon receipt of the Seek command, the Busy bit in the Status Register is set. The lower four bits of the command byte are stored in the stepping rate register for subsequent implied seeks. The state of Seek Complete, Ready and Write Fault are sampled, and if an error condition exists, the Aborted command bit in the Error Register is set, the Error bit in the Status Register is set, an interrupt is generated and the Busy bit is reset. If no errors are encountered thus far, the internal head position register for the selected drive is updated, the direction line is set to the proper direction and a step pulse is issued for each cylinder to be stepped. When all stepping pulses have been is- sued, the Busy bit is reset and an interrupt is issued. Note that the Seek Complete line is not sampled after the Seek command, al- lowing seek operations to be started using drives with buffered seek capability. 6_._3_ _ _ _ _ _ _ _T_y_p_e_ _I_I_ _C_o_m_m_a_n_d_s_ 6.3 This type of command is characterized by a transfer of a block of data from the WDC701 buffer to the host. This command has an im- plicit stepping rate as set by the last Restore or Seek command. \f 6_._3_._1_ _ _ _ _ _R_e_a_d_ _S_e_c_t_o_r_ 6.3.1 The Read Sector command is used to read a sector of data from the disk to the host computer. Upon receipt of the Read command, the Busy bit in the Status Register is set. The state of Seek Com- plete, Ready and Write Fault are sampled, and if an error condi- tion exists, the Aborted Command bit in the Error Register is set, the Error bit in the Status Register is set and a normal completion is simulated. 6_._3_._1_._1_ _ _ _I_m_p_l_i_e_d_ _S_e_e_k_ 6.3.1.1 If no errors are encountered so far, a Seek command is executed. The Seek Complete line is sampled. If the Seek Complete line does not go true witnin 128 Index pulses, then the Aborted command bit in the Error Register is set, the Error bit in the Status Regis- ter is set and a normal completion is simulated. 6_._3_._1_._2_ _ _ _R_e_t_r_i_e_s_ 6.3.1.2 Once the head has settled over the desired cylinder, the WDC701 will attempt to read the sector. The WDC701 performs all retries necessary to recover the data during the read command. The con- troller attempts to read the desired sector up to 16 times. It will attempt a retry if it does not find an ID, if the ID of that sector has a bad CRC, if the Data Address Mark (DAM) could not be found or even if the data was actually read from the disk but in- curred a data CRC error. 6_._3_._1_._3_ _ _ _A_u_t_o_ _R_e_s_t_o_r_e_ 6.3.1.3 . Every time the controller encounters an error, it records the occurance of that error in an internal register. If, after 16 retries, the controller was not able to get a match on the ID field, it assumes that the head was possibly mis-positioned and executes an auto-restore. During the auto-restore, the stepping\f rate is implied to be equal to the Seek Complete period. After the auto-restore has been successfully completed, the controller re-seeks and attempts to read the sector once again. An auto-re- store will be performed only once per read or write sector com- mand. 6_._3_._1_._4_ _ _ _H_a_r_d_ _E_r_r_o_r_s_ 6.3.1.4 If the controller encounters a non-recoverable error, the con- troller examines its internal error history register. It then sets the bit in the Error Register of the highest severity in- curred. If the Data CRC Error bit is set, the data that last pro- duced that error will be available in the sector buffer. The Er- ror bit in the Status Register is set and a normal completion is simulated. 6_._3_._1_._5_ _ _ _E_r_r_o_r_ _S_e_v_e_r_i_t_y_ _L_e_v_e_l_s_ 6.3.1.5 Although the WDC701 might encounter any number of errors in the course of executing a command, it only reports the most severe error. Errors are ranked from most severe to least severe as fol- lows: 1) Aborted Command 2) TR000 Error 3) Bad Block* 4) Data CRC Error 5) Data Address Mark Not Found 6) ID CRC Error 7) ID Not Found * Bad Block will only be detected if there is no ID CRC Error or ID Not Found Error. \f 6_._3_._1_._6_ _ _ _N_o_r_m_a_l_ _C_o_m_p_l_e_t_i_o_n_ 6.3.1.6 If the WDC701 encountered no errors, it is considered a normal completion. The busy bit is reset. The status of the DMA bit in the command byte is examined. After all the data have been moved from the buffer, the DMA bit in the command byte is consulted. If this bit is set (D = 1; DMA mode) then an interrupt will be is- sued. 6_._4_ _ _ _ _ _ _ _T_y_p_e_ _I_I_I_ _C_o_m_m_a_n_d_s_ 6.4 This type of command is characterized by a transfer of a block of data from the host to the WDC701 buffer. These commands have im- plicit stepping rates as set by the last Restore or Seek command. 6_._4_._1_ _ _ _ _ _W_r_i_t_e_ _S_e_c_t_o_r_ 6.4.1 The Write Sector command is used to write a sector of data from the host computer to the disk. Upon receipt of the Write command, the controller generates DRQ's for each byte to be written to the buffer. After all data have been sent to the sector buffer, the Busy bit in the Status Register is set. The state of Seek Complete, Ready and Write Fault are sampled, and if an error condition exists, the Aborted command bit in the Error Register is set, the Error bit in the Status Register is set, an interrupt is generated and the Busy bit is reset. 6_._4_._1_._1_ _ _ _I_m_p_l_i_e_d_ _S_e_e_k_ 6.4.1.1 If no errors are encountered so far, a Seek command is executed. The Seek Complete line is sampled. If the Seek Complete line does not go true within 128 Index pulses, then the Aborted command bit in the Error Register is set, the Error bit in the Status Regis- ter is set, an Interrupt is generated and the Busy bit is reset. \f 6_._4_._1_._2_ _ _ _R_e_t_r_i_e_s_ 6.4.1.2 Once the head has settled over the desired cylinder, it will at- tempt to read the ID of the sector. The WDC701 performs all re- tries necessary to recover the ID during the write command. The controller attempts to read the ID of the desired sector up to 16 times. It will attempt a retry if it does not find an ID or if the ID of that sector has a bad CRC. 6_._4_._1_._3_ _ _ _A_u_t_o_ _R_e_s_t_o_r_e_ 6.4.1.3 Every time the controller encounters an error, it records the occurrence of that error in an internal register. If, after 16 retries, the controller was not able to get a match on the ID field, it assumes that the head was possibly mis-positioned and executes an auto-restore. During the auto-restore, the stepping rate is implied to be equal to the Seek Complete period. After the auto-restore has been successfully completed, the controller re-seeks and attempts to write the sector once again. 6_._4_._1_._4_ _ _ _H_a_r_d_ _E_r_r_o_r_s_ 6.4.1.4 If the controller encounters a non-recoverable error, the con- troller examines its internal error history register. It then sets the bit in the Error Register of the highest severity error incurred. The Error bit in the Status Register is set, an Inter- rupt is generated and the Busy bit is reset. If the proper sector is located, the sector buffer is written to the disk, an interrupt is generated and the Busy bit is reset. 6_._4_._2_ _ _ _ _ _F_o_r_m_a_t_ _T_r_a_c_k_ 6.4.2 The Format command is used for initializing the ID and data fields on a particular disk. Upon receipt of the Format command, the controller generates DRQ's for each byte of the interleave\f table to be written to the buffer. Information on setting up an interleave table can be found in chapter 7. In all cases, the number of bytes transferred to the buffer must correspond to the current sector size. After all data have been sent to the buffer, the Busy bit in the Status Register is set. The state of Seek Complete, Ready and Write Fault lines are sampled. If an error condition exists, the Aborted command bit in the Error Register is set, the Error bit in the Status Register is set, an interrupt is generated and the Busy bit is reset. 6_._4_._2_._1_ _ _ _I_m_p_l_i_e_d_ _S_e_e_k_ 6.4.2.1 If no errors are encountered so far, a Seek command is executed. No verification of track positioning accuracy is performed be- cause the track may not have any ID fields present. After the Seek operation has been performed, the Seek Complete line is sampled. If the Seek Complete line is not asserted within 128 Index pulses, the Aborted command bit in the Error Register is set, the Error bit in the Status Register is set, an Interrupt is generated and the Busy bit is reset. Once the head has settled over the desired cylinder, the control- ler starts writing a pattern of 4E's until the index is en- countered. Once the index is found, a number of ID fields and nulled data fields are written to the disk. The number of sectors written to the contents of the Sector Count Register. As each sector is written, the Sector Count Register is decremented and, consequently, must be updated before each format operation. After the last sector is written, the controller back-fills the track with 4E's. When the next Index pulse after the last sector is written is encountered, the format operation is terminated, an Interrupt is generated and the Busy bit is reset. \f 6_._4_._2_._2_ _ _ _T_r_a_c_k_ _F_o_r_m_a_t_ 6.4.2.2 The Format command formats the track as shown in fig. 2. Figure 2: Format pattern. \f F_ 7_._ _ _ _ _ _ _ _ _F_O_R_M_A_T_T_I_N_G_ 7. 7_._1_ _ _ _ _ _ _ _F_o_r_m_a_t_t_i_n_g_ _a_ _T_r_a_c_k_ 7.1 The format command is very similar to the write command, except that instead of filling the sector buffer with user data, it is filled with interleave and bad block information. Two bytes will be written to the buffer for each sector to be formatted. The first byte will be either a 00 or an 80 in Hex. If the first byte is a 00, the sector is marked as good. If the first byte is an 80, the sector will set the Bad Block bit in the Status Regis- ter if there is any attempt to read or write to this. The second byte is the logical sector number of the next sector to be formatted. This number will be recorded on the disk. On a 32 sectors per track disk, 32 pairs of formatting informa- tion must be supplied to the drive during each format operation. To start the format operation, the buffer must be completely fil- led even if the sector table is not as long as the buffer. On a 32 sectors per track disk, 64 bytes of formatting information are supplied. If the sector size of the disk is 256 bytes, then 192 bytes of garbage must be passed to the controller to start the format operation. Since the contents of the sector buffer do not imply how many sectors are to be formatted, a dedicated register is provided. This Sector Count Register must be loaded with the number of sec- tors to be formatted before each and every format operation. 7_._2_ _ _ _ _ _ _ _I_n_t_e_r_l_e_a_v_i_n_g_ 7.2. If we try to read sequential sectors on the disk, there is not enough time for us to set up to read or write the next sector be- fore it has been passed by the R/W head. This means that the disk will have to make a complete rotation to pick up the next sector.\f If we were to read all 32 sectors on a particular track, it would take us 32 rotations, or about half a second per 8 K bytes. This performance can be tremendously improved by allowing the system to read or write more than one sector per rotation. This can be accomplished with interleaving. Suppose our system takes less than three sector times (3/32 rota- tional period) to digest the data it has read and to set up the next read operation. This means that if we can arrange to have the second logical sector placed physically only four sectors away from the first one, the controller will be able to read it without much delay. This four to one interleave factor will allow us to potentially read the entire track in only four rotations. In our particular example, this will increase the throughput by a factor of eight. The simplest way to determine the optimum interleave for any par- ticular system is through experimentation. If the system main- tains its directories in a certain place on the disk, it some- times makes sense to have t_w_o_ interleaves. One could be used for regular disk operations and the other for directory functions. To simplify driver software, the WDC701 will automatically map logical to physical sectors to achieve interleave. This logical to physical map is returned on each track of the disk in the ID fields of the sectors. This map is recorded on the disk during format operations. Here is an example of an interleave table for a 32 sector track with 4:1 interleave and no bad blocks: Interleave table with 32 sectors and 4:1 interleave. M_ 00 00 00 08 00 10 00 18 00 01 00 09 00 11 00 19 00 02 00 0A 00 12 00 1A 00 03 00 0B 00 13 00 1B 00 04 00 0C 00 14 00 1C 00 05 00 0D 00 15 00 1D P_ 00 06 00 0E 00 16 00 1E 00 07 00 0F 00 17 00 1F Remember that the balance of the buffer must be filled with some- thing to start the format operation. \f The first byte in each byte pair in the preceding example is set to 00. This marks each block as a 'good' block. The second byte of each byte pair is the logical sector number. The first byte pair above represents the first logical sector of the track. The byte pair in brackets represents the second logical sector. \f i F_O_R_E_W_O_R_D_ First edition: RCSL No 31-D455. The major changes, compared to the version described in "RCSL No 31-D300: MONITOR3", are the introduction of a usercatalog (pro- cesses may be created by the JOB-command with prespecified claims) the initializing commands and the lock/unlock facility to prevent/reestablish the use of ALL and NEW commands, from other consoles than the mainconsole or privileged consoles. Palle Andersson A/S Regnecentralen, January 1979 Second edition: RCSL No 31-D595. The major changes in this manual compared to RCSL No 31-D 455 are the inclusion of the corrections described in RC Information Note NCJ 790715 "Corrections to s Reference Manual", and some correc- tions in the examples in use of usercat. Further the prio command has been changed: The priority is now a parameter in the console buffer, and the prio command merely sets this parameter. The create command will then set the priority when the process is created. It is also possible to set the priority in the jobspecification in Susercat. The remarks about the priority are valid from monitor release 6.0. In previous releases the prio command works as described in the RC Information Note NJC 790715, "Corrections to s Reference Manual". Henrik Sierslev A/S REGNECENTRALEN af 1979, May 1980 \f ii Third edition: RCSL No 31-D643. The major changes in this manual are the introduction of five new commands to s and the two parent messages finis and replace. These changes are valid from monitor release 7.0. It is now possible to let s read commands from a bs area instead of the console, and it is possible to set primary input in an in- ternal process causing FP to start immediately reading commands. Henrik Sierslev A/S REGNECENTRALEN af 1979, May 1981 \f iii T_A_B_L_E_ _O_F_ _C_O_N_T_E_N_T_S_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _P_A_G_E_ 1. BASIC OPERATING SYSTEM FUNCTIONS ....................... 1 1.1 Introduction ...................................... 1 1.2 Handling of Consoles .............................. 1 1.3 Console Description ............................... 2 1.3.1 Explanation of Command Mask ................ 3 1.4 Some Important Commands ........................... 4 1.5 The Command Language .............................. 4 1.6 Alfabetic List of the Commands for Handling of Internal Processes ................................ 6 2. MESSAGES FROM s ........................................ 51 2.1 Console Messages .................................. 51 2.2 Child Messages .................................... 53 3. ALFABETIC LIST OF COMMANDS FOR INITIALIZATION OF THE CATALOG SYSTEM ......................................... 55 3.1 Introduction ...................................... 55 3.2 Description of the Commands ....................... 55 3.3 Examples of Using the Initializing Commands ....... 70 3.3.1 Initializing of a New System from Magtape .. 70 3.3.2 Normal (Daily) Start with a New Specific Maincatsize ................................ 71 3.3.3 Normal Start, but Maincatalog is not on the 'First' Oldcatdevice ....................... 72 4. PROGRAM SCATOP (S-CATALOG _OPERATION) ................... 73 A_P_P_E_N_D_I_C_E_S_: A. REFERENCES ............................................. 85 B. BACKING STORAGE ........................................ 86 B.1 Representation of Scope ........................... 87 C. LOGICAL STATUS BITS .................................... 90 \f iv \f F_ 1_._ _ _ _ _ _ _ _ _B_A_S_I_C_ _O_P_E_R_A_T_I_N_G_ _S_Y_S_T_E_M_ _F_U_N_C_T_I_O_N_S_ 1. The functions of the basic operating system, s, which can initia- te and control the execution of parallel programs on request from terminals/consoles (in the following called consoles), are de- scribed. 1_._1_ _ _ _ _ _ _ _I_n_t_r_o_d_u_c_t_i_o_n_ 1.1 After initial system loading, the internal store contains the monitor and the basic operating system s, enabling operators to initiate and control internal processes from consoles. In addition, s can name peripherals as for instance magnetic tape. s may be the "pater familias" of a family tree of internal pro- cesses. Initially s owns all system resources, such as core sto- rage, backing storage, peripherals, message buffers, process de- scription tables etc. Apart from being the initial process in the system, s has no special status, and it is treated as any other internal process. It is possible to replace s with another opera- ting system. 1_._2_ _ _ _ _ _ _ _H_a_n_d_l_i_n_g_ _o_f_ _C_o_n_s_o_l_e_s_ 1.2 Commands to s from a console are served sequentially in the order of their arrival. The processing of a line of commands is termi- nated by a short reply printed on the console. The monitor permits simultaneous input of messages from all con- soles. The operating system, however, can only respond to a limi- ted number of messages. The maximum number of simultaneous conso- le actions within s is an option defined in the assembly of the monitor with s. A line of commands to s is processed from left to right, one com- mand at a time. If syntax errors or other errors are detected du-\f ring the processing of a line, an alarm is issued and a possible unprocessed rest of the line is dropped. For every command-line you perform: @att -> s ->command-line 1_._3_ _ _ _ _ _ _ _C_o_n_s_o_l_e_ _D_e_s_c_r_i_p_t_i_o_n_ 1.3 For each console communicating with the operating system, s main- tains a description defining the parameters to be used in the creation of an internal process with the console as primary input and primary output (see ref. 1). This is done by means of a com- mon consolebuffer pool. The size of this pool is an option to the monitor. A console description is initiated by means of commands to s. The parameters referred in this paper are listed below together with their type. The type describes what may be stored in each field. The meaning of type are: string max 11 characters; inte- ger -8388608 <= number < 8388607; integer pair 2 integers; short integer 0 <= number <= 4095. P_ parameter name: type: M_ process name string first address integer top address integer buffer claim short integer area claim short integer internal claim short integer function mask short integer max interval integer pair standard interval integer pair user interval integer pair process size integer program name string priority short integer \f 1_._3_._1_ _ _ _ _ _E_x_p_l_a_n_a_t_i_o_n_ _o_f_ _C_o_m_m_a_n_d_ _M_a_s_k_ 1.3.1 The command mask is a bit mask in the console buffer. It consists of two parts. A part defining the allowed s command from this console type (i.e. predefined or consolepool), and a part, used for signalling between commands, the command bits. Format of command mask: 1 1 shift 10 ; command bit : all bs resources. 2 1 shift 9 ; mode, modify, print, date. 3 1 shift 8 ; job, start, stop, break, dump, list, max, remove, proc, prog, load, I, O, get, unstack. 4 1 shift 7 ; include, exclude. 5 1 shift 6 ; size, login, user, project, prio, base. 6 1 shift 5 ; addr, function, buf, area, internal, bs, temp, perm, all, call. 7 1 shift 4 ; new, create, run, init. 8 1 shift 3 ; privileged console. 9 1 shift 2 ; command bit : mode = 0 10 1 shift 1 ; command bit : absolute address. bit 2 - 8 are generated as options to the system and cannot be altered. bit 1, 9 and 10 can be used in connection with a job in susercat. For each possible bs-device, we have: temp segments <bs device> integer temp entries <bs device> integer perm segments <bs device> integer perm entries <bs device> integer \f 1_._4_ _ _ _ _ _ _ _S_o_m_e_ _I_m_p_o_r_t_a_n_t_ _C_o_m_m_a_n_d_s_ 1.4 Three commands to s, initializing the whole set of console para- meters, exist: The n_e_w_ command using some standard values, the a_l_l_ command, searching and using the maximum available resources, and the j_o_b_ command, searching a file named "susercat" in order to find suit- able values to insert into. The job command will also create, load and start an internal process according to the parameters found. These three commands are followed by a string to be used as process name. The r_u_n_ command will create, load and start an internal process according to the console description. The s_t_o_p_ command will stop a running process without removing it. The process may be restarted by means of the start command. The s_t_a_r_t_ command will restart a stopped process. The process may either have been stopped by means of the stop command or by "it- self", for instance after having requested a magnetic tape. The r_e_m_o_v_e_ command will stop and remove an internal process. All commands are described in section 1.6 below. 1_._5_ _ _ _ _ _ _ _T_h_e_ _C_o_m_m_a_n_d_ _L_a_n_g_u_a_g_e_ 1.5 A command line to s is one line which can be empty or contain a number of commands. A line is either terminated by a new line character or by semicolon followed by a comment consisting of any string of characters terminated by a new line character. The com- mands in a message may consist of one or more of the following syntactical elements: <separator>::= <SP> .,/=<separator><SP> <unsigned number>::= <digit><unsigned number><digit> <radix>::= <unsigned number> <radix number>::= <radix>:<unsigned number> <number>::= <unsigned number>- <unsigned number><radixnumber> \f M_m_m_ <letter> 10 <name>::= <letter> P_p_p_ <digit> 0 <parameter>::= <number><name> <command word>::= addrallareabreakbsbufcall createdatedumpexcludefunctiongeti includeinitinternaljoblistloadlock loginmaxmodemodifynewopermprio printprocprogprojectreadremove replacerunsizestartstoptempunlockuser A command consists of a command word possibly followed by one or more parameters. Command words and parameters are separated from each other by a separator. In the syntactical definition of the commands in sec- tion 1.6 below, separators are not shown explicitly. It must be understood that a definition like the following temp <devicename><segment><entries> strictly speaking means temp <separator><devicename><separator><segments><separator><entries> \f 1_._6_ _ _ _ _ _ _ _A_l_f_a_b_e_t_i_c_ _L_i_s_t_ _o_f_ _t_h_e_ _C_o_m_m_a_n_d_s_ _f_o_r_ _H_a_n_d_l_i_n_g_ _o_f_ _I_n_t_e_r_n_a_l_ _P_r_o_c_e_s_s_e_s_1.6 A_d_d_r_ _C_o_m_m_a_n_d_ Syntax: addr <first storage address> <first storage address>::= <unsigned number> The console parameter first address is defined and used in a pos- sible subsequent creation of an internal process. An odd number is decreased by one. Example: addr 16320 \f A_l_l_ _C_o_m_m_a_n_d_ Syntax: all <process name> <process name>::= <name> First the console parameter process name is defined by the para- meter to the all command. Next all the other console parameters are initiated by setting the name "fp" into the console parameter program name, and the maximum of s's rest claims into the remain- ing parameters. The core size used is the greatest free consecu- tive core area found. Notice that the values may be redefined (diminished) by means of commands defining only a few parameters. The bases (max, standard, user) are set to the standard base of s. Example: all us \f A_r_e_a_ _C_o_m_m_a_n_d_ Syntax: area <area claim> <area claim>::= <unsigned number> The console parameter area claim is defined. This defines the number of available area processes. Example: area 20 If the job wants to communicate with 20 backing storage files at the same time, it will need 20 area processes. \f B_a_s_e_ _C_o_m_m_a_n_d_ Syntax: base <number><number> Assigns the number pair to the console parameters max interval, standard interval and user interval. Example: base -100 200 \f B_r_e_a_k_ _C_o_m_m_a_n_d_ Syntax: break Stops the execution of the internal process, defined by the con- sole parameter process name, stores its registers and the inter- rupt cause 8 at the head of its internal interrupt procedure ("break sequence"), and restarts the process in its interrupt procedure (see ref. 1). Example: break \f B_s_ _C_o_m_m_a_n_d_ Syntax: bs <bs device name> <segments> <entries> <bs device name>::= <name> <segments>::= <number> <entries>::= <number> The claims of the (already created and possibly running) process defined by the console parameter process name are increased by the (possibly negative) amount given by entries and segments for all keys on the backing storage given by bs device name. Example: bs disc2 1500 20 The claims on disc2 will be increased with 20 entries and 1500 segments for all perm keys. \f B_u_f_ _C_o_m_m_a_n_d_ Syntax: buf <buffer claim> <bufferclaim>::= <unsigned number> The console parameter buffer claim is defined. This defines the number of available message buffers. Example: buf 14 If the job has 14 data transfers (or other I/O operations) going on simultaneously, it will need 14 message buffers. \f C_a_l_l_ _C_o_m_m_a_n_d_ M_m_m_ * Syntax: call <device number> <device name> P_p_p_ 1 <device number>::= <unsigned number> <device name>::= <name> Assigns names to a sequence of peripheral devices. The devices must not be reserved by internal processes. Example: call 0=reader 10=magtape 5 printer \f C_r_e_a_t_e_ _C_o_m_m_a_n_d_ Syntax: create Creates an internal process as described by the console parame- ters. If the addr command has been used, the availability of the stora- ge area is checked. Otherwise s scans the store from the low address end and chooses the first available core area of suffi- cient size. If mode=0 has been used the write limits in the process descrip- tion is set to maximum, allowing the process to write in the who- le storage, else the write limits will equal the storage area found above. The ability of s to supply the specified claims is checked. After the creation s includes the process as a user of a standard con- figuration of peripherals, assigns the backing storage claims listed, and sets the priority of the process. The registers of the process are initialized as required by ref. 2. The catalog base of the process is the standard (login) base. Example: create \f D_a_t_e_ _C_o_m_m_a_n_d_ Syntax: date <year><month><day><hour><min><sec> <year>::= <digit> <digit> <month>::= <digit><digit> <digit> <day>::= <digit><digit> <digit> <hour>::= <digit><digit> <digit> <min>::= <digit><digit> <digit> <sec>::= <digit><digit> <digit> Sets the internal clock of the monitor to the value given in the call. If the main catalog has not yet been defined, s will continue with the "oldcat" command. Example: date 81.05.10 9.30.0 \f D_u_m_p_ _C_o_m_m_a_n_d_ Syntax: dump <dump area> <dump area>::= <name> The process defined by the console parameter process name is stopped (if not already stopped) and its core area is copied to the dump area. If the size of the dump area is not sufficient, only the first part of the core area is copied. The dump area must be visible from the catalog base of the internal process. Example: dump image \f E_x_c_l_u_d_e_ _C_o_m_m_a_n_d_ M_m_m_ * Syntax: exclude <device number> P_p_p_ 1 <device number>::= <unsigned number> The (already created and possibly running) process, defined by the console parameter process name is excluded as a user of a sequence of peripheral devices. Example: exclude 5 \f F_u_n_c_t_i_o_n_ _C_o_m_m_a_n_d_ M_m_m_ * Syntax: function <bit number> P_p_p_ 1 <bit number>::= <unsigned number> The console parameter function mask is set to contain ones in the selected bits. The rest is set to contain zeroes. Example: function 4 5 6 \f G_e_t_ _C_o_m_m_a_n_d_ Syntax: get <process name> <process name>::= <name> Searches the systemfile "susercat" for an entry with the given processname and initializes the console description according to the entry, but unlike the job command, no process is created. Example: get student run, will be the same as job student As the I and O commands are not implemented in susercat, you may instead use get student I 4 input run \f I_ _C_o_m_m_a_n_d_ Syntax: I <kind> <name> <kind>::= <short integer> Sets the console parameter primin to the parameters given in the call. At load time the registers of the created internal process are set as required by ref. 2, causing FP to select the given name as primary input. Example: new job1 I 4. input run FP will select the area (kind=4) "input" as primary input. If FP is reinitialized, maybe because of a syntax error, FP will start reading from the beginning of the input file. The private modebits, however, will not be changed, so the following commands will prevent FP from looping: if mode.1 yes finis mode.1 yes \f I_n_c_l_u_d_e_ _C_o_m_m_a_n_d_ M_m_m_ * Syntax: include <device number> P_p_p_ 1 <device number>::= <unsigned number> Includes the (already created and possibly running) process, defined by the console parameter process name, as a user of a sequence of peripheral devices. Example: include 6 7 \f I_n_i_t_ _C_o_m_m_a_n_d_ Syntax: init This command has the same effect as a create command followed by a load command. Example: init \f I_n_t_e_r_n_a_l_ _C_o_m_m_a_n_d_ Syntax: internal <internal claim> <internal claim>::= <unsigned number> Assigns a number to the console parameter internal claim. Example: internal 2 A job will only need internal processes if it acts as an operating system. \f J_o_b_ _C_o_m_m_a_n_d_ Syntax: job <process name> <process name>::= <name> Searches the system file "susercat" for an entry with the process name given. If the entry is found, the console description is initialized according to the entry, and a process is started by means of the functions implementing the create, the load and the start commands in the order mentioned. Example: job student \f L_i_s_t_ _C_o_m_m_a_n_d_ Syntax: list Prints a list of all internal processes having a parent. Each process is described on one line with the format: <process name><first storage address><size of storage area> <stop-count><state><parent name> Example: list \f L_o_a_d_ _C_o_m_m_a_n_d_ Syntax: load Loads the program defined by the console parameter program name into the beginning of the internal process defined by the console parameter process name. The program must be located on the backing store, and be descri- bed as a catalog entry with a positive size and content key (see ref. 1) must be 3 or 8. A possible area process for the entry must not be reserved. The number of halfwords to load and the relative entry point of the program must not exceed the size of the internal process. The program must be visible from the catalog base of the internal process. After loading, the registers are set as required by ref. 2, and the instruction counter is set to the absolute address corre- sponding to the relative entry point. The catalog base of the in- ternal process is set to the user base, given in the console description. Example: load \f L_o_c_k_ _C_o_m_m_a_n_d_ Syntax: lock (privileged console only) When this command has been used, it is only possible to use fol- lowing commands from a non privileged console: break dump job list load max proc prog remove start stop Example: lock \f L_o_g_i_n_ _C_o_m_m_a_n_d_ Syntax: login <ll standard base> <ul standard base> <ll standard base>::= <number> <ul standard base>::= <number> Assigns the number pair to the console parameter standard inter- val. This usually defines the temp scope in the sense of "File Processor". Example: login 1025 1025 \f M_a_x_ _C_o_m_m_a_n_d_ Syntax: max Prints the maximum of certain available resources with the format: max <max storage area><buf claim><area claim><internal claim> Example: max \f M_o_d_e_ _C_o_m_m_a_n_d_ Syntax: mode <integer> If integer = 0 the internal process is allowed to write in the whole primary storage. If integer <> 0, the process can only write in it's own storage area. Default is mode <> 0 Example: mode 0 - : mode 1 \f M_o_d_i_f_y_ _C_o_m_m_a_n_d_ Syntax: modify <address><old contents><new contents> (privileged console only) This command changes the word with address <address> to <new contents> if <old contents> is the present contents of the word. Example: modify 29276 30 34 Example: modify 29314 8:24700014 8:24300014 This command changes word 29314 from rl.w3 8:14 to rl.w1 8:14. \f N_e_w_ _C_o_m_m_a_n_d_ Syntax: new <process name> <process name>::= <name> First the console parameter process name is defined by the para- meter to the new command. Then all the other console parameters are initiated by setting the name fp into the console parameter program, and some standard values into the remaining parameters. Example: new me The most common used standard values are: priority 0 no. of message buffers 7 no. of area processes 6 no. of internal processes 0 function mask (octal value) 7440 core size 12800 perm entries on work device 20 perm segments on work device 800 standard work device <:disc:> all base values 8388605 \f O_ _C_o_m_m_a_n_d_ Syntax: O <kind> <name> <kind>::= <short integer> Sets the console parameter primout to the parameters given in the call. At load time the registers of the created internal process are set as required by ref. 2, causing FP to select the given name as primary output. Example: new job1 O 8 sub010 run The terminal "sub010" is selected for output. \f P_e_r_m_ _C_o_m_m_a_n_d_ Syntax: perm <bs device name><segments><entries> <bs device name>::= <name> <segments>::= <unsigned number> <entries>::= <unsigned number> Searches the monitor for a backing storage device with the stated name. Then the console parameters for permanent claims for that device are defined. The stated values are added to the temp claims for the device. Example: perm disc1 1500 20 \f P_r_i_n_t_ _C_o_m_m_a_n_d_ Syntax: print <first storage><last storage> <first storage>::= <unsigned number> <last storage>::= <unsigned number> Reserves the device named printer and prints the contents of the core storage starting with <first storage>. The printing ends when last storage has been passed after printing at least one word, or the current word is outside core store, or the printer could not be used properly (e.g. because of endpaper or because the printer was reserved). Then the printer is released. The format of the printing is: <address decimal><word decimal><halfword 1 decimal><halfword 2 decimal> <word octal><word text> Example: print 10246 10700 \f P_r_i_o_ _C_o_m_m_a_n_d_ Syntax: prio <short integer> The console parameter priority is set to the value given in the call. Normally a process will be created with priority 0, which is the highest possible priority of an internal process. \f P_r_o_c_ _C_o_m_m_a_n_d_ Syntax: proc <process name> <process name>::= <name> Assigns a name to the console parameter process name. It may for instance be used as a preample to commands like include, exclude, start etc. Example: proc him start proc me This sequence may for instance be used by the main operator (sit- ting at a privileged console) after having mounted and called a magnetic tape. After having started the waiting process, the ope- rator reinserts the name of his own process in the console de- scription. \f P_r_o_g_ _C_o_m_m_a_n_d_ Syntax: prog <program name> <program name>::= <name> Assigns a name to the console parameter program name. Example: prog batchsystem \f P_r_o_j_e_c_t_ _C_o_m_m_a_n_d_ Syntax: project <ll maxbase><ul maxbase> <ll maxbase>::= <number> <ul maxbase>::= <number> Assigns the number pair to the console parameter max interval. This defines the scope project in the sense of the "File Proces- sor". Example: project 0 2000 \f R_e_m_o_v_e_ _C_o_m_m_a_n_d_ Syntax: remove Stops and removes an internal process defined by the console pa- rameter process name. The console must be either the console from which the process was created or a privileged console. Note that the console parameters are unchanged. If the process is created by means of the job-command, the description of the permanent bs- claims in "susercat" belonging to the process is adjusted. \f R_e_a_d_ _C_o_m_m_a_n_d_ Syntax: read <area name> <area name>::= <name> Causes s to stack the current input pointer and start reading commands from the bs area. The last command must be "unstack" which will cause s to restore the previous input pointer and continue the command reading from there. The area must be visible from the catalog base of s. The stack depth is an option to s. Default is stack depth = 2, i.e. it is allowed to have one read command in an area. Example: read pip where pip contains all fut run unstack, will be the same as the command line all fut run \f R_e_p_l_a_c_e_ _C_o_m_m_a_n_d_ Syntax: replace <area name> <area name>::= <name> (privileged consoles only) The area must contain an independent program (contents key = 8). This program is loaded replacing the code of s (see ref. 1). \f R_u_n_ _C_o_m_m_a_n_d_ Syntax: run The run command has the same effect as a create command followed by a load command and a start command. Example: run \f S_i_z_e_ _C_o_m_m_a_n_d_ Syntax: size <size of storage area in halfwords> <size of storage area in halfwords>::= <unsigned number> Assigns a number to the console parameter size of storage area. An odd number is decreased by one. Example: size 20000 \f S_t_a_r_t_ _C_o_m_m_a_n_d_ Syntax: start Starts the execution of an internal process defined by the conso- le parameter process name. The console must be either the console from which the process was created or a privileged console. Example: start \f S_t_o_p_ _C_o_m_m_a_n_d_ Syntax: stop Stops the execution of an internal process defined by the console parameter process name. The console must be either the console from which the process was created or a privileged console. Example: stop \f T_e_m_p_ _C_o_m_m_a_n_d_ Syntax: temp <bs devicename><segments><entries> <bs devicename>::= <name> <segments> ::= <unsigned number> <entries> ::= <unsigned number> Searches the monitor for a backing storage device with the given name. Then the console parameters for temporary segments and entries for that device are defined. Example: temp disc2 1500 3 \f U_n_l_o_c_k_ _C_o_m_m_a_n_d_ Syntax: unlock (privileged console only) Will establish the use of the commands excluded by the lock command. Example: unlock \f U_n_s_t_a_c_k_ _C_o_m_m_a_n_d_ Syntax: unstack Causes s to continue reading commands from a previous stacked input source. If no input source is stacked, the command will be blind. Input will be stacked by the read command. The stack depth is an option to s. Default is 2. \f U_s_e_r_ _C_o_m_m_a_n_d_ Syntax: user <ll userbase> <ul userbase> <ll userbase>::= <number> <ul userbase>::= <number> Assigns the number pair to the console parameter user interval. This usually defines the user scope in the sense of "File Proces- sor". Example: user 1025 1035 \f 2_._ _ _ _ _ _ _ _ _M_E_S_S_A_G_E_S_ _F_R_O_M_ _s_ 2. 2_._1_ _ _ _ _ _ _ _C_o_n_s_o_l_e_ _M_e_s_s_a_g_e_s_ 2.1 When the operating system has successfully processed a line of commands, it prints the reply: ready If an error is detected during processing of a command in a line then an error message is displayed, the rest of the command line is ignored and the console returns to the ready situation. The following is a list of error messages printed by the opera- ting systems: P_ error message: meaning: M_ area error input/output error during area loading or the print-command is trying to print a word outside corestore area reserved area reserved by another process area unknown area not described correctly in catalog or area name incorrect base illegal incorrect use of the bases remedy: examine your use of the project, user, login- and base-command bs claims exceeded bs claims not available; the process is removed remedy: create the process with "smaller" claims bs device unknown device name does not exist remedy: examine your use of the bs-com- mand \f catalog error input/output error during catalog lookup or catalog system not initialized device reserved device reserved by another process remedy: wait until the device is not reserved device unknown device number does not exist remedy: use the correct device-number input aborted the buffer from the console has been received with an abnormal status remedy: send the command line to s once more name unknown name does not exist in "susercat" remedy: create an entrance in "susercat" with the given name no areas area process description not available remedy: use the area-command no buffers messages buffers not available remedy: use the buf-command no core storage area not available remedy: use the size-command no entries in maincat the number of temporary entry claims are not available in the main catalog remedy: create the process with less temporary entries no internals internal process descriptions not available remedy: use the internal-command not allowed command forbidden from this console, sys- tem under initialization or state of pro- cess does not permit this command \f not implemented optional command not assembled process unknown process does not exist remedy: use the proc-command prog name unknown the program name is not visible from the catalog base of the internal process remedy: examine your use of the user-and base-commands program too big program size or entry point exceeds primary storage area remedy: use the size-command syntax error illegal command syntax (or e.g. timeout) 2_._2_ _ _ _ _ _ _ _C_h_i_l_d_ _M_e_s_s_a_g_e_s_ 2.2 When the operating systems receives a message from one of its child processes, the following is done: a) If the waiting bit is equal to one (bit No 23 in the first word of the message) then the child process is stopped, an answer is sent to the process and a message is printed on the console from which the process was created: pause <processname><text> The operator can now start, break, or remove the process depending on the function in the message. b) If the waiting bit is equal to zero, then an answer is sent to the process, and a message is printed on the console from which the process was created: message <processname><text> \f The format of a message is following: +0: function shift 12 + Pattern shift 5 + wait +2: integer or text portion +4: integer or text portion until +14 Function If function is "finis", and wait is one, s will remove the process. If function is "replace", and wait is one, s will remove the process and start reading from the bs-area specified (see the read command). Pattern Specifies how the message is to be displayed to the operator. The pattern contains seven bits, one to each of the words in +2 to +14 of the message. A bit being one means that the corresponding word should be printed as an integer, otherwise the word is printed as a text portion of 3 characters. Thus 1<11 means that the word in +2 is an integer. Wait May be zero or one. \f 3_._ _ _ _ _ _ _ _ _A_L_F_A_B_E_T_I_C_ _L_I_S_T_ _O_F_ _C_O_M_M_A_N_D_S_ _F_O_R_ _I_N_I_T_I_A_L_I_Z_A_T_I_O_N_ _O_F_ _T_H_E_ _C_A_T_A_L_O_G_ 3. S_Y_S_T_E_M_ The functions of the initializing commands, which can initiate the backing storage, are described. 3_._1_ _ _ _ _ _ _ _I_n_t_r_o_d_u_c_t_i_o_n_ 3.1 If you want to overrule the automatic oldcat action, change the maincatsize or name, initialize a new system, change the kitlabel etc., you may use the following commands to the operating system s. These commands can only be used until the first process is created. The commands may be typed as described in section 1.5, but in contrast to the reaction on 'normal' error messages, see section 2.1, the rest of the command line will not be skipped in case of errors. 3_._2_ _ _ _ _ _ _ _D_e_s_c_r_i_p_t_i_o_n_ _o_f_ _t_h_e_ _C_o_m_m_a_n_d_s_ 3.2 A_U_X_C_L_E_A_R_ _C_o_m_m_a_n_d_ M_m_m_ 1 m_m_ fast Syntax: auxclear <devno> <lowerbase> p_p_ slow P_p_p_ 0 M_m_m_ * <upperbase> <entryname> P_p_p_ 0 <devno>::= <unsigned integer> <lowerbase>::= <number> <upperbase>::= <number> <entryname>::= <name> \f This command includes temporarily, the stated device in the bs- system with anonymous auxcatname and documentname, and possibly with changed device kind (fast/slow). All the stated catalog-entries will be removed from auxcatalog. The discdrive will be excluded from the bs-system. Example: auxclear slow 6 8: 40000001 8388606 catalog auxclear slow 6 -8388607 8388606 catalog Both of these commands delete the catalog entry with the name <:catalog:> and the interval -8388607, 8388606 from auxcat on device 6. E_r_r_o_r_t_e_x_t_s_ a) syntax error b) as the KIT-command a.-e. c) remove aux entry <entryname> result <integer> <integer> is explained in the description of the monitor procedure 'remove aux entry' (see ref. 4) d) as the NOKIT-command \f B_I_N_I_N_ _C_o_m_m_a_n_d_ M_ bs M_m_ mto * Syntax: binin <docname> <position> P_p_ nrz 1 P_ tro <docname>::= <name> <position>::= <unsigned number> This command reads from the stated device (cf. BININ RCSL 31-D234). If the reading is performed from bs/mto/nrz you must as the very first name the device by using the CALL-command. If tro the paper tape must be ready in the paper tape reader. <position> indicates: On disc it is the number of the first segment in the BININ-file. On magnetic tape it is the filenumber. On papertape it is irrelevant. Example: call 10 systemtape binin mto systemtape 2 3 4 5 6 7 8 9 These commands will name the magnetic tape station and read 8 files from the tape. \f P_ Errortexts/Messages Meaning: M_ a) modekind illegal the first parameter is not bs/mto/nrz/tro b) <docname> status <logical status bitpattern after input status-bitpattern> (see appendix C) c) input sum error sum error in SLANG-segment d) input size error command segment > 256 words e) <command name> syntax illegal command in command error segment f) create <entry name> result create entry <> 0 <integer> g) change <entry name> result change entry <> 0 <integer> h) rename <entryname> result rename entry <> 0 <integer> i) remove <entryname> result remove entry <> 0 <integer> j) perman <entryname> result permanent entry <> 0 <integer> k) load <entryname> result create area process <> 0 <integer> l) <entry name> status status bitpattern after area <logical status bitpattern> output (see appendix B) <integer> is the resultvalue described in the matching monitor procedure (see ref. 4). \f C_l_e_a_r_c_a_t_ _C_o_m_m_a_n_d_ Syntax: clearcat This command releases all discdrives/chaintables/catalogs. Errortexts: a) delete bs <docname> result <integer> <integer> is explained in the description of the monitor procedure 'delete backing storage'. b) delete entries <docname> result <integer> <integer> is explained in the description of the monitor procedure 'delete entries'. \f K_I_T_ M_M_m_ 1 1 fast Syntax: kit <new docname> <new auxcat name> slow 0 P_P_p_ 0 <device number> <new docname>::= <name> <new auxcat name>::= <name> <device number>::= <unsigned number> This command includes device <device number> in the bs-system with the documentname <new docname> and possibly with changed auxcatname <new auxcatname> and device kind (slow is used in connection with discdrives). The document name and name of auxiliary catalog will be changed in the kitlabel (i.e. the chainhead). If the disc drive is switched off, this command is blind. Example: kit privkit catprivkit slow 8 When the first kit is included in the bs-system, the correspon- ding auxcat is searched for an entry describing a maincatalog with the name <maincatname> (see the MAINCAT command). If the entry exists, but has an incorrect size, it will be removed from the auxcat. If the entry does not exist, it will be created with the size specified by the maincat-command. This entry will be connected as the main catalog. To indicate inclusion in the bs-system the following text is printed: <docname> mounted on <devicenumber> \f Errortexts: a) create peripheral process wrkname on <devno> result <integer> <integer> is explained in the description of the monitor procedure 'create peripheral process'. b) reserve process wrkname on <devno> result <integer> <integer> is explained in the description of the monitor procedure 'reserve process'. c) create peripheral process documentname on <devno> result <integer> <integer> is explained in the description of the monitor procedure 'create peripheral process'. d) prepare bs on <devno> result <integer> <integer> is explained in the description of the monitor procedure 'prepare backing storage'. e) on <devno> status <logical status bit pattern> I/O - error. <logical status bit pattern> is explained in appendix B. f) <auxcatname> status <logical status bit pattern> I/O - error. <logical status bit pattern> is explained in the Binin-command. g) <auxcat-name> status <logical status bit pattern> repair not possible I/O - error. <logical status bit pattern> is explained in the Binin-command. \f h) <auxcat-name> status <logical status bit pattern> update of entry count not possible I/O - error. <logical status bit pattern> is explained in the Binin command. i) insert entry <entryname> result <integer> <integer> is explained in the description of the monitor procedure 'insert entry'. j) auxcat to be repaired k) auxcat to be repaired update of entry count not possible. l) main catalog not defined no maincat connected catalog error use the MAINCAT-command or the KIT-command with the devices in the right order, to remove this errortext. m) connect main catalog <maincatname> result <integer> no maincat connected catalog error <integer> is explained in the description of the monitor procedure 'connect main catalog'. n) remove aux entry <maincatname> result <integer> no maincat connected catalog error <integer> is explained in the description of the monitor procedure 'remove aux entry'. o) create aux entry <maincatname> result <integer> no maincat connected catalog error \f <integer> is explained in the description of the monitor procedure 'create aux entry'. p) (as the NOKIT-command) no maincat connected catalog error. q) (errortext a-k) no maincat connected catalog error. \f K_I_T_ M_m_m_ * Syntax: kit <devicenumber> P_p_p_ 1 <devicenumber>::= <unsigned number> This command functions like the former command, with the excepti- on that no fields of the kitlabel (i.e. the chainhead) are changed. Errortexts: see the former command \f K_I_T_L_A_B_E_L_ Syntax: kitlabel <devicenumber> <docname> <auxcatname> M_M_ slow <catsize> <slice length> <no. of slices> P_P_ fast <catsize>::= <unsigned number> <slice length>::= <unsigned number> <no. of slices>::= <unsigned number> At present: <no. of slices> must be less than or equal to 2047 <catsize> must be less than or equal to 273 This command causes the writing of a chaintablehead and an empty auxcatalog on the device stated. The device will be partially included in the bs-system to prevent unintentional use of the disc-kit. If you want to use the disckit at once, then use the NOKIT-command followed by the KIT-command. Errortexts: intervention on <devno> (i.e. the discdrive was switched off) and see KIT \f M_A_I_N_C_A_T_ Syntax: maincat <name of catalog> <size of catalog> <name of catalog>::= <name> <size of maincatalog>::= <unsigned number>-1 At present: <size of catalog> must be less than or equal to 273. This command defines the name and size in segments of the maincatalog. Standard is: <name of catalog> = catalog <size of catalog> = -1 The size -1 indicates that the MAINCAT-command has not been used yet. Errortexts: None \f N_O_K_I_T_ Syntax: nokit <devicenumber> <devicenumber>:: <unsigned number> This command releases discdrive/chaintable/auxcatalog from device <devicenumber>. Errortexts: See CLEARCAT \f O_L_D_C_A_T_ Syntax: oldcat This command uses a table from monitor-options with the bs-devicenumbers, to generate a call of the KIT-command. Example: If the monitor is generated with bs-device 6, 7 and 8 (in this sequence), the OLDCAT-command is exactly the same as the command KIT 6 7 8. Errortexts: see KIT \f R_E_P_A_I_R_ Syntax: repair This command has to be performed before a call of the KIT-commands. By doing this it is possible to suppress o_n_e_ errortext of the type j and k (see KIT). It is permitted to repair one catalog-segment. \f 3_._3_ _ _ _ _ _ _ _E_x_a_m_p_l_e_s_ _o_f_ _U_s_i_n_g_ _t_h_e_ _I_n_i_t_i_a_l_i_z_i_n_g_ _C_o_m_m_a_n_d_s_ 3.3 It is common to the succeeding examples that the monitor is loaded, and s asks for the date/time but before date/time is written on the keyboard. 3_._3_._1_ _ _ _ _ _I_n_i_t_i_a_l_i_z_i_n_g_ _o_f_ _a_ _N_e_w_ _S_y_s_t_e_m_ _f_r_o_m_ _M_a_g_t_a_p_e_ 3.3.1 1. Switch off all the dicsdrives. This will make the automatic OLDCAT-action completely blind. 2. Type date/time on the keyboard. Now the system is ready for KITLABEL etc. 3. Mount relevant disckits and switch on all discdrives. Write a label on the disckits e.g. kitlabel 6 disc catdisc slow 50 21 2045 kitlabel 7 disc 1 catdisc1 slow 50 21 2045 kitlabel 22 diablo1 catdiablo1 slow 20 2 1212 4. Perform the cleaning after KITLABEL and include the disckits in the system by giving the commands clearcat maincat catalog 73 (or another size if wanted) oldcat 5. Transfer the standardprograms from systemtape e.g. call 10 systemtape binin mto systemtape 2 3 4 5 6 7 8 9 Now the system is ready for creation of process etc. \f 3_._3_._2_ _ _ _ _ _N_o_r_m_a_l_ _(_D_a_i_l_y_)_ _S_t_a_r_t_ _w_i_t_h_ _a_ _N_e_w_ _S_p_e_c_i_f_i_c_ _M_a_i_n_c_a_t_s_i_z_e_ 3.3.2 This can be done in several ways. E_i_t_h_e_r_: 1. Mount all relevant disckits and apply power to the disc- drives. 2. Type in date/time on the keyboard. (Now an automatic oldcat- action is performed). 3. Give the commands: clearcat maincat catalog 83 oldcat O_r_: 1. Switch off all the discdrives. 2. Type in date/time on the keyboard. (Notice: all discdrives are switched off, therefore the automatic oldcat-action is blind). 3. Mount all relevant disckits and apply power to the disc- drives. 4. Give the commands: maincat catalog 83 oldcat Now the system is ready for creation of processes etc. \f 3_._3_._3_ _ _ _ _ _N_o_r_m_a_l_ _S_t_a_r_t_,_ _b_u_t_ _M_a_i_n_c_a_t_a_l_o_g_ _i_s_ _n_o_t_ _o_n_ _t_h_e_ _'_F_i_r_s_t_'_ _O_l_d_c_a_t_d_e_v_i_c_e_ 3.3.3 1. Switch off all discdrives. 2. Type in date/time on the keyboard (notice: an automatic oldcat-action will be blind). 3. Mount all relevant disckits on and apply power to the disc- drives. 4. If necessary define the size of the maincatalog and include the disckits in the wanted order. e.g. maincat catalog 59 (if necessary) kit 7 6 22 \f F_ 4_._ _ _ _ _ _ _ _ _P_R_O_G_R_A_M_ _S_C_A_T_O_P_ (S-CATALOG _OPERATION) 4. The program is intended for use on operators level for s-user- catalog managing purposes, i.e. initializing the catalog, creating/changing/deleting entries or printing out contents of single entries. The s-user-catalog is supposed to be placed on an area, named <:susercat:>, and should be present before using the scatop- program. The program is called with a number of parameters, of which the first determines the action/subprograms to be performed. This first parameter should be one of the following names: newcat a new s-user-catalog will be created insert creation of an entry is attempted change changing of an entry is attempted delete deletion of an entry is attempted print an entry is attempted printed out printcat the usernames in susercat are printed out. The newcat and printcat action will unconditionally be executed. If the parameter following the action is a name the action will act upon the hereby named entry (gives no meaning for newcat and printcat). If the parameter is not a name the action will act upon the "entry0" (the catalog-describing entry). A parameter to any action must be one of the following types: <integer> determines the value of one word <integer1>.<integer2> determines the value of one word, is interpreted as integer1 shift 12 + integer2. <name> determines the value of 4 words. max 11 characters, which are placed to the left in the 4 words, unused place is padded up with (binary) zeroes. \f F_u_l_l_ _S_y_n_t_a_x_ M_m_m_ 1 P_p_p_ newcat * insert <integer> M_m_m_ change 1 scatop <username> <integer1>.<integer2> P_p_p_ delete 0 print <name> M_m_m_ printcat 0 P_p_p_ 1 All actions have in common: -- word 0 in an entry, the hashvalue, cannot directly be set or changed, but is managed due to the built in hashfunction. -- superfluous parameters are blind. -- too few parameters, will be padded up with zero parameters, before the action is executed. \f Referring to the format of susercat (see page 73), the detailed interpretation of the parameters in each action will be: newcat the whole catalog is deleted. The parameters are interpreted strictly sequen- tially and laid out as entry0 in the catalog from word (+2) and up. insert the entry named is created and placed in the ca- talog. The parameters are interpreted and laid out sequentially from word (+2) and up, only the entryname and the succeeding parameter are in- terchanged to fit the entryformat (see page 74 and example 2). change changes parts or all of an entry. Every second parameter (after an eventual entry- name) indicates a word (= relative halfword address//2) to be changed. The following para- meter determines the new value to be placed in this word, and succeeding words in case of a name. delete the indicated entry will be (marked as) deleted. Parameters given after the entryname has no influence at all. Note that entry0 (fortunately) cannot be deleted by this command. print each word in the indicated entry will be printed as one integer word, 2 integer halfwords and 3 characters. Blind, illegal and control characters are printed out as an '*'. Parameters given after the entryname have no influence at all. printcat each username included in susercat will be printed out, unsorted. Parameters given after printcat have no influence at all. \f Calculation of entry length and 'last used of entry 0' <last used of entry 0>: as entry 0 has the same length as a job describing entry only a part of the entry may carry information about the devices. 'last used of entry 0' is the last halfword carrying information in entry 0. It can be calculated as 6 + 12 x (no. of devices in susercat) <entry length>: The length of an entry in susercat. If no. of devices is less than 10 the entry length is calculated as 44 + 8 x (no. of devices) else <entry length> equals <last used of entry 0> To avoid mistakes see to that an area named <:susercat:> is pre- sent at all before using the commands. Even before using the new- cat command an area of this name (no matter the size) should be present. Some examples (see formats of susercat page 74) 1) scatop newcat 68 42 10 disc 0 0 disc1 0 0 disc2 0 0 creates a new susercat with +2: <entrylength> = 68 halfwords +4: <last used> = 42 (halfwordaddress) +6: <catsize> = 10 segments +8: <name of device 0> = 'disc', padded with zeroes, take up 4 words. +16: <slicelength device 0> +18: <reference> the given values unimpor- tant, the proper values will be computed and inserted. . . . and so on, until the para- meter list stops, the rest of the entry will be filled with zeroes. \f 2) scatop insert japroc 0.0 0 0 6.7 0.1056 0.0 100 200 100 100 20000 FP 100 110 20 1000 20 1000 (Observe that the two first parameters are interchanged, see page 74, hw +2 and hw +4). An entry named "japroc" is inserted in the catalog. Most values defined by parameters are following the standard claims for a process by "new" command, but three exceptions: a) The three bases (std, user and max base) are located to a private interval. (HW +22, +24, +26, +28, +40, +42). b) Hw +30 <size> is expanded from normally 12800 to 20000 halfwords. c) The bs-claims are somewhat extended as well. (hw +44, +46, +48, +50). 3) scatop change japroc 8 4.7 15 15000 16 myprog will change the entry "japroc" by following: word 8 (+16) <buf> changed to 4, <area> left unchanged word 15 (+30) <size> changed to 15000. word 16 (+32) and succeeding three words now contain the name "myprog", left justified, padded with binary zeroes. 4) scatop change 8 42 10 disc2 As no name is indicated as first parameter to change the action is executed upon entry0 (the susercat describing) word 8 (+16) is changed to 42, i.e. <slice length, device 0> is changed to 42 (there is hardly a reason for making this change) word 10-13 (+20-26) are changed to contain 'disc2', i.e. the name of device 1 will now be 'disc2'. Note that the <slice length> and <reference> in word 14-15 will not be changed! \f 5) scatop delete japroc The entry with <user name> = 'japroc' is (marked) deleted. 6) scatop delete Will actually be executed, but has no effect at all. 7) scatop print japroc The entry with <user name> = japroc will be printed out 8) scatop print The catalog describing entry0 (no name indicated) will be printed out. 9) scatop printcat All usernames in susercat will be printed out. 10) a job with claims as a "new" process Scatop insert name 0.0 0 0 7.6 0.1056, 0.0 8388605 8388605 8388605 8388605, 12800 FP 8388605 8388605 0 0 20 800 will correspond to new name run 11) a job with all available b_s_ claims Scatop insert haps 0.1_0_2_4_ 0 0 5.5 0.1056, 0.0 10 20 10 20 10000 FP 10 20 12) Change the job in ex 10 to a job with start adr 60000 Scatop change name 1 0.2 6 60000 \f Possible errormessages: P_a_r_a_m_e_t_e_r_ _E_r_r_o_r_s_ Preceded by '***scatop: param no <no>:' Succeded by one of the following: 'action missing' scatop has been called without indication of an action. 'action unknown' the parameter following scatop is not one of the known actionnames. 'unknown delimiter' the parameter has a wrong format. 'too many parameters' the parameterlist is too long. (the following occur only when using the change command) '<integer> index expected' an integer was supposed as next parameter, should indicate an index. 'index outside entrybounds' the parameter contains an index greater than or equal to the number of words in an entry. 'forbidden field, must not be changed' the indicated word cannot be changed by the change command. Try delete followed by insert or create a new susercat. 'one more parameter expected' after the last index given, a new value to be inserted should follow. \f F_o_r_m_a_t_ _o_f_ _s_u_s_e_r_c_a_t_ Entry 0 All other entries + 0 not used + 0 <hash value> + 2 <entry length> + 2 <prio> <command mask> + 4 <last used of entry 0> + 4 <process name> 6 <size of catalog> 6 - 8 <name device 0> 8 - 10 - 10 - 12 dev.0 - 12 <first address> 14 - 14 <work>.<work> 16 <slice length device 0 16 <buf> <area> 18 <reference> 18 <internal> <function> 20 <name device 1> 20 working location 22 - 22 <max ll> 24 dev.1 - 24 <max ul> 26 - 26 <std. ll> 28 <slice length device 1> 28 <std. ul> 30 <reference> 30 <size> 32 . 32 <prog> 34 . 34 - 36 . 36 - 38 dev.2 . 38 - 40 . 40 <user ll> 42 . 42 <user ul> 44 . 44 <entries temp> 46 . 46 <segments temp> device 0 48 dev.3 . 48 <entries perm> 50 . 50 <segments perm> 52 52 . 54 54 . device 1 56 56 hashvalue = -1 empty entry hashvalue = -2 deleted entry <reference> points to the start of the claim list for the device in consolebuffer relative to the start of the console buffer Number of devices in susercat is installation dependent; standard is all devices. \f E_x_p_l_a_n_a_t_i_o_n_ _o_f_ _a_ _s_u_s_e_r_c_a_t_ _e_n_t_r_y_ <hash value> Inserted automatically. See page 71, example 2. <prio> Insert the priority of the process. Corresponds to the prio command. <command mask> Only the three bits mentioned under 1, 2 and 3 are used so the standard value of the command mask can be 0. 1_. if <first address> is set <> 0 add 2 to the command mask 2_. if you want mode=0 add 4 to the command mask 3_. if you want "all" bs-resour- ces add 1024 to the command mask <first address> Insert the value 0 except you want the process to start in a specific address. Remember to change the command mask. Corresponds to the addr-command. <buf> Insert the no. of message buffers. Corresponds to the buf-command. <area> Insert the no. of area processes. Corresponds to the area-command. <internal> Insert the no. of internal pro- cesses. Corresponds to the internal- command. \f <function> Insert the standard value 1056. Corresponds to the function- command. <max ll> Lower limit of the max base. <max ul> Upper limit of the max base. Corresponds to the project- command. <std.ll> Lower limit of the standard base. <std.ul> Upper limit of the standard base. Corresponds to the login-command. <size> Insert the process size in half- words. Corresponds to the size-command. <prog> Insert the name fp except you want another program to replace fp. Corresponds to the progcommand. <user ll> Lower limit of the user base. <user ul> Upper limit of the user base. Corresponds to the user-command. <entries temp> Temporary entries. <segments temp> Temporary segments. Corresponds to the temp-command. <entries perm> Permanent entries. <segments perm> Permanent segments. Corresponds to the perm-command. \f O_t_h_e_r_ _M_e_s_s_a_g_e_s_ Preceded by '***scatop: ', followed by one of the following: 'entry does not exist' or 'entry exists already' Occurs when the desired action cannot be performed due to one of the given reasons, see the survey in chapter 1. 'devi<no> not found in nametabel' During execution of newcat the devicename indicated for device no <no> was not found/known by the system. 'catalog full, name not found' Occurs e.g. when the catalog is filled up, and it is attempted to insert a new entry. Delete some entries and insert again, refuse the insertion or create a bigger susercat (and insert all the entries again). Could also occur when e.g. the whole catalog has been searched for an unknown entry. In any case, the operator is warned that the catalog is full (and the name was not found). 'catalog error, hashvalue' This is a hard system error, save a hardcopy of the run and consult the RC support depart- ment. \f A possible configuration of susercat could be: Entry 0 Console buffer . . . . . . +8 . . dev.0 +50 entries/segments on first device +18 <reference> +56 in chain table +20 +58 entries/segments on second device dev.1 +64 in chain table +66 entries/segments +30 on second device +32 +72 in chain table dev.2 +42 <reference> entries/segments on n'th device in chain table In the consolebuffer there are four words for every possible device in chaintable, containing information about permanent/ temporary segments and entries. \f F_ A_._ _ _ _ _ _ _ _ _R_E_F_E_R_E_N_C_E_S_ A. 1 RCSL No 31-D364: SYSTEM 3 UTILITY PROGRAMS, Part One 2 RCSL No 31-D379: SYSTEM 3 UTILITY PROGRAMS, Part Three 3 RCSL No 55-D1: RC4000 REFERENCE MANUAL 4 RCSL No 31-D477: RC8000 MONITOR, Part Two 5 RCSL No 31-D476: RC8000 MONITOR, Part One \f F_ B_._ _ _ _ _ _ _ _ _B_A_C_K_I_N_G_ _S_T_O_R_A_G_E_ B. Backing storage files are created explicitly by means of the pro- gram 'set', but they may also be created implicitly in case an FP-command like 'p=algol' or >p=edit q> is executed and p does not exist already (or is protected against writing). A backing store file occupies two kinds of resources: a number of b_a_c_k_i_n_g_ _s_t_o_r_e_ _s_e_g_m_e_n_t_s_ and one c_a_t_a_l_o_g_ _e_n_t_r_y_. A file may change length after its creation, thereby occupying more or less seg- ments. 1_._ _S_c_o_p_e_ Some files live as long as the user wants, others are cancelled. Some files are only 'visible' to one user, others are visible to all users. Altogether, we distinguish between the following kinds of scope: T_e_m_p_o_r_a_r_y_ _F_i_l_e_ A temporary file is cancelled on request of the user, of the au- toload function, of the start up of BOSS and in some cases BOSS will cancel a temporary file not in use. A temporary file is vi- sible from all processes with the same login base. L_o_g_i_n_ _F_i_l_e_s_ A login file is cancelled on request of the user or by start up of BOSS. A login file is visible from all processes with the same login base. U_s_e_r_ _F_i_l_e_ A user file is only cancelled on the request of the user. A user file is 'visible' from all processes created with the same job- name (user base) as when he created the file. P_r_o_j_e_c_t_ _F_i_l_e_ A project file is only cancelled on the request of a user under the same project base. A project file is visible from all proces- ses with the same project base as when the file was created. \f S_y_s_t_e_m_ _F_i_l_e_ A system file may only be created and modified by the maintenance staff. The file is visible from all projects enabling program- ming. User, project and system files are named in common as p_e_r_m_a_n_e_n_t_ f_i_l_e_s_, because they are never cancelled automatically. When a file is born, it will always start out as a temporary file. La- ter, the scope of the file may be changed by means of the scope command, which is available as an FP-command. A login file or a temporary file may be created with the name p even if you already have a user file with that name. When you la- ter refer to p, the login file will be used. If the login file is cleared, the user file will reappear. In the same way, a user fi- le may be created even if a project file with the same name al- ready exists. And finally a project file may be created with the same name as a system file. B_._1_ _ _ _ _ _ _ _R_e_p_r_e_s_e_n_t_a_t_i_o_n_ _o_f_ _S_c_o_p_e_ B.1 Each file in the system is described by an entry in the common file catalog (which itself is a system file). The entry associa- tes a permkey and an interval (the so-called entry base) with the file. The catalog key may be 0, 2 or 3 and defines the 'life time' of the entry. The entry base defines an interval of inte- gers from which the file is visible. Together the permkey and the base define the scope. A process searching for a file in the catalog will have a c_a_t_a_l_o_g_ b_a_s_e_ (an interval) from which it looks for visible entries. The result of the lookup will be the file with the name wanted and with the smallest entry base surrounding the catalog base (or e- qual to the catalog base). Within certain limits the job may change its catalog base and the entry base of files. To each job is associated 3 limiting inter-\f vals specified in the user catalog and defining the access rights of the job. Typically they appear like this: Max base User base Std base Possible non-standard positions of catalog base. The max base, the std base and the catalog base are parts of the process description in the monitor, which maintains these rules: The job may change its catalog base to any interval which is con- tained in (or equals to) the max base and which contains the std base (or equal it). The catalog base may also be contained in the std base. The job may cancel or modify a file if the job could change its own catalog base to the entry base of the file. Thus files with an entry base outside the max base or adjacent to the std base are protected against the job. Files adjacent to the std base cannot even be read by the job. Relative to the process, the scopes of files may now be described in this way: t_e_m_p_ _f_i_l_e_s_: permkey 0, entry base equals (or is contained in) the std base. l_o_g_i_n_ _f_i_l_e_s_: permkey 2, entry base as for temp files. u_s_e_r_ _f_i_l_e_s_: permkey 3, entry base equals user base. p_r_o_j_e_c_t_ _f_i_l_e_s_: permkey 3, entry base equals max base. s_y_s_t_e_m_ _f_i_l_e_s_: entry base sorrounds the max base. \f Files with permkey 0 or 2 (non-permanent files) cannot be genera- ted with an entry base surrounding the std base, as this would prevent s from distinguishing processes temporary files from other processes. Thus the std bases may never overlap, not even the std base of the maintenance project (which has the largest possible interval as its max base). A full description of the file system is found in ref. 5. \f C_._ _ _ _ _ _ _ _ _L_O_G_I_C_A_L_ _S_T_A_T_U_S_ _B_I_T_S_ C. The meaning of the logical status bits is: 1 shift 23: I_n_t_e_r_v_e_n_t_i_o_n_. The device was set in local mode during the operation. 1 shift 22: P_a_r_i_t_y_ _e_r_r_o_r_. A parity error was detected during the block transfer. 1 shift 21: T_i_m_e_r_. The operation was not completed within a certain time defined in the hardware. 1 shift 20: D_a_t_a_ _o_v_e_r_r_u_n_. The data channel was overloaded and could not transfer the data. 1 shift 19: B_l_o_c_k_ _l_e_n_g_t_h_. A block input from magnetic tape was longer than the buffer area allowed for it. 1 shift 18: E_n_d_ _o_f_ _d_o_c_u_m_e_n_t_. Means various things, for instance: Reading or writing outside the backing storage area was attempted, the paper tape reader was empty, the end of tape was sensed on magnetic tape. For further details see the description of External processes (see RCSL 31-D478: External Processes). 1 shift 17: L_o_a_d_ _p_o_i_n_t_. The load point was sensed after an operation on the magnetic tape. 1 shift 16: T_a_p_e_ _m_a_r_k_. A tape mark was sensed or written on the magnetic tape. 1 shift 15: W_r_i_t_e_-_e_n_a_b_l_e_. A write-enable ring is mounted on the magnetic tape. 1 shift 14: M_o_d_e_ _e_r_r_o_r_. It is attempted to handle a magnetic tape in a wrong mode (NRZ or PE). \f 1 shift 13: R_e_a_d_ _e_r_r_o_r_. Occurs on card reader. See the descrip- tion of 'External processes'. 1 shift 12: C_a_r_d_ _r_e_j_e_c_t_ _o_r_ _d_i_s_c_ _e_r_r_o_r_. Occurs on card reader or disc. See the description of 'External processes'. 1 shift 8: S_t_o_p_p_e_d_. Less than wanted was output to a file of any kind or zero bytes were input from a backing storage area. 1 shift 5: P_r_o_c_e_s_s_ _d_o_e_s_ _n_o_t_ _e_x_i_s_t_. The document is unknown to the monitor. 1 shift 4: D_i_s_c_o_n_n_e_c_t_e_d_. The power is switched off on the device. 1 shift 3: U_n_i_n_t_e_l_l_i_g_i_b_l_e_. The operation attempted is illegal on that device, e.g. input from a printer. 1 shift 2: R_e_j_e_c_t_e_d_. The program may not use the document, or it should be reserved first. 1 shift 1: N_o_r_m_a_l_ _a_n_s_w_e_r_. The device has attempted to execute the operation, i.e. '1 shift 5' to '1 shift 2' are not set. \f F_ \f \f «eof»