1 Assembler C9208 12-May-93 12:30 PAGE 1 F 0 1 GLOBAL BLOCK Global Block 2 EXT 3 INPUT PROP put proprietary notice in listing! 1 2 3 4 5 6 7 8 9 10 * ......... BBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 11 * ................. BBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 12 * ..........##......... BBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 13 * ............##........... BBBBBB BBBBBB TTTTTT TTTTTT TTTTTT IIIIII 14 * .............##............ BBBBBB BBBBBB TTTTT TTTTTT TTTTT IIIIII 15 * .............##............ BBBBBB BBBBBBB TTTT TTTTTT TTTT IIIIII 16 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 17 * ..............##............. BBBBBBBBBBBBBBBBB TTTTTT IIIIII 18 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 19 * .............##.............. BBBBBB BBBBBB TTTTTT IIIIII 20 * ...........##.............. BBBBBB BBBBBB TTTTTT IIIIII 21 * ..........##............... BBBBBB BBBBBB TTTTTT IIIIII 22 * ........##............... BBBBBB BBBBBBB TTTTTT IIIIII 23 * .....##.............. BBBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 24 * ................. BBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 25 * ......... BBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 26 * 27 * 28 * ****** Copyright 1982, 1983, 1984, 1985, 1986, 1987, 1988, 29 * 1989, 1990, 1991, 1992 BTI Computer Systems ****** 30 * 31 * This document and the program it describes are the exclusive property 32 * of and proprietary to BTI Computer Systems. No use, reproduction or 33 * disclosure of this document or its contents, either in full or in part, 34 * by any means whatsoever regardless of purpose may be made without the 35 * prior written consent of BTI Computer Systems. 36 * 37 * BTI Computer Systems 38 * Sunnyvale, California 94086 4 INPUT REVISIONS revision data 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 2 (REVISIONS) F 3 3 4 ********************************************************************************** 5 * * 6 * Rev. Date * 7 * ---- --------- * 8 * 3.10 24 Jun 85 ( A20, 9C release was reassembled as 3.10-1 ) * 9 * Error return from DISKIT in share/unshare freq * 10 * processor changed to unmap WNDO1. * 11 * C8506h 29 Jun 85 * 12 * Cancel disk space low operator message when disk * 13 * is dismounted. * 14 * Minor changes to maintenance dismount code, VOLNAWAY * 15 * now indicates volume in process of being dismounted. * 16 * C8507 02 Jul 85 * 17 * Created FILLTCQ subroutine from terminal write FREQ so * 18 * that ECHOLINE can use the same chunk of code. Changed * 19 * the way stack space is allocated in INITWRITE. Rewrite * 20 * ECHOLINE to use FILLTCQ, and handle line kill processing * 21 * correctly. This also fixes the problem of having * 22 * delays set for delayable characters in echo mode 3. * 23 * C8507a 11 Jul 85 * 24 * Restored check for power fail at beginning of dispatcher, * 25 * this guarantees that all CPUs will execute the power fail * 26 * restart code. * 27 * Moved SETMEMTRAP call from INITWRITE to the beginning of * 28 * each write FREQ. This allows the write routines to set * 29 * different error addresses. Added PASSERRW1 which does * 30 * a GRUBWNDO1 before executing the PASSERRUP code. * 31 * 3.10-1 12 Jul 85 (9C patched to 3.10-10, CM 2.5) * 32 * Changed OUTTSET to not flush input and output buffers. * 33 * Fix to the recover SAF block code so that if a current * 34 * block (FCMABLK) is not specified, the load point block * 35 * is used instead. * 36 * C8507b 17 Jul 85 * 37 * Changed CIA driver to only put as many characters into * 38 * a port's output buffer as can be output in 4 CIA cycles * 39 * (200 ms). Added port option to XOFF the port when the * 40 * input buffer gets more than half full. XON gets sent * 41 * when the input buffer reaches less than 1/8 full, or * 42 * the input buffer gets flushed, or on a port reset. * 43 * C8507c 22 Jul 85 * 44 * New FREQs FRTSETXOIQ and FRTGETXOIQ to set and get the * 45 * XOFF port on input buffer full option. * 46 * Reread Modem/Hardwire jumper in CIA_RESET. * 47 * C8507d 25 Jul 85 * 48 * Added GRUBWNDO1 for file page in RAFREAD/CODEREAD at * 49 * USRMEMBAD (patched into 3.10-2). * 50 * Prevent S0007 by preserving R3 (FDE address) around * 51 * call to GRUBWNDO2 in RAFEXPAND (patched into 3.10-2). * 52 * Changes to the PRIV2MOD routine to protect spooled files * 53 * from changes by non .!!!, .SYS users. This prevents * 54 * unsaving devices from hardware.sys by unprivileged users. * 55 * C8507e 31 Jul 85 * 56 * Changed SPLRTIME from 30 seconds to 600 seconds. * 57 * Forestalls 'spooler currently unavailable' on loaded * 58 * systems (patched into 3.10-2). Fix to the path WFM * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 3 (REVISIONS) F 3 59 * code. It didn't recognize EOR, consequently it * 60 * did stores with an uninitialized register (R7). * 61 * Added 2 new trace calls to the CIA driver. * 62 * Added code to SSU_RESET to have the SSU keep FDATE * 63 * current using a new microcode feature. This * 64 * requires a jump instruction to be changed to a NOP. * 65 * C8508 07 Aug 85 * 66 * Changed CIATPS to 10 and CIATICKTIME to 45. Also changed * 67 * WAIT30SEC to WAIT60SEC and WAIT60SEC to WAIT120SEC in the * 68 * CIA driver. These changes reflect the discovery that a * 69 * CIA tick equals 2.2 ms and not the documented 1 ms. * 70 * Changed subroutines that modify FDATE to check SSUVER * 71 * first and if using a new SSU to not update FDATE. * 72 * Replaced the unconditional jump around the code to set * 73 * up the SSU updating FDATE in SSU_RESET to check SSUVER. * 74 * Added FSNDATE to keep track of the last dispensed serial * 75 * number for systems using SSU updated FDATE to assure * 76 * unique serial numbers. * 77 * Added SMULIST to keep track of SMUs on the system. * 78 * This list is built in HAVEMEMORY in INITIAL. * 79 * Added SMUCHECK (called from DEADMAN) which reads * 80 * SMU error logs once a minute. Changed CIA driver * 81 * to look for the PORTCINIT parameter instead of the * 82 * PORTCRALL parameter after the PORTCRESET command. * 83 * Removed old code that allowed for CPUs not recognizing * 84 * power fail while executing WAIT instructions. This * 85 * code was causing errors due to the new code that * 86 * enables interrupts in DISPATCH. * 87 * C8508a 08 Aug 85 * 88 * Added new fields to COMM block to hold a pointer to the * 89 * first TCB in the TCB list belonging to this comm, and a * 90 * count of the terminals timing belonging to this comm. * 91 * Changed terminal timing values to negative counts so that * 92 * timing TCBs can be LSRCHed for the sign bit on in the * 93 * timing count field. Changed timing routine to use these. * 94 * Created new file CONSTANTS and moved memory management * 95 * constants, BITTAB, etc. into it. Also moved many * 96 * constants from COREDEFS into routines that use them. * 97 * Split COREDEFS into CPUPAGE, COREDEFS, VIRTCOREDEFS, * 98 * and USERCOREDEFS. * 99 * C8508b 12 Aug 85 * 100 * Fixed S0005 in OPENERRBZY portion of FROPEN requests by * 101 * having FREETEMPS and SELFFWAIT save R2. Before, a load * 102 * from the FCB was being made after FREETEMPS dumped the * 103 * FCB. * 104 * C8509 20 Sep 85 * 105 * Fix in initial to properly calculate the free storage * 106 * equilibrium value (FSXCOUNT). * 107 * C8510 01 Oct 85 * 108 * Changes to MS driver. READ does no error recovery during * 109 * headchecks (added MDVLOWTOL). Removed READ1TRACK, * 110 * incorporated this function into READTRACKS, which only * 111 * reads one sector off each track. Also, checker quits * 112 * as soon as error limit is exceeded. * 113 * Change to sleep code in dispatcher so that the error log * 114 * list and accounting list are empty before system allowed * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 4 (REVISIONS) F 3 115 * to sleep. Change in dispatcher to check to see if a * 116 * process wants to run on a specified CPU. * 117 * OPREQ ORSETCPU to select a CPU for a process to run on. * 118 * C8510a 01 Oct 85 * 119 * Fix to open .VOL so that special privileges over alias * 120 * dir are not required to execute open successfully. * 121 * Addition of pseudo-command for the comm driver to * 122 * indicate reset the port's interface state. * 123 * C8510b 07 Oct 85 * 124 * Fix to open, close, destroy, and unsave code so log * 125 * entries will go in the proper accounting files. * 126 * Fix to abort, terminate, and evict, to set the proper * 127 * port number when a batch job is involved. * 128 * Addition of CPUINIT to keep track of number of CPUs * 129 * on INITIAL page. When goes to zero INITIAL page is * 130 * made available for free storage. * 131 * Changes to ORVANISH when system is sleeping so that * 132 * the system volume will not be dismounted until all * 133 * accounting and error log entries have been made. * 134 * C8510c 14 Oct 85 * 135 * Addition of logon account names to alias and unalias * 136 * logging. New OPREQs OPRCPUSTOP and OPRCPUSTRT to remove * 137 * and restore CPUs from active work in the system. * 138 * C8510d 16 Oct 85 * 139 * The volume mount and dismount code now writes to the * 140 * Manager.Sys accounting log file, informing who loaded * 141 * or unloaded a specific volume. * 142 * C8510e 17 Oct 85 * 143 * Added GRUBWNDO1 after FORCEWRW1 in RAFEXPAND. * 144 * Cleaned up the code that generates accounting records * 145 * for file opens, basically used existing subroutine. * 146 * Added additional information returned by the session * 147 * information request, being a bit indicating whether * 148 * the session was created by the system or a user. * 149 * C8510f 24 Oct 85 * 150 * Added OPREQ to remove memory pages from service * 151 * for system load testing. Modified FSXPAND to * 152 * actually do the removal and restoration. * 153 * Added 0 case to PROCPOWER session finder. Allows 0 * 154 * for session number in ORPABORT, ORPEVICT, ORPTERMIN. * 155 * Fix to OPRSTRTBAT request in that standard input * 156 * unit is tagged as a CM unit. This disallows rewinds * 157 * by anyone other than Control Mode. * 158 * Changes to INITIAL and INITPROC to generate PPLs * 159 * for their pages but put them on PPLINIT list. * 160 * INITPROC then moves these to the idle list when * 161 * finished and makes its pages available for free storage. * 162 * Reordering of some system files (INTPROC, SPROCSTART, * 163 * CONVERSION, AFTMANGLE, HOURPROC). * 164 * Moved FETCHDIR and FREEDIR into ULBTWIDDLE. * 165 * C8510g 25 Oct 85 * 166 * ALL mount and dismount requests and support routines * 167 * moved into MOUNTUTIL and OPRQMOUNT. * 168 * Various volume and system information requests moved * 169 * from XRQOPREQ2 to OPREQCVOL. * 170 * OPREQ files reordered. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 5 (REVISIONS) F 3 171 * C8510h 31 Oct 85 * 172 * Renamed CAIMSABORT to CAIMABORT. * 173 * Removed unused symbol ALIAGVER, and unused pointer * 174 * LONGERSP and word LONGERS. * 175 * Set bit in PCB indicating special project for CPU patch * 176 * process and CPU stop process. * 177 * Set FLAGS bit in POWERUP to reload CPU microcode patches. * 178 * Removed TERMTIMING word (now kept track of in COMBLOCK). * 179 * Boxed out ascii parity table, TTYPARTAB (unused). * 180 * Changed FCFBC to FCFBD (file being destroyed not closed). * 181 * C8511a 04 Nov 85 * 182 * Changed FILLTCQ to not do CMOVE into TCQ. Changed * 183 * terminal write code to catch user memory errors. * 184 * Changed ORDESACCT OPREQ to call XREQs to return disk * 185 * and CPU limits to manager account. * 186 * Removed halt S0201 from comm driver. * 187 * C8511b 04 Nov 85 * 188 * Minor bug fixes to the backup/recover requests. All * 189 * recover requests should trap user memory errors * 190 * correctly. Initialize volume request should copy * 191 * the system configuration information and store it * 192 * into both security blocks. * 193 * C8511c 06 Nov 85 * 194 * Implementation of the account foreign flag. This * 195 * prevents managers on a volume from a different system * 196 * from having access to accounts not on his volume. * 197 * Boot, PowerUp, PowerDown, Sleep accounting records * 198 * are now written to the manager.!!! account if an * 199 * accounting file exists. * 200 * C8511d 11 Nov 85 * 201 * Register usage change in FRQNOPEN to ensure that * 202 * initial privileges are set properly. * 203 * The account names in file accounting records have been * 204 * switched, this allows the entries to be written to the * 205 * correct manager/user accounts. File actions are not * 206 * logged if the file accessor is also the file owner. * 207 * Checks for alias or unalias account being same as logon * 208 * account when creating accounting record moved to central * 209 * routine. * 210 * Failed alias accounting record now contains logon * 211 * account name. * 212 * Reorganization of the INITDEVACS and LINKPHYDEV routines. * 213 * C8511e 13 Nov 85 * 214 * Changes to OPEN and CLOSE code to keep terminal busy * 215 * count in the TCB so that any port may be opened * 216 * both RO and RW. * 217 * C8511f 14 Nov 85 * 218 * Combined FREQECHO, FREQUNIT, and FREQMKPATH into * 219 * FREQUNIT file. * 220 * Added FREQ to switch resources associated with 2 units. * 221 * Moved code to make accounting entries for evicts, * 222 * aborts, etc. into a subroutine. Rearranged code in * 223 * OPR process control section. * 224 * Fix to the logoff code so that an unalias record gets * 225 * the correct logon account name. * 226 * C8511g 18 Nov 85 * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 6 (REVISIONS) F 3 227 * Added OPREQs to put a process in the STOPWAIT queue, * 228 * and to remove it from same. Made changes to DISPATCH * 229 * to actually put the process in STOPWAIT. Added 2 new * 230 * accounting types for these activities. * 231 * C8511h 27 Nov 85 * 232 * Bug fix to lock PCNTLLOCK in PROCPOWER 0 case. * 233 * Changed PROCPOWER to allow nonzero self-spec even * 234 * if the requester is a system session. * 235 * Changed powerfail code to live through multiple * 236 * powerfails. Involved POWERUP, POWERUP2, OWNCOPY, * 237 * ZEROPAGE, CIADRIVER, and new CPU var POWERRTNPC. * 238 * Enhancements to the foreign account restriction. * 239 * Basically, we disallow access by foreign accounts and * 240 * inhibit access to foreign accounts. Foreign accounts * 241 * may only receive information on similar foreign * 242 * accounts (same system serial number), while * 243 * non-foreign accounts will not receive privileges * 244 * over foreign accounts. * 245 * C8512a 04 Dec 85 * 246 * Changes to the open service routine to initialize * 247 * the SAF end pointers when files are opened /RO. * 248 * This allows faster SEODs even when the file is * 249 * not open for writing. * 250 * Removed jump around check for CM unit in LUNSEARCH. * 251 * Fix exchange save request to set the SAF end pointers. * 252 * Added UNITWAIT queue for processes waiting to give or * 253 * receive units from other processes. Added UREQs to * 254 * give and receive units between sessions. * 255 * C8512b 04 Dec 85 * 256 * Added check in create FCB routine to ensure enough * 257 * user free storage before we hand out a new FCB. * 258 * This prevents system crashes by arbitarily * 259 * opening a whole slough of units. * 260 * C8512c 05 Dec 85 * 261 * Fixed TAPENOTRDY in MTDRIVER to not loop trying to * 262 * rewind a drive that has errors but is still "ready" * 263 * and the controller is not dead (reported by UK). * 264 * Changed message send UREQ to pass bit indicating it is * 265 * ok to interrupt receiver if his interrupts are enabled. * 266 * Added to OUTTSET creating and linking in a command * 267 * element to reset the port's primary status word. * 268 * Added check in CHECKUINT for unit being given interrupt. * 269 * C8512d 09 Dec 85 * 270 * New OPREQ for CM to use when attaching to a session. * 271 * UINTDISC returns unit number of disconnected terminal as * 272 * parameter (high bit set if absolute i/o unit). Changed * 273 * UNMOUNTVOL in MSPROC to use MDVVOLFLD symbol, instead of * 274 * VOLFIELD, for clarity. Changed CHECKSTATE to not * 275 * UNMOUNTVOL in NODRIVE case if the drive was not thought * 276 * to be ready. Changed UNMOUNTVOL to log 'not ready' * 277 * even if there was no volume mounted. * 278 * C8512e 10 Dec 85 * 279 * Increased stack size for the error log process to 7 to * 280 * give a little more margin for changes in stack usage. * 281 * Added new error code for attaching to session so that * 282 * we can pass the session number of the attacher to the * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 7 (REVISIONS) F 3 283 * attachee. * 284 * Added another entry into LUNSEARCH (LUNSEARCHX) that * 285 * checks for units 201 and up being in control mode. * 286 * Changed FRRESSWTCH and URGIVEUNIT to use LUNSEARCHX. * 287 * C8512f 11 Dec 85 * 288 * Added code to check for new PPUs on an all SMU system * 289 * and if found to enable triple word transfers for the PPU. * 290 * Modified slot loop in initial to loop once looking for * 291 * memory and then loop looking for other devices. This * 292 * removes the OS requirement that memory must reside in * 293 * slots lower than other devices. Modified DEADMAN to * 294 * reset the bit in the PPU to enable triple word transfers * 295 * whenever a device attached to the PPU must be reset. * 296 * C8512g 18 Dec 85 * 297 * Bug fix in ORATTACH request. * 298 * Changed register usage in INTPROC so R1 will contain * 299 * error code at STOPC1200 even if the error went through * 300 * PASS2CM on the way. * 301 * Changed URGIVEUNIT to allow giving a control mode unit * 302 * even if privilege is not modify. * 303 * Fix to catalog read request, so that if one has no * 304 * privilege to a DIR than the header information for the * 305 * system volume is returned. * 306 * Rewrite of the recover file request to recover hardware * 307 * file types properly. Also additional fixes to make * 308 * ready on full implementation of selective backup. * 309 * Fixes to the unit give and receiving requests to * 310 * properly update the related hardware control elements. * 311 * Fix to disallow access to device from file other than * 312 * one in hardware.sys on system disk, A/U error returned. * 313 * C8512h 27 Dec 85 * 314 * The ORATTACH request no longer allows the requesting * 315 * session and the destination session to be one * 316 * and the same! * 317 * C8601a 05 Jan 86 * 318 * Addition of SETMEMTRAP for a text with forms write, this * 319 * traps correctly when fetching the control character. * 320 * Also change to the memory protect recover code to pass * 321 * error directly to overprocess (PASSERRUP) and not to * 322 * process as an XREQ error (FERROR). * 323 * Reorganization of the backup recovery request to check * 324 * for exceeding limits. * 325 * Addition of the ULLIMLOCK to setup critical region when * 326 * changing limits in the ULB. This was necessary because * 327 * most of the fields in the ULB are ZBMs. Proper locking * 328 * will be implemented initially for ULDSKUSD, others to * 329 * follow. * 330 * C8601b 06 Jan 86 * 331 * Bug fix in UREQRCVU to properly set FCB pointer in TCB. * 332 * C8601c 08 Jan 86 * 333 * Better checking for CM units in FRRESSWTCH and * 334 * URGIVEUNIT requests. * 335 * Minor fixes for foreign account checking. Also fix * 336 * to DIR read to return proper system number. * 337 * C8601d 14 Jan 86 * 338 * Added a NOP in memory parity error routine so that it * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 8 (REVISIONS) F 3 339 * can be easily patched to not send a WRU(0) to MCUs. * 340 * Added backup privilege to INITPROC. * 341 * Rewrite the code file write protect code to not * 342 * use RSEEK. Change to RSEEK to unmap WNDO1. Changed * 343 * all callers of RSEEK accordingly. * 344 * C8601e 16 Jan 86 * 345 * Change to FROPEN code to properly free a file if the * 346 * file being destroyed bit is set. * 347 * Fixes to ensure proper list locking during updates to * 348 * word 0 of the ULB. This was a possible cause for ULB * 349 * list screwups, if others occur, then we need to look * 350 * elsewhere. * 351 * Implemented the new ULB limit lock, ULLIMLOCK, to * 352 * protect following fields: ULDSKUSD, ULDSKLIM, * 353 * ULSCRDSK. Others to follow as necessary. * 354 * Reworked the create account request into two * 355 * separate requests, one for managers the other for * 356 * backup. * 357 * Fix so that the correct account serial number gets * 358 * placed into FBI on share and authlist blocks. * 359 * Fixes to GETPUTADT to avoid PUNLOCK on a lock not * 360 * held. Added a GRUB for block about to be freed. * 361 * Added MAPOUTFBI and GRUB in disk error processing * 362 * to dump bad block before continuing. * 363 * C8601f 21 Jan 86 * 364 * Tiny RAFs added. Change to terminal delay so * 365 * rounding errors will not generate a POB error. * 366 * PFNOREFVAL added to MACHDEFS and used in PFPUTIL. * 367 * Change in Timer at SSU_INT to save one instruction. * 368 * Fix to open of .DIR, so that account serial number * 369 * is put into the FCB. * 370 * C8601g 21 Jan 86 * 371 * Fix to file size updating when expanding a RAF. * 372 * Change create account to use logon ULB and not * 373 * privilege ULB if program has backup privilege. * 374 * C8601h 23 Jan 86 * 375 * Minor bug fixes to create account code. * 376 * Minor bug fix to recover RAF file pages. * 377 * Bug fix in GETFSEQN associated with new SSU ucode * 378 * for clock update to memory. * 379 * C8601i 24 Jan 86 * 380 * Addition of an Executive Request to cycle the * 381 * cartridge tape, FRCYCLE FREQ (1E). * 382 * C8601j 28 Jan 86 * 383 * Bug fix in Monitor parameter out of bounds error * 384 * return (clears IHBUSY). * 385 * Fix to error recovery for SAF write. File lengths * 386 * and account limits should all be restored properly. * 387 * C8601k 30 Jan 86 * 388 * Addition of an Executive Request to recover an * 389 * account and deallocate the needed resources from an * 390 * appropriate manager. * 391 * C8602 03 Feb 86 * 392 * Mask character before checking if line kill. * 393 * Change to SCAN4DLY to also look for the character * 394 * with the high bit turned on. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 9 (REVISIONS) F 3 395 * Change in SMUCHECK due to the high bit no longer * 396 * being set on error responses. * 397 * Added CHECK4CM subroutine to ensure that if a unit is * 398 * CM's then CM is the one diddling with it. Added calls * 399 * to this in rewind, backspace, and skip to filemark * 400 * backwards requests. * 401 * Changed FCSAFEPP, FDSAFEPP, FCSAFEND, FDSAFEND to FCEPP, * 402 * FDEPP, FCEND, FDEND to reflect their usage by non-SAFs. * 403 * Changes to keep track of the RAF end position. * 404 * C8602a 04 Feb 86 * 405 * Removed unused symbols from create and destroy account * 406 * XREQs and stack allocation from destroy account XREQ. * 407 * Added new halt code to replace the second usage of * 408 * HALTS1280. Changed error exit in recover FP to unmap * 409 * FBIs. Removed label GIVEDSEUM. * 410 * Removed VIQDIDLE from volume information request record, * 411 * UPCOMSGSER from UPC, UERRORDSE error return from * 412 * XREQPROC, and DORELSSDE error return from release FREQ. * 413 * Bug fix to WHOLOOK routine to check only a limited class * 414 * of privileges, rather than the whole UPCPRIV field. * 415 * Fix to exchange save to propagate the file log bit, not * 416 * log the unsave of the orignal file, and log the * 417 * exchange save. Change CPR to UCPR in RSEEK and WSEEK * 418 * so very large RAFs will work. * 419 * C8602b 05 Feb 86 * 420 * Bug fix to create account so that manager ULB is freed * 421 * when no longer needed. Change to RAF position code so * 422 * that it checks to see if back at load point. Fix to * 423 * the backup file page request to not loop indefinitely * 424 * if the very last block in a large RAF is non-hole. * 425 * C8602c 07 Feb 86 * 426 * Fix to file log event subroutine to ignore those events * 427 * caused by the system. This prevents system crash by * 428 * setting FLOG flag on accounting.logfil file. * 429 * Headchecker now suppresses potentially confusing Perm * 430 * Read log entry (only one error is needed to perm a * 431 * block during head check). * 432 * Addition of sequential RAF read and write routines * 433 * (FRSREAD, FRSREADB, FRSWRITE). * 434 * C8602d 10 Feb 86 * 435 * Modify FRSEOD request to work for RAFs. Addition of * 436 * FWSP and BKSP routines for RAFs. New FREQ FREPP added * 437 * to return the end position pointer of a RAF or SAF. * 438 * Echo unit now allowed to deal with RAFs. * 439 * C8602e 11 Feb 86 * 440 * Programs running with backup privilege no longer do * 441 * any file logging, regardless of the FLOG flag value. * 442 * Added trace calls to substitution process. * 443 * C8602f 26 Feb 86 * 444 * Bug fix in unsubstitute process. Set NOSUB flag in FBI * 445 * of substitution block during volume recover request. * 446 * Fix to the session information request so that CPU time * 447 * limit is returned in seconds and not milliseconds to * 448 * agree with documentation. * 449 * Fix to create account so that error returned if trying * 450 * to create account on a foreign volume. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 10 (REVISIONS) F 3 451 * Added entry in LFWEIGHTTAB for UNITWAIT queue. * 452 * Change to volume mount code to set the new volume * 453 * revision level in the volume label. This prevents * 454 * an old OS from mounting a volume with tiny RAFs. * 455 * Changed INITTERM default for TCLASTCOM2 to include * 456 * 1*PCFBRKOUT (terminal should delay output during break). * 457 * C8602g 27 Feb 86 * 458 * Converted the backup RAF/CODE page lookup into a * 459 * subroutine and added an Executive Request to find * 460 * the next non-hole page in a RAF/CODE (FRRAFNEXT FREQ). * 461 * C8602h 28 Feb 86 * 462 * Removed PABLOCK and replaced it with PAPPLPTR. This * 463 * also involves calling TESTTRUBL before the WSX check. * 464 * Minor bug fixes to the find next non-hole in RAF/CODE * 465 * request. * 466 * C8603a 13 Mar 86 * 467 * Fixed READ in MSPROC to ensure block with segment * 468 * correction is actually rewritten. Took out * 469 * 'unloaded vol' check prior to SUBSTITUTE call * 470 * (redundant because SUBSTITUTE checks). * 471 * Backup privilege now sufficient to execute manager * 472 * requests. However the privileges come from the * 473 * logon account and not the privilege account (OWNDIR * 474 * is ignored). * 475 * Added global file control block for all files opened MW. * 476 * Change FDE to use a 2 bit field to keep track of RAF * 477 * type. Added this field to the FCB (used only for RAFs * 478 * and CODEs). Removed RAFPTRLOCK (now lock is on a * 479 * per file basis in GFC). * 480 * C8603b 25 Mar 86 * 481 * New user interrupt scheme. Trapping goes up the * 482 * underprocess tree. Errors not lost in process * 483 * switching. Errors can be local to underprocess. * 484 * Trapper's TCG, TCA, and TCINTE are used even if * 485 * trapper is not CPCUPC. * 486 * Fix in OUTTSET so second element created will not * 487 * be lost if the port must be XONed. * 488 * Moved a call to DELINKUERR outside of the critical * 489 * region locked by PSLOCK. This was because DELINKUERR * 490 * itself attempted a lock on PSLOCK. * 491 * Bug fix in OPEN code when file being destroyed bit * 492 * is set. Fix to FREEFILER to properly free a RAF. * 493 * Fix to DISMTDMY to properly cancel disk low message. * 494 * C8604a 04 Apr 86 * 495 * Changes made to the logon and logoff request to adjust * 496 * scratch block limits so that the current logon account * 497 * (system account also) reflects what is in use. This * 498 * also involved changes to Control Mode, for additional * 499 * details consult the begining of the Control Mode * 500 * listing. * 501 * C8604b 15 Apr 86 * 502 * Change to initial so that when each TCB is built a * 503 * default baud rate of 300 is set for both the input * 504 * and output bauds. * 505 * Change to CHECKDCH routine to store its return address * 506 * on a preallocated stack location. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 11 (REVISIONS) F 3 507 * Added FRTAPESTAT to return PPU and controller status * 508 * for a tape device. * 509 * Added new error code for read errors. Changed mag tape * 510 * driver to return read error. * 511 * C8604c 17 Apr 86 * 512 * Fix to the substitution process so that grub of a * 513 * swapping page does not allow page to go to ADT. * 514 * Unsubstitution will occur when user is finished with * 515 * page. See comments in the Disk Substitution Process. * 516 * Changes to CIA driver to link an error element into * 517 * the chain of input TCQs when a framing or parity error * 518 * occurs or the input buffer overflows. Terminal read * 519 * now will return the error. * 520 * C8604d 25 Apr 86 * 521 * Fix exchange save to preserve the user defined field. * 522 * Reworked the URLUNITS UREQ to compact space and return * 523 * proper buffer remaining counts if users buffer is * 524 * initially too small. * 525 * C8605a 01 May 86 * 526 * Fix to FRXSAVE FREQ to get the file name from the * 527 * original files directory. This prevents bogus * 528 * filenames from appearing if the file got renamed * 529 * after it was opened. * 530 * C8605b 15 May 86 * 531 * Changed parity error routine to not perform a WRU but * 532 * instead do a data read of location zero, then pick out * 533 * the slot type from the SLOTTABLE. Added ADJUSTCYL * 534 * before checking second set of tracks in CHECK1HEAD * 535 * (first read of second set was repeating the last read * 536 * of the first set). * 537 * Added minor fix to cancel account so that bogus * 538 * error code would not be returned incorrectly * 539 * (undefined opcode). * 540 * C8605c 19 May 86 * 541 * Bug fix to TIME2DISK routine. If VOLN contains zero * 542 * for the security block (maintenance mounted) then * 543 * hour stuff is ignored. * 544 * Addition of two Executive Requests: one adds an * 545 * account name to the system AFT (ORADDAFT OPREQ) ... * 546 * the other removes an account from the system AFT * 547 * (ORDELAFT OPREQ). * 548 * C8605d 21 May 86 * 549 * Fix in COMM driver to unsuspend a user from TERMOWAIT * 550 * when TERMWBUSY goes to zero. Set TCBAUDROOM when * 551 * output baud rate is changed by FREQ. * 552 * C8605e 22 May 86 * 553 * Changes made to the internal structure of the system * 554 * NVM. The time values NVMCLOCK1 and NVMCLOCK2 are no * 555 * longer used. Instead the lower 16 bytes of the * 556 * DEATHFLAGS are used to hold four separate 32 bit time * 557 * values. Each hour the oldest time is over written. * 558 * The times are deemed to be good if two of the latest * 559 * times are within one hour and one minute of another. * 560 * C8605f 23 May 86 * 561 * Added new field in the PSA to keep session number that * 562 * receives message when session logs off. New XREQ * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 12 (REVISIONS) F 3 563 * to set field and changed URSESSINFO request to return * 564 * current value. Message to be sent by Control Mode. * 565 * C8605g 27 May 86 * 566 * Fix to the set PAC/FAC fields with respect to BACKUP. * 567 * It turns out that backup needs to unconditionally set * 568 * or clear the PAC/FAC fields. Also some minor code * 569 * cleanups were done in the file ACCTDIDDLE. * 570 * C8606a xx Jun 86 * 571 * Fix to write filemark (SAF), to not jump to nullwrite * 572 * label at conclusion of request, the problem was stack * 573 * size incompatabilities. * 574 * Minor fix to the NVM clock check, clock time could be * 575 * as great as 1 hour and 5 minutes difference. Did not * 576 * have enough of a fudge factor here. Also necessary to * 577 * rearrange the NVM definition for the new clock values, * 578 * error due to misunderstanding of the death flags. * 579 * These flags begin at the end of the NVM and work their * 580 * way towards the begining. * 581 * C8606b 11 Jun 86 * 582 * Fix to TIMER to modify rollover test to work if system * 583 * stopped at rollover. Added "idle" state to MS driver, * 584 * which is entered for 800 ms a) when the drive comes * 585 * ready, b) after reading the kludge board, and c) upon * 586 * entering REZERO, if a previous REZERO call failed. * 587 * Reinstalled delayed head check in CHECKSTATE, because * 588 * idling drive now takes up the slack time coming ready. * 589 * Heads are retracted upon final REZERO failure. Fixed * 590 * logging of "not ready" on drive without volume mounted. * 591 * Moved HAVESSU call into first bus device initialization * 592 * loop in INITIAL. * 593 * C8606c 18 Jun 86 * 594 * Fix to the terminator scan code in the comm driver. * 595 * Because it is now possible to have error elements as * 596 * well as blocks of characters, the terminator scanner * 597 * needs to ignore the error elements. * 598 * C8606d 23 Jun 86 * 599 * Added fix to the local unit information request to * 600 * clear the temporary buffer as each unit is processed. * 601 * Added code to the initproc to make sure locations on * 602 * virtual page zero are initialized. PROMBOOT does not * 603 * store into all location hence some will have parity * 604 * errors when they are read (this gives the crashdump * 605 * code problems). This problem appeared due to the * 606 * release of the SMU, the fix needs to made in PROMBOOT. * 607 * C8607a 08 Jul 86 * 608 * Changed STMW R1,FBIDA to STMW R1,FBIWORDB in disk * 609 * driver at READOVER(2) to match that at READ(9). The * 610 * earlier change was made sometime between July 85 and * 611 * Oct 85 to prevent getting parity errors caused by * 612 * uninitialized memory. * 613 * C8608a 01 Aug 86 * 614 * Small bug fix to the system free memory overlap check * 615 * routine. The check for index out of range was incorrect. * 616 * Change to the ADDSWAP and LIMITCHECK routines to * 617 * differentiate between account limit and session limit * 618 * errors. Change error code C5 from account limits * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 13 (REVISIONS) F 3 619 * exceeded to session limits exceeded. * 620 * Fix to create account request to allow manager.!!! to * 621 * create proprietary account. * 622 * Fix to the temporary code that initializes words on * 623 * page zero, was not storing enough words. * 624 * C8608b 05 Aug 86 * 625 * URPGO no longer zeroes the requester's R0 before letting * 626 * the underprocess run. Was causing screwups with * 627 * new user interrupt scheme because URINTRTN to UREQ * 628 * instruction would be with R0 = 0 (i.e. interrupt * 629 * occurred while underprogram was running). * 630 * C8608c 10 Aug 86 * 631 * New OPREQ ORSTRTSPLR to start up the spooler without a * 632 * password in the batch file. Changed INITPROC to use the * 633 * same subroutine, STARTSPLR (moved MAKEBATCH to OPREQ). * 634 * C8608d 15 Aug 86 * 635 * New subroutine UNMAPPAGE (merged with UNMAPFILE), and * 636 * calls to it from the FRDELPAGE FREQ. No unmap of * 637 * deleted file page was causing FBI mismatches on * 638 * subsequent page faults (3.12-5). * 639 * C8608e 18 Aug 86 * 640 * Fixed XREQ monitor to set up BREAKTAB entry in XHTABTAB. * 641 * Was leaving it 0, causing S0007 when user singlesteps. * 642 * C8608f 19 Aug 86 * 643 * Fixed FRSETCCB to correctly set the OWNDIR bit (reported * 644 * by 80101, no SPRs). * 645 * C8608g 29 Aug 86 * 646 * Fixed ORDEVINFO to correctly set the DIDRVNUM field. * 647 * C8609 03 Sept 86 * 648 * Made death bias for system 3 years * 649 * C8609a 04 Sept 86 * 650 * Foreign accounts are now defined to be accounts that * 651 * reside on a volume in which the volume customer number * 652 * does NOT match the customer number of the system. * 653 * C8609b 04 Sept 86 * 654 * Modified check to see if a PPU can do triple word * 655 * transfers to use a bit array on PPU microcode revision. * 656 * C8609c 07 Sept 86 * 657 * Change to ORDESACCT OPREQ to allow manager.sys to * 658 * cancel proprietary accounts (.& only). * 659 * C8609d 09 Sept 86 * 660 * Fix to PPU triple word transfer check. * 661 * C8609e 22 Sept 86 (3.11, Alpha 22) * 662 * Fix to open code so that RAF type gets set into the FCB, * 663 * this was causing serious problems (all RAFs assumed * 664 * empty on first open). * 665 * C8609f 30 Sept 86 * 666 * Fix to CIA interrupt processor to remap user free * 667 * storage after giving terminal disconnect error. * 668 * Changes to disk driver to allow online disk formatting, * 669 * this includes new XREQ (ORFORMAT OPREQ). * 670 * C8610a 03 Oct 86 * 671 * Fix maintenance dismount code to proceed with dismount * 672 * even if disk is offline. Also changed REMOUNT in the * 673 * disk driver so if MDV can not be associated with * 674 * volume then MDVVOLFLD is cleared. Minor changes to * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 14 (REVISIONS) F 3 675 * DOWRITEREQ in regards to format operation. * 676 * C8610b 10 Oct 86 * 677 * Fix to the ORSECTRK OPREQ, it was eating R5 (FCB) before * 678 * jumping to FERROR. Fix to the format routine within * 679 * the disk driver, illegal store to begin operation * 680 * caused seek error. * 681 * C8610c 14 Oct 86 * 682 * Fixed FRSAVE FREQ to return XREQERISYR (instead of * 683 * XREQERDSKL) on directory overflow. * 684 * Fix to cancel account so that manager.sys may cancel * 685 * normal system accounts. * 686 * Revision of the format operation from a write request to * 687 * a read request. This was necessary because locking the * 688 * output queue lock might cause deadlock in certain cases. * 689 * C8610d 15 Oct 86 * 690 * Fixed CHKBZYACS to allow PATH MW -> RO in 0,X,X instead * 691 * of 0,1,X. * 692 * Erased write check operations from windows and included * 693 * a new maintenance write request to perform the * 694 * write/write-check operation. * 695 * Fixed PATHREAD and CHKPTHREC to return XREQERREOD only * 696 * if path is actually empty on the second attempt. Before * 697 * it would give REOD if FCLASTREAD said EOD, regardless of * 698 * current state of the PATH. * 699 * C8610e 23 Oct 86 * 700 * Change to create account so that only customer numbers * 701 * are checked to see if new account is foreign. * 702 * Special maintenance bits have been added to the VP and * 703 * PAL elements to allow greater flexibility within the * 704 * disk driver. These bits control substitutions, error * 705 * handling and write-checks. * 706 * C8610f 28 Oct 86 * 707 * Fixed INITPROC and LIQUIDINIT to unload the INITPROC * 708 * PF locations for all CPUs, not just the executioner. * 709 * C8610g 29 Oct 86 * 710 * Change disk driver so the CLEARFAULTs and REZEROs are * 711 * done prior to the requested operation rather than after * 712 * the operation. Preserves more accurate disk status. * 713 * C8611a 03 Nov 86 * 714 * Changed disk driver to not fiddle with the FBI on a disk * 715 * read error if special error handling in force. Changed * 716 * maintenance write to shutdown awaiting forcewrite. * 717 * C8611b 13 Nov 86 * 718 * Bug fixes to the head checker: zero PPL holder of bad * 719 * trax block so when head checker inhibited, same PPL does * 720 * not get repeatedly freed, zero error counters prior to * 721 * performing a head check. * 722 * C8612a 02 Dec 86 * 723 * Changed STATCHANGE routine of CIADRIVER to not mask the * 724 * port status prior to tracing the state change. This * 725 * lets us look at everything (line parity/framing error). * 726 * Fixed FINDPATH to ensure read type access exists on * 727 * particular FCB (before, if a session had both an RO and * 728 * an RW unit open to the same path, it was possible to * 729 * say that the RW was "non-empty"). * 730 * Fixed CHECKUINT/CHECKEVENT to not cream R3 in NE term * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 15 (REVISIONS) F 3 731 * and NE path checks. Was causing hangs for all but NE * 732 * term (GRW). Small cleanup in DISPATCH (NONEVB code was * 733 * duplicated in DPRUER). Fixed OVPUPONE and OVPDOWNONE * 734 * to CHECKUINT with the new process' CAINTMASK instead * 735 * of using -1. Was causing extra errors to be generated * 736 * (C1200 at GRW, to boot!). Proper interlock in * 737 * CHECKNOINT. Rearranged fields in tape MTU element * 738 * to prevent CPU interlock problems. * 739 * C8612b 05 Dec 86 * 740 * Fixed problem in open code where a disk or parity error * 741 * rips us out of the SHLCHKALL routine and the VAR (R7) * 742 * pointer does not get reset. * 743 * C8612c 06 Dec 86 * 744 * Changed so FCB of .TERM with NA access has FCDCBPTR * 745 * pointing to TCB(was nil). This allows unit to get * 746 * information about the terminal (no I/O or ints, tho), * 747 * esp. if terminal is busy. * 748 * C8612d 18 Dec 86 * 749 * Bug fix so that files can be created during the open, * 750 * bug introduced in version C8612b. Fixed URRCVUNIT and * 751 * ORSTRTTERM to check for fake .TERM condition (make sure * 752 * FCDCBPTR is not nil before using it). * 753 * Change to OPEN code so that the RAF conversion code is * 754 * not duplicated. * 755 * C8701a xx Jan 87 * 756 * Rearranged STATPI routine (URSESSINFO and ORSESSINFO) * 757 * to decrease possibility of 'bad ULB' (S10E1) halt when * 758 * calling USEULB on PSDFLTDIR of other session. * 759 * Fix to the CIA interrupt routine when unit disconnect * 760 * occurs. Sign bit is supposed to be set if the unit * 761 * number (error subcode) is an absolute IO unit. * 762 * Fixed FRSHARE FREQ to disallow empty acct name/proj * 763 * combination. Fix to access changes on /MW RAFs so that * 764 * the file length does not get reset to zero. * 765 * Fixes to RAF control requests to call RAFCURCHEK if * 766 * file opened /MW. * 767 * C8701b 16 Jan 87 * 768 * Changed URPSETREG and URSSINTARM/URSCINTARM to correctly * 769 * calculate masks for CHECKNOINT and CHECKUINT. Removes * 770 * SETCHKMASK subroutine from existence. * 771 * Added code to check if the SSU has the new 2K NVM and * 772 * adjust the number of clock values it stores from 4 to * 773 * 64. * 774 * C8701c 17 Jan 87 * 775 * Fixed GETTRAPPER to check UPCNETINTE correctly (changed * 776 * JNE to JEQ). Fixed GETTRAPPER to check whether unit * 777 * int is for unit available to the prospective trapper. * 778 * UPC is disqualified if not. Was allowing overprocesses * 779 * to get interrupts from units strictly local to an * 780 * underprocess. * 781 * C8701d xx Jan 87 * 782 * Mods to the NVM updater in INITPROC. * 783 * C8702a 09 Feb 87 * 784 * Moved RAFCURCHEK call from DSTRAF (DESTRYDEV) to RRAFUM * 785 * (INITDEVACS). Ensures that RAFCURCHEK caller has a * 786 * GFC (FCDCBPTR) that has not been freed (RAFCURCHEK is * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 16 (REVISIONS) F 3 787 * now called before the use count is decremented). Moved * 788 * zero address check for RAFCURCHEK and UPDATEGFC into * 789 * the subroutines themselves (before, it was done by every * 790 * caller). Fixed ORSTRTBAT to set PCSPECPROC iff caller * 791 * is in monitor. This makes Manager.!!!:Boot.Batch, * 792 * Manager.Sys:Boot.Batch, and the Spooler special (also, * 793 * any concurrent sessions they might start). Fixed * 794 * OPRSTRTSPR to end by jumping to UERROR w/error code, * 795 * instead of jumping to NOERROR. * 796 * C8702b 15 Feb 87 * 797 * Removed redundant error code checks at PASS2CMO in * 798 * DISPATCH (now can jump directly to GIVEINT from within * 799 * PASS2CM). Added CMERRB and CMERR to UERPROT (user error * 800 * elements). CMERRB flag indicates error is to go straight * 801 * to CM. Saves code in dispatcher at PASSUP. Fixed up * 802 * UERRSET calls for the related errors (UINTVAR, UINTTDISC, * 803 * UINTOPRQ, and UINTATTACH). Fixed URSENDERR to mask off * 804 * CODEPART of code being sent. Before was just clearing * 805 * VERYBADB. * 806 * C8702c 16 Feb 87 * 807 * Reworked PUTINCHAR in CIAINUTIL. Input buffer overflow * 808 * now does not cause "break", because we queue a read * 809 * error element. Rearranged code because less needs to * 810 * be shared. Moved code in OCSTOREIN (still PUTINCHAR) * 811 * to save an instruction. * 812 * C8702d 18 Feb 87 * 813 * Merged in the NASSEMs for online disk formatting. * 814 * C8702e 19 Feb 87 * 815 * Change user virtual storage scheme so that we can * 816 * generate a user interrupt when free storage is getting * 817 * scarce. This required changes in the USERMEM page * 818 * definitions, the PSA/UPC error list root (RTUERRORZ), * 819 * DISPATCH, BLDPROCESS, and the user GETMEMs. It added * 820 * HALTS0072 and the OPREQ ORRESETVM. * 821 * C8702f 21 Feb 87 * 822 * Fix to OPEN share list checking. Was using wrong * 823 * window after SRCHDIR to get info for SHLCHKALL, when * 824 * DIR is RAF-type. Problem introduced in C8612b. * 825 * Fixed change in OPRSTARTBAT to use correct console area * 826 * pointer in determining PCSPECPROC. * 827 * C8702g 23 Feb 87 * 828 * Fixed UERRSET/UERRSETY to correctly mask error code * 829 * before duplicate-error LSRCH. Mask instruction used * 830 * 0FFFFFFFF for an operand (made it a NOP!). Allowed * 831 * duplicate errors causing various problems. Fixed * 832 * FRUNITID/FRUNITIE FREQs to use CPCUPCs CAINTMASK for * 833 * call to CHECKUINT. Was blanketly using CAIMNETERM and * 834 * CAIMNEPATH bits, now these are ANDed with user's mask. * 835 * C8702h 24 Feb 87 * 836 * Fixed up DISPATCH to dispense user interrupts more * 837 * smoothly. Removed UERHELD bit from UER element. Now, * 838 * CAINTENABL is turned off prior to moving to process * 839 * getting interrupt. Change sense of mask to CHECKNOINT. * 840 * Changed SOME (!) callers appropriately ... others * 841 * already had it backwards. Fixes problem of some user * 842 * interrupts not going away. Fixed URPSETREG UREQ to * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 17 (REVISIONS) F 3 843 * handle IAR/IMR changes correctly. * 844 * C8702i 25 Feb 87 * 845 * Changed FRSETCCB FREQ and URPSETREG UREQ to just change * 846 * the FLDADRS part of CAINTADR. This ensures UPR15 is * 847 * zero for other checks. * 848 * Replaced CMENTRY (initial CM PC) with CMODECA. CMODECA * 849 * is set from CCBPREGS in INITPROC. UERRCMMK uses it to * 850 * initialize R0:R7, IMR, IAR, and PC upon UINTLOGIN * 851 * interrupt. Allows CM to specify many initial registers. * 852 * C8702j 26 Feb 87 * 853 * Fixed ORDESAUTHE OPREQ to not do an extra FREEULB. * 854 * Was causing S00E0 halts if FERRORNSE was given (halts * 855 * in +MGRs FRCLOSE FREQ of .VOL, because FCLIMITPTR * 856 * was freed). Cleaned up exit code in PRESETAUTH. * 857 * Changed DISPATCH to hold off interrupts to CM if the * 858 * CAINTENABL flag is off and the error element has the * 859 * CMERRB flag set. This prevents overwriting CM's * 860 * register buffer with a second interrupt while it is * 861 * processing the first. * 862 * C8703a 02 Mar 87 * 863 * Added code in LIQUIDATE to remove unused UER elements * 864 * from the UPC. Renamed MAPVALUES to PSMAPVALS. Minor * 865 * cleanup to MAPINMEM. Moved USERMEM to the first of the * 866 * "user virtual" pages. These pages now allocated in * 867 * ascending, rather than descending, order (changes in * 868 * MAPINMEM and GETVPAGE). Minor cleanup in BLKLIMCHK. * 869 * C8703b 03 Mar 87 * 870 * Cleaned up the USERMEM definitions. Renamed PSAOWNER to * 871 * UMEMPSA, XTRAMEM to UMEMXTRA, and ULOCK to UMEMLOCK. * 872 * These locations are now BSSs in themselves, and are not * 873 * referenced as an offset from USERMEM. Minor cleanup to * 874 * BLDPROCESS. * 875 * C8703c 05 Mar 87 * 876 * Fixed ORCREACCT OPREQ to get the customer number right * 877 * when checking for foreign manager. Problem introduced * 878 * in C8610e. * 879 * Fixed LEVELBIT to: perform "foreign" check after assuring * 880 * requester is a MANAGER, not give foreign MANAGER.SYS * 881 * special power, not give "self" power to foreign account * 882 * accessing native account with same name, and correctly * 883 * check just the customer number to decide whether two * 884 * foreign accounts are from same place. * 885 * Added VOLN element symbol VOLNCUST to replace instances * 886 * of VOLNSSN/CUSTNUM. * 887 * Changed UERRSET and UERRSETY to put new element at end * 888 * of list. Ensures that normal errors are processed in * 889 * the order they were received. * 890 * C8703d 06 Mar 87 * 891 * File open modified to NOT increment the total read * 892 * count on backup open. * 893 * C8703e 18 Mar 87 * 894 * Fixed FRUNITIGET FREQ to store answer in user's R1, * 895 * instead of in TCCIAPORT (!). * 896 * Changes in MSPROC to avoid reading head retract * 897 * board if pack label info indicates no board present. * 898 * C8703f 19 Mar 87 * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 18 (REVISIONS) F 3 899 * Fix to BACKOUTRAF. Showed up when trying to expand * 900 * a RAF and received a disk full error. * 901 * C8703g 25 Mar 87 * 902 * Added XREQ error code XREQERUKP (0BC) -- * 903 * "Unknown parameter" * 904 * C8703h 26 Mar 87 * 905 * Fixed various AUTH list handling OPREQs to give * 906 * XREQERPOB if the specified volume name was all 0's. * 907 * Name=0 makes PRESETAUTH and GETAUTHN work differently, * 908 * so this keeps us from screwing up the AUTH list. * 909 * Fixed error recovery in OPRCAUT (ORCAUTHxx OPREQs) to * 910 * use correct register in GETAUTHN call. * 911 * Replaced store loop with CFILL in FREQSAVE. * 912 * Fix in BLKREADIN to get the right hash value for IDLE * 913 * pages. * 914 * 3.12 30 Mar 87 * 915 * Reassembled for Beta 22 release. * 916 * Fix to BLKREADIN to not destroy R1 when picking up * 917 * proper hash value. * 918 * Fixed ORMAINTW OPREQ to allow for new DA on block * 919 * (means changed check in MSPROCs WRITE DA error proc). * 920 * Added 8 bit filler in TCB (word w/TCBKSPC & TCPCADRS). * 921 * Fixed acceptable version of working 2K NVM SSU. * 922 * C8704a 07 Apr 87 * 923 * Fixed FRCATALOG FREQ window error recovery to actually * 924 * do the GRUBs (instructions were misplaced before the * 925 * label) (patched in 3.12-3). TCIQXOFFED moved to proper * 926 * section of TCB (patched in 3.12-1). * 927 * Minor cleanups to user interrupt processing in DISPATCH. * 928 * C8704b 30 Apr 87 * 929 * Cleaned up the loop in GPADTADDIT that moves MS addresses * 930 * from an ADT block to resident free list in VOLN. * 931 * Cleaned up ERRORLOG calling sequence in STATCHECK. * 932 * Cleaned up DISCARDPAL, DONEPPL, and FORCEWRWx. * 933 * Cleaned up ELPRESTART. * 934 * Fixed ORSTRTTERM OPREQ to use good PSA pointer for * 935 * in LOGONPROC calling sequence (patched in 3.12-1). * 936 * Removed left over jump table entry for ORFORMAT * 937 * in OPRQMAINTR (maintenance read OPREQs). XREQ * 938 * code had been changed from 0142 to 0152. * 939 * C8705a 18 May 87 * 940 * Changed SETWNDOx to STZ2 into VPWORDC (was STZ). * 941 * Fixed CANCELTMR calling sequence in MS_RESET to * 942 * include the PARL (patched in 3.12-2). * 943 * Remove unimplemented OPREQ code ORGCONFIG (0100, * 944 * get system configuration info) from VIRTDEFS. * 945 * Cleaned up exit code in FNDNONHOLE. * 946 * Cleaned up URDELAYx UREQs. * 947 * Fixed SAFREAD memory error handler to use PASSERRW1 to * 948 * prevent STOP0064 in later XREQ call (patched in 3.12-2). * 949 * Cleaned up PUTRECHEAD in SAF write code. * 950 * Changed SPLRTALK to include volume name in alias account * 951 * sent with OPEN requests. Will allow batch job initial * 952 * alias to go to shadow account (patched in 3.12-3). * 953 * C8705b xx May 87 * 954 * Cleaned up STRTMON routine (ORSTRTMON OPREQ). * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 19 (REVISIONS) F 3 955 * Changed CANCELTMR in MSPROC to save R4. Fixes * 956 * register eating in MS_RESET (patched in 3.12-2). * 957 * C8706a 11 Jun 87 * 958 * URSTATPI routine (URSESSINFO and ORSESSINFO XREQs) now * 959 * uses absolute INPUT for determining online/dialup/etc. * 960 * Also, session is dialup if this unit is a .NULL (i.e. * 961 * session is disconnected waiting for ATTACH). * 962 * C8706b xx Jun 87 * 963 * Removed unneeded LD instruction from OPRQINITVL routine. * 964 * Cleaned up SETUPDIR in XRQOPRRCVR. * 965 * Fixed OPRQINITND (ORINITEND OPREQ) to not FERRORDSE if * 966 * a disk error occurs on a block being freed after volume * 967 * is recovered (block stays out of ADT, tho). * 968 * Fixed OPRRCVRFL (ORRCVRFIL OPREQ) to ensure that unit is * 969 * .NULL (errors result if FDE/FCB have real MS addresses) * 970 * (patched in 3.12-3). * 971 * Misc minor cleanups in CIA routines. * 972 * Fix in echo of line kill character (3.12-4). * 973 * Fix in MAPOUTMEM to do the correct 4 locations (3.12-4). * 974 * Fixed ORMAINTR OPREQ to ensure free and swapping pages * 975 * don't stay in PPAGELIST or PPUSDIDLE (3.12-4). * 976 * Fixed RECOVERFDE (file recovery) to copy FDCUSE from * 977 * .NULL to recovered file's FDE. Prevents HALT S109B * 978 * if another user grabs file as .NULL, then second user * 979 * closes the file (3.12-4). * 980 * C8708 26 Aug 87 * 981 * Changed calling sequence to GETNXTBLK (used in * 982 * sequential RAF read code). Was leaving the stack * 983 * messed up if a disk error occurred when the mapped in * 984 * page was referenced outside the subroutine (3.12-4). * 985 * Removed conversion code in Mount and fixed system * 986 * serial number check (3.12-4). * 987 * Fixed INITDEVACS to free the GFC on RAF going from MW * 988 * to RW or RO access (3.12-4). * 989 * Fixed DOTIMING in CIADRIVER to pass FCB as subcode to * 990 * UINTTDISC interrupt. Subcode no longer has flag for * 991 * 'absolute I/O'. Moved FCABSIO to FCSTATSTAT area * 992 * so that static status will reflect this attribute. * 993 * (CM altered to use FRSTATUS FREQ instead of disconnect * 994 * subcode flag). Functionality patched in 3.12-4. * 995 * Added VOLNFOREN bit. Modified FINDULB to use same, * 996 * MOUNTNAME to set it, and changevol to re-set it. * 997 * Modified FINDULB to save a word on the stack. * 998 * Modified SRCHAFTIDX, DELAFTIDX, and callers to pass * 999 * the account name triple by a single address parameter. * 1000 * Modified ADDIDXAFT and callers to pass the account * 1001 * name triple by a single address parameter. * 1002 * Misc minor changes in XRQOPRAFTIDX. Moved IOFF in * 1003 * GRUBVPEL to enclose entire critical region (3.12-4). * 1004 * C8708a xx Aug 87 * 1005 * Created common exit for some FRASxxx FREQs. Space * 1006 * and speed mods to process name table manager, pak6 * 1007 * and character conversion routines, ORBUSYVOL request, * 1008 * ZAPAFT, GETIDXACS, and CHARTOP6. * 1009 * Eliminated DISMTDMY1 as a separate routine because it was * 1010 * only called from DISMTDUMMY. Modified calling sequence * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 20 (REVISIONS) F 3 1011 * to FBICKCKSUM and changed caller accordingly. Saves one * 1012 * MAPINMEM and MAPOUTMEM for each disk transfer. Fix to * 1013 * HOURINT to more accurately hit the hour in an unusual * 1014 * case. TSCAN macro and TSCANR routine eliminated. * 1015 * C8709 01 Sep 87 * 1016 * Fixed and cleaned up DIRINFOHD subroutine. Was not * 1017 * checking foreign flag on fake .DIRs, and was giving * 1018 * alias acct name and volume on .TERMs. * 1019 * Fixed ORCVOLNAME OPREQ to ensure new name is not null. * 1020 * C8709a 02 Sep 87 * 1021 * Fixed STRTSPLR to use URFREELUN to get unit number for * 1022 * SPLRBATCH file open. * 1023 * Changed OPRCVOLNAME OPREQ to use full blown CHECKSYM. * 1024 * C8709b 10 Sep 87 * 1025 * Changed MAKTRMSTAT to return the operand of the XREQ * 1026 * as the unit number rather than calling FINDUCE. * 1027 * Fixed OPEN to use file password for file share check. * 1028 * Was using acct pwd by mistake (3.12-5). * 1029 * Minor fixes to URLUNITS UREQ and DIRINFOHD. Info was * 1030 * not always consistent. * 1031 * C8709c xx Sep 87 * 1032 * Cleaned up STTERMTGRP to eliminate CALCTERMC call if * 1033 * absolute unit is not controlled by CPCUPC anyway. * 1034 * Minor mod to ?FREEMEM to only calculate buddy address * 1035 * in the path that uses it. Minor mods in clock driver * 1036 * regarding location of PFRC in TIMEADJUST and TIMEDRFT. * 1037 * Fix in LOOKUPBTRX in the disk driver to not clear a * 1038 * random page file location if BTRX list gave a disk * 1039 * error or FBI mismatch (3.12-5). Save and Rename * 1040 * changed to use FERRORISYR if they could not split a * 1041 * UDIR2 block because the UDIR1 was full. Fixed FRCATALOG * 1042 * to GRUB wndos 1 & 2 on a memory error, and FRREADSHL to * 1043 * return correct code for memory errors (3.12-5). * 1044 * FRCATALOG and FRREADSHL now share mem error handler. * 1045 * Minor cleanups to RAF WSEEK. * 1046 * C8711 03 Nov 87 * 1047 * Added STZ TCFCB and STZ PTHREADFCB to GULOCKHW (reader). * 1048 * Fixed URRCVUNIT UREQ to set PTHREADFCB and STW PTHINTE * 1049 * when FCACCESS=RO. Minor mods to subs process... removed * 1050 * unused instruction, re-organized logging code, and fixed * 1051 * unsubs for case where entry being removed is at extreme * 1052 * end of subs block. MAXPRIV shortened. Interlocked the * 1053 * RTSWITCHB bit in PSUERROR with PSLOCK (3.12-5). * 1054 * C8711a 23 Nov 87 * 1055 * Register usage changed in OPEN error code. Added S00E2 * 1056 * halt, freedir on already free directory (3.12-5). * 1057 * Changed MAPOUTFBI to consume no registers. * 1058 * Fixed GETFREEWx to return error code in R0 on error * 1059 * jump return. * 1060 * Minor fixes and changes to FROPEN code. * 1061 * Fixed DIR read and fetch catalog info to not attempt * 1062 * to free directory if memory protect during header * 1063 * return (3.12-5). * 1064 * Fixes to DIRSHRINK routine (3.12-5). Also reorganized * 1065 * the catalog/share list information request. * 1066 * Fix to OPRSTRTBAT so that error/not found returns from * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 21 (REVISIONS) F 3 1067 * SRCHDIR unlock directory. Also moved error code off * 1068 * the stack and into R7. * 1069 * Fix to recover file page to release directory on * 1070 * disk error, error return from call to TRAFDSE. * 1071 * Altered SRCHDIR to skip SETERRWx on a disk error * 1072 * where it had just grubbed the windows. Now returns * 1073 * error code in R0. Minor other reorganization and * 1074 * comment fixes. Minor moves in NAMEPACK to save * 1075 * space. Fixed GETFREEWx to not touch R4 at all. * 1076 * Trace calls added in MSPROC for calls to SUBSTITUTE. * 1077 * Removed temporary code in ULBTWIDDLE that ensured that * 1078 * a UDIR and its FBI had proper account serial numbers. * 1079 * Modified SHLCHECK and callers to eliminate the unused * 1080 * PWW (password wrong) return. OPEN modified to GRUB * 1081 * window 2 as soon as possible, removes code from error * 1082 * routines. Changes to share/unshare code to make * 1083 * better use of registers. * 1084 * Copious modifications to SRCHDIR, USVREM, BLKSPLIT, * 1085 * DIRXPAND,and DIRSHRINK to make all error returns with * 1086 * the directory freed and both windows grubbed. Mods * 1087 * to callers: FRQNOPEN, FRQWRRAF, FRQRDDIR, FRQCNTL, * 1088 * FRQRAFCNTL, FRQACSCHNG, FREQSAVE, FREQUSAVE, * 1089 * FREQUEQUIP, FREQRENAME, FREQCATINF, OPRSESSSTRT, * 1090 * XRQOPRBKUP, XRQOPRRCVR, and INITPROC. * 1091 * C8712 02 Dec 87 * 1092 * Moved UERRBMEM memory error handler in user interrupt * 1093 * part of DISPATCH (GETVIRTUAL) adjacent to the code it * 1094 * protects. * 1095 * Modified OPRQBKUPFL to give XREQERLNS when SRCHDIRSN * 1096 * no-finds (was XREQERDSE after being XREQERNSE). * 1097 * C8712a 05 Dec 87 * 1098 * Removed URGIVEUNIT's irrelevant check that the * 1099 * destination session is delaying for or trapping * 1100 * UINTGUNIT (3.12-6). Fixed URGIVEUNIT and GUUNLOCKHW * 1101 * to ensure that the correct FCB address is placed in * 1102 * the DCB. This also fixes the session starting requests * 1103 * that use GIVEUNIT, the PTHREADFCB wasn't being set at * 1104 * all (3.12-6). Fixed URRCVUNIT and PURGEGIFTU to * 1105 * DQUEONE all the sessions waiting to send more units * 1106 * (3.12-6). Fixed register eat in PURGEGIFTU, and * 1107 * fixed URGIVEUNIT to release PCNTLLOCK even when * 1108 * request suspends (3.12-5). * 1109 * C8712b 17 Dec 87 * 1110 * Made single LEAVE for RAF WSEEK. Fixed RAF WSEEK to * 1111 * not ULKWNDO2 after GETFREEW2ing a RAF minor, because * 1112 * the block is touched later and we can't afford a disk * 1113 * error. Tidied CKPVMU and FIXUPVAL. * 1114 * Combined duplicated code in INITDEVACS for PATHs. * 1115 * Fixed REALDEVICE so it actually uses the ULB (3.12-6). * 1116 * Fixed MODACS error recovery to use correct FDE * 1117 * and ULB pointers. Fixed MODACS to not clobber CKxxx * 1118 * codes through INITDEVACS call. Would cause use file * 1119 * use counts to be off (3.12-6). * 1120 * Modified the backup recover requests to keep the account * 1121 * and file entries more consistent (3.12-6) and fixed the * 1122 * error recovery specifically related to memory protect. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 22 (REVISIONS) F 3 1123 * C8712c 21 Dec 87 * 1124 * Revamped TIMESET code to use RLSLE2 instruction to save * 1125 * time. TMRLINK made into a full word so that list * 1126 * manipulations more often use base mode instead of ZBM. * 1127 * Added SHACCT call in LIQUIDATE to remove timer quantum. * 1128 * Allow .NULLs to be MW. Zeroed .LOCK entry in VERIFYTAB. * 1129 * Fixed MSPROC (CHECKSTATE) and MOUNT to give error if * 1130 * mount candidate drive is writeprotected (added MDVWPROT). * 1131 * Fixed PRESETAUTH to check ULB account names instead of * 1132 * ULB addresses to determine caller/victim equality. * 1133 * C8801a 11 Jan 88 * 1134 * Fixed OPEN to unsave a "file being destroyed" only if * 1135 * the FDSUN doesn't match the FILESUN. Also, this check * 1136 * is now made AFTER the WWC and use count checks (3.12-6). * 1137 * Fixed LOGXREQ and STOPXMON to interlock use of XHTABTAB * 1138 * (with new lock XHTABLCK). LOGXREQ was able to get pntr * 1139 * to free space, or a nil pointer from XHTABTAB. Minor * 1140 * cleanup to URSTATPI (URSESSINFO and ORSESSINFO XREQs). * 1141 * Changed CREATEDEV to DMOTEWNDO1 after GETFREEW1 for * 1142 * SAF and CODE (more straightforward than ULKWNDO1 and * 1143 * allowing subsequent subroutines to map over the window). * 1144 * Fixed FRTGETTCS to return the users currently active * 1145 * TCS for the console terminal (was always getting his * 1146 * user defined set). * 1147 * C8801b 12 Jan 88 * 1148 * Changed URDELAY ending code in ONCEASEC so that timed * 1149 * out session will not be put on the end of SQRUNNABLE * 1150 * (was having user reexecute URDELAY with delay=0 unless * 1151 * original wait mask included CAIMNETERM). * 1152 * Changed to URSTATPI: minor cleanups, fixed "disconnected * 1153 * terminal" check to exclude concurrent sessions. * 1154 * C8802a 19 Feb 88 * 1155 * Changed ORATTACH OPREQ to disallow attach to requester's * 1156 * concurrent session (wouldn't work because requester's * 1157 * logoff would force new session to logoff). Fix to * 1158 * recover account, ULB use count of managers account * 1159 * where authorization was coming from during selective * 1160 * backup was not getting decremented properly (3.12-6). * 1161 * Changed MINBLKLIM from 40 to 100 in BLKLIMCHK as an * 1162 * added margin of safety (were seeing C1200s because CM * 1163 * couldn't get logged on even though BLKLIMCHK passed). * 1164 * Reorganized code in OPEN that checks the SUN and FBD. * 1165 * This allowed the file being destroyed code to work * 1166 * because the windows contained the UDIR blocks and not * 1167 * leftovers from SHLCHKALL routine (3.12-6). * 1168 * Fixed the CIADRIVER SETUPWRIT code to ensure powerfail * 1169 * ints are disabled on exit (actually, moved PFAILEN to * 1170 * after terminal timing checks, so no PFAILDS needed by * 1171 * earlier exit, such as to SETNORM when TERMWBUSY=0). * 1172 * Saw S0007 halt at 80103 where a pfail int occurred * 1173 * while looking at UERs in DISPATCH (3.12-6). * 1174 * Modified code in recover file page to ensure that * 1175 * RAF index blocks had proper relative block numbers. * 1176 * Fixed URSESWCLK request to properly compute figures * 1177 * using single register instructions, double register * 1178 * instruction with BASE mode did not work properly. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 23 (REVISIONS) F 3 1179 * Changed Set Wall Clock Limit/Used to give error if * 1180 * new value to be set is negative. Changed OPRSTRTBAT * 1181 * and FREQCONCP to use symbols for unit numbers. * 1182 * Changed the disk driver to CLEARFAULT and REZERO after * 1183 * operation. New status added to MDV, MDVLOPSTATUS is * 1184 * the status after the last operation and not the * 1185 * status after any error recovery. * 1186 * C8802b xx Feb 88 * 1187 * The code in the disk driver that attributes some * 1188 * header errors to seek errors (i.e. being on the * 1189 * wrong cylinder) was modified so that the first * 1190 * header error was not treated as a seek error. * 1191 * Bug fix in BootUpdate to give back the free memory * 1192 * fetched for holding the FBI. * 1193 * C8803 09 Mar 88 * 1194 * Changed SWAPPMVS in INITIAL to clear the PFREFBIT * 1195 * before storing PMV into PFMAP (cleaner map). * 1196 * Changed ORATTACH to pass lower half of requester's * 1197 * R1 in the upper half of the subcode. * 1198 * C8803a xx Mar 88 * 1199 * Removed FRMODACSLK (00D1) because it was unimplemented. * 1200 * Changed ORBKCACCT to hand back XREQERILR if the user * 1201 * hasn't backup privilege (was giving XREQERPNS). * 1202 * In MSPROC, moved trace calls to after action initiation * 1203 * to save time. Minor change in calls to errorlogger. * 1204 * C8803b 24 Mar 88 * 1205 * Modified TSELECT to work with the BTI SMD to ESDI * 1206 * adaptor board (patched into 3.12-8 #5). * 1207 * Moved INC FFPROCS from SPROCSTART into DISPATCH to * 1208 * eliminate the timing window that allowed the count * 1209 * of active free filers to become incorrect (3.12-8). * 1210 * Eliminated FFBUSY word usages, because it is not kept * 1211 * in a way that was useful. The location remains as * 1212 * a space filler to make freefile match the template. * 1213 * Changed URRCVUNIT UREQ to return XREQERLAE instead * 1214 * of XREQERPOB when non-CM user uses 201 or 202. * 1215 * Removed def and code for URPSTOP UREQ. Was intended * 1216 * to become "stop another process", but this was done * 1217 * by ORPSTOP. Def had been commented out, code was * 1218 * just a jump to UERRORILR (now in table). * 1219 * C8804 29 Apr 88 * 1220 * Changed OPEN request to give XREQERBFN rather than * 1221 * XREQERFNF if the device type was needed, but was * 1222 * either not specified or not a defined type. * 1223 * C8805 09 May 88 * 1224 * Added the drive name to several ERRORFILE entries. * 1225 * C8805a 11 May 88 * 1226 * Fixed MS_RESET to really use the skip return when * 1227 * a drive timed out. Fixed CHECKBFD to use this. * 1228 * Before, no ERLCDSKTO errors could ever be recorded. * 1229 * Fixed DEADMAN to SETPPU3WRD only when PPU has recovered * 1230 * from illness (was doing iff a controller needed reset). * 1231 * Fixed POWERUP to force this SETPPU3WRD. * 1232 * C8805b 26 May 88 * 1233 * Made new ERRORFILE code ERLCRDGCS (reading check * 1234 * segment), and changed FIXSEGMENT to use it rather * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 24 (REVISIONS) F 3 1235 * than ERLCDE (because the entry is a notification). * 1236 * This replaces OPFIXSEG as a code to ERRORLOG, so the * 1237 * OPFIXSEG definition was removed. * 1238 * C8805c 30 May 88 * 1239 * Restored FRTGETTCS to return the users defined TCS for * 1240 * console TCS (see C8801a), because it is more useful. * 1241 * C8806 02 Jun 88 * 1242 * Added HALTS0102 to MS REMOUNT (matching VOLN HCB not 0). * 1243 * Fix in INITDEVACS when RAF changing access from /MW, * 1244 * if GFC block gets freed then the FCDCBPTR must get set * 1245 * to zero. * 1246 * C8806a xx Jun 88 * 1247 * Removed stack loc from INTREAD by using regs instead. * 1248 * Fixed MS READ to not rewrite or sub a block with a * 1249 * permanent read error. * 1250 * Fixed MS driver to not REMOUNT a pack that was mounted * 1251 * or otherwise altered somewhere else. Also prevents * 1252 * remount of wrong pack with same PLINITDATE. This added * 1253 * the SECMNTDAT to the security block, and changed * 1254 * VOLNFMTDAT to VOLNMNTDAT. * 1255 * C8807 xx Jul 88 * 1256 * Fixed URRCVUNIT to use correct register when setting * 1257 * TCFCB and TCINTE (recent bug : after CM ATTACH, the * 1258 * TCFCB was wrong, with bad results such as unrestored * 1259 * (0) TCTERMA). * 1260 * C8808 31 Aug 88 * 1261 * Fixed change in C8802a that disallowed negative values * 1262 * for wallclock and disk warn limits, to allow -1 (*Huge*). * 1263 * Added similar checks for super privileged sets of CPUU, * 1264 * CPUL, DISKL, and DISKS. Changed DELAFTIDX and SRCHAFTIDX * 1265 * to use CMSTR instead of CMS instruction. Also modified * 1266 * to GRUB window 1 on disk error. Fixed callers as * 1267 * appropriate, and fixed comments regarding window mapping. * 1268 * Added MAPOUTFBI to error path at GPADTSECE. * 1269 * Removed the forcewrite from the disk error path at * 1270 * FREEULB01. Changed DMOTE to GRUB in error path for * 1271 * REWRITE at FILEISAU. Modified LOCKDIR exit. * 1272 * Changed FREQs FRMODLBKU, FRMODLWD, FRMODLRD to share * 1273 * code. Also changes to body of the FRMOD*** requests * 1274 * to use an execute table rather than a jump table. * 1275 * Fixed ORINITVOL OPREQ to copy the MDVFMTDAT into the * 1276 * VOLNMNTDAT for the time the security blocks are being * 1277 * written (ensures volume can always remount). * 1278 * Fixed ORINITVOL to place dates into security block. * 1279 * (was using wrong window and placing them into the * 1280 * volume label). Other mods to ORINITVOL to not read * 1281 * the packs volume label (which we overlay anyway), * 1282 * removed an UNLKWNDO for a page that was subsequently * 1283 * forcewritten, and altered a few minor items for * 1284 * efficiency. * 1285 * C8809 12 Sep 88 * 1286 * Changed INPUTERR in CIAINUTIL to prevent multiple * 1287 * contiguous error elements in the input queue. Was * 1288 * allowing a bad port to eat up free memory with * 1289 * error elements (patched in 3.12-9 #6). * 1290 * Added ORRESETDRV OPREQ, with corresponding code in * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 25 (REVISIONS) F 3 1291 * DOREADREQ (request to reinitialize MDV after format). * 1292 * C8809a 20 Sep 88 * 1293 * Fixed error in TSELECT count of table entries. * 1294 * Added CANOPMSG to DISMNTDUMMY (mainly for maint vols * 1295 * that dropped offline and were closed). * 1296 * Added MDVNOLOG flag (using MDVNOERRS for this was * 1297 * preventing head checker error logging). * 1298 * Fixed CHECKHEADS to clear entire MDVERRWORD initially * 1299 * (was using leftover flags). * 1300 * C8809b 27 Sep 88 * 1301 * Changed FIXSEGMENT to do no retries, and READ to reread * 1302 * instead (STATCHECK now accumulates single seg errors in * 1303 * MDVDKERRS, limited by MDVDKERLIM). * 1304 * C8810 26 Oct 88 * 1305 * Moved process switch check closer to DOPSAERR in * 1306 * DISPATCH. Fixed WRITE subroutine in MSPROC to prevent a * 1307 * bad block from being put into the ADT. Fixed SUBSPROC * 1308 * to not do a substitution on a block being freed. * 1309 * C8811 16 Nov 88 * 1310 * Removed virtual monitor page checking from parity error * 1311 * routine, because all pages are now resident. * 1312 * Modifications to add new hardware type, VT. * 1313 * C8812 13 Dec 88 * 1314 * Fixed CHKBZYACS to disallow going from NA to RW on a * 1315 * PATH if someone has the PATH for MW. Moved SECMNTDAT * 1316 * to a more static area of the security block. * 1317 * C8812a 16 Dec 88 * 1318 * Changed resource locking to allow a full 32 bit resource * 1319 * number, however the maximum number of resource locks * 1320 * allowed per file has been reduced to 128. Note that the * 1321 * RCE element increased from 2 words to 4 words. * 1322 * C8901a 4 Jan 89 * 1323 * Allow no-data open of hardware device file that does * 1324 * not reside in system volume HARDWARE.SYS account. This * 1325 * is to grant backup (and others?) access to HARDWARE.SYS * 1326 * shadows. Fixed the URDELAY request to lock PSA * 1327 * EVENTLOCK during CHECKEVENT and shutdown into * 1328 * SQTIMEWAIT. Also used EVENTLOCK in GIVEUINT to * 1329 * coordinate when events are given to URDELAY requesters, * 1330 * should eliminate missing events. * 1331 * C8901b 14 Jan 89 * 1332 * Changed FRCONCP and ORSTARTBAT XREQs to return the * 1333 * process serial number of the new session's Control Mode * 1334 * in R1. This is so the spooler can have truly unique * 1335 * session ID for servers. * 1336 * Warning!! These requests previously did not eat R1. * 1337 * C8901c 18 Jan 89 * 1338 * Fixed the change SSN code to reset foreign volume flag * 1339 * only if the customer numbers do not match. * 1340 * Wrong register used in cancel operator message during * 1341 * volume dismount (DISMTDUMMY). * 1342 * C8901d 20 Jan 89 * 1343 * Fixes to LINKTERM, allow open of backup copies of .TERMS * 1344 * and also give no-data-access TCB linkup so we may fetch * 1345 * information on busy terminals. * 1346 * C8901e 30 Jan 89 * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 26 (REVISIONS) F 3 1347 * Fixed recover file to know about VTs. Fixed bug in out * 1348 * of bounds check. RC * 1349 * C8902a 01 Feb 89 * 1350 * Fixed the URFORCEP xreq to not set the FWIP bit, also * 1351 * not to suspend if page not dirty or write not pending. * 1352 * Removed UPDATEPAGE and FORCEPAGE routines. * 1353 * C8902b 02 Feb 89 * 1354 * Fix to prevent system halt if memory protect violation * 1355 * during register saving interrupt processing for user * 1356 * process. Need halt only if memory protect for Control * 1357 * Mode. Fix to STATCHECK in MS driver at label SEGERROR * 1358 * to not munch the segment number in R0, caused halt S0105. * 1359 * C8903a 09 Mar 89 * 1360 * Fix to CHECKCIA in DEADMAN, set R0 to one after ERRORLOG * 1361 * to indicate PPU was alive. CIA_RESET looked at R0 to * 1362 * determine if reset should happen. This instruction was * 1363 * inadvertantly removed in C8805a. * 1364 * C8903b 10 Mar 89 * 1365 * Added code to DONEPPL to decrement the volume busy * 1366 * counter if the block was to go into the ADT, but * 1367 * abandoned due to disk error. Removed the VPERRGIVEN * 1368 * bit (RC). Fixed vanish request to not dismount * 1369 * maintanence mounted volumes, these volumes should get * 1370 * dismounted when the units opened to the .VOLs get * 1371 * closed. * 1372 * C8903c 21 Mar 89 * 1373 * Mods to tape driver MT_RESET to give a little * 1374 * more time after a PPURESET. * 1375 * C8903d 28 Mar 89 * 1376 * Changed tape driver to perform NO retries for type * 1377 * VT. Made retry count for each tape operation more * 1378 * consistent. * 1379 * C8904 01 Apr 89 * 1380 * Added PPUITOUT (time out) bit to PPU status. Added * 1381 * checks in I/O drivers. * 1382 * C8904a 05 Apr 89 * 1383 * Removed 'any error' check from TapeFunc in the * 1384 * tape driver. This was added in December, but * 1385 * should not have been. * 1386 * Fixed GIVEUNIT to have the correct users memory * 1387 * mapped in when looking at FCB just given away. * 1388 * C8904b xx Apr 89 * 1389 * Request To Logoff error now returns underprocess * 1390 * serial number as subcode. * 1391 * C8904c 20 Apr 89 * 1392 * Fix in SRCHDIR to restore ULB pointer before call to * 1393 * FREEULB in disk error recovery. * 1394 * C8905 02 May 89 * 1395 * Added interrupt enable bit (BFDINTBIT) to the read check * 1396 * segment operation. The system was not receiving an end * 1397 * of operation interrupt, the funny thing is that 3.12 * 1398 * system appears to work fine. Increased timeout value * 1399 * for VT WFM. * 1400 * C8905a 30 May 89 * 1401 * Fixed Remote Port Startup code to pass acceptable * 1402 * initial entry code to Control Mode. Modified PPUREV3MSK * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 27 (REVISIONS) F 3 1403 * to indicate that even revs are capable of triple word * 1404 * store, odd revs not. * 1405 * C8906a 15 Jun 89 * 1406 * Fix to tape driver to fetch the MTUTYPE during the call * 1407 * of TAPEFUNC. Any retry was screwing up the type in R1 * 1408 * and causing S0000 system halt. * 1409 * C8906b 16 Jun 89 * 1410 * Fix to OPEN code to restore EQT pointer following * 1411 * destroying a file marked FBD. * 1412 * C8907 25 Jul 89 * 1413 * Fix in DIOSETUP to properly return memory protect error * 1414 * codes. Fix in GIVEUNIT to ensure that MAPINMEM is called * 1415 * while interrupts are still off. GU*LOCKHW routines * 1416 * fixed to include table entry for VT. MT read code * 1417 * altered to send read buffer length to controller. RC * 1418 * C8907a 25 Jul 89 * 1419 * Fix to the disk head checker to ignore substituted * 1420 * blocks, this caused DA mismatch errors. * 1421 * C8908 02 Aug 89 * 1422 * Removed the WSXCLNALL for all pages if the file type was * 1423 * a .VOL, this was moved into DESTROYDEV. Added WSXCLNALL * 1424 * to FREEULB iff the ULB is being dissolved. Should prevent* 1425 * halts where pages still exists for dismounted volumes. * 1426 * C8909 26 Sep 89 * 1427 * Fix in OPRQRCVACL to correctly leave a partially * 1428 * recovered authlist during any kind of manager * 1429 * insufficient authorization. * 1430 * C8910 xx Oct 89 * 1431 * Changed the S001A, C1200, and C1215 STOPs to HALTs. * 1432 * C8910a 25 Oct 89 * 1433 * Invoked FILESTAT macro and removed separate definitions. * 1434 * C8911 xx Nov 89 * 1435 * Added call to FREECHECK in HAVEPPU to fix possibility * 1436 * of not enought memory to finish configuring the system. * 1437 * C8911a 02 Nov 89 * 1438 * Changed FREQUSHARE to allow requesting complete * 1439 * elimination of share list. CG * 1440 * C8911b 03 Nov 89 * 1441 * Fix in HAVEPPU to save and restore PPU element pointer * 1442 * between calls to FREECHECK. * 1443 * C8911c 30 Nov 89 * 1444 * Fix to the ORRCVRACTL request to not hang in DIRWAIT if * 1445 * recovering a managers account that does not currently * 1446 * exist. * 1447 * C8912 04 Dec 89 * 1448 * Added a bound to the loop in TSELECT. CG * 1449 * C8912a 12 Dec 89 * 1450 * Added a new entry into the Xreq error processing block * 1451 * (FERROR3FCB) for use when FCB is defined but the unit * 1452 * number is not the Xreq operand. * 1453 * Added a bit to FBIFLAGS saying that this block has * 1454 * been rewritten by the disk driver. Modified the driver * 1455 * to substitute a block if this bit is already set when * 1456 * a rewrite request is made the bit is cleared in the * 1457 * FBI of the new block. * 1458 * Added ORMAINTRSUB to do a maintenance read and * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 28 (REVISIONS) F 3 1459 * substitute the block. CG * 1460 * C8912b 19 Dec 89 * 1461 * Fixed WSEEK to put correct relative block number in * 1462 * RAF minor access blocks. RC * 1463 * C8912c 20 Dec 89 * 1464 * 8912c was a version with changes to disk driver * 1465 * scheduling, which was completely removed shortly after * 1466 * being added. CG * 1467 * C8912d 31 Dec 89 * 1468 * Changed PACKITEM to stop packing after encountering * 1469 * an initial number (123.abc stops, pointing at the * 1470 * period). Changed PACKFS to give an error if the item * 1471 * following a colon is a number. CG * 1472 * C9001 02 Jan 90 * 1473 * Changed PUTINCHAR to reset a current XON state on a * 1474 * port upon receipt of a break. Changed INITDEVACS to * 1475 * position a cartridge tape to track 0. (Note: this * 1476 * added a call to MTCHKWFM which seems proper, although * 1477 * file marks were somehow getting there before.) * 1478 * Allowed FRRAFCPOS to inquire as to currently selected * 1479 * track on a CT. CG * 1480 * C9001a xx Jan 90 * 1481 * Fixed set output baud rate executive request to * 1482 * correctly return the old rate upon a successful * 1483 * completion. * 1484 * C9002 01 Feb 90 * 1485 * Removed the change (C8912d) to symbol packing, was * 1486 * causing backward compatibility problems. CG * 1487 * C9002a 09 Feb 90 * 1488 * Changed the zero meaning 'current time' to a minus * 1489 * one in FRMODLRD,FRMODLWD,FRMODLBKUP. CG * 1490 * C9002b 27 Feb 90 * 1491 * Discovered that the FBINOREWRIT bit was defined * 1492 * incorrectly. Fortunately it landed on FBIERRD which * 1493 * is not used. Revised FBIFLAGS to get it right. * 1494 * Defined a subfield FBIDEFFLAGS which consists of the * 1495 * flag bits that DISKCOPY can legitimately check the * 1496 * value of. CG * 1497 * C9003 01 Mar 90 * 1498 * Changed SAFENDFIX (fixes up some garbage when a file * 1499 * recovery does not finish) to set the backward link * 1500 * on the last file block. Changed DSTRYDEV to check * 1501 * for empty CODE as well as empty RAF. CODE can be * 1502 * empty if a file recovery did not complete. CG * 1503 * C9003a 25 Mar 90 * 1504 * Changed definition of DiskToTape group of halt codes * 1505 * to Offline Utility halts. CG * 1506 * C9003b 29 Mar 90 * 1507 * In CLOSEUNIT, if SAFENDFIX is called, the directory * 1508 * window(s) need to be reestablished. In SAFENDFIX, * 1509 * zero FCB,FCMABLK so the file no longer looks like it * 1510 * is in the middle of a recovery. CG * 1511 * C9004 09 Apr 90 ( Release 12C ) * 1512 * Fixed MT_RESET to ensure the MTSTDSC was set to * 1513 * force PROC_INT to recognize current status on boot. * 1514 * C9005 24 May 90 * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 29 (REVISIONS) F 3 1515 * Added a check in STATCHECK for a weird case of a write * 1516 * setting the time code error bit but no others. Nobody * 1517 * knows how this happens, but when it did it was falling * 1518 * through to the rewrite code and the problem was * 1519 * persisting. Now causes a substitution. CG * 1520 * C9006 24 Jun 90 * 1521 * Fixed code in RECOVERFDE to correctly set the end * 1522 * position pointers for both SAFs and RAFs, was just * 1523 * setting them to zero. * 1524 * C9007 09 Jul 90 * 1525 * Expanded top boundary of user limits block to include the * 1526 * restriction word in the UDIR. Changed directory reading * 1527 * to see if the target directory has catalog reading * 1528 * restricted and if so, then check whether the requester * 1529 * has an override. Added URPROCLVL and URDROPPRIV. * 1530 * Implemented restriction group 3 (account attribute * 1531 * changing). CG * 1532 * C9008 09 Aug 90 * 1533 * Removed DIRACSLOCK and DIRLRAF from the DIRINFORD * 1534 * structure. CG * 1535 * C9010 19 Oct 90 * 1536 * Added jump instruction to take care of memory parity * 1537 * error return for call to DISKWRITE in the routine * 1538 * DOREWRITE. Fix in PRESETAUTH routine to zero ULB * 1539 * register (R4) if division project manager did not have * 1540 * proper authorization. Prevented ULB from being freed * 1541 * twice (patched C9004-1). * 1542 * C9011 12 Nov 90 * 1543 * Fix to DIOSETUP to turn off interrupts during page * 1544 * searching and locking operation. Suspect that S1300 * 1545 * halt resulted from being interrupted from this routine * 1546 * (patched C9004-2). * 1547 * C9103 27 Mar 91 * 1548 * Fixes in Re-Mount code in MSPROC (included in patch * 1549 * C9004-3). * 1550 * C9105 17 May 91 * 1551 * Fix in READ at DOREWRITE where test to see if block had * 1552 * already been rewritten was backwards. Changed instruction* 1553 * JNEZ R2 DOTHESUB -> JEQZ R2 DOTHESUB. * 1554 * (included in patch C9004-3). * 1555 * Changed timeout value for a MT rewind from 0 to 48 ticks, * 1556 * this was done for the SCSI 9-track. Made some additional * 1557 * changes to DOREWIND in the MT driver to fix a bug * 1558 * introduced by changing the timeout value from 0 to 48. * 1559 * C9105a 23 May 91 * 1560 * Mods to TRACE routines to include time. RC * 1561 * C9107 25 Jul 91 * 1562 * PATCHPROC modified by moving PLOCK to where destroying R0 * 1563 * will not cause a problem (bus error, seen in house). RC * 1564 * (included in patch C9004-3). * 1565 * Changes made to integrate the SCSI files to reduce the * 1566 * number of different files for each OS version. * 1567 * C9203 04 Mar 92 * 1568 * Changed some of the BFD symbols names to the more * 1569 * generic MSC (mass storage controller) names. * 1570 * C9203a 30 Mar 92 * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 30 (REVISIONS) F 3 1571 * Shortened the patch area to ensure enough free storage to * 1572 * do the SSU configuration (HAVESSU) in INITIAL if all of * 1573 * the memory is in higher slots, such as for a manufacturing* 1574 * test (included in patch C9004-3 and S9202-1). RC * 1575 * C9207 23 Jul 92 * 1576 * Changes in MAKETRAF to prevent freeing a random block * 1577 * (actually 3F8F) on out of disk space error. Mods in * 1578 * PFPROC to restore disk space totals after getting an * 1579 * out of disk space error on a swapping page. * 1580 * (included in patch C9004-4 and S9202-1). RC * 1581 * PSXTRACA eliminated in favor of having a single CA/STACK * 1582 * per CPU (new variable on base page CPXTRACA). * 1583 * (patch in C9004-5 for this effect). RC * 1584 * C9209 30 Sep 92 * 1585 * Bug fixed in LOGOFF for case where ULSCRDSK goes negative.* 1586 * (patched in C9004-5) RC * 1587 * C9303 18 Mar 93 * 1588 * Bug fixed in UNDOPATH to properly restore interrupt * 1589 * level counter. (patch C9004-6) RC * 1590 * * 1591 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 31 (REVISIONS) F 3 1593 3DB03E00 ABS 1594 ASSYTIME EQU 03DB03E00 time of the system assembly 1595 * . 1 count here = 4 seconds 1596 * . 10 count here = 1 minute + 5 1597 * . 100 count here = 17 minutes + 28 1598 * .1000 count here = 4 hours + 39 min + 37 1599 * 10000 count here = 3 days + 1 hour + 14 min 43393330 ABS 1600 REVNAMEH EQU "C930" revision number of this assembly 33202020 ABS 1601 REVNAMEL EQU "3 " second part of revision number 5 6 START INITIAL starting point for first CPU 7 START2 SUCKERS starting point for everyone else 8 INPUT ASCIITABLE table of ascii character definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 32 (ASCIITABLE) F 4 ASCII character table 3 4 ********************************************************************************** 5 * * 6 * OCT HEX DEC CHR OCT HEX DEC CHR OCT HEX DEC CHR OCT HEX DEC CHR * 7 * * 8 * 000 00 0 NUL 040 20 32 SP 100 40 64 @ 140 60 96 ` * 9 * 001 01 1 SOH 041 21 33 ! 101 41 65 A 141 61 97 a * 10 * 002 02 2 STX 042 22 34 " 102 42 66 B 142 62 98 b * 11 * 003 03 3 ETX 043 23 35 # 103 43 67 C 143 63 99 c * 12 * 004 04 4 EOT 044 24 36 $ 104 44 68 D 144 64 100 d * 13 * 005 05 5 ENQ 045 25 37 % 105 45 69 E 145 65 101 e * 14 * 006 06 6 ACK 046 26 38 & 106 46 70 F 146 66 102 f * 15 * 007 07 7 BEL 047 27 39 ' 107 47 71 G 147 67 103 g * 16 * 010 08 8 BS 050 28 40 ( 110 48 72 H 150 68 104 h * 17 * 011 09 9 HT 051 29 41 ) 111 49 73 I 151 69 105 i * 18 * 012 0A 10 LF 052 2A 42 * 112 4A 74 J 152 6A 106 j * 19 * 013 0B 11 VT 053 2B 43 + 113 4B 75 K 153 6B 107 k * 20 * 014 0C 12 FF 054 2C 44 , 114 4C 76 L 154 6C 108 l * 21 * 015 0D 13 CR 055 2D 45 - 115 4D 77 M 155 6D 109 m * 22 * 016 0E 14 SO 056 2E 46 . 116 4E 78 N 156 6E 110 n * 23 * 017 0F 15 SI 057 2F 47 / 117 4F 79 O 157 6F 111 o * 24 * 020 10 16 DLE 060 30 48 0 120 50 80 P 160 70 112 p * 25 * 021 11 17 DC1 061 31 49 1 121 51 81 Q 161 71 113 q * 26 * 022 12 18 DC2 062 32 50 2 122 52 82 R 162 72 114 r * 27 * 023 13 19 DC3 063 33 51 3 123 53 83 S 163 73 115 s * 28 * 024 14 20 DC4 064 34 52 4 124 54 84 T 164 74 116 t * 29 * 025 15 21 NAK 065 35 53 5 125 55 85 U 165 75 117 u * 30 * 026 16 22 SYN 066 36 54 6 126 56 86 V 166 76 118 v * 31 * 027 17 23 ETB 067 37 55 7 127 57 87 W 167 77 119 w * 32 * 030 18 24 CAN 070 38 56 8 130 58 88 X 170 78 120 x * 33 * 031 19 25 EM 071 39 57 9 131 59 89 Y 171 79 121 y * 34 * 032 1A 26 SUB 072 3A 58 : 132 5A 90 Z 172 7A 122 z * 35 * 033 1B 27 ESC 073 3B 59 SEMI 133 5B 91 [ 173 7B 123 { * 36 * 034 1C 28 FS 074 3C 60 < 134 5C 92 \ 174 7C 124 | * 37 * 035 1D 29 GS 075 3D 61 = 135 5D 93 ] 175 7D 125 } * 38 * 036 1E 30 RS 076 3E 62 > 136 5E 94 ^ 176 7E 126 ~ * 39 * 037 1F 31 US 077 3F 63 ? 137 5F 95 _ 177 7F 127 DEL * 40 * * 41 ********************************************************************************** 42 00000008 ABS 43 BS EQU 008 backspace 00000009 ABS 44 HT EQU 009 horizontal tab 0000000A ABS 45 LF EQU 00A line feed 0000000C ABS 46 FF EQU 00C form feed 0000000D ABS 47 CR EQU 00D carriage return 00000011 ABS 48 XON EQU 011 XON 00000013 ABS 49 XOFF EQU 013 XOFF 00000017 ABS 50 ETB EQU 017 control-W 00000018 ABS 51 CAN EQU 018 line cancel 0000007F ABS 52 DEL EQU 07F delete 10 INPUT MACRODEFS definitions of system macros 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 33 (MACRODEFS) F 5 Macro Definitions 4 5 ********************************************************************************** 6 * * 7 * List locking and unlocking macros. Note that the * 8 * LOCKWAIT routine is carefully constructed to be used with * 9 * the PLOCK macro, so excercise caution. Call: * 10 * * 11 * PLOCK lockword (gets R0, condition bits, * 12 ** and turns off interrupts) * 13 * PUNLOCK lockword (turns on ints) * 14 * * 15 ********************************************************************************** 16 17 PLOCK MACRO 18 $L IOFF 19 SETT $P 20 JNE MA(2+DISPW MA 0) 21 CALLNP LOCKWAIT 22 EMAC 23 24 PUNLOCK MACRO 25 $L STZ $P 26 ION 27 EMAC 28 29 ********************************************************************************** 30 * * 31 * The following macro will get the stack pointer to the * 32 * top of the stack associated with the current console area. * 33 * * 34 ********************************************************************************** 35 36 SETSP MACRO 37 $L STCAR SP 38 LD SP SP,CASTACKPTR 39 LD SP SP+(2 POWER STAKLOG) 40 EMAC 41 42 43 44 ********************************************************************************** 45 * * 46 * The following macro will do an interlocked SETT on a * 47 * 1-bit ZBM field. It destroys R0. * 48 * Usage: " SETTBIT reg,field " (the register is required). * 49 * * 50 ********************************************************************************** 51 52 SETTBIT MACRO 53 $L LD R0 1*BIT((($(1),$(2)) DISP ($(1),0))/BITS 0:4) 54 IORM R0 $(1),((($(1),$(2)) DISP ($(1),0))/BITS 15:31) 55 EMAC 56 57 58 ********************************************************************************** 59 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 34 (MACRODEFS) F 5 Macro Definitions 60 * The following macro will do an interlocked clear on a * 61 * 1-bit ZBM field. It destroys R0. * 62 * Usage: " CLRTBIT reg,field " (the register is required). * 63 * * 64 ********************************************************************************** 65 66 CLRTBIT MACRO 67 $L LD R0 1*BIT((($(1),$(2)) DISP ($(1),0))/BITS 0:4) 68 BRSBM R0 $(1),((($(1),$(2)) DISP ($(1),0))/BITS 15:31) 69 EMAC 70 71 * If you believe this, wait 'till you see what I come up 72 * with next month! 73 74 75 ********************************************************************************** 76 * * 77 * The following macro will cause an event to be entered * 78 * into the system trace table, if tracing is active. There * 79 * are 32 different classes of trace events (numbered 0-31), * 80 * and you can specify a unique 5 bit event id. When a user * 81 * activates tracing, he can specify which of the different * 82 * event classes he wants traced. * 83 * Usage: " TRACE , " * 84 * * 85 ********************************************************************************** 86 87 TRACE MACRO 88 $L XCT TRACECALL($(1)) 89 NOP ($(1)*BITS 22:26)+($(2)*BITS 27:31) 90 EMAC 91 92 93 ********************************************************************************** 94 * * 95 * The following macro will define the beginning of a * 96 * stack frame. It is intended for use with ENDFRAME. We will * 97 * automatically generate a BSS 1 for the return link word. * 98 * * 99 ********************************************************************************** 100 101 NOLIST CREF 102 BEGFRAME MACRO 103 NOLIST 104 NOLIST CREF 105 NOSYMS 106 ZZ!FRAME BASE SP beginning of stack frame 107 SYMS 108 BSS 1 space for return link 109 LIST CREF 110 LIST 111 EMAC 112 LIST CREF 113 114 115 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 35 (MACRODEFS) F 5 Macro Definitions 116 * * 117 * The following macro is just like BEGFRAME except that * 118 * it does NOT generate a BSS 1 for the return link word. * 119 * * 120 ********************************************************************************** 121 122 BEGFRAME2 MACRO 123 NOLIST 124 NOLIST CREF 125 NOSYMS 126 ZZ!FRAME BASE SP beginning of stack frame 127 SYMS 128 LIST CREF 129 LIST 130 EMAC 131 132 133 ********************************************************************************** 134 * * 135 * The following macro will define the end of a stack * 136 * frame. It is intended for use with BEGFRAME. We will * 137 * define labels called PUSH and POP for use as operands of * 138 * ENTER and LEAVE instructions. This pair of macros can only * 139 * be used once per block. Note that this precludes their use * 140 * in an inner block! * 141 * * 142 ********************************************************************************** 143 144 NOLIST CREF 145 ENDFRAME MACRO 146 NOLIST 147 NOLIST CREF 148 DRCT 149 ZZ!LEN EQU DISPW ZZ!FRAME 150 PUSH EQU STAK SP,ZZ!LEN 151 POP EQU PUSH 152 ORG ZZ!FRAME 153 LIST CREF 154 LIST 155 EMAC 156 LIST CREF 157 158 159 ********************************************************************************** 160 * * 161 * PFAILEN - Enable Power-Fail Interrupt * 162 * This macro will set the power-fail restart address and * 163 * enable power-fail interrupts. Usage: * 164 * * 165 * PFAILEN location * 166 * * 167 ********************************************************************************** 168 169 170 PFAILEN MACRO 171 $L LD R0 ADR $(1) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 36 (MACRODEFS) F 5 Macro Definitions 172 ST R0 POWERUPLOC 173 IORMSR MSRPFINTE 174 EMAC 175 176 177 ********************************************************************************** 178 * * 179 * PFAILDS - Disable Power-Fail Interrupt * 180 * This macro will disable power-fail interrupts and * 181 * clear the power-fail restart address. * 182 * * 183 ********************************************************************************** 184 185 PFAILDS MACRO 186 $L CLBMSR MSRPFINTE 187 STZ POWERUPLOC 188 EMAC 189 190 191 ********************************************************************************** 192 * * 193 * PFAILCHK - Check for power failure * 194 * This macro will allow a power-fail interrupt to occur * 195 * if one is pending, control returns to the specified address * 196 * if a power-fail interrupt just occurred or if a power-fail * 197 * restart is in progress. Usage: * 198 * * 199 * PFAILCHK location * 200 * * 201 ********************************************************************************** 202 203 PFAILCHK MACRO 204 $L CMZ POWERFLAG power-fail restart in progress? 205 JNE $(1) jump if so 206 PFAILEN $(1) else allow interrupt 207 PFAILDS then disallow interrupt 208 EMAC 209 210 211 ********************************************************************************** 212 * * 213 * ASSERTEQ - Make sure two labels are equal * 214 * This macro will generate an assembly-time error if the * 215 * given expressions are not equal. Usage: * 216 * * 217 * ASSERTEQ expr1,expr2 * 218 * * 219 ********************************************************************************** 220 221 ASSERTEQ MACRO 222 BSS $(1)-$(2) error if $(1) < $(2) 223 BSS $(2)-$(1) error if $(2) < $(1) 224 EMAC 11 INPUT MACHDEFS machine parameter definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 37 (MACHDEFS) F 6 Machine Definitions 4 5 ********************************************************************************** 6 * * 7 * MACHINE DEFINITIONS * 8 * * 9 ********************************************************************************** 10 00000000 11 ZERO EQU MA 0 BEGINNING OF MONITOR MAIN MEMORY 00000000 12 PWRUPADDR EQU ZERO address for Power Fail Restart Code 13 00000000 ABS 14 STORE EQU 0 marker for pre-initialized variables FFFFFFFF ABS 15 ONEBITS EQU 0FFFFFFFF 00000010 BYTE 16 LOCKBITB EQU BIT 0 this bit indicates a list is locked 80000000 ABS 17 LOCKBIT EQU 1*LOCKBITB 18 19 ********************************************************************************** 20 * * 21 * Size information for various entities. * 22 * * 23 ********************************************************************************** 24 00000020 ABS 25 WORDLNTH EQU 32 BITS PER MACHINE WORD 00000011 ABS 26 ADDRESS EQU 17 BITS IN AN ADDRESS 00000810 BYTE 27 STPNLAST EQU BIT 4 bit in R7 for NOT last PAR/STP 00000A10 BYTE 28 STPVALUE EQU BIT 5 bit in R7 for value PAR/STP 00000C10 BYTE 29 STPDUBL EQU BIT 6 bit in R7 for double word PAR/STP 00000018 ABS 30 MSBLKLOG EQU 24 length of mass storage relative address 00000004 ABS 31 CPW EQU 4 number of characters in a word 00000400 ABS 32 WPP EQU 1024 number of words on a page 0000000A ABS 33 LWPP EQU WPP LOG 2 log of page size 00001000 ABS 34 CPP EQU WPP*CPW number of characters on a page 00001C10 BYTE 35 FLDRELOCB BIT (WORDLNTH-ADDRESS-1) xtra addr bit to flip reloc sense 00001F10 BYTE 36 FLDADRS BITS (WORDLNTH-ADDRESS):(WORDLNTH-1) address field 00001E70 BYTE 37 FLDPAGE BITS (WORDLNTH-ADDRESS):(WORDLNTH-LWPP-1) virt. page # field 000000F0 BYTE 38 UPR15 EQU BITS 0:(WORDLNTH-ADDRESS-1) non-address part of word 00001450 BYTE 39 FLDMODE EQU BITS 10:14 pointer mode field 00001560 BYTE 40 FLDMODEADR EQU FLDMODE+FLDADRS mode and address part of opcode 00001F30 BYTE 41 FLDCHARS EQU BITS 15:1 character address field 00001F60 BYTE 42 FLDBITS EQU BITS 15:4 bit address field 00000080 BYTE 43 CH0 EQU BITS 0:7 character zero 00001080 BYTE 44 CH1 EQU BITS 8:15 character one 00002080 BYTE 45 CH2 EQU BITS 16:23 character two 00003080 BYTE 46 CH3 EQU BITS 24:31 character three 00000010 ABS 47 NUMSLOTS EQU 16 number of bus slots 00000004 ABS 48 LOGSLOTS EQU NUMSLOTS LOG 2 size of a slot number field 49 50 * Monitor status register bit definitions 51 00000080 BYTE 52 MSRRSTRT EQU BITS 0:7 instruction restart code 53 00001E10 BYTE 54 MSRMPEPRCB EQU BIT 15 indicates processing memory parity error 55 00002040 BYTE 56 MSRINTCNT EQU BITS 16:19 interrupt level counter 57 00002810 BYTE 58 MSRPFINTEB EQU BIT 20 power fail interrupt enable 59 * if 1, PF interrupts allowed, 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 38 (MACHDEFS) F 6 Machine Definitions 60 * if 0, PF ints controlled by MSRINTCNT. 00002A10 BYTE 61 MSRIAPRB EQU BIT 21 associated processor interrupt pending 00002C10 BYTE 62 MSRTRACEIB EQU BIT 22 interrupt after instruction step 00002E10 BYTE 63 MSRMONB EQU BIT 23 on if monitor instructions okay 64 * relocation bits: 65 * 1 sez use monitor half of page file 66 * 0 sez use user half of page file 00003010 BYTE 67 MSRSRELOCB EQU BIT 24 operand store 00003210 BYTE 68 MSRFRELOCB EQU BIT 25 operand fetch 00003410 BYTE 69 MSRPRELOCB EQU BIT 26 pointer relocation 00003610 BYTE 70 MSRIRELOCB EQU BIT 27 instruction fetch 71 00003840 BYTE 72 MSRSLOT EQU BITS 28:31 bus slot of processor 73 * values used in changing MSR 00000100 ABS 74 MSRMON EQU 1*MSRMONB 00000800 ABS 75 MSRPFINTE EQU 1*MSRPFINTEB 00000080 ABS 76 MSRSRELOC EQU 1*MSRSRELOCB 00000040 ABS 77 MSRFRELOC EQU 1*MSRFRELOCB 00000020 ABS 78 MSRPRELOC EQU 1*MSRPRELOCB 00000010 ABS 79 MSRIRELOC EQU 1*MSRIRELOCB 80 0000F000 ABS 81 INTSON EQU ONEBITS/MSRINTCNT*MSRINTCNT 0000E000 ABS 82 INTSOFF EQU ((ONEBITS/MSRINTCNT)-1)*MSRINTCNT 0000F000 ABS 83 USERMSR EQU INTSON 000001F0 ABS 84 MSRFORMON EQU MSRMON+MSRSRELOC+MSRFRELOC+MSRPRELOC+MSRIRELOC 0000F1F0 ABS 85 MONMSR EQU INTSON+MSRFORMON 0000E1F0 ABS 86 MONMSRIOFF EQU INTSOFF+MSRFORMON Used by offline stuff 87 88 * Process Status Register bit definitions 89 00002C10 BYTE 90 PSRBCDOTRP EQU BIT 22 BCD overflow trap enable 00003010 BYTE 91 PSRFIXATRP EQU BIT 24 fixed point arith error trapbit 00003210 BYTE 92 PSRFLTATRP EQU BIT 25 floating point arith error trapbit 00003410 BYTE 93 PSRUNDETRP EQU BIT 26 undefined number arith error trapbit 00003610 BYTE 94 PSRMODIFB EQU BIT 27 modify arithmetic 00003810 BYTE 95 PSROVERFB EQU BIT 28 arithmetic overflow 00003A10 BYTE 96 PSRCARRYB EQU BIT 29 arithmetic carry 00003C20 BYTE 97 PSRCONDB EQU BITS 30:31 condition bits (30-EQ, 31-LT) 98 * values used in changing PSR 00000010 ABS 99 PSRMODIF EQU 1*PSRMODIFB 00000004 ABS 100 PSRCARRY EQU 1*PSRCARRYB 00000008 ABS 101 PSROVERFLOW EQU 1*PSROVERFB 102 103 * The WAIT instruction waits ten microseconds for each count 104 * in the operand. 105 00040000 ABS 106 WAITCOUNT EQU 2 POWER 18 about 2.5 seconds 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 39 (MACHDEFS) F 6 Machine Definitions 108 109 ********************************************************************************** 110 * * 111 * PAGE FILE DEFINITIONS * 112 * The page file contains all information required to * 113 * convert a virtual page number and the monitor/user * 114 * information into a slot number/physical page number/ * 115 * allowed access. A word formatted for the page file is * 116 * referred to as a 'page map value'. * 117 * After reading the indicated page file location, the * 118 * PFRC instruction sets it to illegal to reference. However, * 119 * this may also be accomplished by loading both the 'read * 120 * only' and 'altered' bits. * 121 * * 122 ********************************************************************************** 123 0012C000 3 REG 124 PFPTR EQU R3 register used to address PF 125 00000840 BYTE 126 PFSLOT EQU BITS 4:7 slot where page is hiding 00001A30 BYTE 127 PFCNTL EQU BITS 13:15 bits for controlling page 00001A10 BYTE 128 PFROBIT EQU BIT 13 on if page read only 00001C10 BYTE 129 PFALTBIT EQU BIT 14 on if page altered 00001E10 BYTE 130 PFREFBIT EQU BIT 15 on if page referenced 00060000 ABS 131 PFNOREFVAL EQU 1*PFROBIT+1*PFALTBIT page map value that indicates 132 * illegal to reference 000028C0 BYTE 133 PFPAGENUM EQU BITS 20:31 page number in slot ( or I/O device ) 00000080 ABS 134 NPS EQU 2 POWER (ADDRESS-LWPP) number of pages per state 00000100 ABS 135 PFSIZE EQU 2*NPS size of the page file 00000080 ABS 136 MONPF EQU NPS first location in monitor page file 137 138 ********************************************************************************** 139 * * 140 * Other miscellaneous address field definitions * 141 * * 142 ********************************************************************************** 143 144 * for I/O channel use, large hardware address field 00001560 BYTE 145 PAGEANDISP BITS 10:31 full physical address 146 * within an 18 bit virtual address, the following fields apply 00001C80 BYTE 147 PAGEFIELD BITS 14:21 page number 00003010 BYTE 148 MONBIT BIT (31-(NPS LOG 2)) bit within pagefield which 149 * indicates page is monitor 00002CA0 BYTE 150 DISPFIELD BITS 22:31 displacement within page 000014C0 BYTE 151 FLDABSPG EQU BITS 10:21 page # in absolute address 152 00000080 ABS 153 PNPAGEZERO EQU MONPF+0 page number for monitor zero page 00001000 154 BOOTLOC EQU MA 01000 location for system bootstrap 00000084 ABS 155 PNBOOTLOC EQU MONPF+(BOOTLOC DISPW ZERO)/WPP page number for bootstrap 156 157 ********************************************************************************** 158 * * 159 * MAXMAPVALS determines the number of virtual pages that * 160 * is specifically reserved for the free storage required to * 161 * maintain each user active. Note that these pages are NOT * 162 * available to the system and are never reclaimed. * 163 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 40 (MACHDEFS) F 6 Machine Definitions 164 ********************************************************************************** 165 00000004 ABS 166 MAXMAPVALS EQU 4 maximum pages for user free memory 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 41 (MACHDEFS) F 6 Machine Definitions 168 169 ********************************************************************************** 170 * * 171 * Treatise on list locking * 172 * This is in here because, even though we know better, * 173 * this keeps getting screwed up. * 174 * The only instructions that ever do an interlocked * 175 * memory operation (read-modify-write) are: * 176 * * 177 * ADDB ADDM ANDM BRSBM CLRT DEC EXCH INC INCL * 178 * IORM RSBM SETT SUBM XORM * 179 * * 180 * Even these instructions do non-interlocked * 181 * read-restore operations if the operand is not a whole word. * 182 * For the purposes of this discussion, a ZBM starting at bit * 183 * 0, 32 long is NOT a whole word. * 184 * The normal kind of lock word is a whole word, directly * 185 * addressed and set with a SETT instruction and cleared with * 186 * a STZ. * 187 * * 188 * Protecting data structures * 189 * A word may be modified in a protected manner in one of * 190 * two ways: * 191 * 1) Every operation on the word is an interlocked * 192 * memory operation. * 193 * 2) The word is modified only when an associated lock * 194 * is held. * 195 * Please, please note that these two methods may not, * 196 * nay, MUST not ever be mixed. Note especially that if ANY * 197 * operation inside a critical region is non-interlocked, then * 198 * it does NOT work to try to modify the word outside of the * 199 * critical region with an RMW. * 200 * * 201 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 42 (MACHDEFS) F 6 Machine Definitions 203 204 ********************************************************************************** 205 * * 206 * Console Area * 207 * The console area register of a CPU points to a block * 208 * of memory where the machine state will be saved on an * 209 * interrupt. The machine state is saved in the first 10 * 210 * words of the console area as defined below. The remainder * 211 * of the block is used by the operating system to hold the * 212 * virtual machine state and temporary storage. The entire * 213 * block is defined here for convenience. * 214 * The operating system maintains a stack of CAs for each * 215 * process so that when a user traps to the monitor, the * 216 * monitor has its own registers and stack area to use. * 217 * Furthermore, the monitor can issue further XREQs, in * 218 * effect, calling itself. This works as follows: Each * 219 * interrupt vector specifies a NEW CA ( the registers for the * 220 * interrupted process are always stored into its own console * 221 * area ) which will be used to save the registers of the * 222 * interrupt routine being started ( if it, in turn, is * 223 * interrupted ). If the interrupt routine being started * 224 * branches to the virtual monitor, the CA that it acquired * 225 * from the IVT will be replaced in the IVT by a fresh one ( * 226 * acquired from free storage ) and the CA in use will be * 227 * linked to the PSA of the process. * 228 * * 229 ********************************************************************************** 230 00000000 231 CONAREA BASE R0 CPU CONSOLE AREA 000800F0 0 ZBM 232 CAPSR BSSB WORDLNTH-ADDRESS process status word 00081F10 0 ZBM 233 CAPC BSSB ADDRESS the program counter 00160801 0 BASE 234 CAMSR BSS 1 monitor status word 00160802 0 BASE 235 CAR0 BSS 1 R0 00160803 0 BASE 236 CAR1 BSS 1 R1 00160804 0 BASE 237 CAR2 BSS 1 R2 00160805 0 BASE 238 CAR3 BSS 1 R3 00160806 0 BASE 239 CAR4 BSS 1 R4 00160807 0 BASE 240 CAR5 BSS 1 R5 00160808 0 BASE 241 CAR6 BSS 1 R6 00160809 0 BASE 242 CAR7 BSS 1 R7 243 * end of the machine dependant part 0016080A 0 BASE 244 CAINTADR BSS 1 user interrupt address 0016080B 0 BASE 245 CAINTMASK BSS 1 bits controlling interrupt ability 246 * bit assignments in mask word 0008001B 0 ZBM 247 CAINTENABL EQU CAINTMASK/BIT 0 indicates user accepting interrupts 248 * EQU 0 interrupt enable 00000001 ABS 249 CAIMINST EQU 1 instruction failure 00000002 ABS 250 CAIMCALL EQU 2 call/enter mismatch 00000003 ABS 251 CAIMARITH EQU 3 arithmetic failure 00000004 ABS 252 CAIMCKBDS EQU 4 check bounds trap 00000005 ABS 253 CAIMMPV EQU 5 memory protect violation 00000006 ABS 254 CAIMBREAK EQU 6 terminal break 00000007 ABS 255 CAIMALLXR EQU 7 if off, return all XREQ error codes 00000008 ABS 256 CAIMNETERM EQU 8 non-empty terminal 00000009 ABS 257 CAIMNEPATH EQU 9 non-empty path 0000000A ABS 258 CAIMTIME EQU 10 time interrupt 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 43 (MACHDEFS) F 6 Machine Definitions 0000000B ABS 259 CAIMMSG EQU 11 message receipt 0000000C ABS 260 CAIMVMF EQU 12 virtual memory failure 0000000D ABS 261 CAIMABORT EQU 13 operator abort 0000000E ABS 262 CAIMGUNIT EQU 14 unit receipt 263 0000000A ABS 264 CANUMUREGS EQU DISPW CAR0 number of scratch regs + IMR/IAR 0000000C ABS 265 CANUMREGS EQU DISPW CAPC number of registers in console area 0016080C 0 BASE 266 CALINK BSS 1 link to next console area 267 0016080D 0 BASE 268 CASTACKPTR BSS 1 address of stack associated with this CA 269 NOLIST CREF 00138000 6 REG 270 SP EQU R6 register used for stack pointer 271 LIST CREF 0016080E 0 BASE 272 CAXOPERAND BSS 1 holds XREQ operand 273 DRCT 0000000F DISP 274 CALNTH EQU DISP CONAREA LENGTH OF A CONSOLE AREA 00000004 ABS 275 CALOG EQU CALNTH LOG 2 276 ORG CONAREA 277 12 INPUT IODEFS definitions for I/O devices 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 44 (IODEFS) F 7 I/O definitions 4 5 ********************************************************************************** 6 * * 7 * Bus commands. * 8 * * 9 * These are the basic command words that appear on the * 10 * bus. The left 4 bits are interpreted as the bus command. * 11 * The right 22 bits are the address. The remaining 6 bits * 12 * are reserved for information used in support of debugging. * 13 * * 14 * When these commands go to a memory, the address (for * 15 * read, read2, write, rmw) is interpreted as a normal memory * 16 * data address. When these commands go to other devices, the * 17 * interpretation is dependent on the device. In general, the * 18 * 'page number' part of the address is decoded as a 'class' * 19 * of request. In the PPU only four classes are allowed, one * 20 * for each channel. This classification on the part of the * 21 * devices is useful to the operating system, because in order * 22 * to alter this part of the address the page file location * 23 * must be reloaded with the new page number field. * 24 * * 25 * The 'displacement' part of the address is used to * 26 * break down the requests to their final form. These bits * 27 * may be altered by the operating system by merely index * 28 * modifying an instruction or assembling a different address * 29 * (while using the same page file location). * 30 * * 31 ********************************************************************************** 32 00000000 ABS 33 BUSCWRITE EQU 000000000 write data to the device 10000000 ABS 34 BUSCRMW EQU 010000000 read/modify write 20000000 ABS 35 BUSCREAD EQU 020000000 request read of data 30000000 ABS 36 BUSCREAD2 EQU 030000000 read double 40000000 ABS 37 BUSCWRU EQU 040000000 request WRU info 50000000 ABS 38 BUSCST EQU 050000000 request self test 60000000 ABS 39 BUSCIP EQU 060000000 interrupt poll 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 45 (IODEFS) F 7 I/O definitions 41 42 ********************************************************************************** 43 * * 44 * Format of the interrupt poll response * 45 * This is the data word that a VRA bus board will return * 46 * in response to an interrupt poll request. If the polled * 47 * device does not have an interrupt asserted the data word * 48 * returned will be all zero. * 49 * The PPU and the SSU are the only boards that recognize * 50 * this command. Each has its own meaning assigned to bits * 51 * 1:31 while bit zero is reserved to indicate that an * 52 * interrupt is being requested. * 53 * * 54 ********************************************************************************** 55 00001080 BYTE 56 IPRPPUCHAN EQU BITS 8:15 PPU channel requesting interrupt 00002100 BYTE 57 IPRPPUSTAT EQU BITS 16:31 PPU status causing interrupt 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 46 (IODEFS) F 7 I/O definitions 59 60 ********************************************************************************** 61 * Format of the Who-aRe-yoU zero response. * 62 * This is the data word that all VRA bus boards return * 63 * in response to a WRU with a zero address. * 64 ********************************************************************************** 65 00000040 BYTE 66 WRU0TYPE EQU BITS 0:3 type of device 00000000 ABS 67 SLTTUNK EQU 0 indicates nothing here 00000001 ABS 68 SLTTMEM EQU 1 indicates memory here 00000002 ABS 69 SLTTCPU EQU 2 indicates CPU here 00000003 ABS 70 SLTTPPU EQU 3 indicates PPU here 00000004 ABS 71 SLTTSSU EQU 4 indicates SSU here 00000A10 BYTE 72 WRU0INT EQU BIT 5 on if interrupting 00000D20 BYTE 73 WRU0DD EQU BITS 6:23 device dependent status 00001040 BYTE 74 WRU0CPUSUB EQU BITS 8:11 sub code in CPU indicating CPU type 00000001 ABS 75 CPU4 EQU 1 indicates we are a CPU4 00003080 BYTE 76 WRU0MREV EQU BITS 24:31 micro code revision 77 78 ********************************************************************************** 79 * Format of the WRU 0 response from a Memory Control * 80 * Unit and a Semi-conductor Memory Unit. * 81 ********************************************************************************** 82 00001040 BYTE 83 WRUMEMDEVT EQU BITS 8:11 indicates type of memory device 84 * EQU 0 indicates regular MCU 00000001 ABS 85 WRU0SMUDEV EQU 1 indicates this is a SMU board 00002040 BYTE 86 WRUMEMINC EQU BITS 16:19 says the number of words of memory 87 * described by each bit of the WRU4 response: 88 * 0 => 32K words, 1 => 64K words, 89 * 2 => 128K words, 3 => 256K words, etc. 00002E10 BYTE 90 WRUMEMNO0 EQU BIT 23 1 if memory address zero not installed 91 * on this memory controller. 92 93 ********************************************************************************** 94 * Format of the WRU 4 response from a MCU. In the * 95 * following description, "n" means 2 POWER (15+WRUMEMINC). * 96 ********************************************************************************** 97 00002C10 BYTE 98 WRUMEMNONE EQU BIT 22 no memory is attached to this MCU 00002E10 BYTE 99 WRUMEMBAD EQU BIT 23 memory is improperly attached 00003080 BYTE 100 WRUMEMHERE EQU BITS 24:31 bits describing what memory is attached: 101 * bit 31 => words 0.. n-1 are useable 102 * bit 30 => words n..2*n-1 are useable 103 * bit 29 => words 2*n..3*n-1 are useable 104 * ... 105 * bit 24 => words 7*n..8*n-1 are useable 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 47 (IODEFS) F 7 I/O definitions 107 108 ********************************************************************************** 109 * * 110 * SMU command codes. These command codes are used for * 111 * manipulation of the SMU error logs. * 112 * The SMU is limited in the number of pseudo-commands it * 113 * can process so requires that they come in no faster than * 114 * one command every 20 ms. If the SMU receives a * 115 * pseudo-command while it is processing a previous one the * 116 * first pseudo-command will be lost. * 117 * * 118 ********************************************************************************** 119 120 * EQU BITS 0:3 bits containing SMU command code 121 * These are the standard bus read and write command formats 122 * EQU 0 write 123 * EQU 1 illegal 124 * EQU 2 read 125 00000C10 BYTE 126 SMUPCMND EQU BIT 6 indicates this is a pseudo-command 00001840 BYTE 127 SMUPCC EQU BITS 12:15 psuedo-command code 128 * Write pseudo-command pseudo-command codes 129 * EQU 0 unused 130 * EQU 1 clear error log and error log buffer 131 * EQU 2 clear individual error entry 132 * Read pseudo-command pseudo-command codes 133 * EQU 0 read random error log entry 134 * EQU 1 read sequential error log entry 00000002 ABS 135 SMUPCRCEL EQU 2 read current error log status 136 137 * EQU BITS 20:31 address field 138 * EQU BITS 21:23 rank field 139 * EQU BITS 24:31 IC field 140 141 * Format of the error status word 142 * EQU BIT 0 unused 143 * EQU BITS 1:7 correction check bits 144 * EQU BITS 9:10 error type 145 * EQU 0 soft error 146 * EQU 1 hard error 147 * EQU 2 uncorrectable error 148 * EQU BITS 11:13 rank address 149 * EQU BITS 14:15 upper address bits 150 * EQU BITS 16:23 Ras address 151 * EQU BITS 24:31 Cas address 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 48 (IODEFS) F 7 I/O definitions 153 154 ********************************************************************************** 155 * * 156 * CPU ERROR CODES (Rev 12 and greater microcode) * 157 * * 158 * The CPU has two types of fatal errors: Bus errors * 159 * and CPU errors. When the CPU gets a Bus error, it asserts * 160 * BSE. When a CPU error occurs, a CPU error message is sent * 161 * to the SSU. In both cases, certain state information has * 162 * been saved by the CPU, and is accessable from the RFP. * 163 * * 164 * The state information is saved as follows: * 165 * * 166 * R11 (SP17) = Microstatus register 1 * 167 * R12 (SP18) = Microstatus register 2 ([28:31]=From register) * 168 * R13 (SP19) = Microstatus register 3 * 169 * R14 (SP20) = Input register 1 * 170 * R15 (SP21) = Input register 2 * 171 * R16 (SP22) = Output register 1 * 172 * R17 (SP23) = Output register 2 * 173 * R19 (SP24) [0:3] = Error code * 174 * [4:7] = Error parameter * 175 * [20:31] = ucode address where error was detected * 176 * * 177 * The error codes are listed below. Error codes 1 * 178 * through 7 are Bus error codes and codes 8 through A are * 179 * CPU error codes. * 180 * * 181 * 1 --> Parity error on the Bus. * 182 * 2 --> Bad flags on the Bus. * 183 * 3 --> Bad command code on the Bus. * 184 * 4 --> Bad command address on the Bus. * 185 * 5 --> RTO timeout on the Bus. * 186 * 6 --> IBF timeout on the Bus. * 187 * 7 --> Parity and flag error on the Bus (same as codes * 188 * 1 and 2) * 189 * 8 --> Page fault during trap setup * 190 * 9 --> Page fault when trying to store console area * 191 * A --> Hardware error * 192 * * 193 * The second digit of the error message is the error * 194 * parameter. These are used to indicate the type of word * 195 * which caused a flag or parity error. * 196 * * 197 * 0 --> No information * 198 * 1 --> Error in command word of received command * 199 * 2 --> Error in data word of received command * 200 * 3 --> Error in instruction fetch data * 201 * 4 --> Error in operand fetch data * 202 * 5 --> Error in pointer fetch data * 203 * 6 --> Error in interrupt poll data * 204 * 7 --> Error in trap fetch data * 205 * * 206 * CPU command codes. The command codes given here * 207 * require something in the page file which is given as the * 208 * offset. Command values given are within that offset. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 49 (IODEFS) F 7 I/O definitions 209 * * 210 ********************************************************************************** 211 00000000 ABS 212 CPUREGOFST EQU 000000 offset for registers in RAM 00000000 ABS 213 CPUREG EQU 000 R/W registers indexed by number (R0:R7) 00000008 ABS 214 CPUPC EQU 008 R/W program counter 00000009 ABS 215 CPUMSR EQU 009 R/W monitor status register 0000000A ABS 216 CPUCCA EQU 00A R/W current console area register 217 * EQU 00B R/W interrupt mask 218 * 00010000 ABS 219 CPUPFOFSET EQU 010000 R/W offset for PF indexed by number 220 * 00020000 ABS 221 CPUOOFFSET EQU 020000 R/W offset for other registers 00000000 ABS 222 CPUPSR EQU 000 R/W processor status register 00000001 ABS 223 CPUI EQU 001 R/W processor instruction register 00000002 ABS 224 CPUA EQU 002 R/W processor A accumulator 00000003 ABS 225 CPUQ EQU 003 R/W processor Q accumulator 00000004 ABS 226 CPUPMS EQU 004 R/W processor "outboard" MSR 00000005 ABS 227 CPUUS EQU 005 R/W processor uproc status register 228 * 00030000 ABS 229 CPUCOFFSET EQU 030000 command offset 230 * (the data word is ignored for these commands) 00000000 ABS 231 CPURUN EQU 000 W begin running 00000001 ABS 232 CPUSTOP EQU 001 W stop execution 00000002 ABS 233 CPUSCYCLE EQU 002 W single cycle 00000003 ABS 234 CPUSSTEP EQU 003 W single step 00000004 ABS 235 CPUIAPR EQU 004 W interrupt associated processor 236 00000700 ABS 237 CPUUCODELD EQU 0700 W tells CPU to reload its microcode 00000703 ABS 238 CPUPTCHCMD EQU 0703 W load microcode patches 239 * data word contains physical address of 240 * start of patch 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 50 (IODEFS) F 7 I/O definitions 242 243 ********************************************************************************** 244 * * 245 * SSU * 246 * The SSU (System Services Unit) provides all manner of * 247 * miscellaneous services to the system. * 248 * * 249 * CLOCK * 250 * The system clock is a 44 bit CMOS counter that ticks * 251 * every millisecond. It has a battery backup to keep it * 252 * operating during power outages of up to a week. The clock * 253 * is factory loaded with the correct time, and it should only * 254 * need occasional corrections for drift. The epoch (time * 255 * when clock would have been 0000) is 0000 17 November, 1858. * 256 * The 44 bit counter will overflow sometime in the 25th * 257 * century. * 258 * Functions are provided to read the clock, write the * 259 * clock, and to increment or decrement it. The latter are * 260 * used for all minor corrections to prevent slippage * 261 * problems. Starting with Rev 14, the SSU can also be * 262 * initialized to store the current clock into memory * 263 * every millisecond. * 264 * * 265 * CONTROL PANEL DISPLAY * 266 * The 10 character display on the control panel is * 267 * shared by several functions. The SSU contains two message * 268 * buffers for driving the display. One is used for SSU * 269 * generated displays, while the other is reserved for * 270 * displays generated by the CPUs (operating system). This * 271 * allows the most recent display of each type to be available * 272 * to the RDU. * 273 * First, the SSU will display bus errors and self test * 274 * errors in it. * 275 * Second, if any CPU executes a halt or stop * 276 * instruction, that CPU sends a message to the SSU who * 277 * displays a halt code (see HALTDEFS) then stops the entire * 278 * system by asserting PAUSE. * 279 * Third, the system may display anything that it chooses * 280 * while it is running. * 281 * The character set is 6-bit ASCII, as follows: * 282 * 0 1 2 3 4 5 6 7 * 283 * +-------------------------- * 284 * 00 | @ A B C D E F G * 285 * 08 | H I J K L M N O * 286 * 10 | P Q R S T U V W * 287 * 18 | X Y Z [ ~ ] { } * 288 * 20 | ! " # $ % & ' * 289 * 28 | ( ) * + , - . / * 290 * 30 | 0 1 2 3 4 5 6 7 * 291 * 38 | 8 9 : s < = > ? (s = semicolon) * 292 * In each character, the 80 bit turns on a decimal point * 293 * after the character. In the word containing the last two * 294 * characters, two low-order bits control the ALARM light and * 295 * the horn. * 296 * * 297 * REMOTE FRONT PANEL * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 51 (IODEFS) F 7 I/O definitions 298 * The SSU has an RS232 port on it for connection to a * 299 * dedicated modem. This is provided for use by the remote * 300 * front panel maintenance facility. There is also a 50 pin * 301 * ribbon connector provided for connection to a portable * 302 * field service maintenance unit. * 303 * * 304 * INTERVAL TIMER * 305 * A 'fence' register is provided to indicate the time at * 306 * which the system desires an interrupt. A down counter is * 307 * not used because of the problem of slippage. That is, a * 308 * given interrupt time, if composed of many smaller * 309 * intervals, is subject to an error for each interval used. * 310 * This error would be one millisecond for each tick that * 311 * occurs between the interrupt posting and the reloading of * 312 * the down counter. Instead, when the lower 16 bits of the * 313 * clock become equal to the fence register due to a tick, or * 314 * an increment, the SSU posts an interrupt. This allows the * 315 * system to store the actual times at which interrupts are * 316 * desired. The interrupts are kept ordered and the next one * 317 * is used to load the fence. * 318 * * 319 * CONTROL PANEL SWITCHES * 320 * These switches are provided primarily so that the * 321 * operator can indicate a few options at the time of a system * 322 * boot. They also allow the operator to select what will be * 323 * displayed on the ten character display during system * 324 * operation. * 325 * * 326 * NON-VOLATILE MEMORY * 327 * A buried charge read-mostly memory is provided so that * 328 * the system may store up to 128 bytes of vital information. * 329 * In SSU rev 14, the NVM is of a different type and contains * 330 * 2048 bytes of information, although the full 2048 bytes are * 331 * not usable until rev 15 due to microcode bugs. Each byte is * 332 * individually addressed. Bytes are read or written by reading * 333 * or writing through SSUNVM+nn. For read, only bits 24:31 are * 334 * valid, for write, the data is taken from bits 24:31. * 335 * * 336 * Error Block * 337 * The SSU's error block is a 16 word buffer. Each word * 338 * corresponds to a slot in the VRA bus. If a word is zero, * 339 * then either there is not a CPU in that slot, or that CPU * 340 * has not sent a Halt, Stop, or Error message to the SSU. * 341 * Prior to microcode 15, the special case of a CPU executing * 342 * a word of all zeros created the irritating phenomenon of * 343 * storing a zero into the error file which appeared as no * 344 * error. Rev 15 converts the all zero word, when received, * 345 * into 0FF000000 before storing it into the error file. * 346 * * 347 * If a word in the block is nonzero, it is displayed as follows: * 348 * * 349 * If (Bits[0:7] = 0) and (Bit[8] = 0), then the display is * 350 * "HLTn axxxx", where n is the slot number, a is a 6-bit ASCII * 351 * char in Bits[10-15], and xxxx is the 4 hex nibbles in Bits[16-31]. * 352 * Note that, prior to SSU microcode Rev 15, a HALT 0 * 353 * placed all 0s (the instruction word) into the error * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 52 (IODEFS) F 7 I/O definitions 354 * file. This looks as if no error has been posted. * 355 * * 356 * If (Bits[0:7] = 0) and (Bit[8] = 1), then the display is * 357 * "STPn axxxx", where n is the slot number, a is a 6-bit ASCII * 358 * char in Bits[10-15], and xxxx is the 4 hex nibbles in Bits[16-31]. * 359 * * 360 * If (Bits[0:7] = 0FF) then the entry is for a HALT 0. * 361 * * 362 * If (Bits[0:7] <> 0) then the display is "CPU n Err wwwwwwww", * 363 * where n is the slot number, and wwwwwwww is the word in the * 364 * error block. * 365 * * 366 * BOOTSTRAP * 367 * The sequence of events during a bootstrap is as * 368 * follows: * 369 * 1) Assert PAUSE, PFW, and MCLR. This clears out the * 370 * bus interface logic and such like and sets up the * 371 * microprocessors to run when released. * 372 * 2) Release PFW and MCLR. * 373 * 3) Poll all slots and build a table of filled slots. * 374 * 4) For each active slot, do WRU 0 through WRU 0E * 375 * and store the results into 0200+*16 * 376 * in the first available page of memory. * 377 * 5) Command each bus device to run its self test. * 378 * 6) Allow enough time for the self test to complete. * 379 * 7) Retrieve the self test response (WRU OF) from all slots * 380 * and store it with the other WRU data (see item 4, above). * 381 * 8) Initialize each CPU to execute the monitor code * 382 * starting at location 0. * 383 * 9) Copy the 16K EPROM into locations 0-01FF of the * 384 * first page of available memory. Note: This EPROM * 385 * may also be read by reading through SSUROFFSET+nn. * 386 * 10) Release PAUSE to let the CPUs go. * 387 * * 388 * POWER UP * 389 * The sequence of events at power up is as * 390 * follows: * 391 * 1) Run self test on itself. * 392 * 2) Assert MCLR, PFW, and PAUSE. Wait for 1 second. * 393 * 3) Clear MCLR. Wait for 250 Msecs. * 394 * 4) Clear PFW. Wait for 5 seconds. * 395 * 5) * 396 * * 397 * SSU command codes. The command codes given here require * 398 * an offset to be loaded in the page file (as a page number). * 399 * The command values are relative to that offset. * 400 * * 401 ********************************************************************************** 402 00003080 BYTE 403 IPRSSUSTAT EQU BITS 24:31 Interrupt status bits in interrupt poll 404 405 * EQU 0C00 R/W SSU scratchpad Ram (byte at a time in bits 24:31) 406 00001000 ABS 407 SSUROFFSET EQU 01000 R offset to address PROM bootstrap 408 00001400 ABS 409 SSUCOFFSET EQU 01400 offset to following commands 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 53 (IODEFS) F 7 I/O definitions 410 * The SSU clock is a 44 bit counter 411 * that counts every millisecond. 412 * It has a battery to keep it 413 * operating during power failures. 00000001 ABS 414 SSUCLOCKU EQU 00001 R/W most significant 12 bits of clock 00000002 ABS 415 SSUCLOCKL EQU 00002 R/W least significant 32 bits of clock 00000003 ABS 416 SSUINCCLK EQU 00003 W increment clock 00000004 ABS 417 SSUDECCLK EQU 00004 W decrement clock 418 * These 3 codes are sent by the 419 * CPU microcode only. 00000005 ABS 420 SSUCPUHALT EQU 00005 W CPU halt/stop message 00000006 ABS 421 SSUCPUERR EQU 00006 W user error in monitor 00000007 ABS 422 SSUCPUBUSE EQU 00007 W CPU got abnormal data 423 * To/From remote or local front 424 * panel port. 00000008 ABS 425 SSUCHAROUT EQU 00008 R/W send char out to UART, sign sez ready 00002E10 BYTE 426 SSUBREAKB EQU BIT 23 bit indicating break command 00002C10 BYTE 427 SSUDWELLB EQU BIT 22 bit indicating dwell command 000000FF ABS 428 SSUMAXCC EQU 0FF maximum number of break or dwell chars 429 that can be sent at once 430 431 * The fence is matched against the 432 * right 16 bits of CLOCKL. 00000009 ABS 433 SSUFENCE EQU 00009 R/W 16 bit time to interrupt 434 435 * The operating system has control of the 436 * control panel display as long as the machine 437 * is running. These three locations are used 438 * for communications with the display. 439 * The SSU takes control of the display for 440 * many conditions. The system may read what 441 * the SSU last put up in the display through 442 * a different set of addresses, see below. 0000000A ABS 443 SSUDISP03 EQU 0000A R/W characters 0, 1, 2, 3 of system display 0000000B ABS 444 SSUDISP47 EQU 0000B R/W characters 4, 5, 6, 7 of system display 0000000C ABS 445 SSUDISP89 EQU 0000C R/W characters 8, 9 of system display, alarm, horn 00003410 BYTE 446 SSUHORN EQU BIT 26 W on to sound horn (continuously) 00003610 BYTE 447 SSUALARM EQU BIT 27 W on to light ALARM box 448 * EQU BIT 1 R horn is on 449 * EQU BIT 9 R Alarm light is on 450 0000000D ABS 451 SSUCHARIN EQU 0000D R char in from UART, sign sez new 452 * EQU BIT 23 on if Break rather than character 0000000E ABS 453 SSUMISCST EQU 0000E R misc. statuses 00003E10 BYTE 454 SSUMSLFP EQU BIT 31 local front panel connected 00003C10 BYTE 455 SSUMSBC EQU BIT 30 SSU providing bus clock 00003A10 BYTE 456 SSUMSNVM EQU BIT 29 NVM not busy 457 0000000F ABS 458 SSUINTMASK EQU 0000F R/W interrupt mask 459 * Bits in interrupt mask and WRU response 00003010 BYTE 460 SSUIMCI EQU BIT 24 character in from UART 00003210 BYTE 461 SSUIMCO EQU BIT 25 ready for character out 462 * EQU BIT 26 unused 00003610 BYTE 463 SSUIMCLKSTR EQU BIT 27 allow SSU to update clock in memory 00003810 BYTE 464 SSUIMERR EQU BIT 28 error log information available 00003A10 BYTE 465 SSUIMNVM EQU BIT 29 NVM ready 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 54 (IODEFS) F 7 I/O definitions 00003C10 BYTE 466 SSUIMFPS EQU BIT 30 control panel switch change 00003E10 BYTE 467 SSUIMTICK EQU BIT 31 clock interrupt 468 00000010 ABS 469 SSUBOOTFP EQU 00010 R control panel switches at boot time 470 * EQU 00010 W cause boot to happen 471 * bits 24:31 are boot number 00000011 ABS 472 SSUFPSWCH EQU 00011 R current control panel switches 473 * Bits in SSU control panel switch read 00000010 BYTE 474 SSURFP EQU BIT 0 on if RFP doing boot 475 * EQU BIT 24 RUN - when we can look, its on 476 * EQU BIT 25 BOOT - when we can look, its off 00003410 BYTE 477 SSUSWMAINT EQU BIT 26 MAINT - remote maintenance enable 478 * EQU BIT 27 POWER - on 00003810 BYTE 479 SSUSW1 EQU BIT 28 switch numbered 1 00003A10 BYTE 480 SSUSW2 EQU BIT 29 switch numbered 2 00003C10 BYTE 481 SSUSW3 EQU BIT 30 switch numbered 3 00003E10 BYTE 482 SSUSW4 EQU BIT 31 switch numbered 4 00003840 BYTE 483 SSUSWITCH EQU SSUSW1+SSUSW2+SSUSW3+SSUSW4 484 00000012 ABS 485 SSUERRLOG EQU 00012 R read and clear error log information 486 * EQU BIT 29 write to port zero when no room 487 * EQU BIT 30 write to NVM when busy 488 * EQU BIT 31 read to NVM when busy 489 490 * The SSU itself generates control panel 491 * displays (self test, bus error, etc) 492 * The system can read the last such display. 493 * EQU 00013 R characters 0, 1, 2, 3 of SSU display 494 * EQU 00014 R characters 4, 5, 6, 7 of SSU display 495 * EQU 00015 R characters 8, 9 of SSU display 496 497 * EQU 00016 R/W 32 bit version of the clock 498 499 * The SSU will automatically store the 500 * clock every millisecond if the appropriate 501 * control bit (in interrupt mask) is set. 502 * This word contains the physical address 503 * of the double word that is to be kept 504 * up to date. 00000017 ABS 505 SSUCLOKAD EQU 00017 R/W physical address for clock update 506 * bits 4:7 = slot number of memory 507 * bits 8:31 = physical address of first word of two 508 00001800 ABS 509 SSUNVM EQU 01800 R/W offset to get at NVM 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 55 (IODEFS) F 7 I/O definitions 511 512 ********************************************************************************** 513 * * 514 * PPU command codes * 515 * The PPU provides the link between the VRA bus and the * 516 * peripheral controllers. * 517 * The PPU is capable of operating 4 completely * 518 * independant channels. They are addressed by making the * 519 * PPUCHAN bits in the store and load commands equal to the * 520 * channel desired. Normally, this is done by loading a base * 521 * address into the page file. * 522 * channel 0 = MA 000000 or page number 000 * 523 * channel 1 = MA 010000 or page number 040 * 524 * channel 2 = MA 020000 or page number 080 * 525 * channel 3 = MA 030000 or page number 0C0 * 526 * Two basic functions are provided. The first of these * 527 * is the DMA or data channel capability. Also included is * 528 * interrupt control and such like capabilities. * 529 * These capabilities are controlled by stores and loads * 530 * from the addresses between 0 and 01FF. * 531 * The other basic function provided by the PPU is to * 532 * send control information directly to and receive status * 533 * information directly from the controller. This is * 534 * accomplished by loads and stores with the DEVBIT bit set * 535 * in the address (that is, addresses from 0200 to 03FF). * 536 * * 537 ********************************************************************************** 538 00003020 BYTE 539 PPUCHAN EQU BITS 24:25 PPU channel number as put in PF 00000004 ABS 540 PPUCHANS EQU 4 number of channels on a PPU 541 00000000 ABS 542 PPUCABLED EQU 000 R gets non-zero if channel cabled to responding 543 * (non-zero return is controller WRU info) 00000001 ABS 544 PPUINTSTAT EQU 001 R gets ports internal PPU status, format below 00003E10 BYTE 545 PPUIDMAD EQU BIT 31 *DMA direction, 1 sez memory -> PPU device 00003C10 BYTE 546 PPUIINTP EQU BIT 30 +PPU requests interrupt 00003A10 BYTE 547 PPUIDMAE EQU BIT 29 DMA output enabled 00003810 BYTE 548 PPUIINTC EQU BIT 28 +controller requests interrupt 549 00003610 BYTE 550 PPUIROLL EQU BIT 27 +byte count rollover 00003410 BYTE 551 PPUILAST EQU BIT 26 last byte count processed 00003210 BYTE 552 PPUIBCNR EQU BIT 25 next byte count not ready on rollover 00003010 BYTE 553 PPUIDMANB EQU BIT 24 DMA not busy 554 00002E10 BYTE 555 PPUIMPE EQU BIT 23 memory parity error 00002C10 BYTE 556 PPUIINTR EQU BIT 22 *cause PPU interrupt request 557 * on byte count rollover 00002A10 BYTE 558 PPUICONF EQU BIT 21 PPU is confused 00002810 BYTE 559 PPUICIA EQU BIT 20 #*controller allowed to interrupt CPU 560 00002610 BYTE 561 PPUIPIA EQU BIT 19 #*PPU allowed to interrupt CPU 00002410 BYTE 562 PPUIDPPE EQU BIT 18 data path parity error 00002210 BYTE 563 PPUIXTRA EQU BIT 17 extra characters after rollover 00002010 BYTE 564 PPUIBTR EQU BIT 16 between records (EOR from controller) 565 * The CPU may change the bits marked with a "*", 566 * the bits marked with a "+" are cleared on a status read, 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 56 (IODEFS) F 7 I/O definitions 567 * the bits marked with a "#" are cleared when the CPU 568 * accepts an interrupt. 00001E10 BYTE 569 PPUITOUT EQU BIT 15 software timeout, ORed in on deadman 570 00000000 ABS 571 PPURESET EQU 000 W give power reset to controller 00000001 ABS 572 PPUABORT EQU 001 W abort operation and reset error state on channel 00000002 ABS 573 PPUCHANS1 EQU 002 R fetch controller status word 1 00000003 ABS 574 PPUCHANS2 EQU 003 R fetch controller status word 2 00000002 ABS 575 PPUSSSTAT EQU 002 W selectively set bits in internal status 00000003 ABS 576 PPUSCSTAT EQU 003 W selectively clear bits in internal status 577 00000004 ABS 578 PPUCNT1 EQU 004 R/W primary byte count - below format 00002010 BYTE 579 PPUCLAST EQU BIT 16 sez last byte count 000022F0 BYTE 580 PPUCCOUNT EQU BITS 17:31 character count 581 00000005 ABS 582 PPUADDR1 EQU 005 R/W primary transfer address 00000840 BYTE 583 PPUASLOT EQU BITS 4:7 slot that address is in 00001560 BYTE 584 PPUAMEMA EQU BITS 10:31 physical memory address 585 00000006 ABS 586 PPUCNT2 EQU 006 R/W secondary byte count 00000007 ABS 587 PPUADDR2 EQU 007 R/W secondary memory address 588 00000008 ABS 589 PPU3WRD EQU 008 R/W 1 sez enable PPU to do triple word transfers 590 * Note that PPU3 (the double board model) cannot 591 * do double word transfers. The initial release 592 * of PPU4 was on microcode rev 014, however, a 593 * release of PPU3 microcode has since been issued 594 * that is for rev 015. See the bit array in 595 * initial for the current information. Note that 596 * a store to this location in a PPU3 will cause 597 * a bus error. 598 00000200 ABS 599 DEVBIT EQU 0200 bit indicates that communications 600 * to the PPU are passed through 601 * to the device 602 603 ********************************************************************************** 604 * The WRU responses from the devices have the following * 605 * format. These responses are acquired either by doing a * 606 * load from PPUCABLED or by doing a load from location 0 of * 607 * the device (proper channel and DEVBIT set in the physical * 608 * address). * 609 ********************************************************************************** 610 00000080 BYTE 611 DWRUTYPE EQU BITS 0:7 type of device 612 * 0 sez nothing cabled 00000001 ABS 613 DVCTBFD EQU 01 disk 00000002 ABS 614 DVCTLPC EQU 02 line printer controller 00000008 ABS 615 DVCTCOMM EQU 08 async. communications 00000009 ABS 616 DVCTMTC EQU 09 9 track mag tape 0000000A ABS 617 DVCTCTC EQU 0A cartridge tape controller 0000000B ABS 618 DVCTVTC EQU 0B video tape (exabyte) 0000000C ABS 619 DVCTSDC EQU 0C SCSI disk controller 620 00001080 BYTE 621 DWRUMREV EQU BITS 8:15 micro-code revision 622 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 57 (IODEFS) F 7 I/O definitions 00002080 BYTE 623 DWRUDD EQU BITS 16:23 device dependent status 624 625 * EQU BITS 24:31 undefined 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 58 (IODEFS) F 7 I/O definitions 627 628 ********************************************************************************** 629 * * 630 * Definitions for the BFD * 631 * Command codes and statuses for the Binary Formatted * 632 * Disk controller (BFD). * 633 * The disk controller can handle up to four units, * 634 * however, it allows unit number plugs to be zero through * 635 * seven. * 636 * The disk controller only handles transfers in terms of * 637 * whole blocks which are 1035 words long. The system * 638 * software treats the first 1024 words as data and the * 639 * remaining 11 words as a File Block Identifier (FBI). * 640 * However, the hardware does not see this distinction except * 641 * at the PPU who handles the double buffers used by the * 642 * operating system. * 643 * The disk controller partitions each block into 9 * 644 * sectors of 115 words and writes sync fields and CRCs for * 645 * each sector. In addition, the exclusive or of all of the * 646 * sectors is written to a tenth sector which is available to * 647 * the software for error correction. * 648 * The offset to the first word of each segment is: * 649 * segment first word * 650 * ------- ----- ---- * 651 * 1 0000 * 652 * 2 0073 * 653 * 3 00E6 * 654 * 4 0159 * 655 * 5 01CC * 656 * 6 023F * 657 * 7 02B2 * 658 * 8 0325 * 659 * 9 0398 * 660 * * 661 ********************************************************************************** 662 00000073 ABS 663 BFDSEGSIZE EQU 115 size of segments for error correction 0000000A ABS 664 BFDNUMSEGS EQU 0A number of segments incl. check seg 0000000A ABS 665 BFDCHKSEG EQU 0A check segment's number 00000008 ABS 666 BFDUNITS EQU 8 number of units on a BFD 667 668 * In the device WRU: 00002080 BYTE 669 BFDIDSTEST EQU BITS 16:23 self test status 670 * BIT 16 unknown nano-program counter 671 * BIT 17 timeout waiting for nano-processor 672 * BIT 18 soft pattern error 673 * BIT 19 buffer A error 674 * BIT 20 CRC generator error 675 * BIT 21 buffer B error 676 * BIT 22 error file error 677 * BIT 23 switchyard or data path flag error 678 00000210 ABS 679 BFDSEEK EQU 0210 R/W seek 680 * data word is seek address 00000100 BYTE 681 BFDSACYL EQU BITS 0:15 cylinder number 00002080 BYTE 682 BFDSAHEAD EQU BITS 16:23 head number 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 59 (IODEFS) F 7 I/O definitions 00003080 BYTE 683 BFDSASEC EQU BITS 24:31 sector number 684 00000220 ABS 685 BFDSS EQU 0220 R standard status 00000010 BYTE 686 BFDSSOLINT EQU BIT 0 device went off line interrupt request 687 * BIT 1 off line interrupt enabled 00000410 BYTE 688 BFDSSNSAFE EQU BIT 2 volume not safe (has been offline) 00000610 BYTE 689 BFDSSWPROT EQU BIT 3 write protect 00000810 BYTE 690 BFDSSRDY EQU BIT 4 ready 00000A10 BYTE 691 BFDSSONCYL EQU BIT 5 on cylinder 00000C10 BYTE 692 BFDSSSKERR EQU BIT 6 seek error 00000E10 BYTE 693 BFDSSFAULT EQU BIT 7 read/write unsafe (fault) 00001080 BYTE 694 BFDSSEBITS EQU BITS 8:15 seek end bits 695 * bit 8 = drive H 696 * bit 9 = drive G 697 * ... 698 * bit 15= drive A 00002030 BYTE 699 BFDSSDNUM EQU BITS 16:18 drive number responding 700 * 0=A, 1=B, etc. 701 * BIT 19 interrupt on seek end enabled 00002810 BYTE 702 BFDSSWCERR EQU BIT 20 word count error (FIFO not empty) 00002A10 BYTE 703 BFDSSLOSTD EQU BIT 21 lost data (PPU didn't keep up) 00002C10 BYTE 704 BFDSSIFPE EQU BIT 22 interface parity error 00002E10 BYTE 705 BFDSSRSPER EQU BIT 23 response error 706 * (multiple or no drive responding) 00003030 BYTE 707 BFDSSHDECD EQU BITS 24:26 error code for sector header 708 * EQU 0 no error 709 * EQU 1 header gap field non zero 710 * ( after any sector mark ) 711 * EQU 2 no header found 712 * ( after any sector mark ) 713 * EQU 3 bad header CRC 714 * ( only if header otherwise matches ) 715 * EQU 4 matching header not found 716 * ( no header on this track matches ) 00003610 BYTE 717 BFDSSCEOV EQU BIT 27 (read, write check): time code error 718 * (write check): compare error 719 * (write): overrun 00003840 BYTE 720 BFDSSERRCD EQU BITS 28:31 error code 721 * 0 = no error 722 * 1-0A error in single segment corresponding 723 * (0A is the check segment) 724 * 0B = bad command 725 * 0C = drive not ready/on cylinder, response error, 726 * no data found, gap non-zero 727 * 0D = hardware error 728 * 0E = time out 729 * 0F = (read, write check): multiple CRC 730 * errors or sector overrun, 731 * (write, format): drive write protected 732 00000230 ABS 733 BFDEF18 EQU 0230 R error file locations 1 - 8 734 * each segment has 4 bits (WOCT) 735 * where: W => write check error 736 * O => sector over-run 737 * C => segment CRC error 738 * T => segment time code error 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 60 (IODEFS) F 7 I/O definitions 00000240 ABS 739 BFDEF9A EQU 0240 R error file locations 9 - 0A, and other stuff 00001080 BYTE 740 BFDREADY EQU BITS 8:15 ready bits for units 7..0 00002080 BYTE 741 BFDPRESENT EQU BITS 16:23 present bits for units 7..0 00000250 ABS 742 BFDINTERNS EQU 0250 R internal status 743 00000200 ABS 744 BFDSELECT EQU 0200 W select 745 * data word contains unit number 00000220 ABS 746 BFDFUNC EQU 0220 W function 747 * data words 00000011 ABS 748 BFDFNCLFLT EQU 011 reset ( clear fault ) 00000012 ABS 749 BFDFNZERO EQU 012 restore ( rezero heads ) 00000014 ABS 750 BFDFNSOLNT EQU 014 enable off line interrupts 00000018 ABS 751 BFDFNUOLNT EQU 018 disable off line interrupts 00000020 ABS 752 BFDFNSAFE EQU 020 clear volume not safe status 00000021 ABS 753 BFDFNSISE EQU 021 select int on seek end 00000022 ABS 754 BFDFNUISE EQU 022 unselect int on seek end 00000024 ABS 755 BFDFNENINT EQU 024 enable interrupts 00000028 ABS 756 BFDFNDSINT EQU 028 disable interrupts 00000041 ABS 757 BFDFNOFSF EQU 041 select offset forward 00000042 ABS 758 BFDFNOFSB EQU 042 select offset reverse 00000044 ABS 759 BFDFNCLOFS EQU 044 clear offset 00000048 ABS 760 BFDFNRESET EQU 048 reset controller 00000081 ABS 761 BFDFNDSE EQU 081 select data strobe early 00000082 ABS 762 BFDFNDSL EQU 082 select data strobe late 00000084 ABS 763 BFDFNRDS EQU 084 reset data strobe 764 00000230 ABS 765 BFDREAD EQU 0230 W read 766 * reads data (1035 words) if 0 stored 767 * reads check (115 words+time code) if 1 stored 768 * read header if 2 stored 769 * read data with hard sectoring if 3 stored 00000240 ABS 770 BFDWRITE EQU 0240 W write data 771 * data word = time code word to be written 00000250 ABS 772 BFDWRCH EQU 0250 W write check 773 * data word = time code expected 00000260 ABS 774 BFDFORMAT EQU 0260 W write format F0783C1E ABS 775 BFDFORMATW EQU 0F0783C1E data word for format operation 776 00000008 ABS 777 BFDSELECTB EQU 0008 select enable 778 * If this bit is set, the right 779 * three bits of this commands 780 * address are used to select a 781 * drive. This is the unit number 782 * which is not the same as drive number. 783 * unit number is the plug on the front 784 * of each drive, drive number is the 785 * cable position on the controller. 786 00003010 BYTE 787 BFDINTBIT EQU BIT 24 bit in store address indicates 788 * interrupt on completion 789 790 ********************************************************************************** 791 * * 792 * Definitions for the BTI Kludge Board * 793 * * 794 * Each disk drive has a BTI-installed kludge board in it * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 61 (IODEFS) F 7 I/O definitions 795 * that has two features: it contains a 1K prom containing * 796 * the drive's serial number, and the kludge board can * 797 * retract the heads from the disk under software control. * 798 * * 799 * The board is activated by doing a SEEK specifying * 800 * BFDMAGICHD as the head number. After this seek, the * 801 * Write-Protect status bit does not reflect the actual * 802 * Write-Protectedness of the disk, but is set to a bit * 803 * out of the on-board PROM corresponding to the selected * 804 * cylinder number. Additionally if the cylinder number * 805 * is BFDUNLDCYL, the heads are retracted from the disk. * 806 * * 807 ********************************************************************************** 808 000000FF ABS 809 BFDMAGICHD EQU 255 activates kludge board 000003FF ABS 810 BFDUNLDCYL EQU 1023 along with BFDMAGICHD, retracts disk heads 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 62 (IODEFS) F 7 I/O definitions 812 813 ********************************************************************************** 814 * * 815 * CIA (communications interface adapter) command codes * 816 * * 817 * The CIA interrupts the system about 9 times a second * 818 * (or whatever is set in TICKTIME) and each of those times * 819 * the system reads from the CIA to get any characters that * 820 * came in during that period. The system then writes any * 821 * characters for terminals that are outputting. * 822 * Reads from the CIA consist of an entry for each * 823 * terminal that either has had its status change, a change in * 824 * the number of characters in the output buffer, or has * 825 * characters in its input buffer. If a port is idle then * 826 * nothing is read for that port. If all of the ports on a * 827 * CIA are idle, the reads are only two characters long -- the * 828 * two terminating FF's. If the read buffer that the system * 829 * gave to the CIA is too small to hold all of the characters * 830 * that have been received then the terminating characters are * 831 * FE's and the system must do another read to get the rest of * 832 * the data. * 833 * The writes to the CIA consist of characters and * 834 * commands for any port that is outputting. The CIA has a * 835 * limited output buffer for each port (256 chars) so the * 836 * amount of output is tempered by the space left in the CIA * 837 * output buffer for that port (remaining output buffer count * 838 * is returned in the read). * 839 * Commands that go to a port can be mixed into the * 840 * character output stream and the commands will be done when * 841 * their turn to output occurs. Commands take up space in the * 842 * port's output buffer so their size must be accounted for. * 843 * There is a special type of read, called the Delayed * 844 * Read, that reads data from the CIA and terminates the read * 845 * when the memory buffer is full or the TICKTIME has passed. * 846 * The advantage of this is that one interrupt is saved for * 847 * each read. That is, using the regular read, the sequence * 848 * is: * 849 * 1) TICK interrupt * 850 * 2) Set up read * 851 * 3) Read end of operation interrupt * 852 * 4) Process read information * 853 * 5) Generate write information * 854 * 6) Set up write * 855 * 7) Write end of operation interrupt * 856 * 8) Return from interrupt to wait for next TICK * 857 * Using the delayed read, the sequence is: * 858 * 1) Delayed read end of operation interrupt * 859 * 2) Process read information * 860 * 3) Generate write information * 861 * 4) Set up write * 862 * 5) Write end of operation interrupt * 863 * 6) Set up delayed read * 864 * As you can see, the delayed read saves one interrupt * 865 * per TICK time and at about 9 tick interrupts a second that * 866 * is a big saving. * 867 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 63 (IODEFS) F 7 I/O definitions 868 * Notes on parity checking. The normal mode of the CIA * 869 * is to receive and transmit all 8 data bits. However, * 870 * parity generation may be selected via the secondary port * 871 * status selections in microcode revisions 7 and up. The * 872 * generation options are: set eighth bit to 1, odd parity, * 873 * and even parity. The generated bit replaces the data bit * 874 * supplied from the buffer. * 875 * If parity is being generated, it may optionally be * 876 * checked. If the received parity matches the proper parity * 877 * (as determined by the transmit options) then the eighth bit * 878 * is set to zero in the receive buffer. An error causes the * 879 * bit to be set to one and the 'framing error' bit in the * 880 * status is set. * 881 * * 882 ********************************************************************************** 883 00000008 ABS 884 CIABOARDS EQU 8 number of boards in CIA 00000008 ABS 885 CIAPPBRD EQU 8 number of ports on a board 00003430 BYTE 886 CIABRDF EQU BITS 26:28 board field 00000100 ABS 887 CIATRMBUFL EQU 256 number of characters in CIA's port buffer 888 00000201 ABS 889 CIAWHYINT EQU 0201 gets reason for interrupt and 890 * other info (status word 1) 00003E10 BYTE 891 CIATICK EQU BIT 31 on if timer tick 00003C10 BYTE 892 CIAFULL EQU BIT 30 on if some buffer more than half full 00003A10 BYTE 893 CIAEOP EQU BIT 29 on if end of operation 00003810 BYTE 894 CIAAEOP EQU BIT 28 on if abnormal EOP 00003610 BYTE 895 CIAERR EQU BIT 27 on if error - info given by CIAERROR 00000100 BYTE 896 CIACHARS EQU BITS 0:15 count of characters in input buffer 897 00000201 ABS 898 CIAINTACK EQU 0201 acknowledge interrupt processing 899 00000202 ABS 900 CIAINTMASK EQU 0202 get/set interrupt mask 901 * same bits as in CIAWHYINT 902 00000203 ABS 903 CIAERROR EQU 0203 get error log information 904 * format - ccnnnnpp 905 * cc = code for first error 906 * 011 - PPU handshake time out 907 * 012 - PPU data parity error 908 * 013 - PPU "head butt" 909 * 021 - receive fifo overflow 910 * 022 - transmit fifo overflow 911 * 031 - bad command 912 * 032 - CS path confused 913 * 033 - bad status request 914 * 041 - char in from non-existant port 915 * 081 - input buffer overflow 916 * 082 - output buffer overflow 917 * 083 - input buffer parity error 918 * 084 - output buffer parity error 919 * nnnn = count of errors 920 * pp = port number of first error 921 00000204 ABS 922 CIASREAD EQU 0204 store buffer size, starts transfer to memory 923 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 64 (IODEFS) F 7 I/O definitions 00000205 ABS 924 CIASWRITE EQU 0205 store buffer size, starts transfer from memory 925 00000206 ABS 926 CIASETTICK EQU 0206 get/set number of CIA ticks between interrupts 927 * CIA tick = 2.2 ms 0000000A ABS 928 CIATPS EQU 10 ticks per second 000001C6 ABS 929 CIATICKPSEC EQU 454 CIA ticks per second (1000/2.2) 0000002D ABS 930 CIATICKTIME EQU CIATICKPSEC/CIATPS number of CIA ticks between interrupts 931 00000207 ABS 932 CIASDREAD EQU 0207 store buffer size, starts delayed transfer to memory 933 00000080 BYTE 934 CIASRWACK EQU BITS 0:7 interrupt acknowledge 00001080 BYTE 935 CIASRWMSK EQU BITS 8:15 new Int mask 00002100 BYTE 936 CIASRWCNT EQU BITS 16:31 number of bytes in transfer 937 00000208 ABS 938 CIAVERSION EQU 0208 get version code "VVYYMMLL" 939 00000209 ABS 940 CIAMODE EQU 0209 set CIA operation mode 00000000 ABS 941 CIAMODEN EQU 0 normal operation mode 00000001 ABS 942 CIAMODET EQU 1 CIA test mode (cntl-B,etc) 00000002 ABS 943 CIAMODEM EQU 2 message "echo" mode 944 00000280 ABS 945 CIAPORT EQU 0280 get/set port info, indexed by port 946 00000080 BYTE 947 CIAPSTAT EQU BITS 0:7 on read, status of port, format is PORTxxxx 00001080 BYTE 948 CIAPOCH EQU BITS 8:15 on read, output space available (chars) 00002080 BYTE 949 CIAPICH EQU BITS 16:23 on read, number of input chars waiting 00003C10 BYTE 950 CIAPWAIT EQU BIT 30 on read, bit on if waiting for XON 00003E10 BYTE 951 CIAPMODM EQU BIT 31 on read, bit on if modem configuration 952 * , bit off if hardwire configuration 953 954 * EQU BITS 0:7 on write, port control or secondary port control 955 * (see CIAPSTS and *) 956 * PORT CONTROL 957 * for modem configuration 958 * EQU 008 set RTS 959 * EQU 010 set receive enable 960 * EQU 020 set DTR 961 * for hardwire configuration 962 * EQU 008 set CTS 963 * EQU 010 set receive enable 964 * EQU 020 set DSR 965 * EQU 040 set CD 966 * EQU 080 set RI 967 * for both 968 * EQU 001 two stop bits 969 * EQU 002 data 970 * EQU 004 break 971 * EQU 006 dwell 972 * SECONDARY PORT CONTROL 973 * EQU 001 two stop bits 974 * EQU 000 no parity 975 * EQU 002 set parity bit 976 * EQU 004 generate even parity 977 * EQU 006 generate odd parity 978 * EQU 008 check received parity (only if parity selected) 979 * EQU 010 set receive enable 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 65 (IODEFS) F 7 I/O definitions 980 * EQU 020 set break output holdoff processing 981 * EQU 040 set X-OFF processing 982 * EQU 080 set CTS processing 983 * EQU BIT 9 on write, do secondary port control 00001410 BYTE 984 CIAPECHO EQU BIT 10 on write, 1=echo on, 0=echo off 00001610 BYTE 985 CIAPSTS EQU BIT 11 on write, do port control 00001810 BYTE 986 CIAPFI EQU BIT 12 on write, flush input queue 00001A10 BYTE 987 CIAPFO EQU BIT 13 on write, flush output queue 00001C10 BYTE 988 CIAPSIB EQU BIT 14 on write, set input baud rate 00001E10 BYTE 989 CIAPSOB EQU BIT 15 on write, set output baud rate 00002100 BYTE 990 CIAPBAUD EQU BITS 16:31 on write, rate parameter 991 992 ********************************************************************************** 993 * The rough format of the input buffer elements is... * 994 * For ports with no status change. * 995 * Char 0 = 000 + port number * 996 * Char 1 = amount of space in output buffer * 997 * Char 2 = count of input characters transmitted with this read * 998 * Char 3... = the characters counted by Char 2. * 999 * For ports with a status change. * 1000 * Char 0 = 040 + port number * 1001 * Char 1 = amount of space in output buffer * 1002 * Char 2 = current status * 1003 * Char 3 = count of input characters transmitted with this read * 1004 * Char 4... = the characters counted by Char 3. * 1005 * For the end of the input buffer. * 1006 * Char 0 = 0FF (iff all terminals got a chance) * 1007 * = 0FE (iff buffer filled up first) * 1008 * Char 1 = * 1009 * * 1010 ********************************************************************************** 1011 1012 * In the port number the following bits appear 00003010 BYTE 1013 PORTLAST EQU BIT 24 the is the end of input flag 00003210 BYTE 1014 PORTSTAT EQU BIT 25 port status present 1015 * 1016 * the bits in the status character are: 00003010 BYTE 1017 PORTBOF EQU BIT 24 not input buffer overflow 00003210 BYTE 1018 PORTFFE EQU BIT 25 first framing error - cleared by read 00003410 BYTE 1019 PORTFBRK EQU BIT 26 first break - cleared by read 00003610 BYTE 1020 PORTBRK EQU BIT 27 break or framing error in progress 00003810 BYTE 1021 PORTRI EQU BIT 28 ring indicator on 00003A10 BYTE 1022 PORTCD EQU BIT 29 carrier detect on 00003C10 BYTE 1023 PORTDSR EQU BIT 30 data set ready on/data terminal ready 00003E10 BYTE 1024 PORTCS EQU BIT 31 clear to send on/request to send 1025 1026 ********************************************************************************** 1027 * * 1028 * The format for the output buffer is: * 1029 * For character output. * 1030 * Char 0 = 000 + port number * 1031 * Char 1 = count of output characters transmitted with this * 1032 * write (must be less than 128) * 1033 * Char 2... = the characters counted by Char 1. * 1034 * For command output. * 1035 * Char 0 = 000 + port number * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 66 (IODEFS) F 7 I/O definitions 1036 * Char 1 = Command code (always >= 080) * 1037 * Char 2.. = (optional parameters for the command) * 1038 * Note that we cleverly avoid putting out more than 128 * 1039 * characters in one element. Each TCQ that we copy into the * 1040 * CIA output buffer gets its own port number and output * 1041 * count. We limit the maximum size of the TCQs to a size * 1042 * that will hold less than 128 characters. * 1043 * * 1044 * Both characters and commands may be sent to the same * 1045 * port in one write as long as the output buffer has room. * 1046 * Commands are queued in the output buffer except for those * 1047 * marked 'done when received'. * 1048 * * 1049 ********************************************************************************** 1050 1051 * Command codes are: 00000081 ABS 1052 PORTCIRATE EQU 081 set input baud rate (done in stream) 00000082 ABS 1053 PORTCORATE EQU 082 set output baud rate (done in stream) 1054 * the above are followed by 2 characters holding the 1055 * rate constant = -(19200*3)/baud 00000083 ABS 1056 PORTCSTAT EQU 083 set port status (done in stream) 00003010 BYTE 1057 PORTSRI EQU BIT 24 ring indicator 00003210 BYTE 1058 PORTSCD EQU BIT 25 carrier detect 00003410 BYTE 1059 PORTSDTR EQU BIT 26 turn on data terminal ready/data set ready 00003810 BYTE 1060 PORTSRTS EQU BIT 28 turn on request to send/clear to send 1061 00000084 ABS 1062 PORTFLUSHO EQU 084 flush output queue (done when received) 1063 00000085 ABS 1064 PORTFLUSHI EQU 085 flush input queue (done when received) 1065 00000086 ABS 1066 PORTDWELL EQU 086 followed by 1 char giving count (done in stream) 1067 * of dwell times ( in character times ) 00000087 ABS 1068 PORTBREAK EQU 087 followed by 1 char giving count (done in stream) 1069 * of break times ( in character times ) 00000088 ABS 1070 PORTECHOON EQU 088 CIA echo on (done when received) 1071 00000089 ABS 1072 PORTECHOOF EQU 089 CIA port echo off (done when received) 1073 0000008A ABS 1074 PORTWRITIN EQU 08A write into port's input buffer (done when received) 1075 0000008B ABS 1076 PORTALWRIT EQU 08B write into all port's input buffers (done when received) 1077 0000008C ABS 1078 PORTCLRAIN EQU 08C clear all port's input buffers (done when received) 1079 0000008D ABS 1080 PORTCSTAT2 EQU 08D set port secondary status (done in stream) 00003010 BYTE 1081 PORTSCTS EQU BIT 24 enable clear to send processing 00003210 BYTE 1082 PORTSXOF EQU BIT 25 enable XON/XOFF processing (output) 00003410 BYTE 1083 PORTSBRK EQU BIT 26 enable no transmit when break (output) 00003610 BYTE 1084 PORTSRDE EQU BIT 27 enable (input) receive data enable (input) 00003810 BYTE 1085 PORTCHKPAR EQU BIT 28 check port's incoming character's parity 1086 * Currently parity checking is not supported by the OS. 00003A20 BYTE 1087 PORTPARITY EQU BITS 29:30 parity type for this port 1088 * If a parity type is specified that parity will be generated by 1089 * the comm. If parity checking is enabled PORTPARITY is what is 1090 * checked for. 00000000 ABS 1091 PORTNOPAR EQU 0 no parity generated (or checked) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 67 (IODEFS) F 7 I/O definitions 00000001 ABS 1092 PORTHIBIT EQU 1 generate high bit on parity 00000002 ABS 1093 PORTEVENP EQU 2 generate even parity 00000003 ABS 1094 PORTODDP EQU 3 generate odd parity 00003E10 BYTE 1095 PORTSSTOP2 EQU BIT 31 enable two stop bits (output) 1096 0000008E ABS 1097 PORTCRESET EQU 08E do a port reset (done in stream) 00003610 BYTE 1098 PORTCRFBR EQU BIT 27 force buffer remaining return 00003810 BYTE 1099 PORTCRFS EQU BIT 28 force status return 00003A10 BYTE 1100 PORTCRCXON EQU BIT 29 clear XON wait 00003C10 BYTE 1101 PORTCRFO EQU BIT 30 flush output buffer 00003E10 BYTE 1102 PORTCRFI EQU BIT 31 flush input buffer 0000001F ABS 1103 PORTCRALL EQU 1*PORTCRFI+1*PORTCRFO+1*PORTCRCXON+1*PORTCRFS+1*PORTCRFBR 00000018 ABS 1104 PORTCRINIT EQU 1*PORTCRFBR+1*PORTCRFS port initializing parameters 1105 0000008F ABS 1106 PORTCZAP EQU 08F port reset (done when received) 1107 * Format identical to PORTCRESET 1108 1109 * The following are pseudo-commands. We process these in the 1110 * comm driver, but they do not get sent to the hardware. 00000090 ABS 1111 PORTPCINIT EQU 090 initialize port's interface state 1112 * If an input error occurs we link an element into the input TCQ chain 1113 * with this command code and the parameter is the error code. 00000091 ABS 1114 PORTIERR EQU 091 input error 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 68 (IODEFS) F 7 I/O definitions 1116 1117 ********************************************************************************** 1118 * * 1119 * 9 track magnetic tape * 1120 * The tape controller may have up to 4 units. Each * 1121 * unit may be an 800 NRZI unit or a 1600 PE unit or switch * 1122 * selectable between these two standards. Normal * 1123 * inter-record gap is .6 inches. * 1124 * * 1125 * Cartridge Tape * 1126 * The cartridge tape controller may have up to 4 units. * 1127 * They behave very much like conventional magnetic tape, * 1128 * except that any one of 4 tracks may be selected for bit * 1129 * serial recording. Density is 6400 BPI at 30 IPS and the * 1130 * normal tape cartridge has 300 ft. of tape in it. Normal * 1131 * inter-record gap is 1.3 inches. The tape always writes * 1132 * forward, so it must be rewound after every track. * 1133 * 450 ft. and 555 ft. tape cartridges are also * 1134 * available. A possible future change is a 7 track drive, * 1135 * where the extra three tracks run backward between the * 1136 * normal four. * 1137 * * 1138 * Video Tape * 1139 * The video tape controller may have up to 4 units. * 1140 * They behave in most respects like 9 track tape. A notable * 1141 * exception is in speed. While the data transfer rates are * 1142 * quite respectable, the rewind and wfm operations can be * 1143 * exceedingly tedious. * 1144 * * 1145 * Where differences occur between the various tape devices * 1146 * the CT status meaning is enclosed in [], the VT status * 1147 * differences are inclosed in {} and the SCSI MT differences * 1148 * are enclosed in <>. * 1149 * * 1150 ********************************************************************************** 1151 00000004 ABS 1152 NMTPUNITS EQU 4 number of units that can go on a controller 1153 0000C000 ABS 1154 MTDIOSIZE EQU 12*CPP maximum size for records on tape. 1155 * We don't allow any longer records since 1156 * the MT is too slow to allow a user to 1157 * lock up more memory than this. 1158 000047F8 ABS 1159 CTDIOSIZE EQU ((9*CPP)/2)-(2*CPW) maximum size for records on cartridge tape. 1160 * (Four-and-a-half pages minus two words.) 1161 * This number may not be any larger without 1162 * compromising the security of 4000/5000/6000 1163 * tape backups since they are not encrypted. 1164 * For public consumption, say that the CT is 1165 * too slow to allow a user to lock up more 1166 * memory than this. 1167 0000C000 ABS 1168 VTDIOSIZE EQU 12*CPP maximum size for records on tape. 1169 * We don't allow any longer records since 1170 * the VT is too slow to allow a user to 1171 * lock up more memory than this. 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 69 (IODEFS) F 7 I/O definitions 1172 1173 * In the device WRU: 00002080 BYTE 1174 MTIDSTEST EQU BITS 16:23 self-test results, 0 = ok 1175 * BITS 24:31 undefined 1176 * In the device WRU for VT 1177 * BITS 16:19 self test error code 1178 * 1 PPU bus error. Byte sent by Z80 does not equal byte 1179 * found on PPU bus. Bad bit(s) on PPU bus or SCSI HA. 1180 * 2 PPU timeout. PPU did not acknowledge byte sent by 1181 * SCSI HA or PPU failed to send an expected byte. 1182 * 3 PPU collision. PPU over-rides SCSI HA trying to send 1183 * a byte and sends a byte of its own. 1184 * 4 PPU BCC error. Block check character wrong for PPU 1185 * string received. 1186 * 5 PPU NACK. PPU nacked string received from SCSI HA. 1187 * Bad first byte or parity error. 1188 * 6 PPU command error. Unrecognized PPU command received. 1189 * 7 SCSI bus error. Byte sent by Z80 to SCSI target did 1190 * not match byte found on SCSI bus. 1191 * 8 SCSI bus empty. No targets found on SCSI bus. Note: 1192 * a target does not have to be ready to be found. 1193 * 9 SCSI timeout. SCSI target did not accept byte sent. 1194 * A SCSI bus parity error. Parity error in byte received 1195 * from SCSI target. 1196 * B Lost Arbitration. SCSI HA lost arbitration trying to 1197 * select a SCSI target. Another SCSI ID bit was on bus. 1198 * C No select. SCSI target did not select. 1199 * D SCSI bus not free. While trying to select a SCSI target 1200 * the SCSI bus was found not free. 1201 * E SCSI phase error. SCSI target did not change phases 1202 * properly during communications with SCSI HA. 1203 00000210 ABS 1204 MTLDSTAT EQU 0210 fetch primary status 00000010 BYTE 1205 MTSTDSC EQU BIT 0 drive state change 00000210 BYTE 1206 MTSTSCIEN EQU BIT 1 interrupt on state change enabled 00000410 BYTE 1207 MTSTANER EQU BIT 2 any error 1208 * BIT 3 unused [unused] 1209 * BIT 3 {buffer parity error} 1210 * BIT 3 <1 indicates a SCSI 9-track> 1211 1212 * BITS 4:5 unused 1213 * BITS 4:5 [track number] 1214 * BIT 4 {media error} 1215 * BIT 5 {tape motion error} 1216 * BITS 6:7 unit number returned 1217 00001010 BYTE 1218 MTSTEOF EQU BIT 8 EOF read 00001220 BYTE 1219 MTSTTMD EQU BITS 9:10 direction of last tape motion 1220 * EQU 0 not moved 00000001 ABS 1221 MTSTTMFW EQU 1 forward 00000002 ABS 1222 MTSTTMBK EQU 2 backward 00000003 ABS 1223 MTSTTMLOST EQU 3 lost 00001210 BYTE 1224 MTSTTMBKB EQU BIT 9 on if backward (or lost) 00001410 BYTE 1225 MTSTTMFWB EQU BIT 10 on if forward (or lost) 00001650 BYTE 1226 MTSTERSTAT EQU BITS 11:15 fatal error statuses 1227 * 00 no error 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 70 (IODEFS) F 7 I/O definitions 1228 * Error codes returned by MT (Rev 5 u-code) 1229 * 01 multi-track (hard) error reading pe data 1230 * 02 vertical parity error reading pe data 1231 * 03 vertical parity error reading nrzi data 1232 * 04 crc error reading nrzi data 1233 * 05 lrc error reading nrzi data 1234 * 06 no rdr while attempting to read data 1235 * 07 rate error while reading data 1236 * 08 rate error while writing data 1237 * 09 multi-track (hard) error writing pe data 1238 * 0A vertical parity error writing pe data 1239 * 0B vertical parity error writing nrzi data 1240 * 0C crc error writing nrzi data 1241 * 0D lrc error writing nrzi data 1242 * 0E bad check sum in string from PPU 1243 * 0F drive not ready for requested command 1244 * 010 bad (unrecognized) command 1245 * 011 illegal command with tape at bot/eot 1246 * 012 got more data after word count exhausted 1247 * 013 bad filemark read or written 1248 * 014 bad phase encoded id zone 1249 * 015 timeout: 80" of blank tape read 1250 * 016 got spurious NAK from PPU 1251 * 017 got bad first byte (not 96 or 62) 1252 * 018 data path parity error 1253 * 019 timed out PPU data path 1254 * Error codes returned by CT 1255 * 01 illegal drive 1256 * 02 illegal store 1257 * 03 illegal track 1258 * 04 illegal tape motion 1259 * 05 no go byte 1260 * 06 timeout during FF or rewind 1261 * 07 offline during FF or rewind or write gap 1262 * 08 load point hole late 1263 * 09 sync zone late 1264 * 0A IRG found when not expected 1265 * 0B dropout during write 1266 * 0C ID zone late 1267 * 0D leading ID zone bad 1268 * 0E word count CRC bad 1269 * 0F data CRC bad (MFM mode only) 1270 * 10 reverse word count check bad (GCR mode only) 1271 * 11 trailing ID zone bad 1272 * 12 trailing sync zone bad 1273 * 13 GCR byte count not match blockette number 1274 * 14 GCR record not recoverable / write error 1275 * 15 GCR read not all right but recoverable 1276 * 16 GCR record not recoverable 1277 * 17 EOT caused some other error to be detected 1278 * 18 BOT caused some other error to be detected 1279 * Error codes returned by VT (* = unit goes not ready) 1280 * 01 not used (hardware error) 1281 * 02 * unit not ready. 1282 * 03 non-recovered error due to flaw in tape or: 1283 * with EOT set, reached EOT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 71 (IODEFS) F 7 I/O definitions 1284 * with BOT set, reached BOT 1285 * 04 tape unit detected non-recoverable hardware 1286 * error during command or self test. 1287 * 05 tape received illegal request 1288 * 06 * unit attention. unit received a RESET or 1289 * cartridge was changed. 1290 * 07 cartridge has write protect set. 1291 * 08 blank check. blank tape encountered while reading 1292 * 09 tape mark detect error 1293 * 0A * copy aborted (not used) 1294 * 0B command aborted 1295 * 0C * not used 1296 * 0D volume overflow. Physical EOT reached on a write. 1297 * 0E * not used 1298 * 0F * reserved 1299 * 10 communications error 1300 * 11 * tape not present 1301 * 12 * power failure 1302 * 13 unused 1303 * 14 bad data received from tape unit after issuing 1304 * a request sense command. 1305 * Error codes returned by SCSI 9 track (* = unit goes not ready) 1306 * 01 recovered error 1307 * 02 * unit not ready. 1308 * 03 non-recovered error due to flaw in tape or: 1309 * with EOT set, reached EOT 1310 * with BOT set, reached BOT 1311 * 04 tape unit detected non-recoverable hardware 1312 * error during command or self test. 1313 * 05 tape received illegal request 1314 * 06 * unit attention. unit received a RESET or 1315 * cartridge was changed. 1316 * 07 cartridge has write protect set. 1317 * 08 blank check. blank tape encountered while reading 1318 * 09 vendor unique 1319 * 0A * copy aborted (not used) 1320 * 0B command aborted 1321 * 0C * not used 1322 * 0D volume overflow. Physical EOT reached on a write. 1323 * 0E * miscompare (not used) 1324 * 0F * reserved 1325 * 10 communications error 1326 * 11 * tape not present 1327 * 12 * power failure 1328 * 13 unused 1329 * 14 bad data received from tape unit after issuing 1330 * a request sense command. 1331 * 1332 * EQU BIT 16 unused 1333 * EQU BIT 17 WC < 0 1334 * EQU BIT 18 4 naks from PPU 1335 * EQU BIT 19 passed EOT on last command 1336 * EQU BIT 20 word count register = zero 1337 * EQU BIT 21 unused 1338 * EQU BIT 22 PPU interrupted our send 1339 * EQU BIT 23 0 sez completion interrupt, 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 72 (IODEFS) F 7 I/O definitions 1340 * 1 sez drive state change 1341 * 00002010 BYTE 1342 MTSTDPPE EQU BIT 16 [parity error on data from PPU in write] 1343 * EQU BIT 17 [overflow error] 1344 * EQU BIT 18 [underflow error] 1345 * EQU BIT 19 [WDL error] 1346 * EQU BIT 20 [RDL error] 1347 * EQU BIT 21 [unused] 1348 * EQU BIT 22 [good byte count in secondary status] 1349 * EQU BIT 23 [high for GCR, low for MFM] 1350 * 1351 * EQU BIT 16 {filemark error} 1352 * EQU BIT 17 {underrun} 1353 * EQU BIT 18 {write error 1} 1354 * EQU BIT 19 {servo system error} 1355 * EQU BITS 16:19 {if error code = #10 Z80 error code placed 1356 * here. (see selftest error codes above)} 1357 * EQU BIT 20 {word count reg = 0} 1358 * EQU BIT 21 {unused} 1359 * EQU BIT 22 {unused} 1360 * EQU BIT 23 {0 sez completion interrupt} 1361 * {1 sez drive changed state} 1362 * 1363 * EQU BITS 16:19 1365 * EQU BITS 16:23 00003080 BYTE 1366 MTSTDRVST EQU BITS 24:31 drive status 1367 * These bits are the drive status and are available both 1368 * here and for all four drives at once (each in its byte). 00003010 BYTE 1369 MTDST9 EQU BIT 24 9 track tape 1370 * EQU BIT 24 {unused} [hard EOT] 00003210 BYTE 1371 MTDSTEOT EQU BIT 25 end of tape 00003410 BYTE 1372 MTDSTRDY EQU BIT 26 drive ready [not rewinding] 00003610 BYTE 1373 MTDSTBOT EQU BIT 27 beginning of tape 1374 00003810 BYTE 1375 MTDSTWPRT EQU BIT 28 write protect 00003A10 BYTE 1376 MTDSTBREW EQU BIT 29 busy rewinding 00003A10 BYTE 1377 MTDSTTPK EQU BIT 29 [tape position known] 00003C10 BYTE 1378 MTDSTPRS EQU BIT 30 drive is present 00003E10 BYTE 1379 MTDSTDEN EQU BIT 31 density high [hard BOT] 1380 00000220 ABS 1381 MTLD2STAT EQU 0220 loads secondary status 1382 * BIT 0 parity type {unused} 1383 * BIT 1 density {unused} 1384 * BITS 16:31 word count 1385 00000240 ABS 1386 MTLDDRVST EQU 0240 load drive statuses 1387 * ww xx yy zz 1388 * ww drive status of unit 0 1389 * xx drive status of unit 1 1390 * yy drive status of unit 2 1391 * zz drive status of unit 3 1392 1393 * BIT 28 contains 1 if to select new drive 1394 * during a store. 1395 * BITS 30:31 contains new drive number 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 73 (IODEFS) F 7 I/O definitions 1396 00000008 ABS 1397 MTSELECT EQU 008 add to any of the following stores for 1398 * unit select 00000080 ABS 1399 MTINTREQ EQU 080 add to any of the following for 1400 * interrupt on completion 00000200 ABS 1401 MTCMRESET EQU 0200 reset 1402 00000230 ABS 1403 MTCMFUNC EQU 0230 issue function 00000001 ABS 1404 MTFNCYCLE EQU 0001 cycle 00000002 ABS 1405 MTFNREWIND EQU 0002 rewind 00000004 ABS 1406 MTFNSEFB EQU 0004 search end file backward 00000005 ABS 1407 MTFNSEFF EQU 0005 search end file forward 00000006 ABS 1408 MTFNBKSP EQU 0006 backspace 00000007 ABS 1409 MTFNFWSP EQU 0007 forward space 00000008 ABS 1410 MTFNDSCIOF EQU 0008 drive state change interrupt disable 00000009 ABS 1411 MTFNDSCION EQU 0009 drive state change interrupt enable 0000000A ABS 1412 MTFNOFFL EQU 000A rewind and set off line 0000000C ABS 1413 MTFNDENSEL EQU 000C density select, this code + density 00000010 ABS 1414 MTFNTRSEL EQU 0010 [track select, this code + track number] 00000018 ABS 1415 MTFNWFM EQU 0018 write file mark 1416 00000240 ABS 1417 MTCMREAD EQU 0240 read 1418 00000250 ABS 1419 MTCMWRITE EQU 0250 write 1420 00000260 ABS 1421 MTCMERASE EQU 0260 erase 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 74 (IODEFS) F 7 I/O definitions 1423 1424 ********************************************************************************** 1425 * * 1426 * LINE PRINTER. * 1427 * The line printer controller will drive one of several * 1428 * different types of line printers. It supports a virtual * 1429 * forms control unit and does all forms control character * 1430 * processing. It accepts one line at a time and handles the * 1431 * print of it -- it's not very difficult. * 1432 * * 1433 ********************************************************************************** 1434 00000080 ABS 1435 LPINT EQU 1*BIT 24 if on in address, enables interrupts 1436 1437 * In the device WRU: 00002080 BYTE 1438 LPWRUOPT EQU BITS 16:23 printer options selected 00003010 BYTE 1439 LPWRUPPUE EQU BIT 24 on if error on last PPU status 00003460 BYTE 1440 LPWRUITYP EQU BITS 26:31 printer interface type 1441 00000200 ABS 1442 LPNOP EQU 0200 W no operation 1443 00000201 ABS 1444 LPCLRCTL EQU 0201 W Clear control bits 00000202 ABS 1445 LPSETCTL EQU 0202 W Set control bits 1446 0000020C ABS 1447 LPLOADVFU EQU 020C W load vertical forms unit 1448 * (data = number of lines per page) 1449 00000210 ABS 1450 LPSKIP EQU 0210 W skip lines (data = number of lines) 1451 00000220 ABS 1452 LPSTATUS EQU 0220 R fetch current status 00000010 BYTE 1453 LPSTFAULT EQU BIT 0 line printer fault 00000210 BYTE 1454 LPSTOOP EQU BIT 1 out of paper 00000610 BYTE 1455 LPSTBUFE EQU BIT 3 on if buffer empty 00000840 BYTE 1456 LPSTERROR EQU BITS 4:7 error code 1457 * EQU 00 no error 1458 * BC EQU 01 bad command (unknown loc) 1459 * OF EQU 02 input overflow (write when buf full) 1460 * VOF EQU 03 too many lines for VFU 1461 * VFU0 EQU 04 zero lines in VVFU 1462 * DPOF EQU 05 data path overflow (too many bytes) 1463 * WRT0 EQU 06 zero-length write command 1464 * WRBAD EQU 07 write command while previous one in progress 1465 * DPUF EQU 08 data path underflow (too few bytes from PPU) 1466 * VFU1 EQU 09 first line of VVFU is not channel 1 1467 * DPPE EQU 0A data path parity error 1468 * MANY EQU 0F multiple errors have occurred 00001410 BYTE 1469 LPSTVFU EQU BIT 10 VFU enabled 00001610 BYTE 1470 LPSTPSKP EQU BIT 11 perforation skip enabled 00001840 BYTE 1471 LPSTUNIT EQU BITS 12:15 controller unit number (from dip switches) 00002410 BYTE 1472 LPSTREADY EQU BIT 18 line printer is ready 00002E10 BYTE 1473 LPSTBUFRDY EQU BIT 23 controller buffer ready for another line 00003010 BYTE 1474 LPSTIPRE EQU BIT 24 interrupt because of protocol error (see LPSTERROR) 00003410 BYTE 1475 LPSTILINE EQU BIT 26 interrupt because on/off line 00003610 BYTE 1476 LPSTBADWRT EQU BIT 27 interrupt because last write not successful 00003C10 BYTE 1477 LPSTIVFU EQU BIT 30 interrupt because load VVFU completed 00003E10 BYTE 1478 LPSTIRDY EQU BIT 31 interrupt because input buffer ready 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 75 (IODEFS) F 7 I/O definitions 1479 00000240 ABS 1480 LPWRITE EQU 0240 W write line (data described below) 00001E10 BYTE 1481 LPWRFORM EQU BIT 15 first character of line is forms control 00002C20 BYTE 1482 LPWRHDR EQU BITS 22:23 number of characters to ignore at beginning of line 00003080 BYTE 1483 LPWRLNTH EQU BITS 24:31 length of line (including header and forms chars) 13 INPUT DISKDEFS disk structure definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 76 (DISKDEFS) F 8 Disk Data Structures 4 00000000 5 CRANDALL LABEL to recapture all of this space 00000400 ABS 6 BLOCKSIZE EQU WPP size of the data areas on mass storage 0000000B ABS 7 FBILNTH EQU 11 file block identifier length 8 08000000 ABS 9 REVVOLUME EQU 008000000 volume format revision herein described 18000000 ABS 10 REVMNTVOL EQU 018000000 volume format revisions we can mount 10000000 ABS 11 REVVOLLRAF EQU 010000000 this bit indicates that the volume format 12 uses FDLRAF instead of FDRAFTYPE 00000000 ABS 13 REVBACKUP EQU 0 revision of backup format 14 15 ********************************************************************************** 16 * * 17 * MASS STORAGE ADDRESSES * 18 * * 19 * Each volume on a system is identified by a volume * 20 * number. This volume number is assigned when a pack is * 21 * mounted. * 22 * Data stored on volumes is organized into blocks * 23 * consisting of a page of data and a file block identifier * 24 * (qv). Volumes may only be accessed by reads and writes of * 25 * entire blocks. * 26 * Within a volume, each file block has a unique address. * 27 * These addresses always start at zero and increment by one * 28 * for each block. These addresses are used by the MS driver * 29 * to calculate the physical location of the block, so some * 30 * addresses may represent bad tracks. These blocks do not * 31 * have spares assigned, rather, they are identified in a list * 32 * called BADTRAX and are never assigned. * 33 * The volume number and the block number are often * 34 * combined into a single word according to these definitions. * 35 * * 36 ********************************************************************************** 37 00001180 BYTE 38 MSBLKFIELD BITS (32-MSBLKLOG):31 block number field right justified 00000080 BYTE 39 VOLFIELD BITS 0:(31-MSBLKLOG) volume number field 40 41 ********************************************************************************** 42 * * 43 * Certain types of files, .CODEs, .RAFs, .SAFs all use * 44 * the same addressing convention to specify a certain * 45 * location. This convention is a block number followed by a * 46 * byte offset. In the case of .RAFs the block number is * 47 * split into a major and minor block index. The following * 48 * definitions describe the above. * 49 * * 50 ********************************************************************************** 51 00000140 BYTE 52 PGNUMFLD EQU BITS 0:19 page number field 000000A0 BYTE 53 PGNUMFLDMAJ EQU BITS 0:9 major index within the page field 000014A0 BYTE 54 PGNUMFLDMIN EQU BITS 10:19 minor index within the page field 000028C0 BYTE 55 BYTEDISP EQU BITS 20:31 byte displacement field 56 57 ********************************************************************************** 58 * * 59 * RAD40 PACK * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 77 (DISKDEFS) F 8 Disk Data Structures 60 * Six characters may be packed into 32 bits by using a * 61 * multiply-add technique with a radix of 40 decimal. * 62 * Identifiers (file names, account names, volume names, and * 63 * passwords) consist of two such words (12 characters). * 64 * Extensions (file name extensions, division/project * 65 * specifiers, and system names) consist of one such word. * 66 * Division/project are packed and a divide is required * 67 * to separate them. Since these numbers are unsigned, MODIF * 68 * must be used for the divide. In some code, the extra * 69 * register is not available (and the extra instructions are * 70 * undesirable) so we do the divide in two parts. First, the * 71 * power of 2 part is accomplished by a CBM or ZBM. Then the * 72 * remaining factors are gotten by a real divide that always * 73 * has positive operands. * 74 * The characters to be code converted for packing are: * 75 * char code (decimal) * 76 * ---- ---- * 77 * space 0 * 78 * 0-9 1-10 * 79 * A-Z 11-36 * 80 * a-z 11-36 * 81 * cntl A-Z 11-36 (allowed only in passwords) * 82 * ! 37 * 83 * & 38 * 84 * underscore 39 * 85 * Identifiers less than 'A ' are not allowed. * 86 * Identifiers greater than or equal to '!' are not allowed. * 87 * Embedded blanks are not allowed. A null file name followed * 88 * by an extension indicates a hardware type (e.g. .LP for a * 89 * line printer). * 90 * * 91 ********************************************************************************** 92 0000FA00 ABS 93 DVSNDISP EQU 40 POWER 3 to extract division field 00000170 BYTE 94 DVSNPART1 EQU BITS 0:(31-9) power of two part of DVSNDISP 0000007D ABS 95 DVSNPART2 EQU DVSNDISP/(2 POWER 9) the remaining factors 96 97 ********************************************************************************** 98 * * 99 * ACCOUNT NAME FORMAT * 100 * ACCOUNT STRUCTURE * 101 * The format of account names is: * 102 * . . * 103 * Each element is RAD packed and consists of characters * 104 * from the 40 character rad pack set. may not * 105 * begin with a digit. * 106 * is from 0 to twelve characters. * 107 * is 0 to 3 characters. (It must be 3 non- * 108 * blank characters if projects are to be specified). * 109 * is 0 to 3 characters. * 110 * * 111 * Certain accounts (many of these have null account * 112 * names) are assigned control functions. * 113 * * 114 * 1.) .!!! - BTI supplied library * 115 * 2.) SYSTEM.!!! - System software account * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 78 (DISKDEFS) F 8 Disk Data Structures 116 * 3.) OFFLINE.!!! - Maintenance account * 117 * 4.) MANAGER.!!! - Maintenance manager * 118 * 5.) .SYS - Owner supplied public library * 119 * 6.) xxx.SYS - Operator accounts * 120 * 7.) .&xxxxx - Proprietary account * 121 * 8.) .fff - Division library * 122 * 9.) .fffppp - Project library * 123 * 10.) MANAGER.SYS - System manager * 124 * 11.) MANAGER.fff - Division manager * 125 * 12.) MANAGER.fffppp - Project manager * 126 * * 127 ********************************************************************************** 128 129 ********************************************************************************** 130 * * 131 * DATE-TIME FORMAT * 132 * A system time value is a 44 bit integer representing * 133 * millisecond intervals from 0000 17 Nov, 1858. This choice * 134 * has been made to match the Julian day count commonly used * 135 * by astronomers. * 136 * The stored time is the time as provided by the system * 137 * clock. Any known clock errors are corrected in the system * 138 * clock by the delete/increment count commands. The clock * 139 * count is treated as if all days from the epoch were of * 140 * equal length. This means that leap seconds and the varying * 141 * second is ignored. The time as stored by the system will * 142 * always be universal time. Users may request the time with * 143 * time zone corrections applied and/or already unpacked into * 144 * year/month/day/time. * 145 * Many of the uses of the date do not require the * 146 * millisecond resolution provided by the entire 44 bit * 147 * quantity. The upper 32 bits of the date word (DATEHORD) * 148 * are used in these cases. The resolution of DATEHORD is * 149 * about 4 seconds. * 150 * Since the system date-time is used for file serial * 151 * numbers, backup and purge control, and the like, it is very * 152 * important that it be irreversable, and nearly correct. * 153 * When the operator specifies a correction, the software * 154 * applies it at a rate no faster than 1000 ppm. * 155 * Additionally, the software attempts to calculate the rate * 156 * error in the clock and will apply corrections for it up to * 157 * 35 ppm. * 158 * * 159 ********************************************************************************** 160 161 * For the use of the 64 bit date format 162 BASE R0 163 BSSB 20 unused 00082800 0 ZBM 164 DATEHORD BSSB 32 high order (4 second resolution) 165 BSSB 12 low order 166 DRCT 167 168 ********************************************************************************** 169 * * 170 * Definitions of various labels for quantities of time * 171 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 79 (DISKDEFS) F 8 Disk Data Structures 172 ********************************************************************************** 173 000003E8 ABS 174 MSECSS EQU 1000 milliseconds per second 0000EA60 ABS 175 MSECSM EQU 60*MSECSS milliseconds per minute 0036EE80 ABS 176 MSECSH EQU 60*MSECSM milliseconds per hour 05265C00 ABS 177 MSECSD EQU 24*MSECSH milliseconds per day 178 179 * Intervals for 32 bit time words (DATEHORD) 180 * Several users depend on truncation rather than rounding. 181 0000000E ABS 182 FOURSECSM EQU MSECSM/(2 POWER 12) 4.096 seconds per minute 0000036E ABS 183 FOURSECSH EQU MSECSH/(2 POWER 12) 4.096 seconds per hour 00005265 ABS 184 FOURSECSD EQU MSECSD/(2 POWER 12) 4.096 seconds per day 185 186 ********************************************************************************** 187 * * 188 * Definitions for the Non-Volatile Memory * 189 * The SSU has a non-volatile memory. The memory is * 190 * electronicly alterable by byte but retains information even * 191 * with no power. The original SSUs stored only 128 bytes. The * 192 * revised SSUs (rev 14 and later) store 2048 bytes. The memory * 193 * is read and written by byte. Since the write operation is * 194 * quite slow and a power fail during a write leaves the * 195 * location with random data, we must allow for such errors in * 196 * our processing of the data. We do this by storing some data * 197 * twice and having a flag that tells which to use. * 198 * Note that we define each of the 128 bytes in the NVM * 199 * by a BASE offset. This is because the SSU returns the byte * 200 * right justified in a whole word and stores the byte out of * 201 * the right character on a store. The definitions, * 202 * therefore, correspond to the word offsets that the system * 203 * must use. * 204 * * 205 ********************************************************************************** 206 00000080 ABS 207 NVMSIZE EQU 128 number of bytes in original (small) NVM 00000002 208 NVMBASE BASE 209 00000000 DISP 210 NVMRFPPW BSS 1 flag for remote front panel password 00000001 DISP 211 NVMRFPPW1 BSS 8 00000009 DISP 212 NVMRFPPW2 BSS 8 213 00000011 DISP 214 NVMLFPPW BSS 1 local front panel password 00000012 DISP 215 NVMLFPPW1 BSS 8 0000001A DISP 216 NVMLFPPW2 BSS 8 217 218 * The preceeding definitions are used by the SSU microcode 219 * as well as others. 220 221 * The PROMBOOT code uses the following password. For systems 222 * without removable mass storage, the system installation or 223 * recovery from serious problems involves loading the system 224 * software from mag tape (9 track or Cartridge). In order to 225 * protect our proprietary interests, these bootstrap tapes 226 * must be encrypted. This is the only location suitable for 227 * the storage of the password for this encryption. It is also 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 80 (DISKDEFS) F 8 Disk Data Structures 228 * entirely appropriate for such storage (my, what luck). 229 * Note that BTI must maintain lists of this password for all 230 * sites, since if a major disaster befalls a site, its backup 231 * tapes cannot be recovered without this password. 232 00000022 DISP 233 NVMTAPEPW BSS 8 password for mag tape boot 234 235 BSS 9 filler (very old location for clock values) 236 00000033 DISP 237 NVMDATDRFT BSS 1 clock drift 238 BSS 4 filler 239 00000038 DISP 240 NVMSSUSN BSS 4 SSU serial number 241 0000003C DISP 242 NVMSSN BSS 4 system serial number 243 00000040 DISP 244 NVMMAXMCU BSS 1 max number of MCU's paid for 00000001 ABS 245 NVMFACMCU EQU 1 in units of one 246 00000041 DISP 247 NVMMAXPAGE BSS 1 max pages of memory paid for 00000020 ABS 248 NVMFACPAGE EQU 32 in units of 32 pages 249 00000042 DISP 250 NVMMAXCPU BSS 1 max number of CPUs paid for 00000001 ABS 251 NVMFACCPU EQU 1 in units of one 252 00000043 DISP 253 NVMMAXPPU BSS 1 max number of PPU's paid for 00000001 ABS 254 NVMFACPPU EQU 1 in units of one 255 00000044 DISP 256 NVMMAXACC BSS 1 max number of comm controllers paid for 00000001 ABS 257 NVMFACACC EQU 1 in units of one 258 00000045 DISP 259 NVMMAXPORT BSS 1 max number of ports paid for 00000008 ABS 260 NVMFACPORT EQU 8 in units of 8 261 00000046 DISP 262 NVMMAXMSC BSS 1 max number of disk controllers paid for 00000001 ABS 263 NVMFACMSC EQU 1 in units of 1 264 00000047 DISP 265 NVMMAXDISK BSS 1 max number of disk drives paid for 00000001 ABS 266 NVMFACDISK EQU 1 in units of 1 267 00000048 DISP 268 NVMMAXLPC BSS 1 max number of LP controllers paid for 00000001 ABS 269 NVMFACLPC EQU 1 in units of 1 270 00000049 DISP 271 NVMMAXCTC BSS 1 max number of CT controllers paid for 00000001 ABS 272 NVMFACCTC EQU 1 in units of 1 273 0000004A DISP 274 NVMMAXCTU BSS 1 max number of CT drives paid for 00000001 ABS 275 NVMFACCTU EQU 1 in units of 1 276 0000004B DISP 277 NVMMAXMTC BSS 1 max number of MT controllers paid for 00000001 ABS 278 NVMFACMTC EQU 1 in units of 1 279 0000004C DISP 280 NVMMAXMTU BSS 1 max number of MT drives paid for 00000001 ABS 281 NVMFACMTU EQU 1 in units of 1 282 0000004D DISP 283 NVMMAXVTC BSS 1 max number of VT controllers paid for 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 81 (DISKDEFS) F 8 Disk Data Structures 00000001 ABS 284 NVMFACVTC EQU 1 in units of 1 285 0000004E DISP 286 NVMMAXVTU BSS 1 max number of VT drives paid for 00000001 ABS 287 NVMFACVTU EQU 1 in units of 1 288 289 BSS 1 filler of 1 bytes available for use 290 291 * These are the NVM clock values. There are 4 4 byte clock 292 * values taken collectively to keep the last known date. 293 * Each time the date is to be updated we write to the oldest 294 * 4 byte value in the group. Note that locations 2A:32 are 295 * no longer used for this purpose. Note also that the newest 296 * revision of the SSU has vastly expanded NVM and that the 297 * clock values for those SSUs are stored in the newly added 298 * NVM space. 299 00000004 ABS 300 NVMCLKBYTS EQU 4 number of bytes per clock value 00000050 DISP 301 ONVMCLOCKS BSS NVMCLKBYTS*4 NVM clock dates 302 00000010 ABS 303 NVMDEADCNT EQU 010 number of death flags (16) 00000060 DISP 304 NVMDEATHE BSS 0 end of death table 305 BSS NVMDEADCNT*2 allocate NVM death flags 306 00000080 DISP 307 NVMDEATH BSS 0 start of death flag table 308 * each is two bytes long and is the 309 * upper 16 bits of the target time 310 * for the indicated subsystem. 311 * These flags start at NVMDEATH and work backwards 312 * to NVMDEATHE. Flag 0 (VRM) is currently positioned 313 * at locations 7E:7F. 314 315 * The codes that are assigned for the "program number" are: 316 * 0 (7E) - Operating system (VRM) 317 * 1 (7C) - "InHouse" diagnostics. This exists to turn off any 318 * inhouse programs that BTI does not wish to go out 319 * into the field. This code is true when the machine 320 * is at BTI and false when the machine goes into the field. 321 * 2 (7A) - Assembler 322 * 3 (78) - Edit 323 * 4 (76) - Basic 324 * 5 (74) - Cobol 325 * 6 (72) - DBMS 326 * 7 (70) - FMS 327 * 8 (6E) - Pascal 328 * 9 (6C) - Fortran 329 * 10(6A) - PCLINK 330 * 11(68) - Basicx 331 * 12-15 are unused 332 * 333 * 334 * As of version 14 of the SSU the NVM has been increased to 335 * 2K, so there is ample room to store a variety of clock 336 * values. There will be 64 new clock values starting at 337 * byte address #300 and extending through #3FF. 338 * 339 BSS 640 push clock values to end of first 1K. 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 82 (DISKDEFS) F 8 Disk Data Structures 00000300 DISP 340 NNVMCLOCKS BSS NVMCLKBYTS*64 new clock values 341 342 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 83 (DISKDEFS) F 8 Disk Data Structures 344 345 ********************************************************************************** 346 * * 347 * MASS STORAGE ORGANIZATION * 348 * This file describes all data structures that are * 349 * present on a volume. Most of these data structures are * 350 * present on every volume that the system recognizes. The * 351 * definitions are not necessarily in the most desirable order * 352 * because the element lengths must be defined before the * 353 * definitions for the block that holds them. * 354 * * 355 * These data structures and the transactions used to * 356 * update them have been designed to prevent the loss of data * 357 * during system crashes, operator errors, etc. Consequently, * 358 * they may be sub-optimal in terms of execution time or * 359 * space. See the section on crash resistance. * 360 * * 361 * These structures are divided into several groups: * 362 * 1.) those that control the recording media * 363 * 2.) those that control the data structure * 364 * 3.) those that control space allocation and use * 365 * * 366 * When a disk pack is placed on-line, or when it is * 367 * certified, certain information is placed on it that is * 368 * unique to the physical medium. * 369 * * 370 * This information should remain separate from that * 371 * associated with the volume. That is, when a volume is * 372 * copied, the hardware unique items are not copied at all, * 373 * but are taken from the new medium. * 374 * * 375 * The tables associated with the physical medium are: * 376 * 1.) pack label * 377 * 2.) bad trax list * 378 * 3.) bootstrap routine * 379 * * 380 * The pack label, volume label (discussed later), and * 381 * the bootstrap occupy fixed addresses. The two labels * 382 * contain pointers to the other tables. * 383 * * 384 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 84 (DISKDEFS) F 8 Disk Data Structures 386 387 ********************************************************************************** 388 * * 389 * CRASH RESISTANCE * 390 * In order to enhance maintainability, reliability, and * 391 * security, all mass storage structures and transactions are * 392 * designed around a set of goals collectively called * 393 * crashproofing. These goals are: * 394 * 1.) The mass storage structures must be 'safe' and * 395 * accurately represent the actual state of the volume * 396 * at the completion of every write. This is so that * 397 * any system crash, at any time, for any reason, will * 398 * leave the MS structures in a reasonable state for * 399 * restart. (This saves unbelievable amounts of * 400 * skilled field service labor to put systems back * 401 * together, which also helps customer relations). * 402 * 2.) The loss of one block on mass storage must never * 403 * cause the loss of more than one block of user * 404 * data. Note that this implies that the information * 405 * in essentially all system tables be duplicated. * 406 * In most cases this duplicated information is * 407 * distributed in various FBIs and a disk scan is * 408 * needed to recover it. * 409 * * 410 * Note that goal (1) can not protect against these * 411 * problems: * 412 * 1.) software or hardware errors corrupt the data * 413 * being written. * 414 * 2.) A block is read incorrectly with no indication of * 415 * an error. If the system does not determine that * 416 * the block is bad (inconsistent, internal checksum * 417 * failure, etc.) the results are unpredictable. * 418 * * 419 * Note also that goal (1) presumes that each mass * 420 * storage write completes successfully. If the system stops * 421 * because of a crash, the PPU will continue to transfer data * 422 * to the mass storage controller, so the block write should * 423 * complete successfully. If the system stops because of a * 424 * power failure, the controller will abort the operation if * 425 * the write has not actually started, otherwise, it will * 426 * attempt to finish the write. In any event, the system * 427 * power fail recovery routine will re-do the transfer when * 428 * power is restored. The most vulnerable areas are as * 429 * follows: * 430 * 1) The system stops because of a bus error during * 431 * a mass storage write. The PPU is no longer able * 432 * to transfer data over the bus, and the write will * 433 * die in the middle. This is awkward, because there * 434 * is really no practical recovery mechanism which * 435 * would allow the system to retry the transfer. * 436 * 2) The operator turns off a mass storage device and * 437 * removes the media (or removes the media during a * 438 * power failure). A write may have been aborted when * 439 * the device went off line, which it will do with * 440 * no warning (at least, in the currently available * 441 * devices). * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 85 (DISKDEFS) F 8 Disk Data Structures 442 * 3) A power failure occurs during a write, and the * 443 * recovery never occurs (due to loss of volatile * 444 * memory, disassembly of the system, etc.). * 445 * * 446 * Goal (2) is established to ensure that the loss of * 447 * mass storage blocks for any reason has a limited effect on * 448 * the system users. When a mass storage error is detected, * 449 * the system will usually be able to continue operation and * 450 * inform the affected user and the system operator of the * 451 * problem. However, certain errors will cause a situation in * 452 * which no safe continuation is possible and the system will * 453 * display an error code and stop. * 454 * * 455 * A permanent read error in a user file will cause that * 456 * data to be lost. In user directories, read errors may * 457 * cause the unavailability of all or part of that users data. * 458 * In system tables, such as the IDX, they may make the entire * 459 * volume unusable. Due to the severity of this problem, some * 460 * critical tables are duplicated. During table writes, both * 461 * versions are written. During table reads, the first error * 462 * free read from either table is accepted. * 463 * * 464 * It is, however, possible to scan the volume and * 465 * reconstruct tables on the basis of the FBI information. * 466 * This requires a small amount of heuristics, but is not * 467 * impractical (heuristic because blocks not yet freed contain * 468 * obsolete FBI information and must be recognized. The space * 469 * freer attempts to destroy some of the worst offenders * 470 * first.). * 471 * * 472 * By keeping these guidelines in mind, the intent of * 473 * each updating scheme should be clear: * 474 * 1.) multiple assignment of blocks is strictly forbidden!! * 475 * 2.) loss of unused file blocks in a crash is of * 476 * little concern since they may be recovered by * 477 * recreate or backup. * 478 * 3.) a crash at any time should leave either the old * 479 * structure or the completed new structure, never an * 480 * intermediate structure that is ambiguous or confusing. * 481 * This generally means that the more junior table * 482 * must be created first and removed last. * 483 * * 484 * Even relatively complex structures can be handled in a * 485 * crash resistant manner by using the worst case technique of * 486 * creating an entirely new data structure (containing the new * 487 * information and a copy of any previous information being * 488 * retained), updating the block that points to it, then * 489 * freeing the old structure. * 490 * * 491 * Note that the internal structure of the block must be * 492 * complete at the time that it is written to its permanent * 493 * location on the volume. That is, if a user program is * 494 * swapped, the partially updated tables that it controls must * 495 * not be written (back) to their permanent locations. They * 496 * must be retained strictly in resident memory. A cursory * 497 * analysis of table updating indicates that swapping during * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 86 (DISKDEFS) F 8 Disk Data Structures 498 * updates would usually result in garbage if a crash * 499 * occurred. The system avoids the problem by locking the * 500 * affected pages into main memory where necessary. Another * 501 * technique not used by this system is to allocate a scratch * 502 * block for the swapping of such pages during their * 503 * modification. * 504 * * 505 * At the time of a crash, there may be several users * 506 * updating tables. As long as the crashproofing rules are * 507 * followed for each transaction individually, and the * 508 * transactions do not interfere with one another (normal * 509 * multiprocessing rules apply), there will be no defects as a * 510 * result of having multiple occurrences of acceptable funnys * 511 * (unfreed blocks, sections of files being unwritten, new * 512 * data structures not linked in, etc.). * 513 * * 514 * Under the description of each table are listed the * 515 * rules governing its updating. Tables that stand alone * 516 * might not have any special updating procedure. Table * 517 * updates involving several different tables are included or * 518 * referenced under each table description. * 519 * * 520 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 87 (DISKDEFS) F 8 Disk Data Structures 522 523 ********************************************************************************** 524 * * 525 * MASS STORAGE ERRORS * 526 * The mass storage drivers will normally retry failing * 527 * transfers according to generally accepted recovery * 528 * procedures. * 529 * * 530 * For mass storage hardware that has error correction * 531 * capability, most rereads will not be necessary, though it * 532 * may be desirable to classify transfers as follows: * 533 * 1.) no errors * 534 * 2.) correctable data error, retry gave no error * 535 * 3.) correctable data error, retry gave another * 536 * correctable error (correction is not attempted until * 537 * the simpler retry operation is tried) * 538 * 4.) data error not corrected on first read, but * 539 * ultimately recovered * 540 * 5.) permanent data error * 541 * 6.) permanent data error, the disk drive appears * 542 * to be faulty (as verified by test reads of * 543 * other blocks [such as bad trax list]) * 544 * 7.) permanent data error, the disk controller * 545 * appears to be faulty (as verified by test * 546 * reads of other units) * 547 * 8.) no error status, but FBI checksum or block * 548 * number wrong * 549 * * 550 * Condition 8 could indicate a problem with the * 551 * controller, the channel, or a problem at the time of the * 552 * previous write. It should promptly cause a system halt * 553 * except in the case of a maintenance read. If a controller * 554 * problem causing write errors is discovered, the faulty * 555 * blocks must all be rectified to prevent their reappearence * 556 * as a later case of the plague. * 557 * * 558 * Condition 7 on any volume or condition 6 on the system * 559 * volume are grounds for an immediate halt. Any attempt to * 560 * terminate system operation more normally runs the risk of * 561 * irretrievably damaging the data structures. * 562 * * 563 * Condition 2 should be treated as no error since it is * 564 * probably caused by transient conditions unrelated to the * 565 * media, although a history of these is indicative of a bad * 566 * track or a hardware problem. * 567 * * 568 * Conditions 2 through 5 should cause an entry into the * 569 * disk error log (or possibly just the normal system log * 570 * file). * 571 * * 572 * Conditions 3 through 5 and possibly also 2 should * 573 * cause an entry in the bad trax list of this medium, * 574 * indicating the type of error for analysis when the medium * 575 * is reformatted and to prevent a recreate from using these * 576 * potentially bad blocks. * 577 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 88 (DISKDEFS) F 8 Disk Data Structures 578 * Conditions 3 and 4 should cause the block to be * 579 * rewritten in a new location, and an entry made in the * 580 * substitution list. * 581 * * 582 * When the system is idle or has excess disk transfer * 583 * capacity, it may be desirable to investigate each head of * 584 * each disk periodicly. These reads could provide early * 585 * detection of head crashes. To be useful, of course, the * 586 * system must be able to unload the heads. A list of test * 587 * blocks may be maintained (one for each head) so that the * 588 * mass storage driver can write as well as read to test for * 589 * malfunctions. Alternatively, the innermost cylinder of * 590 * each drive could be reserved for diagnostic purposes. Such * 591 * a reserved area could be used both for diagnostics and for * 592 * a crashdump area. * 593 * * 594 * Test reads could also comprise a disk certification * 595 * based on the bad trax information concerning the * 596 * completeness of pattern testing, etc. * 597 * * 598 * The first few blocks on each volume are occupied by * 599 * tables that must occupy those fixed block addresses. If * 600 * one of these blocks becomes unreadable, the pack must be * 601 * refurbished. However, all user data may be recovered. A * 602 * feature that may be added to the system later is that of a * 603 * search over the first N blocks of the volume in order to * 604 * find the required tables. This would provide even more * 605 * tolerance to packs with imperfections. * 606 * * 607 * All other tables occupy variable block numbers and may * 608 * be substituted. Substitutions may take place on either a * 609 * write that did not write check or on a read with a * 610 * recoverable error. The system will do substitutions * 611 * without affecting the use of the system. Most * 612 * substitutions may be done simply by copying the data to a * 613 * new block and making an appropriate entry in the * 614 * substitution list. However, certain of the system control * 615 * blocks must be available even when the substitution list is * 616 * not available. These blocks may not be substituted. * 617 * However, they may be moved to another location if the new * 618 * block address is entered into the appropriate root block. * 619 * DISKBOOT goes to a lot of trouble to load the substitution * 620 * list so that it can boot from a file containing * 621 * substitutions. However, the operating system reads in the * 622 * substitution list in a piece of virtual code, and that code * 623 * must be free of substitutions. * 624 * * 625 * If an unrecoverable read error occurs, the data on * 626 * that block must be presumed lost. In some cases, a * 627 * heuristic scan of the questionable data may reveal the * 628 * error, but this is expensive and hazardous. Such scans are * 629 * primarily applicable in the case of a table occupying a * 630 * very small part of a block. Additionally, if read errors * 631 * have been caused by a defective drive or controller, * 632 * replacing or repairing the offending hardware may restore * 633 * the readability of the data. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 89 (DISKDEFS) F 8 Disk Data Structures 634 * * 635 * If the lost data is user data, he must look to a * 636 * backup or transaction log to recover it. * 637 * * 638 * If the lost data is system control or management data, * 639 * it may be possible to recover it automaticly by means of a * 640 * recovery program. Such a program would build a copy of the * 641 * defective volume and repair the damage. * 642 * * 643 * After the data has been recovered from a pack, it is * 644 * intended that the pack may be reused. The blocks that were * 645 * discovered bad should be entered into the bad trax list to * 646 * prevent further read errors on the same block. The volume * 647 * may then be zeroed or recovered onto and is as good as new! * 648 * However, the label area is required to be good for a pack * 649 * to be usable. * 650 * * 651 * Each of the tables on the volume has certain rules to * 652 * be followed when mass storage errors occur on it. These * 653 * rules are listed in the description of each table. * 654 * However, a read of a table may be for an informative * 655 * purpose, such as a maintenance program investigating the * 656 * volume. These reads occur through a mechanism similar to * 657 * file reads and the recovery actions are the same as for a * 658 * file. * 659 * * 660 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 90 (DISKDEFS) F 8 Disk Data Structures 662 663 ********************************************************************************** 664 * * 665 * FILE BLOCK IDENTIFIER (FBI) * 666 * remember J. Edgar * 667 * Each transfer to or from mass storage consists of two * 668 * data areas chained together. The first of these is exactly * 669 * one page in length. This page of data is always loaded on * 670 * a page boundary by the system. It consists primarily of * 671 * the actual data of interest and may be entirely user data. * 672 * * 673 * The other data area consists of FBILNTH words which * 674 * contain the information described in this section. * 675 * * 676 * When a volume is initialized and when space is freed, * 677 * each file block identifier is set up to indicate that it is * 678 * a free block. Every file block in use, however, is * 679 * uniquely labeled as to owner, data structure, and position * 680 * in that data structure by the data in the FBI. * 681 * * 682 * This enables the detection of many error conditions * 683 * such as: * 684 * crashes during writes extending a file. * 685 * various hardware errors. * 686 * various software errors. * 687 * This information also aids in the recovery of user * 688 * data when the volume structure has been damaged. * 689 * * 690 * If this block is a substitute, the block number in the * 691 * FBI is the block number of the original (defective) block. * 692 * If the substitution list is destroyed, this allows a scan * 693 * to find all substitutions. Furthermore, the program that * 694 * calls the mass storage driver may do its FBI checking * 695 * without knowing that the block was a substitute. * 696 * * 697 * If a block is read and its FBI is garbage (not the * 698 * correct block, a correct substitute, or a free block), it * 699 * must be assumed that an otherwise undetected mass storage * 700 * error has occured. See the section on mass storage errors. * 701 * * 702 * The forward link and backward link fields are used * 703 * only in sequential data structures (e.g. .SAFs). They are * 704 * zero if not used in such a structure. * 705 * * 706 * The relative block number indicates the location of the * 707 * block in the structure holding the block. The OS only sets * 708 * it, but it is available for consistency checks in the * 709 * REBUILD utility, and for OS debuggers to try to reconstruct * 710 * exploded structures. Only some block types have a meaningful * 711 * number, all others receive FBIRELBLK=0 (although 0 can be a * 712 * value in the "meaningful" blocks as well). * 713 * * 714 * Block type FBIRELBLK * 715 * ---------- -------------------------------------- * 716 * FBITIDX index into SECIDXENTS * 717 * FBITAFT index into SECAFTENTS * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 91 (DISKDEFS) F 8 Disk Data Structures 718 * FBITSAF position in SAF chain (0:size-1) * 719 * FBITSRAF index into RAF major block (0:03FF) * 720 * FBITRAFD page number in file (0:0FFFFF) * 721 * FBITCODED page number in file (CCB index, 0:CCBMAXPAGE-1) * 722 * (others) 0 * 723 * * 724 * CRASH RESISTANCE * 725 * The FBI must be present with every block when it is * 726 * written to the volume. * 727 * * 728 ********************************************************************************** 729 730 BASE R2 00168800 2 BASE 731 FBIWORDA BSS 1 00168801 2 BASE 732 FBIWORDB BSS 1 00168802 2 BASE 733 FBIWORDC BSS 1 00088080 2 ZBM 734 FBITYPE EQU FBIWORDA/BITS 0:7 type of data block 735 * although this is assembled as an 8 bit 736 * field, the maximum value is 07F, i.e. 737 * only 7 bits 00089180 2 ZBM 738 FBIFLINK EQU FBIWORDA/MSBLKFIELD forward link 739 * (next block in a sequential structure) 00088041 2 ZBM 740 FBIFLAGS EQU FBIWORDB/BITS 0:3 misc flag bits 00088011 2 ZBM 741 FBINOREWRIT EQU FBIFLAGS/BIT 28 this block has been rewritten 00088211 2 ZBM 742 FBIWCHK EQU FBIFLAGS/BIT 29 set if this block is important 743 * enough to write check 00088411 2 ZBM 744 FBINOSUB EQU FBIFLAGS/BIT 30 set if not substitutable 00088611 2 ZBM 745 FBIMEMERR EQU FBIFLAGS/BIT 31 block written from page with memory error 00088221 2 ZBM 746 FBIDEFFLAGS EQU FBIFLAGS/BITS 29:30 flag bits which should have a known value 00089181 2 ZBM 747 FBIDA EQU FBIWORDB/MSBLKFIELD this block's disk block number 748 * (original MS address if this is a substitute) 00089182 2 ZBM 749 FBIBLINK EQU FBIWORDC/MSBLKFIELD backward link 750 * (preceeding block in a sequential structure) 751 * code entry type in FBITYPE field 752 * 0 should not appear 00000001 ABS 753 FBITPL EQU 001 pack label 00000002 ABS 754 FBITBTRX EQU 002 bad trax list 00000003 ABS 755 FBITBOOT EQU 003 bootstrap 00000004 ABS 756 FBITVL EQU 004 volume label 00000005 ABS 757 FBITSUBS EQU 005 substitution list 00000006 ABS 758 FBITSEC EQU 006 security block 00000007 ABS 759 FBITADT EQU 007 ADT block 00000008 ABS 760 FBITIDX EQU 008 IDX block 00000009 ABS 761 FBITUDIR1 EQU 009 UDIR primary block 0000000A ABS 762 FBITUDIR2 EQU 00A UDIR secondary block 0000000B ABS 763 FBITSYS EQU 00B misc system use (swapping) 0000000C ABS 764 FBITSAF EQU 00C SAF 0000000D ABS 765 FBITLRAF EQU 00D root of large RAF (major access block) 0000000E ABS 766 FBITSRAF EQU 00E root of small RAF (minor access block) 0000000F ABS 767 FBITRAFD EQU 00F RAF data block 00000010 ABS 768 FBITAFT EQU 010 account finder table block 00000011 ABS 769 FBITASLB EQU 011 account shared list block 00000012 ABS 770 FBITFSLB EQU 012 file shared list block 00000013 ABS 771 FBITCCB EQU 013 code file control block 00000014 ABS 772 FBITCODED EQU 014 code file data block 00000015 ABS 773 FBITAUTLB EQU 015 authorization list block 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 92 (DISKDEFS) F 8 Disk Data Structures 0000007E ABS 774 FBITESTB EQU 07E test block 0000007F ABS 775 FBITFREE EQU 07F code for a free block 776 00168803 2 BASE 777 FBILCD BSS 1 last changed date 00168804 2 BASE 778 FBIWORDE BSS 1 00089184 2 ZBM 779 FBIRELBLK EQU FBIWORDE/MSBLKFIELD relative block number 00168805 2 BASE 780 FBIACCT BSS2 1 account name of this blocks owner 00168807 2 BASE 781 FBIPROJ BSS 1 division-project 00168808 2 BASE 782 FBISERNO BSS2 1 serial number (creation date) of this structure 783 BSS FBILNTH-(DISPW FBIWORDA)-1 make checksum the last word 0016880A 2 BASE 784 FBICKSUM BSS 1 FBI checksum 785 DRCT 00000004 ABS 786 FBILOG EQU FBILNTH LOG 2 log size of FBI FFC00000 ABS 787 FBIGMASK EQU NOT(2 POWER (33-FBILNTH)-1) mask for PRMUT checksum gen. FFE00000 ABS 788 FBICSMASK EQU NOT(2 POWER (32-FBILNTH)-1) mask for PRMUT checksumming 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 93 (DISKDEFS) F 8 Disk Data Structures 790 791 ********************************************************************************** 792 * * 793 * PACK LABEL * 794 * This label block should never be written by the * 795 * system. Its creation is the task of a pack initialization * 796 * routine that need not be available to the system owner. * 797 * * 798 * CRASH RESISTANCE * 799 * Not applicable * 800 * * 801 * MASS STORAGE ERRORS * 802 * The pack label occupies a fixed MS block number. It * 803 * may not be substituted in any way. If this block goes bad, * 804 * the volume (and pack) may not be used. However, any data * 805 * already on the pack may be easily recovered. This is * 806 * because the data that is lost with this block is not * 807 * essential to the recovery operation. We require that the * 808 * pack be removed from service and refurbished because we * 809 * cannot guarantee the continued well being of a volume on a * 810 * pack where we cannot find the bad trax list. * 811 * * 812 ********************************************************************************** 813 00000000 ABS 814 PLDA EQU 0 MS address for pack label 815 816 BASE 00000000 DISP 817 PLSERIAL LABEL disk pack identifier 00000000 DISP 818 PLMAKER BSS 1 disk pack manufacturer code (pak6) 00000001 DISP 819 PLSERNO BSS 1 disk pack serial number (unsigned integer) 820 BSS 2 reserved for expansion 821 00000004 DISP 822 PLFLAGS BSS 1 misc pack information 00003010 BYTE 823 PLNODRVID EQU BIT 24 indicates no drive ID board 00002E10 BYTE 824 PLFORMNEW EQU BIT 23 indicates a new pack 00002C10 BYTE 825 PLFORMRFRB EQU BIT 22 indicates a refurbished pack 826 00000005 DISP 827 PLFRMTRID BSS 2 identification of who formatted this pack 00000007 DISP 828 PLINIDATE BSS2 1 date of initialization 00000009 DISP 829 PLINITSCANS BSS 1 number of certification passes at initialization 830 BSS 6 room to expand 831 * information used by the mass storage driver to 832 * calculate the hardware addresses of blocks. 00000010 DISP 833 PLSECPTRK BSS 1 blocks per track 00000011 DISP 834 PLTRKPCYL BSS 1 heads per cylinder 00000012 DISP 835 PLCYLPPCK BSS 1 cylinders per pack 00000013 DISP 836 PLSIZE BSS 1 size of pack in blocks 837 BSS 4 room to expand 00000018 DISP 838 PLBDTRXDA BSS 1 block number of bad trax list 839 * added for use by SCSI type disk drives 00000019 DISP 840 PLSDVID BSS 2 SCSI vendor identification 0000001B DISP 841 PLSDPID BSS 4 SCSI product identification 0000001F DISP 842 PLSDFREV BSS 1 SCSI firmware revision level 843 BSS 1 so string is null terminated 00000021 DISP 844 PLMODESN BSS 19 mode sense data (pages 1 to 4) 0000004C ABS 845 PLMODESNL EQU DISPC PLMODESN mode sense length 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 94 (DISKDEFS) F 8 Disk Data Structures 846 DRCT 847 ********************************************************************************** 848 * * 849 * MIRROR SECTOR * 850 * The mirror sector is used by the SCSI MIRROR host adaptor to * 851 * identify if two drives are mirrors of one another. A mirror set * 852 * exists if a pair of drives sharing an ID have equal RUN NUMBER, * 853 * equal VOL SIZE, and cross matching DATE STAMPS. The mirror sector * 854 * resides in the pack label, beginning in the last 512 bytes of the * 855 * block. The name SECTOR comes from the fact that a SCSI drive is * 856 * divided into sectors of 512 bytes each. The label MIRRORSECT is * 857 * used to generate a pointer to the start of the mirror sector. * 858 * * 859 ********************************************************************************** 860 00000380 ABS 861 MIRRORSECT EQU 1024-128 put in last 512 bytes of page 862 863 BASE mirror sector definition 04000000 DISP 864 SELFRUNNUM BSSB 16 our run number 80000000 DISP 865 SELFVOLSIZ BSSB 32 our volume size 80000001 DISP 866 SELFDATE1 BSSB 32 upper 16 bits of date 80000002 DISP 867 SELFDATE2 BSSB 32 lower 32 bits of date 868 BSSB 16 04000004 DISP 869 MATERUNNUM BSSB 16 mate run number 80000004 DISP 870 MATEVOLSIZ BSSB 32 mate volume size 80000005 DISP 871 MATEDATE1 BSSB 32 upper 16 bits of date 80000006 DISP 872 MATEDATE2 BSSB 32 lower 32 bits of date 873 BSSB 16 874 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 95 (DISKDEFS) F 8 Disk Data Structures 876 877 ********************************************************************************** 878 * * 879 * BAD TRAX LIST * 880 * This is a list of file blocks that have been found to * 881 * be defective. This table stores the reason for each entry. * 882 * The pack certification or initialization routines makes the * 883 * original table. This block must be assigned even if there * 884 * are no bad trax found on the pack, since the MS driver * 885 * cannot allocate a file block during error recovery * 886 * operations. The bad trax list is amended by the system as * 887 * it discovers additional errors. There is currently no * 888 * provision for more than one block (512 entries). * 889 * * 890 * Elements are packed into the bad tracks block from the * 891 * beginning. The end of the list is indicated by an entry * 892 * with word 0 all zeros. * 893 * * 894 * When the pack is to be refurbished, the bad trax list * 895 * will indicate those areas requiring additional checking. * 896 * * 897 * CRASH RESISTANCE * 898 * Generally not applicable. However, when a mass storage * 899 * error is encountered, this table should have the offending * 900 * block number entered. If this update takes place * 901 * before any substitution, it affords an opportunity * 902 * to discover that the drive or controller have failed * 903 * before upsetting the actual volume data structure by * 904 * attempting a substitution. * 905 * * 906 * MASS STORAGE ERRORS * 907 * Pointer in pack label. May be moved, but the * 908 * correct pointer must be placed in the pack label (may * 909 * not use the substitution list). If this block cannot * 910 * be read, the volume may not be used, but recovery will * 911 * be complete. This pack must have a new bad trax * 912 * constructed. This offending block must be added to * 913 * the new bad trax list. * 914 * Note, however, that reads of this block are * 915 * initiated by other mass storage errors. The occurrence * 916 * of another mass storage error here should cause a high * 917 * degree of concern for the well being of the hardware. * 918 * * 919 ********************************************************************************** 920 921 BASE definition of elements 00000000 DISP 922 BTRXEL BSS 1 reason for entry/block number 00000080 BYTE 923 BTRXREASON EQU BITS 0:7 reason for entry 924 * MSBLKFIELD block number 925 * codes reason 00000010 ABS 926 BTRXLCDE EQU 010 MS error during certification 00000020 ABS 927 BTRXRTDE EQU 020 MS error at run time 00000030 ABS 928 BTRXACDE EQU 030 accident destroyed format 00000040 ABS 929 BTRXFSDE EQU 040 BTI field service designated block bad 00000001 DISP 930 BTRXDATE BSS 1 date when entry was made 00000002 ABS 931 BTRXLNTH EQU DISPW BTRXEL element size 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 96 (DISKDEFS) F 8 Disk Data Structures 932 DRCT 00000200 ABS 933 BTRXECNT EQU BLOCKSIZE/BTRXLNTH number of entries 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 97 (DISKDEFS) F 8 Disk Data Structures 935 936 ********************************************************************************** 937 * * 938 * BOOTSTRAP * 939 * This routine is emplaced during pack initialization or * 940 * software update. It is also placed on a pack when a copy * 941 * to it is being made and a newer version of the bootstrap is * 942 * present on the source pack. The bootstrap is loaded and * 943 * run by the initial bootstrap operation, which is partially * 944 * a microcode and hardware function. * 945 * * 946 * The primary purpose of this code is to load and start * 947 * the system software. For this, it must search the hardware * 948 * for a system volume, then search that volume for the * 949 * appropriate account and program. The normal program is the * 950 * system software code although special purpose programs such * 951 * as diagnostics may be available. * 952 * * 953 * In conjunction with the microcode and hardware, a * 954 * crashdump mode is provided that saves the machine states * 955 * for a later analysis. * 956 * * 957 * A secondary purpose of the bootstrap is as a * 958 * maintenance tool. Since it is loaded primarily by * 959 * microcode and hardware operations, it can be loaded despite * 960 * many kinds of malfunctions and it should be useful in * 961 * corrective maintenance. * 962 * * 963 * The bootstrap block has the revision level of the code * 964 * assembled into it. The software that looks at the * 965 * bootstrap blocks makes use of this revision level. It is * 966 * in the form: * 967 * * 968 * TEXT "Bx.y" * 969 * * 970 * Where x is the major revision code and y is the * 971 * minor revision. * 972 * * 973 * CRASH RESISTANCE * 974 * Not applicable * 975 * * 976 * MASS STORAGE ERRORS * 977 * See the notes under pack label. * 978 * * 979 ********************************************************************************** 980 00000002 ABS 981 BOOTDA EQU 2 MS address of bootstrap 982 983 BASE 984 BSS 1 the jump around 00000001 DISP 985 BOOTREV BSS 1 the revision code 986 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 98 (DISKDEFS) F 8 Disk Data Structures 988 989 ********************************************************************************** 990 * * 991 * LOGICAL STRUCTURE * 992 * The remaining tables are associated with volumes * 993 * rather than physical recording media. * 994 * The volume label contains pointers to secondary * 995 * tables. * 996 * * 997 ********************************************************************************** 998 999 ********************************************************************************** 1000 * * 1001 * VOLUME LABEL * 1002 * This label is maintained by the system using this pack. * 1003 * It contains pointers to the secondary tables that control the * 1004 * data structure of the volume. * 1005 * * 1006 * Each volume label has a word which is a bit array of * 1007 * volume format revision numbers that can mount this volume and * 1008 * each system has such a bit array giving the revisions that it * 1009 * can mount. Thus a higher revision system knows which lower * 1010 * revisions it can not use and a lower revision system can not * 1011 * get at unacceptable higher revision formatted volumes. * 1012 * * 1013 * This works as follows: When a new system revision is * 1014 * being prepared, we know which old revision packs it can mount, * 1015 * so its bit mask will include those. When a pack is updated to * 1016 * a new revision, we similarly know which old systems are * 1017 * capable of handling whatever changes were made in the format * 1018 * so its bit mask will include those systems. Tricky, huh? * 1019 * * 1020 * A system serial number consists of two parts: * 1021 * 1.) the customer (owner) number * 1022 * 2.) the system number for that owner * 1023 * The system number follows our manufacturing sequence and * 1024 * is on our records as the system serial number. Normally, the * 1025 * customer number and the system number for a system are the * 1026 * same. However, in a few cases a multiple system customer will * 1027 * have a different customer number. A system distribution or * 1028 * backup volume may be encoded either for a specific system (by * 1029 * specifying the customer number and system number exactly) OR * 1030 * for a specific customer number (by specifying the customer * 1031 * number and 0 in place of the system number). * 1032 * * 1033 * The volume passwords work as follows: * 1034 * * 1035 * 1) Each volume has stored on it the SSN of the machine that * 1036 * 'owns' it. * 1037 * 2) On a OPR LOAD operation, if the SSN of the volume and the * 1038 * machine matches, no further checking is done. A volume * 1039 * SSN with a 0 system number will match on any system with * 1040 * the same customer number. * 1041 * 3) If not, the password supplied with the OPR LOAD command * 1042 * must match the volume password. There are several * 1043 * possibilities here.. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 99 (DISKDEFS) F 8 Disk Data Structures 1044 * A) The operator supplies the correct password, including * 1045 * the case where both are . The volume is loaded. * 1046 * B) The volume password is . No possible password * 1047 * matches, and the volume cannot be loaded. * 1048 * C) The operator specifies the wrong password. Of course, * 1049 * the volume is not loaded. * 1050 * 4) If the SSN did not match, the password did match, and the * 1051 * 'newowner' flag is on, the SSN of the 'owning' system (on * 1052 * the volume) is changed to that of the current system * 1053 * and the 'newowner' flag is cleared. * 1054 * 5) When the volume is loaded, the OPR program allows several * 1055 * items to be changed. The volume name and title may be * 1056 * changed arbitrarily (except cannot create a duplicate * 1057 * name). The volume password and 'newowner' flag may be * 1058 * changed iff the SSN matches. If the SSN currently * 1059 * matches, it may be changed to anything. * 1060 * * 1061 * * 1062 * Implied states of the volume * 1063 * * 1064 * 1) PWD is . This is a 'portable' volume, and may be * 1065 * mounted on any system. The SSN, however, will not change, * 1066 * so the volume still 'belongs' to the original system. * 1067 * 2) PWD is . The volume is 'transportable'. The * 1068 * original system can OPR LOAD the volume without the password. * 1069 * Any other system can OPR LOAD the volume iff they specify * 1070 * the correct password. * 1071 * 3) In either case (1) or (2), the 'newowner' flag may be set. The * 1072 * first system (other than the original system) to successfully * 1073 * OPR LOAD this volume becomes the new owner (the SSN is set to * 1074 * that of the new system and the 'newowner' flag is cleared). * 1075 * This is the state left by DISKINIT. It allows the system doing * 1076 * the pack formatting to load the pack for tests. When the pack * 1077 * is loaded onto its ultimate destination, it becomes the property * 1078 * of that system. (A customer formatting a pack for himself must * 1079 * explicitly clear the 'newowner' flag to get this same * 1080 * protection). * 1081 * 4) PWD is . The volume is 'private'. Only the original * 1082 * system can OPR LOAD the volume. * 1083 * * 1084 * 'How To' section * 1085 * * 1086 * 1) Prepare a pack to be sent to a specific site and no other. * 1087 * Set the password to something that you know, then set the * 1088 * SSN to be that of the destination system. * 1089 * Alternatively, set the password to something that you give * 1090 * the intended recipient, and set the 'newowner' flag. * 1091 * 2) Prepare a pack to go anywhere (such as a newly formatted pack). * 1092 * Set the password to and set the 'newowner' flag. * 1093 * 3) Prepare a pack to be used to transfer software to another site, * 1094 * where the return of the pack to the original site is expected. * 1095 * Set the password to something that you give the intended recipient. * 1096 * 4) Prepare a pack to be used to transfer software to anyone. * 1097 * Set the password to . * 1098 * 5) Prepare a pack that can not be used by any other site. * 1099 * Set the password to and clear the 'newowner' flag. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 100 (DISKDEFS) F 8 Disk Data Structures 1100 * * 1101 * CRASH RESISTANCE * 1102 * This block is normally a permanent part of the structure * 1103 * and is infrequently updated. During operations that destroy a * 1104 * volume (DISKCOPY, TAPERECOVER, Backup) a volume label * 1105 * indicating 'invalid' should be written before anything else. * 1106 * The last operation of a process that leaves a valid volume * 1107 * should be the write of a volume label indicating 'valid'. As * 1108 * it turns out, the invalidating write is usually about the * 1109 * third disk write because we need to determine the disk * 1110 * addresses of the subs and security blocks before we write out * 1111 * the volume label. The only consequence of a crash during this * 1112 * is that a pack that we were planning on overwriting (by doing * 1113 * the copy) has an old volume label (indicating a valid volume * 1114 * with the old name) with an empty subs list or security blocks. * 1115 * If the subs list is overwritten, the old volume is mostly * 1116 * still there except for blocks that were substituted. If the * 1117 * security block(s) are written, we essentially have an empty * 1118 * volume with the old name. It is also possible that the new * 1119 * subs block and/or security blocks do not have the same disk * 1120 * addresses as their previous counterparts. This will lead to * 1121 * various forms of disk structure error iff a load is attempted * 1122 * on the pack. * 1123 * Since the data on the pack is forfeit anyway, we are * 1124 * not concerned over the slight possibility of confusion. Note * 1125 * that no security violation is possible, since the old data is * 1126 * never accessible under a new volume label, and vice-versa. * 1127 * * 1128 * MASS STORAGE ERRORS * 1129 * Fixed block number. No substitutions. If this block * 1130 * cannot be read, the volume may not be used. Recovery must be * 1131 * instigated by manufacturers maintenance due to the security * 1132 * problem. Dependent blocks must be found by scanning. The * 1133 * recovery should be complete. The pack must be refurbished. * 1134 * * 1135 ********************************************************************************** 1136 00000001 ABS 1137 VOLLABELDA EQU 1 mass storage address of volume label 1138 1139 BASE 00000000 DISP 1140 VLSSN BSS 1 system serial number 1141 * if this volume is being mounted on 1142 * a system with a different system 1143 * serial number, the correct volume 1144 * password must be supplied. 00000100 BYTE 1145 CUSTNUM EQU BITS 0:15 customer number field 00002100 BYTE 1146 SYSTNUM EQU BITS 16:31 system number field 1147 BSS 1 1148 BSS2 1 00000004 DISP 1149 VLVNAME BSS2 1 volume name 1150 * each volume name at a site 1151 * should be unique. 00000006 DISP 1152 VLVPASSW BSS2 1 volume password 1153 * the default value cannot be matched. 1154 * This is so that a user who neglects 1155 * to set the volume password is 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 101 (DISKDEFS) F 8 Disk Data Structures 1156 * protected against another system 1157 * owner who might acquire that pack. 00000008 DISP 1158 VLCDATE BSS2 1 creation date for this volume 1159 BSS 1 filler (was creation date) 0000000B DISP 1160 VLFLAGS BSS 1 flag bits 00000210 BYTE 1161 VLFLAGINV EQU BIT 1 sez not a valid volume 00000410 BYTE 1162 VLFLAGNEWO EQU BIT 2 sez change volume to new owner 0000000C DISP 1163 VLAVREV BSS 1 bit array of revisions allowed to 1164 * mount this pack 0000000D DISP 1165 VLVREV BSS 1 volume revision of this pack 1166 BSS 1 1167 BSS 1 filler (was copy of VLSIZE) 00000010 DISP 1168 VLSUBSDA BSS 1 substitution list MS address 1169 BSS 1 00000012 DISP 1170 VLSECBDA BSS 1 primary security block MS address 00000013 DISP 1171 VLSECB2DA BSS 1 secondary security block MS address 1172 BSS 12 00000080 ABS 1173 VLTITLELEN EQU 128 length (characters) of volume title 00000020 DISP 1174 VLTITLE BSS VLTITLELEN/CPW ascii volume title 00000040 DISP 1175 VLBKUPE LABEL end of area written for backup 1176 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 102 (DISKDEFS) F 8 Disk Data Structures 1178 1179 ********************************************************************************** 1180 * * 1181 * SUBSTITUTION LIST * 1182 * A list of file block substitutions that have been made * 1183 * as a result of the inability to write on an already committed * 1184 * file block or as a result of a soft read error. This block * 1185 * must be assigned even if there are no substitutions on this * 1186 * volume, since the MS driver cannot allocate a file block for * 1187 * this during error recovery operations. * 1188 * * 1189 * This list is copied into main memory when a volume is * 1190 * mounted and is written back each time a change is made. * 1191 * * 1192 * New entries are made when a write can not be successfully * 1193 * completed or when a read indicates a soft error and it seems * 1194 * prudent to remove the data to a fresh spot. Each entry in the * 1195 * subs list is a pair of block numbers: * 1196 * 1.) the failing address * 1197 * 2.) a substitute for it * 1198 * Entries are deleted when the failing address is freed. The * 1199 * substitute is freed instead and the failing block is discarded * 1200 * (it should already have been entered into the bad trax list). * 1201 * Each mass storage transfer on any volume involves a check to * 1202 * see if the requested block has a substitute. There is * 1203 * currently no provision for more than one block (512 entries). * 1204 * * 1205 * Other possible entries in this table (or bad trax) are * 1206 * flags requesting that all writes above a certain block number * 1207 * be write checked. This floor would grow as the medium was * 1208 * proven good. * 1209 * * 1210 * CRASH RESISTANCE * 1211 * This table may not be updated until after the substituted * 1212 * write has taken place. Additionally, the failing address * 1213 * should be entered into the bad trax list before any attempt at * 1214 * substitution is made. * 1215 * * 1216 * MASS STORAGE ERRORS * 1217 * The pointer to the substitution list is found in the * 1218 * volume label. If the MS block occupied by the substitution * 1219 * list goes bad, the subs list may be moved, but the correct * 1220 * pointer to it must be placed in the volume label (may not use * 1221 * the substitution list). If the subs block cannot be read, the * 1222 * volume may not be used. All blocks acting as substitutes must * 1223 * be found by the recover routine (by finding all blocks whose * 1224 * actual MS address does not match their FBIDA). * 1225 * * 1226 ********************************************************************************** 1227 1228 BASE 00000000 DISP 1229 SUBSBADDY BSS 1 first word contains bad block 1230 * address, zero if list end. 00000001 DISP 1231 SUBSSUB BSS 1 second word contains the substitute. 00000002 ABS 1232 SUBSLNTH EQU DISPW SUBSBADDY element length 00000200 ABS 1233 SUBSECNT EQU BLOCKSIZE/SUBSLNTH number of entries 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 103 (DISKDEFS) F 8 Disk Data Structures 1234 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 104 (DISKDEFS) F 8 Disk Data Structures 1236 1237 ********************************************************************************** 1238 * * 1239 * SECURITY BLOCK * 1240 * This block contains the pointers to the ADT chains * 1241 * and other variables local to this volume or system. * 1242 * * 1243 * There exist multiple ADT chain heads in the security * 1244 * block. The purpose of this is to minimize the loss of free * 1245 * blocks when mass storage errors are encountered in the ADT * 1246 * chain linkages. * 1247 * * 1248 * The IDX and AFT tables are made up of multiple blocks, * 1249 * with each entry being hashed into one of the blocks. The * 1250 * security block contains the index to both of these tables. * 1251 * The IDX and AFT contain only as many blocks as are really * 1252 * needed to hold the entries, so there is also a word that * 1253 * indicates how big the index is (how many blocks are in the * 1254 * corresponding table). * 1255 * * 1256 * This block contains the current start up number (SUN). * 1257 * The SUN is used to validate file use counts. It is an eight * 1258 * bit counter that is incremented every time that the system * 1259 * is started, with counts of zero mod 256 being skipped. * 1260 * * 1261 * The SECMNTDAT field is the date of the most recent event * 1262 * that allowed the above ADT lists to be altered. Specifically, * 1263 * it is set when the pack is initialized, rebuilt, mounted, * 1264 * or recovered full volume style. It is used by the online MS * 1265 * driver to ensure that a pack being remounted has not had its * 1266 * ADTs corrupted while the drive was down (for example, by * 1267 * moving the pack to another system). This provides a finer * 1268 * granularity than the pack format date alone. It also works * 1269 * (prevents remount) if two or more packs have the same format * 1270 * date (i.e. some dick copied the pack label and didn't change * 1271 * PLINITDATE). This field was added 17 June 1988. Older packs * 1272 * have this field 0, and we fall back on the PLINITDATE until * 1273 * one of the above operations is performed. This also works * 1274 * for packs whose security blocks can't be read when the drive * 1275 * is spun up, but get initialized online (initializer should * 1276 * request the ORINITFMT OPREQ before starting). * 1277 * * 1278 * Note: System routines that update SECMNTDAT must take care * 1279 * to ensure that the volume will always be remountable, because * 1280 * VOLNMNTDAT can't possibly match both the old and the new * 1281 * values. These routines should copy the MDVFMTDAT to the * 1282 * VOLNMNTDAT just before the security blocks are written. * 1283 * After the writes complete, the new SECMNTDAT is valid and * 1284 * should be copied into the VOLNMNTDAT. * 1285 * * 1286 * The security block may also contain the most recent * 1287 * startup dates, backup date information, and information * 1288 * regarding the useability of this volume (tables destroyed * 1289 * by mass storage errors, etc.). * 1290 * * 1291 * The security block also contains a backup key unique * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 105 (DISKDEFS) F 8 Disk Data Structures 1292 * to this system. This key is used by both backup and recovery * 1293 * routines. Since it is not available from a backup tape, * 1294 * the key must be provided by the security block of the system * 1295 * that it is being loaded on, or by the operator/manager. * 1296 * * 1297 * The security block is written into two blocks. * 1298 * The first error free read is used as the new manager * 1299 * block. In the event of a system crash between writes, * 1300 * either copy should be usable with the potential loss * 1301 * of only the last transaction. * 1302 * * 1303 * CRASH RESISTANCE * 1304 * Any entry being made in this block should relate to * 1305 * an already completed data structure. Any entry being * 1306 * removed from this block should be removed before any * 1307 * alteration of the entries data structure. * 1308 * * 1309 * MASS STORAGE ERRORS * 1310 * Pointers in volume label. May be moved, but * 1311 * the correct pointer must be placed into the volume * 1312 * label (may not use the substitution list). * 1313 * If neither security block can be read, the volume may * 1314 * not be used. Recovery must find all of the dependent * 1315 * blocks to be complete, although the entire user file * 1316 * structure will be completely recovered. * 1317 * * 1318 ********************************************************************************** 1319 000000FD ABS 1320 MAXIDXSIZE EQU 253 maximum number of blocks allowed in IDX 000000FD ABS 1321 MAXAFTSIZE EQU MAXIDXSIZE maximum number of blocks allowed in AFT 00000008 ABS 1322 SECADTNUM EQU 8 number of ADT chains 1323 1324 ********************************************************************************** 1325 * * 1326 * Hashing function for the IDX and AFT tables. * 1327 * $(1) = an available register * 1328 * $(2) = the next register, the result is left here * 1329 * $(3) = location of account name (double word) * 1330 * $(4) = location of project name * 1331 * $(5) = location of number of buckets * 1332 * * 1333 ********************************************************************************** 1334 1335 IDXHASH MACRO 1336 $L LD2 $(1) $(3) get the account name into $(1) and $(2) 1337 XOR $(2) $(1)/BITS 8:7 mix up the account number 1338 LD $(1) $(4) fetch up the project 1339 XOR $(2) $(1)/BITS 16:15 mix in the project shifted 1340 LD $(1) 0 initialize register for marth 1341 IORPSR PSRMODIF say that we want the remainder 1342 DIV $(1) $(5) divide by number of buckets 1343 CLBPSR PSRMODIF restore normalcy 1344 EMAC 1345 1346 BASE 00000000 DISP 1347 SECSUN BSS 1 bits 24:31 start up number 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 106 (DISKDEFS) F 8 Disk Data Structures 00000001 DISP 1348 SECBUDATE BSS 1 date of last backup 1349 00000002 DISP 1350 SECMNTDAT BSS2 1 date of last mount 1351 BSS 4 filler 1352 00000008 DISP 1353 SECADTTOP BSS SECADTNUM pointer to beginning of ADT chains 00000010 DISP 1354 SECADTBTM BSS SECADTNUM pointer to end of ADT chains 00000018 DISP 1355 SECADTCNT BSS SECADTNUM number of free blocks in each chain 1356 BSS 8 00000028 DISP 1357 SECIDXSIZ BSS 1 number of blocks in IDX 00000029 DISP 1358 SECAFTSIZ BSS 1 number of blocks in AFT 0000002A DISP 1359 SECIDXENTS BSS 1 number of entries in IDX 0000002B DISP 1360 SECAFTENTS BSS 1 number of entries in AFT 0000002C DISP 1361 SECIDXPTR BSS MAXIDXSIZE IDX table head 00000129 DISP 1362 SECAFTPTR BSS MAXAFTSIZE AFT table head (system volume only) 1363 00000226 DISP 1364 SECTZONE BSS 1 time zone and GMT displacement if system vol. 1365 * (PDT = -7, PST = -8, etc.) 1366 BSS2 1 filler 00000229 DISP 1367 SECLASTDT BSS2 1 last known date 0000022B DISP 1368 SECLASTSL BSS2 1 date when last slept or dismounted 0000022D DISP 1369 SECDATERR BSS 1 date correction in progress (correction in MS) 0000022E DISP 1370 SECDATDRFT BSS 1 date drift of SSU clock in ppb 1371 * + indicates clock slow, - sez fast 0000022F DISP 1372 SECDATCOR BSS2 1 date of last clock correction 1373 1374 ********************************************************************************** 1375 * The following locations contain the amount of hardware * 1376 * that was on the last time that the system was booted. This * 1377 * exists so that we can notify someone when the system is * 1378 * booted with less hardware than was expected. * 1379 ********************************************************************************** 1380 00000231 DISP 1381 SECNUMMCU BSS 1 number of MCUs 00000232 DISP 1382 SECNUMPAGE BSS 1 number of pages of memory 00000233 DISP 1383 SECNUMCPU BSS 1 number of CPUs 00000234 DISP 1384 SECNUMPPU BSS 1 number of PPUs 00000235 DISP 1385 SECNUMACC BSS 1 number of comm controllers 00000236 DISP 1386 SECNUMPORT BSS 1 number of ports 00000237 DISP 1387 SECNUMMSC BSS 1 number of disk controllers 00000238 DISP 1388 SECNUMDISK BSS 1 number of disk drives 00000239 DISP 1389 SECNUMLPC BSS 1 number of LP controllers 0000023A DISP 1390 SECNUMCTC BSS 1 number of CT controllers 0000023B DISP 1391 SECNUMCTU BSS 1 number of CT drives 0000023C DISP 1392 SECNUMMTC BSS 1 number of MT controllers 0000023D DISP 1393 SECNUMMTU BSS 1 number of MT drives 0000023E DISP 1394 SECNUMVTC BSS 1 number of VT controllers 0000023F DISP 1395 SECNUMVTU BSS 1 number of VT drives 00000240 DISP 1396 SECBKUPE LABEL end of backup information 1397 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 107 (DISKDEFS) F 8 Disk Data Structures 1399 1400 ********************************************************************************** 1401 * * 1402 * AVAILABLE DISK TABLE (ADT) * 1403 * * 1404 * The ADT consists of multiple chains of ADT blocks linked * 1405 * together with both forward and backward pointers. The * 1406 * security block has pointers to the head and tail of each ADT * 1407 * chain and the total number of free blocks in each chain. The * 1408 * reason that multiple chains are provided is so that fewer * 1409 * blocks must be searched over on crash recovery and so that a * 1410 * mass storage error can not cause more than one eighth of the * 1411 * available blocks to be lost. Another possible structure that * 1412 * could have been used is that of a RAF. However, in that type * 1413 * of structure, the loss of an access block causes far too many * 1414 * blocks to be lost. In the SAF type structure used here, the * 1415 * loss of a single block means that you must search the list * 1416 * from the known beginning and can recover all space except that * 1417 * contained in the bad block. * 1418 * * 1419 * Each ADT block is a single file block with entries that * 1420 * are the MS addresses of blocks that are available. Each ADT * 1421 * block could have from 0 to about BLOCKSIZE entries in it. A * 1422 * smaller maximum (ADTECNT) is set up so that fewer blocks are * 1423 * lost if a mass storage error occurs while reading an ADT * 1424 * block. The ADT block itself is available when empty. * 1425 * Therefore, the ADT requires, in effect, no MS space. If an * 1426 * ADT block is filled, a free block is acquired and it becomes * 1427 * the new tail of the current ADT chain. In the event that the * 1428 * current chain is full, the new block becomes the first block * 1429 * in a new chain. * 1430 * * 1431 * The system maintains a table in monitor memory containing * 1432 * a VOLN ("volume name element") for each mounted volume. This * 1433 * element contains a short list of available blocks. When the * 1434 * resident list gets nearly full or nearly empty, the current * 1435 * ADT block is read in and entries (block numbers) are * 1436 * transferred as appropriate to leave the resident list near * 1437 * half-full. The ADT block must be forced out before using any * 1438 * free blocks acquired from it. * 1439 * * 1440 * When file blocks are freed, they could be inserted into * 1441 * the resident ADT list in order. This feature was removed * 1442 * because of its overhead and insignificant performance * 1443 * improvement. Blocks are inserted into the current ADT block * 1444 * in order. This keeps available space assignment more * 1445 * localized. It also provides an opportunity to check for a * 1446 * block being freed twice (in which case the system halts and * 1447 * you either fix the bug in the system or you rebuild the disk * 1448 * structure). No effort is made to sort the entire ADT, * 1449 * although it should be created in order. * 1450 * * 1451 * CRASH RESISTANCE * 1452 * During system initialization, the security block is read * 1453 * in and the head and tail pointers and free block count for the * 1454 * first non-empty ADT chain are copied. The tail pointer in the * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 108 (DISKDEFS) F 8 Disk Data Structures 1455 * security block is then set to null. If the system was not * 1456 * properly terminated, the security block will contain a null * 1457 * tail pointer. In this case, the initialization routines * 1458 * search from the head down the forward links to rediscover the * 1459 * current tail of the chain and count the total number of free * 1460 * blocks available. The last legitimate ADT block in the chain * 1461 * will have either a null forward pointer or it will point to a * 1462 * block that was formerly an ADT block. In this case, the FBI * 1463 * type of the block will no longer be 'ADT' since such blocks * 1464 * are freed when emptied. * 1465 * * 1466 * It is possible that all existing ADT blocks are full when * 1467 * a block is freed. This results in an empty ADT block at the * 1468 * end of a chain. A later fetch will get that block as follows: * 1469 * The ADT block described by the tail pointer is read, its back * 1470 * pointer becomes the new tail pointer, and the block is * 1471 * overwritten. If the current chain is empty (the back pointer * 1472 * was null), then the security block is read in and the pointers * 1473 * and free block count for the next ADT chain are copied. * 1474 * * 1475 * When an ADT block fills up (has ADTECNT or more entries * 1476 * in it), a new block is added to the current ADT chain (or a * 1477 * new chain is begun if the current one is more than one eighth * 1478 * of the total volume size). To add an ADT block to the end of * 1479 * the current chain, a new block is selected (from amongst the * 1480 * free blocks in the current ADT block). The new block is given * 1481 * a null forward pointer and a backward pointer to the current * 1482 * tail block and is written to mass storage. The old tail is * 1483 * read in, given a new forward pointer to the new block, and * 1484 * rewritten. * 1485 * * 1486 * When the system is shut down, any free blocks residing * 1487 * in the resident tables must be placed onto the volume as * 1488 * described above. The security block is then read in and * 1489 * has the tail pointer and new free block count copied into it. * 1490 * * 1491 * MASS STORAGE ERRORS * 1492 * Pointers in the security block. May be substituted. If * 1493 * an error occurs while traversing the chain backwards (during * 1494 * normal use), the tail pointer is discarded and regenerated by * 1495 * a search from the chain head. If an error occurs while * 1496 * searching for the tail of an ADT chain (such as after a mass * 1497 * storage error or during initialization after a system crash), * 1498 * the bad block is treated as if it were a block beyond the end * 1499 * of the chain. If no ADT block is available, the volume has no * 1500 * remaining space and out-of-storage errors will occur. All * 1501 * data may be recovered from the volume. * 1502 * * 1503 ********************************************************************************** 1504 000000C8 ABS 1505 ADTECNT EQU 200 number of entries in each ADT block 1506 * note that ADTECNT must be less than 1507 * BLOCKSIZE to allow some work space 1508 * for the manager. 1509 1510 BASE 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 109 (DISKDEFS) F 8 Disk Data Structures 00000000 DISP 1511 ADTLIST BSS ADTECNT bits 8:31 - available block number 1512 * all zero indicates list end 1513 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 110 (DISKDEFS) F 8 Disk Data Structures 1515 1516 ********************************************************************************** 1517 * * 1518 * USER INDEX (IDX) * 1519 * A table which points to each user directory on this * 1520 * volume. The table is searched by account number, and yields * 1521 * the block number of that account's user directory. * 1522 * * 1523 * This table consists of enough blocks to hold all of the * 1524 * required entries with a little space left over. The index of * 1525 * these blocks is found in the security block. A hashing * 1526 * function is applied to the account/project in order to find * 1527 * the proper first block to search. The table may not grow * 1528 * larger than 'MAXIDXSIZE'. * 1529 * * 1530 * The IDX entry contains only the account name and * 1531 * directory address, and since things are arranged so that the * 1532 * root block of a directory (UDIR1) does not move, this table * 1533 * is updated infrequently. * 1534 * * 1535 * Entries consist of the name of the account followed by * 1536 * the mass storage address (on this volume) of the directory * 1537 * (UDIR1) for that account. When searching the IDX block from * 1538 * the beginning to the end, encountering an "empty entry" * 1539 * (account name and project all zeros) sez that the rest of the * 1540 * IDX block is empty also. Since entries may overflow a block * 1541 * into the next block, and since overflow is sensed by reaching * 1542 * the end of the block without finding an empty entry, if an * 1543 * account is deleted we cannot just remove it and repack the * 1544 * IDX. Entries are deleted by writing all ones (-1) over the * 1545 * account and project. These "place holders" may be used up * 1546 * when a new account is created, but must be searched over when * 1547 * looking for an account. * 1548 * * 1549 * CRASH RESISTANCE * 1550 * When a new account is created, the user directory must * 1551 * be initialized on the volume before the IDX may point to it. * 1552 * When an account is destroyed, the account number must be * 1553 * removed from the IDX before the directory may be freed. * 1554 * * 1555 * MASS STORAGE ERRORS * 1556 * Pointers in the security block. May be moved, but the * 1557 * correct pointer must be placed in the security block (may not * 1558 * use the substitution list). If the IDX can not be read, the * 1559 * volume may not be used. Recovery must find all user * 1560 * directories and discard the freed but not desecrated * 1561 * directories in order to be complete. * 1562 * * 1563 ********************************************************************************** 1564 1565 BASE R6 00178800 6 BASE 1566 IDXACNO BSS2 1 account name 00178802 6 BASE 1567 IDXACNOP BSS 1 division-project 1568 * following word zero sez list end 00178803 6 BASE 1569 IDXDIRDA BSS 1 user directory address 00178804 6 BASE 1570 IDXDIRDA2 BSS 1 secondary directory address 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 111 (DISKDEFS) F 8 Disk Data Structures 00000005 ABS 1571 IDXLNTH EQU DISPW IDXACNO entry length 000000CC ABS 1572 IDXECNT EQU BLOCKSIZE/IDXLNTH number of entries 1573 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 112 (DISKDEFS) F 8 Disk Data Structures 1575 1576 ********************************************************************************** 1577 * * 1578 * USER LIMIT FIELD * 1579 * Here we define a small block that contains * 1580 * all information concerning an accounts limits and * 1581 * privileges. Space is reserved for this block in * 1582 * both the user directory and the resident user limit * 1583 * block (ULB). When a ULB is created, the user limit * 1584 * information is copied into the resident block and * 1585 * the ULB is the current authority. In the event of * 1586 * a system crash, the UDIR user limits are the backup. * 1587 * When a ULB is destroyed, the user limits are copied * 1588 * back to the directory. * 1589 * * 1590 ********************************************************************************** 1591 0000079C 1592 LIMITS BASE R4 00170800 4 BASE 1593 RESTRWORD BSS 1 acct restrictions (catrd, etc) 00000050 BYTE 1594 XREQRSTR EQU BITS 0:4 indicates requests that are restricted 00170801 4 BASE 1595 PRIVWORD BSS 1 privilege word (manager access) 00000040 BYTE 1596 LIMFACCESS EQU BITS 0:3 file access control 00000840 BYTE 1597 LIMPACCESS EQU BITS 4:7 password access control 1598 * EQU BITS 8:12 unused 00001A50 BYTE 1599 LIMLOGSPOT EQU BITS 13:17 where to write accounting files 1600 see FDE format note on privileges 1601 bit definitions for these fields 00003E10 BYTE 1602 LIMACSALW EQU BIT 31 always (maintenance) 00003C10 BYTE 1603 LIMACSSYS EQU BIT 30 access to system manager 00003A10 BYTE 1604 LIMACSDIV EQU BIT 29 access to division manager 00003810 BYTE 1605 LIMACSPROJ EQU BIT 28 access to project manager 00003610 BYTE 1606 LIMACSUSR EQU BIT 27 access of user (implied on) 1607 00170802 4 BASE 1608 TIMLIM BSS 1 time limit (in seconds) 00170803 4 BASE 1609 TIMUSD BSS 1 time used (in seconds) 00170804 4 BASE 1610 WLCKLIM BSS 1 wall clock limit (in minutes) 00170805 4 BASE 1611 WLCKUSD BSS 1 wall clock time used (in minutes) 00090186 4 ZBM 1612 DSKSAVL BSSB MSBLKLOG saved disk blocks limit 00093186 4 ZBM 1613 DSKWARN BSSB MSBLKLOG disk block warning limit 00092187 4 ZBM 1614 DSKLIM BSSB MSBLKLOG disk block hard limit 00091188 4 ZBM 1615 DSKUSD BSSB MSBLKLOG disk blocks used 1616 BSS 0 force a word boundary 1617 DRCT 00000009 ABS 1618 LIMITSIZE EQU DISPW LIMITS size of the limits block 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 113 (DISKDEFS) F 8 Disk Data Structures 1620 1621 ********************************************************************************** 1622 * * 1623 * SHARED LISTS * 1624 * Shared lists are provided to give a list of other * 1625 * accounts which are allowed access and to indicate the * 1626 * type of access allowed. There may also be a password * 1627 * associated with the allowed access. * 1628 * Each user directory and each file directory entry * 1629 * contain a shared list. Since the most likely 'shares' * 1630 * are with no one and with only one other account, the * 1631 * share lists in directories and file directory entries * 1632 * are just long enough to hold one simple share list * 1633 * element. If the shared list is larger, either for * 1634 * a more complex element or for more than one element, * 1635 * the short shared list in the directory or FDE will be * 1636 * a pointer to a complete MS block containing the shared * 1637 * list (see its format under SHARED LIST BLOCK). * 1638 * * 1639 ********************************************************************************** 1640 1641 ********************************************************************************** 1642 * * 1643 * SHARED LIST BLOCK (SLB) * 1644 * A block containing shared list entries for a user * 1645 * directory or individual file if the list is too large * 1646 * to be kept in the short area allocated in the UDIR1 * 1647 * block or the FDE. * 1648 * * 1649 * The user directory block and the file directory entry * 1650 * have an area large enough to hold one short shared list * 1651 * entry but if more sharing than that is done, the shared list * 1652 * is put into a disk block that is pointed to by the first * 1653 * word of the entry in the UD or FDE. * 1654 * * 1655 * Shared list entries give the account shared with and the * 1656 * privileges afforded to him. They may also give a password if * 1657 * required. The privileges given by the shared list entry are: * 1658 * 1) read/write - whatever the access code is on the * 1659 * file entry itself. * 1660 * 2) read only - cannot write there upon. * 1661 * 3) modify - file access privileges and ability to change * 1662 * the access attributes. * 1663 * * 1664 * CRASH RESISTANCE * 1665 * This block may be changed in place but remember to write * 1666 * the initial block to the disk before pointing anything * 1667 * to it. * 1668 * * 1669 * MASS STORAGE ERRORS * 1670 * May be substituted. A mass storage error * 1671 * returns a "Disk Structure Error" to the * 1672 * requesting process. * 1673 * * 1674 ********************************************************************************** 1675 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 114 (DISKDEFS) F 8 Disk Data Structures 1676 1677 ********************************************************************************** 1678 * * 1679 * SHARED LIST ENTRY * 1680 * This format applies to all shared list entries. * 1681 * Note that a shared list entry in a shared list block * 1682 * (that is, in a separate block on mass storage) may * 1683 * not point to yet another shared list block. * 1684 * * 1685 ********************************************************************************** 1686 1687 BASE R3 shared list entry 0016C800 3 BASE 1688 SHLFLAGW BSS 1 this first word of a shared list entry 1689 * may either contain a block number (if the flag bit 1690 * is on) or indicate that an account number follows. 00000010 BYTE 1691 SHLDSKFLGB EQU BIT 0 one sez this SHLFLAGW contains 1692 * the MS address of the actual share list 0008C010 3 ZBM 1693 SHLDSKFLG EQU SHLFLAGW/SHLDSKFLGB 0008D180 3 ZBM 1694 SHLDISK EQU SHLFLAGW/MSBLKFIELD block number if above flag is on 0008C210 3 ZBM 1695 SHLACTPW EQU SHLFLAGW/BIT 1 if on, a password follows 0008C410 3 ZBM 1696 SHLACTSYS EQU SHLFLAGW/BIT 2 on if system specified 0008C220 3 ZBM 1697 SHLACTOPT EQU SHLFLAGW/BITS 1:2 flags for optional stuff 0008C630 3 ZBM 1698 SHLACTPRIV EQU SHLFLAGW/BITS 3:5 privilege given this acct 00000000 ABS 1699 SHLACTPRVW EQU 0 allowed file access code of FDE (FDACCESS) 00000001 ABS 1700 SHLACTPRVR EQU 1 read only access 00000002 ABS 1701 SHLACTPRVM EQU 2 file access and modify priv 00000003 ABS 1702 SHLACTPRVX EQU 3 execute only access 0008CC10 3 ZBM 1703 SHLENTRYF EQU SHLFLAGW/BIT 6 on if an entry present 0016C801 3 BASE 1704 SHLACCT BSS2 1 account that is allowed access 0016C803 3 BASE 1705 SHLACCTP BSS 1 division-project 00000004 ABS 1706 SHLENTLEN EQU DISPW SHLFLAGW length of entry 0016C804 3 BASE 1707 SHLPWORD BSS2 1 password for the privilege 00000006 ABS 1708 SHLENTPLEN EQU DISPW SHLFLAGW length if PW included 0016C806 3 BASE 1709 SHLACCTSYS BSS 1 system that account is on (-1 => this system) 00000007 ABS 1710 SHLENTSLEN EQU DISPW SHLFLAGW length if system specified 1711 DRCT 1712 00000004 ABS 1713 UDSHLSIZE EQU 4 size of share lists in directory 1714 * This is adequate for a single entry 1715 * with no password or else a pointer 1716 * to a shared list mass storage block. 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 115 (DISKDEFS) F 8 Disk Data Structures 1718 1719 ********************************************************************************** 1720 * * 1721 * AUTHORIZATION LIST * 1722 * The authorization list consists of a header followed * 1723 * by a variable number of entries. * 1724 * The system manager does not need auth list entries, * 1725 * he is presumed to have authority over all system resources. * 1726 * He, however, must explicitly delegate authority to each * 1727 * manager to 1) allocate time and 2) allocate space on a * 1728 * given volume. The time allocatable and allocated is kept * 1729 * in the auth list header and the MS space allocatable and * 1730 * allocated is kept in the individual auth list entries for * 1731 * each separate volume. * 1732 * * 1733 * CRASH RESISTANCE * 1734 * This block may be changed in place but remember to write * 1735 * the initial block to the disk before pointing anything * 1736 * to it. * 1737 * * 1738 * MASS STORAGE ERRORS * 1739 * May be substituted. A mass storage error * 1740 * returns a "Disk Structure Error" to the * 1741 * requesting process. * 1742 * * 1743 ********************************************************************************** 1744 1745 BASE auth list header 00000000 DISP 1746 AUTHTIME BSS 1 seconds allocatable by account 00000001 DISP 1747 AUTHTIMEA BSS 1 allocated auth time 1748 BSS 2 room for expansion 00000004 DISP 1749 AUTHENTBG LABEL beginning of volume auth list 1750 DRCT 1751 000007B0 1752 AUTHLENTRY BASE R3 auth list entry 0016C800 3 BASE 1753 AUTHVNAME BSS2 1 room for a volume name 1754 BSS 1 unused 1755 BSS 1 unused 0016C804 3 BASE 1756 AUTHDSK BSS 1 amount of disk space allocatable 0016C805 3 BASE 1757 AUTHDSKA BSS 1 amount of disk space allocated 0016C806 3 BASE 1758 AUTHSDSK BSS 1 amount of saved disk space allocatable 0016C807 3 BASE 1759 AUTHSDSKA BSS 1 amount of saved disk space allocated 1760 BSS 4 room for expansion 1761 DRCT 0000000C ABS 1762 AUTHLELEN EQU DISPW AUTHLENTRY 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 116 (DISKDEFS) F 8 Disk Data Structures 1764 1765 ********************************************************************************** 1766 * * 1767 * FILE DIRECTORY ENTRY (FDE) * 1768 * Each FDE represents one file. These entries may * 1769 * appear only in user directories. They appear in the * 1770 * index area of a UDIR1 for a small directory, and they * 1771 * appear in UDIR2 blocks for large directories. * 1772 * * 1773 ********************************************************************************** 1774 000007BC 1775 FDEPROT BASE R3 0016C800 3 BASE 1776 FDSTART BSS 0 account number (implicit!) 1777 * The following thing is here to make the first word of 1778 * a used file directory entry non-zero. 0016C000 3 CACH 1779 FDSUN BSSB 8 SUN to validate use counts 0008D040 3 ZBM 1780 FDACSLK BSSB 4 access lock bits - unused 1781 * controls who may change acct privileges 1782 * EQU BIT 31 access locked by maintenance 1783 * EQU BIT 30 access locked by owner (MANAGER.SYS) 1784 * EQU BIT 29 access locked by division (MANAGER.ddd) 1785 * EQU BIT 28 access locked by project (MANAGER.dddppp) 0008D830 3 ZBM 1786 FDPRIV BSSB 3 privilege allowed to this file 00000000 ABS 1787 FDACSRW EQU 0 read/write 00000001 ABS 1788 FDACSRO EQU 1 read only 00000002 ABS 1789 FDACSAO EQU 2 append only 00000003 ABS 1790 FDACSXO EQU 3 execute only 00000004 ABS 1791 FDACSMW EQU 4 multiple write allowed 00003E10 BYTE 1792 FDACSNWB EQU BIT 31 if one, no write allowed 0008DE10 3 ZBM 1793 FDFBD BSSB 1 file being destroyed bit 0008E010 3 ZBM 1794 FDNBU BSSB 1 no backup flag 0008E210 3 ZBM 1795 FDRFB BSSB 1 indicates recovered from backup 0008E410 3 ZBM 1796 FDPURG BSSB 1 indicates this file purged 1797 * if purged, other fields indicate 1798 * where to find the actual file. 0008E610 3 ZBM 1799 FDFWWSC BSSB 1 1 sez file equipped for write when system crashed 0008E810 3 ZBM 1800 FDLRAF BSSB 1 a one sez a large .RAF (see note) 0008EA60 3 ZBM 1801 FDET BSSB 6 entry type and access control 1802 * entry types for all equipable units are defined here. 1803 * code entry type (* sez may be directory entry) 00000001 ABS 1804 HTYPESAF EQU 1 SAF * 00000002 ABS 1805 HTYPERAF EQU 2 RAF * 00000003 ABS 1806 HTYPECODE EQU 3 code file * 00000004 ABS 1807 HTYPEPATH EQU 4 communication path * 00000005 ABS 1808 HTYPEDIR EQU 5 directory 00000006 ABS 1809 HTYPENULL EQU 6 output eater 00000007 ABS 1810 HTYPETERM EQU 7 interactive terminal * 1811 * EQU 8 unused (was lock) * 00000009 ABS 1812 HTYPETASK EQU 9 a 'batch' job submission unit 0000000A ABS 1813 HTYPECDR EQU 10 a card reader 0000000B ABS 1814 HTYPELP EQU 11 a line printer 0000000C ABS 1815 HTYPEMT EQU 12 magnetic tape * 0000000D ABS 1816 HTYPECT EQU 13 cartridge magnetic tape * 0000000E ABS 1817 HTYPEVOL EQU 14 a volume 0000000F ABS 1818 HTYPEVT EQU 15 video tape * 00000010 ABS 1819 HTYPELAST EQU 16 after last HTYPE 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 117 (DISKDEFS) F 8 Disk Data Structures 1820 0008F610 3 ZBM 1821 FDGHOST BSSB 1 file is a ghost (not yet recovered from backup) 0008F810 3 ZBM 1822 FDTRANS BSSB 1 file opened when user program crashed 0008FA10 3 ZBM 1823 FDFLOG BSSB 1 log file access when set 0008FC20 3 ZBM 1824 FDRAFTYPE BSSB 2 type of RAF file we have (see note) 00000000 ABS 1825 RAFTEMPTY EQU 0 00000001 ABS 1826 RAFTTINY EQU 1 00000002 ABS 1827 RAFTSMALL EQU 2 00000003 ABS 1828 RAFTLARGE EQU 3 1829 0008C101 3 ZBM 1830 FDCUSE BSSB 16 current use count 1831 BSSB 16 filler 0016C802 3 BASE 1832 FDNAME BSS2 1 file name - RAD40 0016C804 3 BASE 1833 FDEXTEN BSS 1 filename extension 1834 BSSB 32-MSBLKLOG filler to right justify MS address 0008D185 3 ZBM 1835 FDDA BSSB MSBLKLOG block number of the file head 0016C018 3 CACH 1836 FDPURGE BSSB 8 purge interval 0000005A ABS 1837 PURGESDV EQU 90 system default value - purge interval 0008D186 3 ZBM 1838 FDLEN BSSB MSBLKLOG file length 1839 * file lengths are only for accounting. 1840 * actual length determined by the structure 0016C807 3 BASE 1841 FDLCD BSS 1 last changed date 0016C808 3 BASE 1842 FDLACC BSS 1 last accessed date 0016C809 3 BASE 1843 FDLBU BSS 1 last backup date 0016C80A 3 BASE 1844 FDSERNO BSS2 1 file serial number 1845 * FDSERNO(0) device type code for hardware devices 1846 * FDSERNO(1) unit # for hardware devices 0016C80C 3 BASE 1847 FDACCESSES BSS 0 label for following 3 fields taken collectively 0008C10C 3 ZBM 1848 FDRACS BSSB 16 read current access count 0008E01C 3 ZBM 1849 FDWACS BSSB 1 write current access count 0008E2FC 3 ZBM 1850 FDMWACS BSSB 15 multiple write current access count 0008C10D 3 ZBM 1851 FDRUSE BSSB 16 total read use count 0008E10D 3 ZBM 1852 FDWUSE BSSB 16 total write use count 0016C80E 3 BASE 1853 FDUSRFLD BSS 1 user defined field 0016C80F 3 BASE 1854 FDCREDAT BSS 1 creation date 0016C810 3 BASE 1855 FDEPP BSS 1 file end byte position pointer 0016C811 3 BASE 1856 FDEND BSS 1 disk block for end of file 1857 BSS 24-UDSHLSIZE-(DISPW FDSTART) push shared list to end 0016C814 3 BASE 1858 FDSHL BSS UDSHLSIZE file directory entry share list 1859 DRCT 00000018 ABS 1860 FDLNTH EQU DISPW FDEPROT length of a directory entry 1861 1862 ********************************************************************************** 1863 * * 1864 * FILE DIRECTORY ENTRY * 1865 * * 1866 * CURRENT USE COUNTS * 1867 * File current use counts are stored in the directory * 1868 * entry for a file. These use counts are valid only if the * 1869 * SUN stored in the file directory entry is the same as the * 1870 * current SUN. A difference here indicates that the use * 1871 * counts are left over from a previous access during which * 1872 * the system crashed. * 1873 * * 1874 * When a user equips a file with a non-current SUN * 1875 * and a non-zero current write access count, the FWWSC * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 118 (DISKDEFS) F 8 Disk Data Structures 1876 * bit is set indicating that the file was equipped for * 1877 * writing at the time of a system crash. This is to give * 1878 * the user an opportunity to recover as he sees fit. * 1879 * When a user equips a file with a non-current SUN, the * 1880 * use counts are set to zero plus this new access and * 1881 * the SUN is set current. * 1882 * * 1883 * False file use counts are possible only if the * 1884 * system was restarted 255 times without a reference to * 1885 * a given file. These false use counts are inconvenient * 1886 * but fail-safe. * 1887 * * 1888 * FILE BEING DESTROYED * 1889 * A file busy for read or write may not be deleted * 1890 * directly. However, a process with modify privilege may * 1891 * discard a file at any time by setting the 'file being * 1892 * destroyed' bit. The file will then be deleted when the * 1893 * last user unequips it and its use count becomes zero. * 1894 * * 1895 * A exchange save creates the same condition if the * 1896 * saved file is busy: the old entry may be left to control * 1897 * the file being destroyed and a new entry (with the same * 1898 * name) is created for the new file. * 1899 * * 1900 * RAF type (FDLRAF and FDRAFTYPE fields) * 1901 * The original system implemented only two types of * 1902 * RAFs... 'small', including a single minor index block which * 1903 * points directly to data blocks, and 'large', having a major * 1904 * access block which points to WPP minor index blocks. * 1905 * A disk type revision implemented two new RAF types... * 1906 * 'tiny', with only one data block, and 'empty', with no data * 1907 * blocks. Rather than force a major conversion effort, the * 1908 * entries may be of either type on the more recent format * 1909 * disk. (The format is updated to prevent old systems from * 1910 * getting and attempting to use new format entries). * 1911 * The conversion of a directory entry is as follows: * 1912 * Check the new type field (FDRAFTYPE) for zero ('empty'). * 1913 * If it is not, the conversion is already done. If the * 1914 * FDRAFTYPE field is zero, verify that the file is indeed * 1915 * empty by checking FDDA. If it is non-zero, then a * 1916 * conversion is needed. Check (and clear) the old FDLRAF * 1917 * field. If it was a zero, set FDRAFTYPE to 'small', else * 1918 * 'large'. * 1919 * * 1920 * MULTIPLE ACCESS * 1921 * Whenever a file is equipped to, FDCACS (current access * 1922 * count) is incremented for each access to the file. If the * 1923 * equip is for read-only (ie, the accessor is requesting only * 1924 * read access to the data), then FDRACS is incremented. If * 1925 * the equip is for read/write, FDWACS is incremented. If the * 1926 * access is for multiple write, FDMWACS is incremented. If * 1927 * the equip is for "no data access" (ie, the accessor requests * 1928 * no access to the data), then neither RACS, WACS or MWACS is * 1929 * incremented, thus busying the file but not disallowing access * 1930 * to the data in the file. * 1931 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 119 (DISKDEFS) F 8 Disk Data Structures 1932 * Sequential files may not be open for write and any * 1933 * other data access simultaneously. * 1934 * * 1935 * RAFs may be open for general write access by no more than * 1936 * one user at a time. RAFs may be open for write by many users * 1937 * with 'multiple write' privilege. At one time, only large RAFs * 1938 * could be open multiple write. However, the implementation of * 1939 * global file control blocks in the system allows any RAF to be * 1940 * open multiple write. * 1941 * * 1942 * Pages cannot be deleted from a RAF that is open multiple * 1943 * write. * 1944 * * 1945 * Code files follow the same rules as for RAFs except * 1946 * that multiple write access is not allowed. Therefore, if * 1947 * users are executing a code file, the pages that they are * 1948 * executing from may not be altered by the owner. * 1949 * * 1950 * FILE SERIAL NUMBERS * 1951 * Every file created by the system is given a unique number * 1952 * to identify the file even if it is renamed by the user. The * 1953 * number, although given 64 bits, is actually the system's 44 bit * 1954 * millisecond clock when the file was first created. The * 1955 * millisecond clock in memory (not the actual system clock) is * 1956 * incremented after each fetch of a file serial number so that * 1957 * duplicate numbers are not given out. * 1958 * Serial numbers are specially coded if the file corresponds * 1959 * to a real hardware device. In this case, the upper 32 bits of * 1960 * the file serial number denote the hardware type of the device, * 1961 * and the lower 32 bits denote the particular device unit number. * 1962 * In particular, saved terminals use the port number as the lower * 1963 * 32 bits. This is so that a device controller may search for an * 1964 * entry without knowing its name and so that devices that are not * 1965 * assigned via the saved files may interface with same. * 1966 * * 1967 * PURGE * 1968 * Purge intervals are set to the system default value * 1969 * (90 days) when a file is created. They may be altered by * 1970 * command. Files with longer purge intervals might be more * 1971 * expensive. * 1972 * * 1973 * The file becomes subject to purge if the time since * 1974 * last access exceeds the purge interval. A purge interval of * 1975 * zero indicates never purge. * 1976 * * 1977 * The system manager is provided with a variation of * 1978 * the backup routine called PURGE which backs up all files * 1979 * subject to purge and deletes them from the volume. The * 1980 * file directory entry might remain to indicate the disposition * 1981 * of the file. * 1982 * * 1983 * The alternative of automatically doing PURGE with every * 1984 * backup was rejected because: * 1985 * 1.) it may be totally unnecessary (more than adequate * 1986 * space remains on mass storage) * 1987 * 2.) all backup tapes must be saved indefinitely * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 120 (DISKDEFS) F 8 Disk Data Structures 1988 * * 1989 * Regardless of whether or not the operator uses purge, if * 1990 * the user desires, he should be notified of files that are * 1991 * subject to purge. This may be done by the hello program or * 1992 * by a periodic billing program. Also, catalogs should have * 1993 * files which are subject to purge marked in some manner. * 1994 * * 1995 * Files already purged are marked in catalogs. They * 1996 * are billable against the user at a flat fee each to prevent * 1997 * their proliferation. They may be killed at any time * 1998 * without reference to the backup tape. * 1999 * * 2000 * Purge intervals shorter than a week could be treated * 2001 * as if they were temporary files. When they exceed their * 2002 * purge interval, the next backup deletes them. This * 2003 * feature is not implemented in the current backup system. * 2004 * * 2005 * SHARED LIST * 2006 * The shared account list pointer is originally null, * 2007 * indicating shared with no one. It may point to a file block * 2008 * containing a list of authorized users and the access * 2009 * privileges that they are allowed. * 2010 * * 2011 * In addition, the file block may contain a password * 2012 * that must be matched by a process before it is granted * 2013 * access. * 2014 * * 2015 * MISC. * 2016 * The UDPRIORITY field is provided for use by the * 2017 * scheduler in setting user priorities. There is currently * 2018 * no function to set this field, but the value found in it * 2019 * (it may be set with PEEK&POKE) is actually used by the * 2020 * scheduler to modify its treatment of a user process. * 2021 * * 2022 * MANAGER PRIVILEGES * 2023 * Two fields are provided in the UD to control access * 2024 * by manager accounts. These fields are "manager file * 2025 * access" and "manager password access". When an account is * 2026 * created, these bits are set according to the MGR program * 2027 * defaults. These bits may only be set by the user and may * 2028 * only be cleared by the appropriate manager account. * 2029 * * 2030 * The manager file access bit when set allows the * 2031 * manager account modify privilege over the user's * 2032 * directory and files. This bit is normally set by a user * 2033 * when he has gotten himself into a hole (forgetting a file * 2034 * password, etc) and requires someone to set things right. * 2035 * With this bit on, a manager account may equip and modify * 2036 * any file on the user's account without supplying * 2037 * passwords. * 2038 * * 2039 * The manager password access bit allows the manager * 2040 * account to alter the logon password of the account, the * 2041 * FAC bit, the default restrictions, and the accounting * 2042 * control field. * 2043 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 121 (DISKDEFS) F 8 Disk Data Structures 2044 * On some systems, the managers may wish to have the * 2045 * privilege of free access to their underlings directorys * 2046 * and passwords in which case the account creation default * 2047 * may be changed to create the accounts with these manager * 2048 * access bits set. * 2049 * * 2050 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 122 (DISKDEFS) F 8 Disk Data Structures 2052 2053 ********************************************************************************** 2054 * * 2055 * USER DIRECTORY (UDIR) * 2056 * * 2057 * This table is the repository for all system * 2058 * knowledge of an account and its privileges. The first * 2059 * 96 words of the primary directory block are reserved * 2060 * for all information other than the file directory. * 2061 * * 2062 * The first block of the UDIR has 928 words available * 2063 * for file directory use. If the entire file directory can * 2064 * fit into this space, it is so stored. The capacity of * 2065 * this type of directory is 38 entries (928/24). * 2066 * * 2067 * When the file directory overflows this space, a new * 2068 * block is acquired, and the current file directory * 2069 * written to it. The 928 words in the primary block is used * 2070 * as an index to this block (and other blocks added later) * 2071 * similar to a RAF minor access block. Each pointer requires * 2072 * 5 words, one for a block number and count of the number of * 2073 * entries in that block, one for a secondary UDIR mass * 2074 * storage address, and three to hold the name and extension * 2075 * of the first entry in that block. The directory may have * 2076 * up to 185 (928/5) pointers to secondary blocks. * 2077 * * 2078 * When deletions occur, the deleting routine checks the * 2079 * size of the adjacent blocks to see if two can be combined. * 2080 * The test for recombination must have sufficient hysteresis * 2081 * to prevent thrashing with alternating deletions and * 2082 * insertions. Currently, the combined block must be no more * 2083 * than 2/3 full (a total of 28 entries prevents combining). * 2084 * * 2085 * Each secondary UDIR block is capable of holding * 2086 * 42 entries (1024/24). * 2087 * * 2088 * The ultimate capacity of this directory structure is * 2089 * 7770 entries (185*42). However, this directory structure * 2090 * can not be reliably filled to capacity. This is because * 2091 * after all secondary blocks are assigned, the next addition * 2092 * may need to go in a block that is completely full, even * 2093 * though many other blocks are only partially filled. The * 2094 * usable directory capacity depends upon the amount of * 2095 * hysteresis in the recombining algorithm, but in any event * 2096 * is under one half of the filled capacity. We will assume * 2097 * that 2500 entries are possible, based on the current * 2098 * recombining algorithm (best calculations seem to indicate * 2099 * that 2592 will always fit). * 2100 * * 2101 * This structure requires that the file directory be * 2102 * ordered by filename (a hashing function could have been * 2103 * used, but this was an effective and more useful method). * 2104 * A full catalog may print the directory as is (in name * 2105 * order). Catalog options are provided for partial catalogs * 2106 * such as only items saved since , only items * 2107 * accessed since , or the most recently saved * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 123 (DISKDEFS) F 8 Disk Data Structures 2108 * (accessed) items. The catalog may also be sorted so * 2109 * as to print in other than name order. * 2110 * * 2111 * The primary directory blocks never move. This allows * 2112 * the account finder table to contain the volume number and * 2113 * directory address of each account. * 2114 * * 2115 * CRASH RESISTANCE * 2116 * See IDX. When this table is set up to point to * 2117 * other blocks (such as a shared account list), those * 2118 * blocks must be written to the volume first and freed * 2119 * last. * 2120 * * 2121 * When the UDIR initially expands to two * 2122 * blocks (primary block and one secondary block), the new * 2123 * secondary block is created and written out, then the * 2124 * new format directory (now containing pointers to the * 2125 * secondary blocks) is written into the old position. * 2126 * * 2127 * If a secondary directory block overflows, it should * 2128 * be evenly divided between two new blocks, the updated * 2129 * primary directory block written out, and the original * 2130 * (overflowing) secondary directory block then freed. * 2131 * * 2132 * When two secondary blocks are to be combined, a third * 2133 * block is acquired and receives the information from the * 2134 * blocks being combined. The primary directory block is then * 2135 * updated and the two original blocks are freed. * 2136 * * 2137 * FILE DIRECTORY ENTRIES * 2138 * .SAF .RAF .CODE * 2139 * The original directory entry may be made with null * 2140 * pointers. When an initial block is assigned, its address * 2141 * may be entered into the file directory immediately because * 2142 * its FBI indicates that it is a free block until * 2143 * the initializing write has occurred. * 2144 * * 2145 * Any other blocks referenced by a file directory * 2146 * entry (share list for example) should be in place on the * 2147 * volume before the file directory entry or update is made. * 2148 * * 2149 * MASS STORAGE ERRORS * 2150 * Pointers to the primary UDIR block are in the IDX * 2151 * and AFT. Pointers to secondary UDIR blocks are in the * 2152 * primary UDIR. May be substituted. This user will get * 2153 * DSE status on any request referencing an unavailable * 2154 * block. Recovery must find all of the dependent items * 2155 * (files, share lists, etc.) in order to rebuild the * 2156 * defective block. The appropriate manager may be required * 2157 * to re-establish limits, authorities, and passwords. * 2158 * * 2159 ********************************************************************************** 2160 2161 BASE 00000000 DISP 2162 UD LABEL 00000000 DISP 2163 UDACCT BSS2 1 account name 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 124 (DISKDEFS) F 8 Disk Data Structures 00000002 DISP 2164 UDPROJ BSS 1 division-project 00000003 DISP 2165 UDPASS BSS2 1 logon password 2166 BSS 5 filler 2167 0000000A DISP 2168 UDWORDB BSS 1 0008001A 0 ZBM 2169 UDTYPE EQU R0,UDWORDB/BIT 0 0 => complete file directory 2170 * 1 => index to file directory 0000000B DISP 2171 UDHPRAC BSS2 1 hello program account name 0000000D DISP 2172 UDHPRACP BSS 1 hello program account division-project 0000000E DISP 2173 UDHPRACPW BSS2 1 hello program account password 00000010 DISP 2174 UDHPR BSS2 1 hello program name 00000012 DISP 2175 UDHPREXT BSS 1 hello program extension 00000013 DISP 2176 UDHPRPW BSS2 1 hello program password 00000015 DISP 2177 UDBYEAC BSS2 1 bye program account name 00000017 DISP 2178 UDBYEACP BSS 1 bye program account division-project 00000018 DISP 2179 UDBYEACPW BSS2 1 bye program account password 0000001A DISP 2180 UDBYE BSS2 1 bye program name 0000001C DISP 2181 UDBYEEXT BSS 1 bye program extension 0000001D DISP 2182 UDBYEPW BSS2 1 bye program password 0000001F DISP 2183 UDSFLAGS BSS 1 subsystem control flags 2184 * e.g. system is BASIC only. subsystems 2185 * may test these to control prompts, etc. 00000010 BYTE 2186 UDENCRFLG EQU BIT 0 flag sez to encrypt account info on backup 00000020 DISP 2187 UDSERNO BSS2 1 account serial number 2188 BSS 7 filler 00000029 DISP 2189 UDPRIORITY BSS 1 priority for this account 0000002A DISP 2190 UDPRIVS BSS 1 privileges 2191 2192 * The limit block for an account is kept in 2193 * main memory as long as a user is logged onto that 2194 * account or a file on that account is equipped. 2195 * Only one limit block for each account is kept 2196 * at any time: all users will point to the same block. 2197 0000002B DISP 2198 UDLIMITS LABEL beginning of the limit block 2199 BSS LIMITSIZE user limit info - see previous definitions 2200 BSS 011-LIMITSIZE room to expand user limit information 2201 0000003C DISP 2202 UDSHLLIST BSS UDSHLSIZE directory share list 00000040 DISP 2203 UDAUTHLIST BSS 1 ptr to auth list, 0 if none 00000048 ABS 2204 UDTITLEL EQU 72 length of account title in chars 2205 BSS 96-UDTITLEL/CPW-DISPW UD allow fixed size for UD 0000004E DISP 2206 UDTITLE BSS UDTITLEL/CPW 72 chars for account title (trailing nulls) 00000060 DISP 2207 UDFDLIST LABEL beginning of file directory 2208 DRCT 2209 000003A0 ABS 2210 UDFDSIZE EQU BLOCKSIZE-(UDFDLIST DISPW UD) size of FD 00000026 ABS 2211 UDFDECNT EQU UDFDSIZE/FDLNTH number of FD entries 0000002A ABS 2212 UD2FDECNT EQU WPP/FDLNTH number of entries in UDIR2 2213 2214 ********************************************************************************** 2215 * This symbol is used by the directory searching * 2216 * routines to detect when they have reached the end of * 2217 * the valid information area in a block. It points to * 2218 * the last possible place where a file directory entry * 2219 * may start (an entry starting later would not be * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 125 (DISKDEFS) F 8 Disk Data Structures 2220 * entirely within the block). * 2221 ********************************************************************************** 2222 000003E8 ABS 2223 UDLFDE EQU BLOCKSIZE-FDLNTH last possible entry location 2224 2225 ********************************************************************************** 2226 * These symbols are used by the directory modifying * 2227 * routines for the ends of the valid areas in a block. * 2228 * They point to the first word of the last possible entry * 2229 * in a block of the type indicated. * 2230 ********************************************************************************** 2231 2232 * This symbol points to the first word of the last possible 2233 * file directory element in a small directory UDIR1 000003D8 ABS 2234 UD1LFDE EQU UDFDLIST+(UDFDECNT-1)*FDLNTH 2235 2236 * This symbol points to the first word of the last possible 2237 * file directory element in a large directory UDIR2 000003D8 ABS 2238 UD2LFDE EQU UD+(UD2FDECNT-1)*FDLNTH 2239 2240 * Entries in UDIR1 for an indexed directory 2241 00000834 2242 UDINDXPROT BASE R3 0016C800 3 BASE 2243 UDINDXNAM BSS2 1 name of first entry in pointed block 0016C802 3 BASE 2244 UDINDXEXT BSS 1 extension of first entry 0016C803 3 BASE 2245 UDINDXDAW BSS 0 whole word for count and MS address 0016C00C 3 CACH 2246 UDINDXNUM BSSB 8 number of entries in pointed block 0008D183 3 ZBM 2247 UDINDXADR BSSB MSBLKLOG MS address of directory block 0016C804 3 BASE 2248 UDINDXDA2 BSS 1 MS address of secondary UDIR block 2249 DRCT 2250 00000005 ABS 2251 UDINDXLEN EQU DISPW UDINDXPROT length of entry in index 000000B9 ABS 2252 UDINDCNT EQU UDFDSIZE/UDINDXLEN number of pointers in UDIR1 2253 2254 * This symbol points to the first word of the last possible 2255 * index entry in a large directory UDIR1 block 000003F8 ABS 2256 UD1LINDX EQU UDFDLIST+(UDINDCNT-1)*UDINDXLEN 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 126 (DISKDEFS) F 8 Disk Data Structures 2258 2259 ********************************************************************************** 2260 * * 2261 * SEQUENTIAL ACCESS FILE STRUCTURE (.SAF) * 2262 * Each file block contains the FBI information * 2263 * with the forward pointer pointing to the following file * 2264 * block, and the backward pointer pointing to the * 2265 * preceding file block. The forward pointer of the last * 2266 * file block and the backward pointer of the first file * 2267 * block are null (zeros). * 2268 * * 2269 * The data bytes in the file blocks may be considered * 2270 * as a continuous space. Within this space are stored * 2271 * records, file marks, and an end of data indicator. * 2272 * * 2273 * A record consists of a 3 byte type and length indicator * 2274 * (forward length), the N bytes of data, and a repeat of the * 2275 * type and length indicator (backward length). The type bits * 2276 * contain information about the recording mode of the record * 2277 * and mark it as a record. * 2278 * * 2279 * A file mark consists of a 3 byte type indicator * 2280 * reserved for this purpose. (it is 3 bytes long so that * 2281 * backspace works) * 2282 * * 2283 * Each file contains one end of data indicator (EOD). * 2284 * A 1 byte type indicator is reserved for the normal EOD. * 2285 * Any unrecognizable type indicator is treated as an abnormal * 2286 * EOD. * 2287 * * 2288 * Also treated as abnormal EOD are the following conditions: * 2289 * 1.) back pointer in subsequent file block incorrect * 2290 * 2.) other FBI information obviously wrong (although * 2291 * this may not be exhaustively examined) * 2292 * 3.) a records forward length and backward length are * 2293 * different * 2294 * * 2295 * Some or all of a garbage record may be transmitted * 2296 * to the users buffer on a read request but he is given * 2297 * the abnormal EOD status (the user can not retrieve data * 2298 * belonging to other users because all such data is * 2299 * overwritten before the space is returned to the ADT). * 2300 * * 2301 * When a user is updating an entire file, such as an * 2302 * edit file, the preferred method is to write the new file * 2303 * onto a scratch file and switch the data pointers into * 2304 * the directory using the XREQ supplied for this purpose. * 2305 * (the critical updating of the directory is done in one * 2306 * mass storage transfer and is crashproof with respect to * 2307 * the user's data) * 2308 * * 2309 * Writes onto the end of a file are accomplished as follows: * 2310 * 1.) bring the last file block into a buffer * 2311 * 2.) serially place the new record and EOD into the * 2312 * buffer * 2313 * 3.) if the block is filled, request a new file block, * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 127 (DISKDEFS) F 8 Disk Data Structures 2314 * place the new forward pointer into the current * 2315 * block and write it out. Generate the FBI * 2316 * for the new block and continue filling. * 2317 * * 2318 * When a user writes onto a file at other than the end, the * 2319 * block containing the current position pointer is retained, * 2320 * but subsequent file blocks are freed. The write then * 2321 * takes place from the current position pointer into new * 2322 * file blocks if required. (the freeing may not take place * 2323 * until the current block is written with its new forward * 2324 * pointer) * 2325 * * 2326 * CRASH RESISTANCE * 2327 * Because unused space contains EOD's in the data and * 2328 * FBI areas, new blocks may be linked into a file before * 2329 * they have been written to the volume. * 2330 * * 2331 * MASS STORAGE ERRORS * 2332 * May be substituted. User requests will get * 2333 * abnormal/unavailable (A/U) status. Recovery may * 2334 * be able to retrieve the part of the file that occupies * 2335 * readable blocks. Blocks that have been unlinked from * 2336 * this file but not yet freed will create a problem * 2337 * during recovery. * 2338 * * 2339 ********************************************************************************** 2340 2341 * format of the type and length indicators 2342 00001040 BYTE 2343 FILTYPE BITS 8:11 type field 00000000 ABS 2344 RTYPETEXT EQU 0 text record 00000001 ABS 2345 RTYPETEXTF EQU 1 text with forms control 00000002 ABS 2346 RTYPEBIN EQU 2 binary 00000003 ABS 2347 RTYPEFORM EQU 3 forms record 00000004 ABS 2348 RTYPELABEL EQU 4 label record 00000005 ABS 2349 RTYPECOMM EQU 5 comment record 00001B30 BYTE 2350 FILRLEN BITS 13:31 character count of record 2351 * if FILSFLAGB = 1 then the type indicator is a file 2352 * mark or an end-of-data. File marks are three bytes 2353 * long and end-of-data marks are a single byte. 2354 * the bits in the type field are then defined as: 00003E10 BYTE 2355 FILEODB EQU BIT 31 end of data (file mark if zero) 00003C10 BYTE 2356 FILAEODB EQU BIT 30 abnormal EOD 00003A10 BYTE 2357 FILREODB EQU BIT 29 EOD read (not part of file, status to 2358 * user, indicates EOD read already) 00003810 BYTE 2359 FILSFLAGB EQU BIT 28 bit sez system record type 00000008 ABS 2360 FILEOF EQU 1*FILSFLAGB a file mark byte 00000009 ABS 2361 FILNEOD EQU 1*FILSFLAGB+1*FILEODB 0000000B ABS 2362 FILAEOD EQU 1*FILSFLAGB+1*FILEODB+1*FILAEODB 2363 00000140 BYTE 2364 SAFBLKNUM EQU PGNUMFLD contains current block number 000028C0 BYTE 2365 SAFCHARNUM EQU BYTEDISP current byte in current block 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 128 (DISKDEFS) F 8 Disk Data Structures 2367 2368 ********************************************************************************** 2369 * * 2370 * RANDOM ACCESS FILE STRUCTURE (.RAF) * 2371 * * 2372 * A RAF is an indexed file that provides a user with * 2373 * an addressable string of bytes. They are accessed by a * 2374 * seek to a specified byte location and a read or write of * 2375 * N bytes from there. * 2376 * * 2377 * Blocks not initialized by a user process are not * 2378 * allocated any MS space. Any minor access block may have * 2379 * a null (zeros) pointer indicating a non-existent data * 2380 * block. Reads from uninitialized space return all zero * 2381 * bits. Consequently, a write into a new block initializes * 2382 * that block to zeros to assure that all accesses to * 2383 * uninitialized space return zeros. * 2384 * * 2385 * When a RAF is initially created no blocks are allocated * 2386 * for it. If the first write to the RAF is within the address * 2387 * range of the first data block then only a data block is allocated * 2388 * for the RAF. When a write occurs outside of this block a * 2389 * minor access block is created and if necessary a major access * 2390 * block. * 2391 * * 2392 * The FDE for a RAF will point to either the data block * 2393 * (tiny RAF), the minor access block (small RAF), or the major * 2394 * access block (large RAF). It can also be zero indicating * 2395 * that there are no blocks yet associated with the RAF. There * 2396 * are 2 bits in the FDE to indicate what type of block the * 2397 * root block is. If FDLRAF is set then the root block of * 2398 * the RAF is a major access block. If FDTRAF is set then the * 2399 * first block of the RAF is a data block. Otherwise the root * 2400 * block is a minor access block. * 2401 * * 2402 * A RAF major access block contains the FBI and a list of * 2403 * pointers to minor access blocks. A zero pointer indicates an * 2404 * uninitialized region of the file. The forward and backward * 2405 * links and the relative block number in the FBI are always zero. * 2406 * * 2407 * Each minor access block contains the FBI and a list * 2408 * of pointers to the RAF data area blocks. A zero pointer * 2409 * indicates an uninitialized region of the file. The data * 2410 * area in the data block is all reserved for user data. The * 2411 * forward and backward pointers of the data blocks FBI are * 2412 * null. This is to avoid any inconsistent conditions due to * 2413 * crashes during the addition or deletion of a new data * 2414 * block. * 2415 * * 2416 * A RAF may be opened with multiple-write access. This * 2417 * means that the file may be opened by several processes * 2418 * intending to alter the file. These processes must assume * 2419 * responsibility for the proper interlocking of their * 2420 * transactions to assure data integrity. However, the * 2421 * system does not abdicate its responsibility for the file * 2422 * structure. In order to control the integrity of the file * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 129 (DISKDEFS) F 8 Disk Data Structures 2423 * structure, several restrictions are necessary. The RAF * 2424 * must be a large RAF (small RAFs are made into large RAFs * 2425 * if they are opened multiple-write). Data blocks may not * 2426 * be removed from a RAF while it is opened multiple-write. * 2427 * * 2428 * In order to protect the users, when a RAF is currently * 2429 * opened for multiple-write by any user, each and every * 2430 * other user of the file must also open it for multiple-write. * 2431 * It is expected that each 'record' in a RAF will be interlocked * 2432 * by a small field in that record. * 2433 * * 2434 * In order to allow record oriented data to be stored in a * 2435 * RAF, a set of XREQs are provided for a special form of access * 2436 * called 'sequential'. When an SWRITE is performed, the write * 2437 * starts at the current position in the file and continues for * 2438 * the specified number of characters, then a LF is added onto the * 2439 * end of the record. The current position is set to the next * 2440 * character position beyond where the LF was written. The end * 2441 * position pointer is set to the maximum of the end position * 2442 * pointer and the current position. * 2443 * * 2444 * An SREAD from a RAF starts at the current position and * 2445 * continues until a LF is encountered or the end position is * 2446 * encountered. The current position is left pointing to the * 2447 * character position beyond the terminating LF (or is set equal * 2448 * to the end position pointer. * 2449 * * 2450 * CRASH RESISTANCE * 2451 * The block number of a major access block may be * 2452 * entered into the file directory before the major access * 2453 * block is written to the volume. This is because the * 2454 * FBI will stop any use of the file. However, as each * 2455 * minor access block (or data block) is created, it must * 2456 * be written to the volume before its address may be * 2457 * entered into the major access block (or minor access * 2458 * block). Major access blocks, minor access blocks, and * 2459 * data blocks may all be updated in place. * 2460 * * 2461 * MASS STORAGE ERRORS * 2462 * See the mass storage error section for files. * 2463 * * 2464 ********************************************************************************** 2465 000000A0 BYTE 2466 RAFMAJINDX EQU PGNUMFLDMAJ determines which minor access block 2467 to retrieve from the major access block 000014A0 BYTE 2468 RAFMININDX EQU PGNUMFLDMIN determines which data block to 2469 retrieve from the minor access block 000028C0 BYTE 2470 RAFCHARIDX EQU BYTEDISP determines the character position within 2471 the data block 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 130 (DISKDEFS) F 8 Disk Data Structures 2473 2474 ********************************************************************************** 2475 * * 2476 * CODE FILES (.CODE) * 2477 * Code files consist of a code control block (CCB) and * 2478 * file blocks containing page images. The FDE specifies * 2479 * the CCB block address. Each word in the CCB (below * 2480 * CCBMAXPAGE) controls a block of the file. A zero word * 2481 * indicates none allocated. Otherwise, the upper 8 bits * 2482 * contain control information and the lower MSBLKLOG bits * 2483 * contain an MS address. * 2484 * * 2485 * A code file must be equipped before it may be linked * 2486 * with a LIBCALL. The code file may not be unequipped until * 2487 * all pages belonging to it are unmapped. * 2488 * * 2489 * The first 128 pages of the code files address space * 2490 * correspond to the memory of the executing process. When a * 2491 * code file is set up to run, each page is mapped into the * 2492 * corresponding page in the users virtual memory. If the * 2493 * CCBPROTECT bit was on for the page, it is set up as read * 2494 * only, otherwise, it is set up read only with own copy * 2495 * allowed. The CCBINFO area contains the transfer addresses * 2496 * and privilege and restriction information. * 2497 * * 2498 * A code file is like a small RAF that has had a transfer * 2499 * address specified. XREQs are provided to specify primary * 2500 * and secondary transfer addresses, and to indicate the * 2501 * state of each page (impure, protected, etc.). * 2502 * * 2503 * CRASH RESISTANCE * 2504 * See the crash resistance section for RAFs. * 2505 * * 2506 * MASS STORAGE ERRORS * 2507 * See the mass storage error section for files. * 2508 * * 2509 ********************************************************************************** 2510 2511 ********************************************************************************** 2512 * CCB INFO BLOCK * 2513 * This block resides near the end of the CCB and contains * 2514 * information special to code files. * 2515 ********************************************************************************** 2516 00000839 2517 CCBINFPROT BASE R0 00160800 0 BASE 2518 CCBPERMIT LABEL beginning of restriction block 00080050 0 ZBM 2519 CCBRSTCTG1 BSSB 5 who set restriction group 1 override (limit change) 00080A50 0 ZBM 2520 CCBRSTCTG2 BSSB 5 " group 2 " (catalog fetch) 00081450 0 ZBM 2521 CCBRSTCTG3 BSSB 5 " group 3 " (account attribute change) 00081E50 0 ZBM 2522 CCBRSTCTG4 BSSB 5 " group 4 " (unassigned) 00082850 0 ZBM 2523 CCBRSTCTG5 BSSB 5 " group 5 " (unassigned) 00083210 0 ZBM 2524 CCBMAINTR BSSB 1 allowed maintenance read 00083410 0 ZBM 2525 CCBMAINTW BSSB 1 allowed maintenance write 00083620 0 ZBM 2526 CCBOPREQ BSSB 2 allowed operator requests 00083A40 0 ZBM 2527 CCBMANAGR BSSB 4 allowed manager requests 00080211 0 ZBM 2528 CCBOWNDIR BSSB 1 use own directory pointers when run 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 131 (DISKDEFS) F 8 Disk Data Structures 00080421 0 ZBM 2529 CCBBACKUP BSSB 2 allowed backup requests 00003E10 BYTE 2530 CCBALWFRC EQU BIT 31 restriction/privilege forced always 00003C10 BYTE 2531 CCBOWNFRC EQU BIT 30 restriction/privilege forced by owner 00003A10 BYTE 2532 CCBDIVFRC EQU BIT 29 restriction/privilege forced by division 00003810 BYTE 2533 CCBPRJFRC EQU BIT 28 restriction/privilege forced by project 00003610 BYTE 2534 CCBUSRFRC EQU BIT 27 restriction/privilege forced by user 2535 BSS 0 force word alignment 2536 BSS 8-(DISPW CCBPERMIT) allow 8 words for restrictions 00160808 0 BASE 2537 CCBPREGS BSS 16 initial program registers, same form as CA 00081F18 0 ZBM 2538 CCBPTRANS EQU CCBPREGS/CAPC primary transfer address (same as PC) 0016080A 0 BASE 2539 CCB2TRANS EQU CCBPREGS/CAR0 secondary transfer address (same as R0) 2540 DRCT 00000018 ABS 2541 CCBINFOL EQU DISPW CCBINFPROT length of info for code file 2542 ORG CCBINFPROT 2543 2544 BASE 000003E8 ABS 2545 CCBMAXPAGE EQU WPP-CCBINFOL maximum number of page pointers in CCB 00000000 DISP 2546 CCBPAGE0 LABEL location of the first page pointer 2547 BSS CCBMAXPAGE each word controls a page 2548 * within each word, 2549 * the upper bits are control information 2550 * the lower MSBLKLOG bits are the block number 00000010 BYTE 2551 CCBPROTECT EQU BIT 0 bit indicates page is protected 000003E8 DISP 2552 CCBINFO LABEL CCB info block starts here 2553 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 132 (DISKDEFS) F 8 Disk Data Structures 2555 2556 ********************************************************************************** 2557 * * 2558 * The following tables are present only on the system volume. * 2559 * * 2560 ********************************************************************************** 2561 2562 ********************************************************************************** 2563 * * 2564 * SYSTEM CONFIGURATION TABLE (SCT) * 2565 * This table contains all of the data concerning all * 2566 * I/O devices on the system. It contains the map between * 2567 * device number and descriptor (this mapping must be * 2568 * determined at run time). * 2569 * * 2570 * It may be wise to make this table a user file so * 2571 * that a given system volume could run on either of two * 2572 * hardware configurations, as determined at load time. * 2573 * This might save a lot of field service time * 2574 * when distributing new systems. * 2575 * * 2576 * CRASH RESISTANCE * 2577 * Not applicable * 2578 * * 2579 * MASS STORAGE ERRORS * 2580 * Pointer in volume label. May be substituted. * 2581 * Recovery will be complete except that maintenance will * 2582 * be required to re-establish the SCT. * 2583 * * 2584 ********************************************************************************** 2585 2586 ********************************************************************************** 2587 * * 2588 * ACCOUNT FINDER TABLE (AFT) * 2589 * This table is provided to determine what volume a given * 2590 * account name is on. It is updated at the same time as * 2591 * the user index. It must also be updated when volumes are * 2592 * mounted or dismounted. It is essentially a scratch * 2593 * table set up for the convenience of the system. This table * 2594 * is rebuilt each time the system is booted. This helps avoid * 2595 * problems with UDIR's moving around if one of the volumes is * 2596 * backed up. * 2597 * * 2598 * The table is indexed by account name (in the case of * 2599 * foreign volume entries, by volume name and account name) * 2600 * and provides the logical unit number (which must be * 2601 * decoded to hardware descriptor elsewhere) and the UDIR * 2602 * block number. * 2603 * * 2604 * This table has the same format as the IDX, * 2605 * which see for further information. * 2606 * * 2607 * CRASH RESISTANCE * 2608 * This table should be updated only after the IDX * 2609 * has received a new entry and before an entry is * 2610 * removed from an IDX. This table is rebuilt when * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 133 (DISKDEFS) F 8 Disk Data Structures 2611 * the system is initialized after a crash so as to * 2612 * ensure that it matches the data in the IDXs. * 2613 * * 2614 * MASS STORAGE ERRORS * 2615 * Pointer in volume label. May be substituted. * 2616 * Recovery will be complete. * 2617 * * 2618 ********************************************************************************** 2619 2620 * exactly the same format as the IDX (except for FBI type) 2621 2622 2623 ********************************************************************************** 2624 * * 2625 * Several other desirable table structures are * 2626 * implemented as SAFs or RAFs on the maintenance, * 2627 * manager, or operator accounts, as appropriate. These * 2628 * files and their location are: * 2629 * 1.) system code file. File = SYSTEM.!!!:SYSTEM.CODE * 2630 * Previous system = SYSTEM.!!!:OLDSYSTEM.CODE * 2631 * Experimental system = SYSTEM.!!!:EXPSYSTEM.CODE * 2632 * 2.) system crash file. File = SYSTEM.!!!:CRASHDUMP.CODE * 2633 * 3.) error log file. File = SYSTEM.!!!:ERRORLOG.LOGFIL * 2634 * 4.) supported library account. Manufacturers * 2635 * library = .!!! (referencable as +) * 2636 * 5.) system library account = .SYS (referencable as * 2637 * $$$. This account is the responsibility * 2638 * of the system owner (manager). * 2639 * * 2640 ********************************************************************************** 2641 2642 ORG CRANDALL recapture all of the lost space 14 INPUT VIRTDEFS virtual machine definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 134 (VIRTDEFS) F 9 Error codes of all kinds 4 5 ********************************************************************************** 6 * * 7 * Any changes to this file (additions, deletions of * 8 * codes) should be made also to the appropriate section(s) of * 9 * .SYS:VIRTDEFS.PASCAL. * 10 * * 11 ********************************************************************************** 12 13 ********************************************************************************** 14 * * 15 * ERROR CODES * 16 * As sure as the sun shines, there will be errors and * 17 * these errors need to be reported to users and the system. * 18 * The following is a list of the error codes broken down into * 19 * groups: * 20 * * 21 * 001-01F These errors are generated by the machine in * 22 * response to illegal instruction usage * 23 * (undefined opcodes, CALL/ENTR mismatch, etc.). * 24 * The error is reported to the operating system * 25 * using this error code and the error code * 26 * is either passed on to the program causing * 27 * the error (if the program has notified the * 28 * system of its ability to handle such errors) * 29 * or to the overprocess controlling that * 30 * program. * 31 * 020-07F These errors are conditions noticed by the * 32 * system software and are passed on to the * 33 * program or to the overprocess. Some of these * 34 * codes are notifications of events in the * 35 * system that the user wished to know about * 36 * (break from terminal, time interval completed, * 37 * receipt of a message from another session, etc.). * 38 * 080-... These error codes are returned by the XREQs * 39 * to give notification of illegal usage, bad * 40 * parameters, or other unacceptable conditions. * 41 * If an error occurs on an XREQ, the error code * 42 * is always returned in R0 with the sign bit * 43 * set to indicate that an error has occurred. * 44 * Note that these error codes apply to any * 45 * XREQ, they are not segregated by FREQ, * 46 * UREQ, or OPREQ. * 47 * * 48 ********************************************************************************** 49 50 * 0 no error 51 * 001-01F machine generated errors 00000001 ABS 52 UINTUOP EQU 001 undefined opcode 00000002 ABS 53 UINTUMODE EQU 002 undefined address mode 00000003 ABS 54 UINTIMS EQU 003 illegal addr. mode for store inst. 00000004 ABS 55 UINTUMP EQU 004 undefined addr. mode in pointer 56 * EQU 005 unassigned (was 'illegal pointer for indexing') 00000006 ABS 57 UINTIMI EQU 006 illegal addr. mode for instruction 00000007 ABS 58 UINTXTI EQU 007 execute target illegal 00000008 ABS 59 UINTCEM EQU 008 CALL/ENTR mismatch 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 135 (VIRTDEFS) F 9 Error codes of all kinds 00000009 ABS 60 UINTPARL EQU 009 PAR/STP mismatch 0000000A ABS 61 UINTIONOV EQU 00A ION/IOFF overflow/underflow 0000000B ABS 62 UINTUOP2 EQU 00B unimplemented instruction 0000000C ABS 63 UINTCKB EQU 00C check bounds failure 0000000D ABS 64 UINTSTNG EQU 00D undefined number or illegal data 0000000E ABS 65 UINTSTKO EQU 00E stack overflow 0000000F ABS 66 UINTBCDO EQU 00F decimal overflow 00000010 ABS 67 UINTARTHOV EQU 010 arithmetic overflow 00000011 ABS 68 UINTDIV0 EQU 011 divide by zero 00000012 ABS 69 UINTFIXOVP EQU 012 fixing overflow positive 00000013 ABS 70 UINTFIXOVN EQU 013 fixing overflow negative 00000014 ABS 71 UINTFLTOVN EQU 014 floating overflow negative 00000015 ABS 72 UINTFLTUFN EQU 015 floating underflow negative 00000016 ABS 73 UINTFLTOVP EQU 016 floating overflow positive 00000017 ABS 74 UINTFLTUFP EQU 017 floating underflow positive 00000018 ABS 75 UINTUNDEF EQU 018 reference to undefined number 00000018 ABS 76 UINTINST EQU 018 this and below codes are instruction failures 0000001F ABS 77 UINTTRACEI EQU 01F instruction trace interrupt 78 * 020-07F software generated errors 00000020 ABS 79 UINTBREAK EQU 020 terminal BREAK request 00000021 ABS 80 UINTTIMCUT EQU 021 time cut interrupt 00000022 ABS 81 UINTNETERM EQU 022 non-empty term 00000023 ABS 82 UINTNEPATH EQU 023 non-empty path 00000024 ABS 83 UINTTDISC EQU 024 terminal disconnect 00000025 ABS 84 UINTTIMINT EQU 025 time interrupt 00000026 ABS 85 UINTMSG EQU 026 inter-session message received 00000027 ABS 86 UINTOPRQA EQU 027 operator abort 00000028 ABS 87 UINTGUNIT EQU 028 received a gift unit 88 * 060-07F codes that enter next higher program level 00000070 ABS 89 UINTVMFPE EQU 070 virtual memory failure - parity error 00000071 ABS 90 UINTVMFDE EQU 071 virtual memory failure - disk error 00000072 ABS 91 UINTVMFIDS EQU 072 virtual memory failure - insufficient disk space 00000073 ABS 92 UINTVMFISR EQU 073 virtual memory failure - insufficient system resources 00000074 ABS 93 UINTMPV EQU 074 memory protect violation 00000075 ABS 94 UINTATTACH EQU 075 request to attach to session 00000079 ABS 95 UINTBRKINS EQU 079 "break" instruction 0000007A ABS 96 UINTLOGOFF EQU 07A request to log off session 0000007B ABS 97 UINTCHAIN EQU 07B request to chain 0000007C ABS 98 UINTVAR EQU 07C request for variable 0000007D ABS 99 UINTOPRQ EQU 07D operator request (sub-code in R1) 00000001 ABS 100 UINTOPRQL EQU 1 do a logoff 00000002 ABS 101 UINTOPRQT EQU 2 do a terminate 00000003 ABS 102 UINTOPRQW EQU 3 give a warning 00000004 ABS 103 UINTOPRQUL EQU 4 user logoff 00000005 ABS 104 UINTOPRQP EQU 5 abort parallel session 0000007E ABS 105 UINTPTERM EQU 07E program termination (sub-code in R1) 106 * (right 4 bits of URSTOPxx) 0000007F ABS 107 UINTLOGIN EQU 07F initial creation entry 108 * 080-... errors made by XREQs 00000080 ABS 109 XREQERILR EQU 080 illegal request 110 * a catch-all error code 00000081 ABS 111 XREQERLNE EQU 081 *unit not equipped 00000082 ABS 112 XREQERPOB EQU 082 parameter out of bounds 00000083 ABS 113 XREQERLAE EQU 083 unit already equipped 00000084 ABS 114 XREQERPFM EQU 084 protected from modification 00000085 ABS 115 XREQERRNA EQU 085 read not allowed 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 136 (VIRTDEFS) F 9 Error codes of all kinds 00000086 ABS 116 XREQERMWNA EQU 086 multiple write not allowed 00000087 ABS 117 XREQERDSKL EQU 087 *exceeding disk limits 00000088 ABS 118 XREQERISAV EQU 088 *insufficient save file space 00000089 ABS 119 XREQERFAU EQU 089 *file abnormal/unavailable 120 * a MS error has occurred on users data 0000008A ABS 121 XREQERFBZ EQU 08A file busy 0000008B ABS 122 XREQERLAS EQU 08B unit already saved 0000008C ABS 123 XREQERLNS EQU 08C unit not saved 0000008D ABS 124 XREQERFNF EQU 08D file not found 125 * this error is given without elaboration for 126 * files that the user is not authorized to 127 * access 0000008E ABS 128 XREQERNAE EQU 08E name already exists 0000008F ABS 129 XREQERBFN EQU 08F bad filename 00000090 ABS 130 XREQERFHBD EQU 090 file has been destroyed 00000091 ABS 131 XREQERILOP EQU 091 illegal operation on device 00000092 ABS 132 XREQERFPRG EQU 092 file was purged 00000093 ABS 133 XREQERISYR EQU 093 *insufficient system resources 134 * the system has run out of MS table 135 * space or monitor free space 00000094 ABS 136 XREQERPNS EQU 094 privilege not sufficient 00000095 ABS 137 XREQERLPE EQU 095 lock protocol error 00000096 ABS 138 XREQERPWW EQU 096 password wrong 139 * this error is given without elaboration 140 * for attempts to log on to non-existant 141 * accounts or with an improper password 00000097 ABS 142 XREQERBVAR EQU 097 bad variable (genned by control mode) 00000098 ABS 143 XREQERWPT EQU 098 wrong parameter terminator 00000099 ABS 144 XREQERSIU EQU 099 system/resource in use 0000009A ABS 145 XREQERUAM EQU 09A unknown access mode 0000009B ABS 146 XREQERVLB EQU 09B volume label bad 0000009C ABS 147 XREQERVNMR EQU 09C volume not mountable by this revision 0000009D ABS 148 XREQERNFSV EQU 09D no free storage on volume 0000009E ABS 149 XREQERBSBL EQU 09E bad substitution list 0000009F ABS 150 XREQERDSE EQU 09F disk structure error 151 * a MS error has occurred on system tables 152 * or data. The users data is probably 153 * intact (if it exists) and may be 154 * recovered by a recovery program. 000000A0 ABS 155 XREQEROFC EQU 0A0 write off end of CODE file 000000A1 ABS 156 XREQERVIU EQU 0A1 volume in use 000000A2 ABS 157 XREQERMNRP EQU 0A2 may not reference other process/session 000000A3 ABS 158 XREQERNSPP EQU 0A3 no such process/session 000000A4 ABS 159 XREQERREOD EQU 0A4 *reread at end-of-data 000000A5 ABS 160 XREQERWANA EQU 0A5 must not have write access 000000A6 ABS 161 XREQERNSV EQU 0A6 no such volume 000000A7 ABS 162 XREQERIAUT EQU 0A7 insufficient authorization 000000A8 ABS 163 XREQERFIP EQU 0A8 freeing in progress (to OPR only) 000000A9 ABS 164 XREQERINHI EQU 0A9 access inhibited 165 * return given to login saying 166 * port/system is inhibited 000000AA ABS 167 XREQERNSL EQU 0AA no such unit 000000AB ABS 168 XREQERNSE EQU 0AB no such entry 000000AC ABS 169 XREQERNR EQU 0AC no room for entry 000000AD ABS 170 XREQERSUSP EQU 0AD item/access not available -- did not suspend 000000AE ABS 171 XREQERDNR EQU 0AE device not ready 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 137 (VIRTDEFS) F 9 Error codes of all kinds 000000AF ABS 172 XREQERDNA EQU 0AF device not assigned to caller 000000B0 ABS 173 XREQERDAA EQU 0B0 device already assigned 000000B1 ABS 174 XREQERDNC EQU 0B1 device not callers 000000B2 ABS 175 XREQERUKS EQU 0B2 unknown shift 000000B3 ABS 176 XREQERUKC EQU 0B3 unknown class 000000B4 ABS 177 XREQERUKF EQU 0B4 unknown forms 000000B5 ABS 178 XREQERNSS EQU 0B5 no such site 000000B6 ABS 179 XREQERNDS EQU 0B6 no device of specified name at site 000000B7 ABS 180 XREQERNDT EQU 0B7 no device of specified type at site 000000B8 ABS 181 XREQERRIB EQU 0B8 "ROUTE" illegal for batch jobs (spooler) 000000B9 ABS 182 XREQEROIO EQU 0B9 "OUT" illegal for output jobs (spooler) 000000BA ABS 183 XREQERAIR EQU 0BA "ATTR" illegal for batch jobs (spooler) 000000BB ABS 184 XREQERSIO EQU 0BB "SEQ" illegal for output jobs (spooler) 000000BC ABS 185 XREQERUKP EQU 0BC unknown parameter 000000BD ABS 186 XREQERSIB EQU 0BD "SITE" illegal for batch jobs (spooler) 000000BE ABS 187 XREQERUIB EQU 0BE "UNIT" illegal for batch jobs (spooler) 000000BF ABS 188 XREQERSPB EQU 0BF "SUPPRESS" illegal for batch jobs (spooler) 000000C0 ABS 189 XREQERSDE EQU 0C0 "SPOOLED" and "DIRECT" may not appear together (spooler) 000000C1 ABS 190 XREQERULT EQU 0C1 unknown logical device type (spooler) 000000C2 ABS 191 XREQERTMD EQU 0C2 too many different devices for batch job (spooler) 000000C3 ABS 192 XREQERDCM EQU 0C3 some device count appears >1 times for 193 * batch job (spooler) 000000C4 ABS 194 XREQERDIO EQU 0C4 "DEVICE" illegal for output job 195 000000C5 ABS 196 XREQERESDL EQU 0C5 exceeding session disk limits 000000C6 ABS 197 XREQERLBZ EQU 0C6 lock busy 000000C7 ABS 198 XREQERSCU EQU 0C7 spooler is currently unavailable 000000C8 ABS 199 XREQERVBB EQU 0C8 "VERBATIM" illegal for batch jobs (spooler) 000000C9 ABS 200 XREQERITK EQU 0C9 "TRACK" parameter out of bounds (spooler) 000000CA ABS 201 XREQERITM EQU 0CA "TIME" parameter out of bounds (spooler) 202 203 ********************************************************************************** 204 * * 205 * Error codes 0E0:0FF are reserved for device dependent * 206 * codes. * 207 * * 208 ********************************************************************************** 209 000000E0 ABS 210 DEVERPFE EQU 0E0 port framing error 000000E1 ABS 211 DEVERPPE EQU 0E1 port parity error 000000E2 ABS 212 DEVERPIBO EQU 0E2 port input buffer overflow 213 000000E3 ABS 214 DEVERTRE EQU 0E3 tape read error 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 138 (VIRTDEFS) F 9 Executive Request (XREQ) codes 217 218 ********************************************************************************** 219 * * 220 * A unit is an unsigned 8 bit integer used to refer to a * 221 * 'logical unit'. These logical units may be 'equipped' to * 222 * mass storage files or to pseudo device types. The * 223 * following are special unit assignments. * 224 * * 225 ********************************************************************************** 226 227 * unit 0 does not exist 00000001 ABS 228 LUNSIN EQU 1 standard input 00000002 ABS 229 LUNSOUT EQU 2 standard output 00000003 ABS 230 LUNSERR EQU 3 error output 00000064 ABS 231 MAXLOCAL EQU 100 highest possible local unit number 000000C9 ABS 232 LUNAIN EQU 201 absolute input 000000CA ABS 233 LUNAOUT EQU 202 absolute output 234 000000C9 ABS 235 LUNCMLOW EQU 201 any unit above this is not the user's 000000D2 ABS 236 LUNCMCNTL EQU 210 above this, only CM may diddle 237 238 ********************************************************************************** 239 * * 240 * Below are defined the codes for the requests that a * 241 * user may make to the system to do useful things for him. * 242 * The requests are grouped into file requests (FREQs) which * 243 * begin with the characters "FR", user requests (UREQs) which * 244 * begin with the characters "UR", and operator, manager, and * 245 * control mode requests which begin with the characters "OR". * 246 * A table containing the current maximum request code * 247 * values for each request type is kept with the XREQ call * 248 * monitor definitions (XREQMAXTAB). That table must be kept * 249 * up to date as greater numbers are used. * 250 * * 251 * The machine hardware traps the XREQ opcode to the * 252 * monitor after calculating the operand. The operand is * 253 * calculated using the 22 bit address field in the same * 254 * manner as a normal mem ref instruction (e.g. LD). The * 255 * monitor further decodes the R field to distinguish the type * 256 * of request. * 257 * The XREQ opcode is 08000000. The valid subops are * 258 * FREQ=2 (088xxxxx), UREQ=4 (090xxxxx), and OPREQ=5 * 259 * (094xxxxx). * 260 * Each request code is preceeded by a brief description * 261 * of the calling register setup, the request and operand, and * 262 * the registers returned. * 263 * * 264 ********************************************************************************** 265 00002CA0 BYTE 266 XRFLDCODE EQU BITS 22:31 XREQ request field 00003840 BYTE 267 XRFLDSUBOP EQU BITS 28:31 sub-operation part 00002C60 BYTE 268 XRFLDREQ EQU BITS 22:27 operation part 269 * EQU BIT 18:21 unused - reserved 00002210 BYTE 270 XRFLDNRWD EQU BIT 17 skip rewind if xreq attempts to do so 00004000 ABS 271 XRNOREWND EQU 1*XRFLDNRWD 00001E20 BYTE 272 XRFLDSUSP EQU BITS 15:16 suspension control field 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 139 (VIRTDEFS) F 9 Executive Request (XREQ) codes 00000000 ABS 273 XRSUSPNORM EQU 0*XRFLDSUSP suspend if request must wait 00008000 ABS 274 XRSUSPERR EQU 1*XRFLDSUSP give error if request must wait 275 * EQU 2*XRFLDSUSP suspend level above if request must wait 276 * EQU 3*XRFLDSUSP not used 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 140 (VIRTDEFS) F 9 Executive Request (XREQ) codes 278 279 ********************************************************************************** 280 * * 281 * FREQs * 282 * The file requests (FREQs) perform operations on a * 283 * unit. The unit is specified by the operand of the * 284 * instruction. Note that the unit number is actually the * 285 * operand of the FREQ and not the effective address, as in * 286 * some other systems! * 287 * * 288 ********************************************************************************** 289 290 * (R0:=request|FREQ unit|R0=dynamic status|R1=static status) 00000010 ABS 291 FRSTATUS EQU 0010 device status 00000011 ABS 292 FRCLEAR EQU 0011 clear errors 00000012 ABS 293 FRREWIND EQU 0012 rewind 00000013 ABS 294 FRRELEASE EQU 0013 release data 00000014 ABS 295 FRSEOD EQU 0014 search for EOD 00000015 ABS 296 FRFWSP EQU 0015 forward-space 00000016 ABS 297 FRBKSP EQU 0016 backspace 00000017 ABS 298 FRSEFF EQU 0017 search EOF forward 00000018 ABS 299 FRSEFB EQU 0018 search EOF backward 00000019 ABS 300 FRWFM EQU 0019 write file mark 0000001A ABS 301 FRFORCE EQU 001A force write modified file pages 0000001C ABS 302 FRWRITEMOD EQU 001C write out modified file pages 0000001D ABS 303 FRCYCLE EQU 001D cycle cartridge tape 0000001E ABS 304 FREPP EQU 001E return EPP (in R1) 0000001F ABS 305 FRDEVSTAT EQU 001F return device status (R1 = PPU status 306 * R2 = controller status) 307 308 * (R0:=request|R1:= 0(MFM), 1(GCR)|FREQ unit|R0=dynamic status) 309 * unstable due to possible controller micro-code problems 310 *FRDENSITY EQU 001B select recording density on cartridge tape 311 312 * (R0:=request|R1:=count|R2:=buffer-addr|FREQ unit|R0=dynamic status) 00000020 ABS 313 FRRWRITE EQU 0020 text rewrite 00000020 ABS 314 FRRWRITET EQU 0020 text rewrite 00000021 ABS 315 FRRWRITETF EQU 0021 text with forms control rewrite 00000022 ABS 316 FRRWRITEB EQU 0022 binary rewrite 00000023 ABS 317 FRRWRITEF EQU 0023 forms rewrite 00000024 ABS 318 FRRWRITEL EQU 0024 label rewrite 00000025 ABS 319 FRRWRITEC EQU 0025 comment rewrite 320 321 * (R0:=request|R1:=count|R2:=buffer-addr|FREQ unit|R0=dynamic status| 322 * R1=count-bytes remaining|R2=terminating character ) 00000030 ABS 323 FRREAD EQU 0030 read 00000031 ABS 324 FRREADB EQU 0031 read binary 00000032 ABS 325 FRSREAD EQU 0032 sequential read 00000033 ABS 326 FRSREADB EQU 0033 sequential binary read 327 328 * (R0:=request|R1:=count|R2:=buffer-addr|FREQ unit|R0=dynamic status) 00000040 ABS 329 FRWRITE EQU 0040 text write 00000040 ABS 330 FRWRITET EQU 0040 text write 00000041 ABS 331 FRWRITETF EQU 0041 text with forms control write 00000042 ABS 332 FRWRITEB EQU 0042 binary write 00000043 ABS 333 FRWRITEF EQU 0043 forms write 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 141 (VIRTDEFS) F 9 Executive Request (XREQ) codes 00000044 ABS 334 FRWRITEL EQU 0044 label write 00000045 ABS 335 FRWRITEC EQU 0045 comment write 336 337 * (R0:=request|R1:=count|R2:=buffer-addr|FREQ unit|R0=dynamic status) 338 * (R1 = number of bytes not written|R2 = advanced source pointer) 000002A0 ABS 339 FRSWRITE EQU 02A0 sequential write 000002A0 ABS 340 FRSWRITET EQU 02A0 sequential text write 000002A1 ABS 341 FRSWRITETF EQU 02A1 sequential text with forms control write 000002A2 ABS 342 FRSWRITEB EQU 02A2 sequential binary write 000002A3 ABS 343 FRSWRITEF EQU 02A3 sequential forms write 344 345 * (R0:=request|R1:=pntr-to-param-block|FREQ unit| 346 * R0=error-code or static-status ) 00000050 ABS 347 FREQUIP EQU 0050 equip + access 00000050 ABS 348 FREQUIPW EQU 0050 equip read-write 00000051 ABS 349 FREQUIPR EQU 0051 equip read-only 00000054 ABS 350 FREQUIPMW EQU 0054 equip multiple-write 00000057 ABS 351 FREQUIPNA EQU 0057 equip with no data access 352 00000050 ABS 353 FROPEN EQU 0050 open + access 00000050 ABS 354 FROPENW EQU 0050 open read-write 00000051 ABS 355 FROPENR EQU 0051 open read-only 00000054 ABS 356 FROPENMW EQU 0054 open multiple-write 00000057 ABS 357 FROPENNA EQU 0057 open with no data access 358 359 * (R0:=request | R1=length | R2:=string addr | FREQ unit | 360 * R0=error code or static status) 00000260 ABS 361 FRNOPEN EQU 0260 use FRNOPEN+access to open 00000260 ABS 362 FRNOPENW EQU 0260 open for write 00000261 ABS 363 FRNOPENR EQU 0261 open for read 00000264 ABS 364 FRNOPENMW EQU 0264 open for multiple write 00000267 ABS 365 FRNOPENNA EQU 0267 open for no data access 00000268 ABS 366 FRNOPENC EQU 0268 use FRNOPENC+access to open, create if necessary 00000268 ABS 367 FRNOPENCW EQU 0268 open for write, create if necessary 00000269 ABS 368 FRNOPENCR EQU 0269 open for read, create if necessary 0000026C ABS 369 FRNOPENCMW EQU 026C open for multiple write, create if necessary 0000026F ABS 370 FRNOPENCNA EQU 026F open for no data access, create if necessary 371 372 * (R0:=request | R1:=length | R2:=string addr | FREQ unit | 373 * R0:=error code or static status) 00000280 ABS 374 FRUOPEN EQU 0280 use FRUOPEN+access to open 00000280 ABS 375 FRUOPENW EQU 0280 open for write 00000281 ABS 376 FRUOPENR EQU 0281 open for read 00000284 ABS 377 FRUOPENMW EQU 0284 open for multiple write 00000287 ABS 378 FRUOPENNA EQU 0287 open for no data access 00000288 ABS 379 FRUOPENC EQU 0288 use FRUOPENC+access to open, create if necessary 00000288 ABS 380 FRUOPENCW EQU 0288 open for write, create if necessary 00000289 ABS 381 FRUOPENCR EQU 0289 open for read, create if necessary 0000028C ABS 382 FRUOPENCMW EQU 028C open for multiple write, create if necessary 0000028F ABS 383 FRUOPENCNA EQU 028F open for no data access, create if necessary 384 385 * (R0:=request|FREQ unit|R0=dynamic-status) 00000060 ABS 386 FRUNEQUIP EQU 0060 unequip unit 387 00000060 ABS 388 FRCLOSE EQU 0060 close unit 389 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 142 (VIRTDEFS) F 9 Executive Request (XREQ) codes 390 * (R0:=request|R1:=extension|R2,R3:=name|FREQ unit| 391 * R0=error-code or dynamic-status ) 00000070 ABS 392 FRSAVE EQU 0070 save in catalog 393 394 * (R0:=request|FREQ unit| 395 * R0=error-code or dynamic-status ) 00000080 ABS 396 FRUNSAVE EQU 0080 remove from catalog 397 398 * (R0:=request|R1:=position|FREQ unit|R0=dynamic-status| 399 * R1=zero if RAF now positioned in hole ) 00000090 ABS 400 FRPOSITION EQU 0090 position a RAF or CODE 401 * (R0:=request|R1:=RAFpage|R2:=memory-page|FREQ unit| 402 * R0=dynamic-status) 403 * note that R1 and R2 both contain page numbers (not addresses) 00000091 ABS 404 FRMAPIN EQU 0091 map RAF page into memory 00000092 ABS 405 FRMAPINR EQU 0092 map in with read-only access 00000094 ABS 406 FRMAPINOC EQU 0094 map in with own copy access 407 * (R0:=request|FREQ unit|R0=dynamic-status|R1=last-char-in-RAF ) 00000093 ABS 408 FRRAFLAST EQU 0093 get last addr in RAF 409 * (R0:=request|FREQ unit|R0=dynamic status|R1=current position) 00000095 ABS 410 FRRAFCPOS EQU 0095 get the RAF/CODE current position 411 * (R0:=request|R1:=page num|FREQ unit|R0=dynamic status| 412 * R2=non-zero if protected) 00000096 ABS 413 FRPGPROTG EQU 0096 get protected status of page 414 * (R0:=request|R1:=page number|R2:=new protect bit| 415 * FREQ unit|R0=dynamic status) 00000097 ABS 416 FRPGPROTS EQU 0097 set protected status of a page 417 * (R0:=request|R1:=byte address in page|FREQ unit| 418 * R0=dynamic status) 00000098 ABS 419 FRDELPAGE EQU 0098 delete page in RAF or CODE 420 * (R0:=request|FREQ unit|R0=dynamic status|R1=new position) 00000099 ABS 421 FRRAFNEXT EQU 0099 position to next non-hole 422 423 * (R0:=request+access|R1:=pntr-to-param-block|FREQ unit| 424 * R0=error-code or dynamic-status ) 000000A0 ABS 425 FRSHARE EQU 00A0 share file 426 427 * (R0:=request+access|R1:=pntr-to-param-block|FREQ unit| 428 * R0=error-code or dynamic-status ) 000000B0 ABS 429 FRUNSHARE EQU 00B0 unshare file 430 431 * (R0:=request|R1:= requested code|FREQ unit|R0=dynamic-status) 000000C0 ABS 432 FRCACCESS EQU 00C0 change equip access 000000C1 ABS 433 FRCHGTRANS EQU 00C1 modify transaction in progress flag (FCB) 434 435 * (R0:=request|FREQ unit|R0=dynamic-status|R1=transaction flag) 000000C2 ABS 436 FRGETTRANS EQU 00C2 get transaction in progress flag (FCB) 437 438 * (R0:=request|R1:=new value|FREQ unit|R0=dynamic status) 000000D0 ABS 439 FRMODACS EQU 00D0 modify access code 440 * EQU 00D1 unused - was modify access lock (unimp) 000000D2 ABS 441 FRMODPRGI EQU 00D2 modify purge interval 000000D3 ABS 442 FRMODNBKUP EQU 00D3 modify no-backup flag 000000D4 ABS 443 FRMODFWWSC EQU 00D4 modify FWWSC flag 000000D5 ABS 444 FRMODUSRN EQU 00D5 modify user value 000000D6 ABS 445 FRMODLBKU EQU 00D6 modify last backup date 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 143 (VIRTDEFS) F 9 Executive Request (XREQ) codes 000000D7 ABS 446 FRMODGHOST EQU 00D7 modify ghost flag 000000D8 ABS 447 FRMODLWD EQU 00D8 modify last write date 000000D9 ABS 448 FRMODLRD EQU 00D9 modify last read date 000000DA ABS 449 FRMODTRANS EQU 00DA modify transaction in progress flag (DIR) 000000DB ABS 450 FRMODFLOG EQU 00DB modify file log flag 451 452 * (R0:=request|R1:=count|R2:=buffadr|FREQ unit|R0=dynamic-status| 453 * R1=count - chars-copied) 000000E0 ABS 454 FRCATALOG EQU 00E0 catalog info fetch 000000E1 ABS 455 FRREADSHL EQU 00E1 read shared list 456 457 * EQU 00F0 unused (reserved for file info fetch) 458 459 * (R0:=request|R1:=extension|R2,R3:=new name|FREQ unit|R0=error-code or 460 * dynamic-status) 00000100 ABS 461 FRRENAMER EQU 0100 rename saved file 462 463 * (R0:=request|R1,R2:=value|FREQ unit|R0=dynamic-status|R1,R2=old value) 00000110 ABS 464 FRTSETTYPE EQU 0110 set terminal type 465 * (R0:=request|R1:=value|FREQ unit|R0=dynamic-status|R1=old value) 00000111 ABS 466 FRTSETCRD EQU 0111 set CR delay (MS) 00000112 ABS 467 FRTSETLFD EQU 0112 set LF delay (MS) 00000113 ABS 468 FRTSETFFD EQU 0113 set FF delay (MS) 00000114 ABS 469 FRTSETBKSP EQU 0114 set backspace char 00000115 ABS 470 FRTSETKILL EQU 0115 set line kill char 00000116 ABS 471 FRTSETCW EQU 0116 set carriage width 00000117 ABS 472 FRTSETSH EQU 0117 set screen height 00000118 ABS 473 FRTSETECHO EQU 0118 set echo (on/off) 00000119 ABS 474 FRTSETRATE EQU 0119 set input and output baud rate 0000011A ABS 475 FRTSETTCG EQU 011A set terminating char group 0000011C ABS 476 FRTSETIRAT EQU 011C set input baud rate 0000011D ABS 477 FRTSETORAT EQU 011D set output baud rate 0000011F ABS 478 FRTSETTRNS EQU 011F set transmitters 00000220 ABS 479 FRTSETMODE EQU 0220 set interface mode 00000221 ABS 480 FRTSETOPT EQU 0221 set CIA options 00000222 ABS 481 FRTSETHTD EQU 0222 set HT delay (MS) 00000223 ABS 482 FRTSETBRCH EQU 0223 set 'break' character 00000224 ABS 483 FRTSETXOIQ EQU 0224 set XOFF on port's input buffer full 484 * (R0:=request|R1:=pntr-to-def-block|FREQ unit|R0=dynamic-status) 0000011B ABS 485 FRTSETTCS EQU 011B set user defined term chars 486 487 * (R0:=request|FREQ unit|R0=dynamic-status|R1,R2=value) 00000120 ABS 488 FRTGETTYPE EQU 0120 get terminal type 489 * (R0:=request|FREQ unit|R0=dynamic-status|R1=value) 00000121 ABS 490 FRTGETCRD EQU 0121 get CR delay (MS) 00000122 ABS 491 FRTGETLFD EQU 0122 get LF delay (MS) 00000123 ABS 492 FRTGETFFD EQU 0123 get FF delay (MS) 00000124 ABS 493 FRTGETBKSP EQU 0124 get backspace char 00000125 ABS 494 FRTGETKILL EQU 0125 get line kill char 00000126 ABS 495 FRTGETCW EQU 0126 get carriage width 00000127 ABS 496 FRTGETSH EQU 0127 get screen height 00000128 ABS 497 FRTGETECHO EQU 0128 get echo mode 00000129 ABS 498 FRTGETRATE EQU 0129 get output baud rate 0000012A ABS 499 FRTGETTCG EQU 012A get terminating char group 0000012C ABS 500 FRTGETIRAT EQU 012C get input baud rate 0000012E ABS 501 FRTGETPORT EQU 012E get port number 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 144 (VIRTDEFS) F 9 Executive Request (XREQ) codes 0000012F ABS 502 FRTGETRCVR EQU 012F get receiver states 00000230 ABS 503 FRTGETMODE EQU 0230 get interface mode 00000231 ABS 504 FRTGETOPT EQU 0231 get selected CIA options 00000232 ABS 505 FRTGETHTD EQU 0232 get HT delay (MS) 00000233 ABS 506 FRTGETBRCH EQU 0233 get 'break' character 00000235 ABS 507 FRTGETXOIQ EQU 0235 get XOFF on port's input buffer full 508 * (R0:=request|R1:=buffer size|R2:=buffer address|FREQ unit| 509 * R0=dynamic status|R1=buffer remaining) 00000234 ABS 510 FRTGETINFO EQU 0234 get all port info 511 * (R0:=request|R1:=pntr-to-block|FREQ unit| R0=dynamic-status) 0000012B ABS 512 FRTGETTCS EQU 012B get characters that terminate 513 514 * (R0:=request|FREQ unit|R0=error-code|R1=process serial number) 00000130 ABS 515 FRCHAIN EQU 0130 chain, run program 00000131 ABS 516 FRSETUPP EQU 0131 set up under program 00000132 ABS 517 FRINSRTP EQU 0132 insert under program 00000134 ABS 518 FRCREATP EQU 0134 create another underprocess 519 * (R0:=request|R1:=input-unit|R2:=output-unit|FREQ program-unit| 520 * R0=error code or session number) 00000133 ABS 521 FRCONCP EQU 0133 create concurrent session 522 523 * (R0:=request|R1:=unit-of-saved-file|FREQ unit-of-new-data| 524 * R0=dynamic-status) 00000140 ABS 525 FRXSAVE EQU 0140 exchange saved file data 526 527 * (R0:=request|FREQ unit|R0=error-code|R1=hard-limit|R2=soft-limit| 528 * R3=saved-limit) 00000150 ABS 529 FRBLKLIM EQU 0150 get block limits 530 * (R0:=request|FREQ unit|R0=error-code|R1=blocks-used|R2=soft-limit| 531 * R3=saved-limit) 00000151 ABS 532 FRBLKUSED EQU 0151 get blocks used 533 534 * (R0:=request|FREQ unit|R0=dynamic-status) 00000170 ABS 535 FRDESTROY EQU 0170 destroy a saved file 536 537 * (R0:=request|FREQ unit|R0=dynamic status|R1=value) 00000180 ABS 538 FRCGPTRANS EQU 0180 get primary transfer address 00000181 ABS 539 FRCG2TRANS EQU 0181 get secondary transfer address 00000182 ABS 540 FRCGOWND EQU 0182 get to use own directory when run 00000183 ABS 541 FRCGRG1 EQU 0183 get restriction group 1 override 00000184 ABS 542 FRCGRG2 EQU 0184 get restriction group 2 override 00000185 ABS 543 FRCGRG3 EQU 0185 get restriction group 3 override 00000186 ABS 544 FRCGRG4 EQU 0186 get restriction group 4 override 00000187 ABS 545 FRCGRG5 EQU 0187 get restriction group 5 override 00000188 ABS 546 FRCGOPREQ EQU 0188 get operator requests 00000189 ABS 547 FRCGMANAGR EQU 0189 get manager request priv 0000018A ABS 548 FRCGMANTR EQU 018A get maintenance read 0000018B ABS 549 FRCGMANTW EQU 018B get maintenance write 0000018C ABS 550 FRCGBCKUP EQU 018C get backup priv 551 * (R0:=request|R1:=field-number|FREQ unit| 552 * R0=dynamic status|R2=value of field) 0000018F ABS 553 FRGETCCB EQU 018F get field from CCB 00000000 ABS 554 CCBFLDR0 EQU 0 field number for R0 00000001 ABS 555 CCBFLDR1 EQU 1 00000002 ABS 556 CCBFLDR2 EQU 2 00000003 ABS 557 CCBFLDR3 EQU 3 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 145 (VIRTDEFS) F 9 Executive Request (XREQ) codes 00000004 ABS 558 CCBFLDR4 EQU 4 00000005 ABS 559 CCBFLDR5 EQU 5 00000006 ABS 560 CCBFLDR6 EQU 6 00000007 ABS 561 CCBFLDR7 EQU 7 00000008 ABS 562 CCBFLDPC EQU 8 field number for PC 00000009 ABS 563 CCBFLDPSR EQU 9 field number for PSR 0000000A ABS 564 CCBFLDIMR EQU 10 field for interrupt mask register 0000000B ABS 565 CCBFLDIAR EQU 11 field for interrupt address 00000010 ABS 566 CCBFLDOWND EQU 16 field for own directory privilege 00000011 ABS 567 CCBFLDRG1 EQU 17 field for restriction group 1 00000012 ABS 568 CCBFLDRG2 EQU 18 field for restriction group 2 00000013 ABS 569 CCBFLDRG3 EQU 19 field for restriction group 3 00000014 ABS 570 CCBFLDRG4 EQU 20 field for restriction group 4 00000015 ABS 571 CCBFLDRG5 EQU 21 field for restriction group 5 00000016 ABS 572 CCBFLDMNTR EQU 22 field for maintenance read 00000017 ABS 573 CCBFLDMNTW EQU 23 field for maintenance write 00000018 ABS 574 CCBFLDOPR EQU 24 field for operator privilege 00000019 ABS 575 CCBFLDMGR EQU 25 field for manager privilege 0000001A ABS 576 CCBFLDBKUP EQU 26 field for backup privilege 00000008 ABS 577 CCBFLDPTRN EQU CCBFLDPC primary transfer address 00000000 ABS 578 CCBFLD2TRN EQU CCBFLDR0 secondary transfer address 579 * (R0:=request|R1:=new value|FREQ unit|R0=dynamic status) 00000190 ABS 580 FRCSPTRANS EQU 0190 set primary transfer address 00000191 ABS 581 FRCS2TRANS EQU 0191 set secondary transfer address 00000192 ABS 582 FRCSOWND EQU 0192 set to use own directory when run 00000193 ABS 583 FRCSRG1 EQU 0193 set restriction group 1 override 00000194 ABS 584 FRCSRG2 EQU 0194 set restriction group 2 override 00000195 ABS 585 FRCSRG3 EQU 0195 set restriction group 3 override 00000196 ABS 586 FRCSRG4 EQU 0196 set restriction group 4 override 00000197 ABS 587 FRCSRG5 EQU 0197 set restriction group 5 override 00000198 ABS 588 FRCSOPREQ EQU 0198 set operator requests 00000199 ABS 589 FRCSMANAGR EQU 0199 set manager request priv 0000019A ABS 590 FRCSMANTR EQU 019A set maintenance read 0000019B ABS 591 FRCSMANTW EQU 019B set maintenance write 0000019C ABS 592 FRCSBCKUP EQU 019C set backup priv 593 * (R0:=request|R1:=field-number|R2:=new-value|FREQ unit| 594 * R0=dynamic status) 0000019F ABS 595 FRSETCCB EQU 019F set field in CCB 596 597 * (R0:=request|FREQ unit|R0=dynamic status) 000001A0 ABS 598 FRALIAS EQU 01A0 set default directory 599 600 * (R0:=request|FREQ unit|R0=error code) 000001B0 ABS 601 FRTFLSHO EQU 01B0 flush output queue 000001B1 ABS 602 FRTFLSHI EQU 01B1 flush input queue 000001B2 ABS 603 FRTFLSHIO EQU 01B2 flush both input and output queues 000001B3 ABS 604 FRTRESET EQU 01B3 restore term to 'default' configuration 605 * (R0:=request|R1=delay in Ms|FREQ unit|R0=error code) 000001B4 ABS 606 FRTDELAY EQU 01B4 delay terminal outputting 607 * (R0:=request|R1:=character times|FREQ unit|R0=error code) 000001B5 ABS 608 FRTBREAK EQU 01B5 send 'break' 609 * (R0:=request|FREQ unit|R0=error code) 000001B6 ABS 610 FRTCLRXOFF EQU 01B6 clears xoff 611 612 * (R0:=request|FREQ unit|R0=error code|R1=value) 000001C0 ABS 613 FRAGCPUL EQU 01C0 get acct CPU limit (in sec) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 146 (VIRTDEFS) F 9 Executive Request (XREQ) codes 000001C1 ABS 614 FRAGCPUU EQU 01C1 get acct CPU time used 000001C2 ABS 615 FRAGWLCKL EQU 01C2 get acct wallclock limit (in min) 000001C3 ABS 616 FRAGWLCKU EQU 01C3 get acct wallclock time used 000001C4 ABS 617 FRAGDSKL EQU 01C4 get acct disk block limit 000001C5 ABS 618 FRAGDSKU EQU 01C5 get acct saved disk blocks used 000001C6 ABS 619 FRAGWARN EQU 01C6 get acct soft disk limit 000001C7 ABS 620 FRAGSAVL EQU 01C7 get acct saved disk limit 000001C8 ABS 621 FRAGSSCF EQU 01C8 get acct subsystem control flags 000001C9 ABS 622 FRAGBUSY EQU 01C9 get acct busy counter 000001CA ABS 623 FRAGFAC EQU 01CA get acct file access control 000001CB ABS 624 FRAGPWAC EQU 01CB get acct password access control 000001CD ABS 625 FRAGACCT EQU 01CD get acct accounting control 626 * (R0:=request|R1:=ptr to filename|FREQ unit|R0=error code) 000001CE ABS 627 FRAGINITP EQU 01CE get acct initial program 628 * (R0:=request|R1:=buffer size|R2:=ptr to buffer|FREQ unit| 629 * R0=error code|R1=buffer remaining) 000001CF ABS 630 FRAGACCTT EQU 01CF get account title 000001D1 ABS 631 FRAGSHAD EQU 01D1 get account shadow flag 000001D2 ABS 632 FRAGDFLTR EQU 01D2 get acct default restriction 633 634 * (R0:=request | FREQ unit | R0:=error code | R1:R2:=value) 000001D0 ABS 635 FRAGSERNO EQU 01D0 get account serial number 636 637 * (R0:=request | FREQ unit | R0:=error code | R1:=value) 000001D3 ABS 638 FRAGENCF EQU 01D3 get account encryption flag 639 640 * (R0:=request|R1:=new value|FREQ unit|R0=error code|R1=set value) 000001E0 ABS 641 FRASCPUL EQU 01E0 set acct CPU limit (in sec) 000001E1 ABS 642 FRASCPUU EQU 01E1 set acct CPU time used 000001E2 ABS 643 FRASWLCKL EQU 01E2 set acct wallclock limit (in min) 000001E3 ABS 644 FRASWLCKU EQU 01E3 set acct wallclock time used 000001E4 ABS 645 FRASDSKL EQU 01E4 set acct disk block limit 000001E6 ABS 646 FRASWARN EQU 01E6 set acct soft block limit 000001E7 ABS 647 FRASSAVL EQU 01E7 set acct saved disk limit 000001E8 ABS 648 FRASSSCF EQU 01E8 set acct subsystem control flags 000001EA ABS 649 FRASFAC EQU 01EA set acct file access control 000001EB ABS 650 FRASPWAC EQU 01EB set acct password access control 000001ED ABS 651 FRASACCT EQU 01ED set acct accounting control 652 * (R0:=request|R1:=ptr to filename buffer|FREQ unit|R0=error code) 000001EE ABS 653 FRASINITP EQU 01EE set account initial program 654 * (R0:=request|R1:=string len|R2:=ptr to string|FREQ unit| 655 * R0=error code) 000001EF ABS 656 FRASACCTT EQU 01EF set account title 657 * (R0:=request|R1:=ptr passwords|FREQ unit|R0=error code) 000001F0 ABS 658 FRASPASS EQU 01F0 set account logon password 659 * (R0:=request|R1:=new value|FREQ unit|R0=error code) 000001F2 ABS 660 FRASDFLTR EQU 01F2 set acct default restrictions 661 662 * (R0:=request | R1:= 1 or 0 | FREQ unit | R0:=error code) 000001F3 ABS 663 FRASENCF EQU 01F3 set account encryption flag 664 665 * (R0:=request | FREQ unit | R0:=error code or dynamic status) 00000200 ABS 666 FRFILELOCK EQU 0200 lock files implicit .LOCK 00000201 ABS 667 FRFILEULOK EQU 0201 unlock files implicit .LOCK 668 * (R0:=request | R1:=resource# | FREQ unit | R0:=error code or dynamic status) 00000203 ABS 669 FRRESLOCKR EQU 0203 lock file resource lock for read 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 147 (VIRTDEFS) F 9 Executive Request (XREQ) codes 00000204 ABS 670 FRRESLOCKW EQU 0204 lock file resource lock for write 00000205 ABS 671 FRRESULOCK EQU 0205 unlock files resource lock 672 * (R0:=request|FREQ unit|R0=error code or dynamic status| 673 * R1=0 (no lock), 1 (unlocked lock), or 2 (locked lock)) 00000202 ABS 674 FRFILELOKT EQU 0202 test state of files implicit .LOCK 675 * (R0:=request|R1:=resource#|FREQ unit|R0=error code or dynamic status| 676 * R1=0 (no lock), 1 (write locked), or 2 (read locked)| 677 * R2=session number of a locker, if R1=1 or 2) 00000206 ABS 678 FRRESLOKT EQU 0206 test state of files resource lock 00000206 ABS 679 FRRESLOCKT EQU 0206 test state of files resource lock 680 681 * (R0:=request|FREQ unit|R0=errorcode or dynamic status) 00000210 ABS 682 FRUNITID EQU 0210 unit interrupt disable 00000211 ABS 683 FRUNITIE EQU 0211 unit interrupt enable 684 * (R0:=request|FREQ unit|R0=error code|R1=non-zero if enabled) 00000212 ABS 685 FRUNITIGET EQU 0212 unit interrupt flag state get 686 687 * (R0:=request|R1:=echo unit|FREQ unit|R0=errorcode or dynamic status) 00000240 ABS 688 FRECHOUNIT EQU 0240 enable echoing of read lines 689 * (R0:=request|FREQ unit|R0=errorcode or dynamic status) 00000241 ABS 690 FRECHOOFF EQU 0241 disable echoing of read lines 691 * (R0:=request|FREQ unit|R0=errorcode or dynamic status|R1=unit) 00000242 ABS 692 FRECHOGET EQU 0242 get the echo unit (zero if none) 693 * (R0:=request|R1:=buffer length|R2:=buffer address|FREQ unit| 694 * R0=dynamic status or error code) 00000250 ABS 695 FRSETVVFU EQU 0250 load and enable line printer VVFU 696 * (R0:=request|FREQ unit|R0=dynamic status or error code) 00000251 ABS 697 FRCLRVVFU EQU 0251 disable line printer VVFU 698 699 * (R0:=request|R1:=read-unit|FREQ write-unit|R0=error-code) 00000270 ABS 700 FRMAKEPATH EQU 0270 create path, opening both ends 701 702 * (R0:=request|R1:=unit|FREQ unit|R0=error code or static status of unit) 00000290 ABS 703 FRRESSWTCH EQU 0290 switch resources associated with units 704 705 ********************************************************************************** 706 * * 707 * When extending the range of FREQ constants, please * 708 * update the table of maximum values, XREQMAXTAB. * 709 * * 710 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 148 (VIRTDEFS) F 9 Executive Request (XREQ) codes 712 713 ********************************************************************************** 714 * * 715 * UREQs * 716 * The user requests (UREQs) perform operations related * 717 * to the users session ( or to sessions that it controls ). * 718 * The operand of the UREQ is usually not used, but it may * 719 * contain either a session number or a process serial number. * 720 * A process serial number or session number of 0 refers to * 721 * the process/session itself. Negative process serial * 722 * numbers refer to under processes in the process tree * 723 * relative to the position of the current process. Positive * 724 * process serial numbers refer directly to another * 725 * underprocess. A positive session number refers directly to * 726 * a session on the system. The user must, of course, have * 727 * the proper privileges to access other sessions. Negative * 728 * session numbers are undefined. * 729 * * 730 ********************************************************************************** 731 732 * (R0:=request|R1:=value|R2,R3:=variable-name|UREQ 0| 733 * R0=error-code) 00000010 ABS 734 URVARSET EQU 0010 set variable 735 * for string: (R0:=request|R1:=char addr of string| 736 * R2,R3:=variable-name|UREQ buffer length| 737 * R0:=error-code) 00000011 ABS 738 URVARSETS EQU 0011 set string variable 739 740 * (R0:=request|R2,R3:=variable-name|UREQ 0|R0=error-code| 741 * R1=value) 00000020 ABS 742 URVARGET EQU 0020 get variable 743 * for string: (R0:=request|R1:=buffer address| 744 * R2,R3:=variable-name|UREQ buffer length| 745 * R0=error-code [or 0=number, 1=string]| 746 * R1=value or bufferlen-stringlen) 00000021 ABS 747 URVARGETS EQU 0021 get string variable 748 749 * (R0:=request|R1:=buffer addr|R2:=error number|UREQ bufferlen| 750 * R0=error code|R1=buffer remaining) 00000028 ABS 751 URERRORGET EQU 0028 get string for error number 752 753 * (R0:=request|UREQ|R0=error-code|R1=number-of-terms-on| 754 * R2=number-of-sessions) 00000050 ABS 755 URTRAFFIC EQU 0050 get system traffic 00000051 ABS 756 URLOADFACT EQU 0051 get system load factor in R1 757 * (R0:=request|R1:=buffer size|R2:=buffer address| 758 * UREQ -1, 0, or session number|R0=error code|R1=buffer remaining) 00000052 ABS 759 URSESSINFO EQU 0052 get session information 00000052 ABS 760 URPROCINFO EQU 0052 (old name for URSESSINFO) 761 * (R0:=request|UREQ 0|R1=system serial number|R2=system name in PAK6) 00000053 ABS 762 URGETSSN EQU 0053 return system serial number and name 763 * (R0:=request|UREQ 0|R2,R3=system version in ASCII) 00000054 ABS 764 URGETVERS EQU 0054 return system version in ASCII 765 * (R0:=request|R1:=program number|UREQ 0|R0=0 if ok to run, non-zero otherwise) 00000055 ABS 766 URMAYIRUN EQU 0055 see if proprietary program may run 767 * (R0:=request|R1:=buffer size|R2:=buffer address|UREQ 0| 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 149 (VIRTDEFS) F 9 Executive Request (XREQ) codes 768 * R0=error code|R1=buffer remaining) 00000056 ABS 769 URUDRPINFO EQU 0056 get under process information 770 * (R0:=request|R1:=buffer size|R2:=buffer address|UREQ | 771 * R0=error code|R1=buffer remaining) 00000057 ABS 772 URLUNITS EQU 0057 get local unit information 773 * (R0:=request|UREQ 0|R0=error code|R1=process level(CM=0)) 00000058 ABS 774 URPROCLVL EQU 058 get level in process tree 775 776 * (R0:=request|UREQ|R0=error-code|R1=timezone|R2,R3=system-date) 777 * The timezone word contains the three letter abb. for 778 * the local time zone in chars 0-2 and char 3 holds 779 * a signed 8 bit integer that is the offset (in hours) 780 * from UT for the specified time zone. 00000060 ABS 781 URRAWDATE EQU 0060 get date and time 00000061 ABS 782 URFSERNO EQU 0061 same except has uniqueness property 783 * (R0:=request|UREQ|R0=error-code if negative| 784 * R0/BITS 11:22=year|R0/BITS 23:26=month| 785 * R0/BITS 27:31=date|R1=timezone|R2=time of day| 786 * R3=day of week) 00000062 ABS 787 URUNRDATE EQU 0062 unpack rawdate 00000063 ABS 788 URUNLDATE EQU 0063 make rawdate local, unpack 789 * (R0:=request|R2,R3:=time to unpack|UREQ|R0=error-code 790 * if negative|R0/BITS 11:22=year|R0/BITS 23:26=month| 791 * R0/BITS 27:31=date|R1=timezone|R2=time of day| 792 * R3=day of week) 00000064 ABS 793 URUGDATE EQU 0064 unpack time given 00000065 ABS 794 URULDATE EQU 0065 make time given local, unpack 795 796 * (R0:=request|R1:=timezone (not needed for local conversion)| 797 * R2:=time of day|R3/bits 0:22:=year|R3/bits 23:26:=month| 798 * R3/bits 27:31:=date|UREQ|R0,R1=system time) 0000006C ABS 799 URPAKTIME EQU 006C pack time, given time zone 0000006D ABS 800 URPAKTIML EQU 006D pack time, given local time 801 802 * (R0:=request|UREQ) 00000070 ABS 803 URSTOP EQU 0070 program termination 00000071 ABS 804 URSTOPZ EQU 0071 stop and zero virtual memory 00000072 ABS 805 URSTOPR EQU 0072 stop and reset units 00000073 ABS 806 URSTOPZR EQU 0073 stop. zero and reset 00000074 ABS 807 URSTOPI EQU 0074 stop and increment PC 00000078 ABS 808 URSTOPA EQU 0078 stop and set abort status 00000079 ABS 809 URSTOPAZ EQU 0079 stop. abort and zero 0000007A ABS 810 URSTOPAR EQU 007A stop. abort and reset 0000007B ABS 811 URSTOPAZR EQU 007B stop. abort,zero,reset 0000007C ABS 812 URSTOPIA EQU 007C stop, increment PC, and set abort 813 814 * (R0:=request|R1:=bit mask|UREQ psn|R1=new contents) 00000080 ABS 815 URSSINTARM EQU 0080 selectively set interrupt arming mask 00000081 ABS 816 URSCINTARM EQU 0081 selectively clear interrupt arming mask 817 * (R0:=request|UREQ ADR regarea|R0=error-code) 00000082 ABS 818 URINTRTN EQU 0082 return from interrupt 819 820 * (R0:=request|UREQ 0|R0:=error code) 00000085 ABS 821 URSETDEBUG EQU 0085 set flag saying process is a debugger 00000086 ABS 822 URCLRDEBUG EQU 0086 clear flag saying whether debugger 823 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 150 (VIRTDEFS) F 9 Executive Request (XREQ) codes 824 * (R0:=request|R1=error code|R2=param|UREQ 825 * |R0:=error code or termination code|R1=sub-code|R3:=psn ) 00000087 ABS 826 URSENDERR EQU 0087 send error to specified underprocess 827 828 * (R0:=request|UREQ |R0:=zero|error code) 00000088 ABS 829 URSERPROC EQU 0088 receive errors from specified underprocess 00000089 ABS 830 URCERPROC EQU 0089 clear receiving errors from underprocess 831 832 * (R0:=request|R1:= psn|UREQ ADR regarea|R0=error-code) 0000008A ABS 833 URINTRGO EQU 008A return from interrupt to underprocess 834 835 * (R0:=request|UREQ|R0=error-code) 00000090 ABS 836 URBYE EQU 0090 logoff request 837 838 * (R0:=request|R1:=new-limit|UREQ psn|R0=error-code| 839 * R1=CPU-limit|R2=CPU-time-used) 000000A0 ABS 840 URCPTIMES EQU 00A0 CPU time limit set 841 * (R0:=request|UREQ psn|R0=error-code| 842 * R1=CPU-limit|R2=CPU-time-used) 000000A1 ABS 843 URCPTIMEG EQU 00A1 CPU time use/limit get 844 * (R0:=request|UREQ psn|R0=error-code|R0,1=sessiom-WC-limit| 845 * R2=session-WC-used) 000000A7 ABS 846 URSESWCLK EQU 00A7 session wallclock used and limit get 847 * (R0:=request|UREQ psn|R0=error-code|R0,1=session-WC-limit| 848 * R2=session-WC-used) 000000A8 ABS 849 URACCTCPUL EQU 00A8 limiting acct CPU time use/limit get 850 * (R0:=request|UREQ psn|R0=error-code|R1=account-WC-limit| 851 * R2=account-WC-used) 000000A9 ABS 852 URACCTWCL EQU 00A9 limiting acct WC time used/limit get 853 854 * (R0:=request|R1=new-limit|UREQ psn|R0=error-code| 855 * R1=session-limit|R2=session-in-use) 000000B0 ABS 856 URSESBLKS EQU 00B0 session limit set 857 858 * (R0:=request|UREQ psn|R0=error-code| 859 * R1=session-limit|R2=session-used) 000000B1 ABS 860 URSESBLKG EQU 00B1 session limit get 861 862 * (R0:=request|UREQ 0|R1=hard-limit|R2=soft-limit|R3=saved-limit) 000000B2 ABS 863 URBLKLIM EQU 00B2 get account's block limits 864 865 * (R0:=request|UREQ 0|R1=blocks-used|R2=soft-limit|R3=saved-limit) 000000B3 ABS 866 URBLKUSED EQU 00B3 get account's block usage 867 868 * (R0:=request|UREQ pagenum|R0=error-code) 000000C0 ABS 869 URFREEPAGE EQU 00C0 release memory page 870 * (R0:=request|R1=pagenum|UREQ psn|R0=pagetype or errorcode| 871 * R1=other info) 000000C1 ABS 872 URPAGETYPE EQU 00C1 get association of page in memory 873 * (R0:=request|UREQ pagenum|R0=error code) 000000C2 ABS 874 UREXCLPAGE EQU 00C2 make page unreferencable 000000C4 ABS 875 URFORCEP EQU 00C4 force write this page, wait for xfer 000000C5 ABS 876 URWRITEP EQU 00C5 force write this page, don't wait for xfer 877 878 * (R0:=request|UREQ process-serial-number| 879 * R0=termination-code|R1=subcode|R2=process-serial-number) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 151 (VIRTDEFS) F 9 Executive Request (XREQ) codes 880 * (if R0=UINTPTERM, then R1=right 4 bits of URSTOPxx) 000000D0 ABS 881 URPGO EQU 00D0 set a program running 000000D4 ABS 882 URPSTEP EQU 00D4 single step a program 883 * (R0:=request|UREQ -1,0, or session number|R0=error-code) 000000D2 ABS 884 URPDSTRY EQU 00D2 destroy a session or the 885 immediate under process 886 * (R0:=request|UREQ -1 |R0=error-code) 000000D3 ABS 887 URPDSTRYA EQU 00D3 destroy all under processes 888 * (R0:=request|UREQ psn |R0=error-code) 000000D5 ABS 889 URPDSTRYP EQU 00D5 destroy an under process 000000D6 ABS 890 URPDSTRYAP EQU 00D6 destroy all under processes 891 of a given under process 892 893 * (R0:=request+register|R1:=new-contents|UREQ process-serial-number| 894 * R0=error-code|R1=previous-register-contents) 895 * registers: 896 * 0 => R0 ... 7 => R7, 8 = PC 897 * 9 => PSR, 10 => int mask 898 * 11 => interrupt address. 12:15 => errors 000000E0 ABS 899 URPSETREG EQU 00E0 set a process register 900 901 * (R0:=request+register|UREQ psn|R0=error-code| 902 * R1=register-contents) 000000F0 ABS 903 URPGETREG EQU 00F0 get a process register 904 905 * (R0:=request|R1:=char-pointer|UREQ 0|R0=item-type or error-code| 906 * R1=pntr-to-terminator|(R2,R3)=packed-item) 00000100 ABS 907 URPACKI EQU 0100 pack an item 908 * (R0:=request|R1:=char-pointer|R2:=pointer-to-block|UREQ 0| 909 * R0=error-code|R1=pntr-to-terminator) 00000101 ABS 910 URPACKFI EQU 0101 pack a file specifier item 00000102 ABS 911 URPACKFS EQU 0102 pack a complete file specifier 912 913 * (R0:=request|R1:=requester page|R2:=others page| 914 * UREQ psn|R0=error code) 00000110 ABS 915 URMAPINAS EQU 0110 mapin other address space 916 917 * (R0:=request|UREQ psn|R0=error-code or run unit if no error) 00000120 ABS 918 URGRUNLUN EQU 0120 get the run unit number 919 * (R0:=request|UREQ unit|R0=error code|R1=next unit) 00000121 ABS 920 URNEXTLUN EQU 0121 find next higher in use unit 921 * (R0:=request|UREQ unit|R0=error code|R1=next free unit) 00000122 ABS 922 URFREELUN EQU 0122 find next lower free unit 923 * (R0:=request|R1:=current #|R2:=target unit #|UREQ psn|R0=error code) 00000123 ABS 924 URGIVELUN EQU 0123 pass unit to an underprocess 925 926 * (R0:=request|R1:=mode to load|UREQ psn| 927 * R0=error code|R1=-1 or effective address) 00000130 ABS 928 URLEA EQU 0130 do LEA in other address space 00000131 ABS 929 URLEA2 EQU 0131 do LEA2 in other address space 930 931 * (R0:=request|R1:=seconds|R2:=event mask|UREQ 0|R0=error code| 932 * R1=seconds remaining|R2=event|R3=event parameter) 00000140 ABS 933 URDELAY EQU 0140 delay for the given seconds 00000143 ABS 934 URDELAYR EQU 0143 restore console terminal 935 * (R0:=request|R1:=seconds|UREQ 0|R0=error code|R1=seconds remaining 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 152 (VIRTDEFS) F 9 Executive Request (XREQ) codes 936 * on previous request) 00000141 ABS 937 URSETTIMIN EQU 0141 set timer interrupt 938 * (R0:=request|UREQ 0|R0=error code|R1=seconds remaining) 00000142 ABS 939 URCLRTIMIN EQU 0142 clear timer interrupt 940 941 * (R0:=request|R1:=message size|R2:=address|UREQ 0| 942 * R0=error code) 00000150 ABS 943 URGENOPMSG EQU 0150 generate message to operator 944 * (R0:=request|UREQ 0|R0=error code) 00000151 ABS 945 URCANOPMSG EQU 0151 cancel message to operator 946 947 * (R0:=request|R1:=message-size|R2:=address|UREQ 0|R0=error code) 00000160 ABS 948 URSENDMSG EQU 0160 send message to other session 949 * (R0:=request|R1:=buffer-size|R2:=address|UREQ message-class-mask| 950 * R0=error-code|R1=buffer-remaining) 00000161 ABS 951 URGETMSG EQU 0161 receive message from other session 952 * (R0:=request|UREQ 0|R0=error-code|R1=message-class-mask) 00000162 ABS 953 URGETMSGA EQU 0162 get mask of acceptable messages 954 * (R0:=request|R1=bits-to-set/clear|UREQ 0|R0=error-code|R1=bits-changed) 00000163 ABS 955 URSSMSGA EQU 0163 sets bits in mask of acceptable messages 00000164 ABS 956 URSCMSGA EQU 0164 clear bits in mask of acceptable messages 957 958 * (R0:=request|R1:=length-of-name|R2:=address-of-name|UREQ 0| 959 * R0=error-code|R1=session-number) 00000170 ABS 960 URGETPNUM EQU 0170 lookup server name 961 962 * (R0=request|R2,3:=new-program-name|UREQ 0| 963 * R0:=error-code|R2,3:=old-program-name) 00000180 ABS 964 URCNAME EQU 0180 change program name 965 * (R0:=request|UREQ |R0=error-code) 00000181 ABS 966 URSETLGFSES EQU 0181 set session to give message at logoff 967 * (R0:=request|R1:=privs-to-release|UREQ 0|R0=error-code) 00000182 ABS 968 URDROPPRIV EQU 0182 relinquish program privileges 969 970 * (R0=request|R1=unit number|R2=privilege|UREQ ) 00000190 ABS 971 URGIVEUNIT EQU 0190 give a unit to another session 972 * (R0=request|UREQ | 973 * R0=error-code|R1=|R2=) 00000191 ABS 974 URRCVUNIT EQU 0191 receive a unit from another session 975 976 ********************************************************************************** 977 * * 978 * When extending the range of UREQ constants, please * 979 * update the table of maximum values, XREQMAXTAB. * 980 * * 981 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 153 (VIRTDEFS) F 9 Executive Request (XREQ) codes 983 984 ********************************************************************************** 985 * * 986 * OPREQs * 987 * Operator requests (OPREQs) are provided for operator, * 988 * manager, and control mode functions. Processes must have * 989 * the proper privileges to do OPREQs. * 990 * * 991 ********************************************************************************** 992 993 * (R0:=request|R1:=pntr-to-PAK12 name,PAK6 proj,PAK12 pwd|OPREQ 0| 994 * R0=error-code) 00000010 ABS 995 ORHELLO EQU 0010 logon request 996 * (R0:=request|OPREQ|R0=error-code|R1=wall clock time used) 00000011 ABS 997 ORGOODBYE EQU 0011 disassign user and do accounting 998 * (R0:=request|R1=>equip name buffer|OPREQ 0|R0=error code) 00000012 ABS 999 ORLOGONP EQU 0012 fetch logon program name 1000 * (R0:=request|R1:=options|OPREQ |R0=error-code) 00000013 ABS 1001 ORATTACH EQU 0013 attach to a session 1002 * (R0:=request|OPREQ |R0=error-code) 00000014 ABS 1003 ORRESETVM EQU 0014 reset virtual memory 1004 1005 * (R0:=request|OPREQ) 00000020 ABS 1006 ORVANISH EQU 0020 vanish request 1007 1008 * (R0:=request|OPREQ) 00000030 ABS 1009 ORSLEEP EQU 0030 sleep request 1010 1011 * (R0:=request|R2,R3:=password|OPREQ =pak6 drive name| 1012 * R0=error code|R0=number of accounts|R1=number of shadows| 1013 * R2,R3=volume name) 00000040 ABS 1014 ORMOUNT EQU 0040 mount a volume given drive name 1015 * (R0:=request|R2,R3:=volume name|OPREQ|R0=error code) 00000041 ABS 1016 ORDISMOUNT EQU 0041 dismount a volume given volume name 1017 * (R0:=request|R1:=non-zero to inhibit|R2,R3:=volume name| 1018 * OPREQ|R0=error code) 00000042 ABS 1019 ORINHIBVOL EQU 0042 inhibit/allow volume access 1020 * (R0:=request|R1:=buffer size|R2:=buffer adr|OPREQ 0| 1021 * R0=error code|R1=buffer remaining) 00000043 ABS 1022 ORVINFO EQU 0043 get volume information 1023 * (R0:=request|R1:=buffer size|R2:=buffer adr|OPREQ unit (.vol)| 1024 * R0=error code|R1=buffer remaining) 00000044 ABS 1025 ORVOLINFO EQU 0044 get volume information 1026 * (R0:=request|OPREQ drivename|R0=error code) 00000045 ABS 1027 ORDISMTDRV EQU 0045 dismount volume given drive name 1028 * (R0:=request|R2,R3:=volume name|OPREQ| 1029 * R0=error code|R0=number of accounts|R1=number of shadows| 1030 * R2,R3=volume name) 00000046 ABS 1031 ORMOUNTVOL EQU 0046 mount volume given volume name 1032 * (R0:=request|R1:=buffer size|R2:=buffer adr|OPREQ unit (.vol)| 1033 * R0=dynstat or errorcode|R1=buffer remaining) 00000047 ABS 1034 ORBUSYVOL EQU 0047 get accounts busy on a volume 1035 1036 * (R0:=request|R1:=pntr-to-param-block|OPREQ 0| 1037 * R0=error-code) 00000050 ABS 1038 ORCREACCT EQU 0050 manager create account 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 154 (VIRTDEFS) F 9 Executive Request (XREQ) codes 00000051 ABS 1039 ORBKCACCT EQU 0051 backup create account 1040 1041 * (R0:=request|OPREQ unit (.dir)|R0=error-code) 00000060 ABS 1042 ORDESACCT EQU 0060 destroy an account 1043 1044 * (R0:=request|OPREQ portnum|R0=error code) 00000070 ABS 1045 ORPINHIB EQU 0070 inhibit port access 00000071 ABS 1046 ORPALLOW EQU 0071 allow port access 1047 * (R0:=request|R1:=buffer size|R2=buffer adr| 1048 * OPREQ -1, 0, or portnum|R0=error code|R1=buffer remaining) 00000072 ABS 1049 ORPINFO EQU 0072 port information fetch 1050 * (R0:=request|OPREQ portnum|R0=error code) 00000073 ABS 1051 ORPWARN EQU 0073 warn port is inhibited 1052 * (R0:=request|OPREQ portnum|R0=error code) 00000074 ABS 1053 ORPRESET EQU 0074 reset a ports configuration 1054 1055 * (R0:=request|R1:=zone name|OPREQ GMT difference|R0=error code) 00000080 ABS 1056 ORTZONE EQU 0080 set system local time zone 1057 * (R0:=request|R1:=time correction|OPREQ 0|R0:=error code) 00000081 ABS 1058 ORTADJUST EQU 0081 correct system time by gradual adjustment 1059 1060 * (R0:=request|OPREQ 0|R0,R1:=time of last correction| 1061 * R2=current clock error (ms), + sez slow|R3=drift 1062 * (ppb), + sez clock loses time) 00000082 ABS 1063 ORTIMPAR EQU 0082 get clock adjustment variables 1064 1065 * (R0:=request|OPREQ |R0=error code) 00000090 ABS 1066 ORPTERMIN EQU 0090 "terminate" a session 00000091 ABS 1067 ORPEVICT EQU 0091 "evict" a session 00000092 ABS 1068 ORSESSINFO EQU 0092 fetch session information (see URSESSINFO) 00000092 ABS 1069 ORPROCINFO EQU 0092 (old name for ORSESSINFO) 00000093 ABS 1070 ORPABORT EQU 0093 "abort" a session 1071 1072 * (R0:=request|R1:=buffer size|R2:=buffer address|OPREQ 0| 1073 * R0=dynstat or errorcode|R1=buffer remaining) 000000A0 ABS 1074 ORREADAFT EQU 00A0 read account finder table 1075 * (R0:=request|R1:=buffer size|R2:=buffer address| 1076 * OPREQ unit (.vol)|R0=error code|R1=buffer remaining) 000000A1 ABS 1077 ORREADIDX EQU 00A1 read IDX from a volume 1078 * (R0:=request|OPREQ unit (.dir)|R0=dynstat or errorcode) 000000A2 ABS 1079 ORADDAFT EQU 00A2 add entry to the AFT 000000A3 ABS 1080 ORDELAFT EQU 00A3 delete entry from the AFT 1081 1082 * (R0:=request|R1:=pak6 device name|OPREQ unit(unused)| 1083 * R0=error code|R2,3=volume name) 000000B0 ABS 1084 ORMOUNTMAI EQU 00B0 maint mount pack(no IDX AFT) 000000B1 ABS 1085 ORVOLHANDLE EQU 00B1 fully maint mount a pack 1086 1087 * (R0:=request|R1:=buffer size|R2:=buffer addr|OPREQ unit (.vol)| 1088 * R0=dynstat or errorcode|R1=buffer remaining) 000000C0 ABS 1089 ORBKUPVOL EQU 00C0 get volume backup information 000000C1 ABS 1090 ORBKUPACT EQU 00C1 get account backup information 000000C2 ABS 1091 ORBKUPFIL EQU 00C2 get file backup information 000000C3 ABS 1092 ORGETFP EQU 00C3 get file data to backup 1093 1094 * (R0:=request | R1:=time stamp | OPREQ unit (.vol) | 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 155 (VIRTDEFS) F 9 Executive Request (XREQ) codes 1095 * R0:=error code) 000000C4 ABS 1096 ORBKUPDONE EQU 00C4 place time stamp on disk 1097 1098 * (R0:=request|R1:=buffer size|R2:=buffer addr|R3:=page #| 1099 * OPREQ unit (.vol)|R0=dynstat or errorcode|R1=buffer remaining) 000000C5 ABS 1100 ORMAPFP EQU 00C5 mapin file data to backup 1101 1102 * (R0:=request|R1:=buffer size|R2:=buffer addr|OPREQ unit (.vol)| 1103 * R0=dynstat or errorcode) 000000D0 ABS 1104 ORINITVOL EQU 00D0 initialize volume for recovery 000000D1 ABS 1105 ORRCVRACT EQU 00D1 initialize account for recovery 000000D2 ABS 1106 ORRCVRFIL EQU 00D2 initialize file for recovery 000000D3 ABS 1107 ORPUTFP EQU 00D3 output file recovery data (old style) 000000D6 ABS 1108 ORRCVRACTL EQU 00D6 account recovery/limits adjustments 1109 1110 * (R0:=request|OPREQ unit (.vol)|R0=errorcode or dynstat) 000000D4 ABS 1111 ORINITEND EQU 00D4 say recovery done 1112 1113 * (R0:=request|R1:=buffer size|R2:=buffer addr|R3:=page #| 1114 * OPREQ unit (.vol)|R0=dynstat or errorcode) 000000D5 ABS 1115 ORPUTPFP EQU 00D5 recover paged recovery data 1116 1117 * (R0:=request|R1:=CPU time allocatable|OPREQ unit (.dir)|R0=errorcode) 000000E0 ABS 1118 ORCREAUTHL EQU 00E0 create auth list 1119 * (R0:=request|R1:=CPU time allocatable|OPREQ unit (.dir)|R0=errorcode| 1120 * R1=prev CPU time allocatable|R2=CPU time allocated) 000000E1 ABS 1121 ORCHGAUTHL EQU 00E1 change auth list 1122 * (R0:=request|OPREQ unit (.dir)|R0=errorcode|R1=prev CPU time allocatable| 1123 * R2=CPU time allocated) 000000E8 ABS 1124 ORDESAUTHL EQU 00E8 destroy auth list 000000E9 ABS 1125 ORGETAUTHL EQU 00E9 get auth list values 1126 1127 * (R0:=request|R2,R3:=volume name|OPREQ unit (.dir)|R0=errorcode) 000000F0 ABS 1128 ORCREAUTHE EQU 00F0 create auth list entry 000000F8 ABS 1129 ORDESAUTHE EQU 00F8 destroy auth list entry 1130 1131 * (R0:=request|R1:=new value|R2,R3:=volume name|OPREQ unit (.dir)|R0=errorcode| 1132 * R1=old allocatable value|R2=value allocated) 000000F2 ABS 1133 ORCAUTHDL EQU 00F2 change auth entry disk space allocatable 000000F3 ABS 1134 ORCAUTHSL EQU 00F3 change auth entry saved allocatable 1135 * (R0:=request|R2,R3:=volume name|OPREQ unit (.dir)|R0=errorcode| 1136 * R1=amount allocatable|R2=amount allocated) 000000FA ABS 1137 ORGAUTHDL EQU 00FA get disk space allocatable 000000FB ABS 1138 ORGAUTHSL EQU 00FB get saved allocatable 1139 * (R0:=request|R1:=buffer size|R2:=buffer addr|OPREQ unit (.dir)| 1140 * R0=error code|R1=buffer remaining) 000000FF ABS 1141 ORGAUTENS EQU 00FF get auth list entries (the whole thing) 1142 1143 * (R0:=request|R1:=ADR buffer|OPREQ 0|R0=error-code|R2,3=44-bit UT date) 00000101 ABS 1144 ORREADCNT EQU 0101 fetch block read counts 00000102 ABS 1145 ORWRITECNT EQU 0102 fetch block write counts 00000103 ABS 1146 ORRWCOUNTS EQU 0103 fetch both read and write counts 1147 1148 * (R0:=request|R1:=buffersize|R2:=bufferaddr|OPREQ 0| 1149 * R0=errorcode|R1=buffer remaining) 00000110 ABS 1150 ORDEVINFO EQU 0110 fetch system device information 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 156 (VIRTDEFS) F 9 Executive Request (XREQ) codes 1151 1152 * (R0:=request|R1=trace classes|OPREQ 0|R0=errorcode) 00000120 ABS 1153 ORSTRTTRC EQU 0120 start system trace 1154 * (R0:=request|OPREQ 0|R0=errorcode) 00000121 ABS 1155 ORSTRTMON EQU 0121 start system instruction monitor 00000122 ABS 1156 ORSTRTDYNW EQU 0122 start system dynamic wait monitor 00000123 ABS 1157 ORSTRTXMON EQU 0123 start system XREQ call monitor 1158 1159 * (R0:=request|R1:=buffersize|R2:=bufferaddr|OPREQ 0| 1160 * R0=errorcode|R1=buffer remaining) 00000130 ABS 1161 ORSTOPTRC EQU 0130 stop system trace and return results 00000131 ABS 1162 ORSTOPMON EQU 0131 stop system instruction monitor and give results 00000132 ABS 1163 ORSTOPDYNW EQU 0132 stop dynamic wait monitor and give results 00000133 ABS 1164 ORSTOPXMON EQU 0133 stop XREQ call monitor and give results 00000138 ABS 1165 ORGETTRC EQU 0138 return trace info (but don't stop trace) 1166 1167 * definition of control field in R0 for ORMAINTR and ORMAINTW 00002630 BYTE 1168 XRMAIFLD EQU BITS 19:21 field holding maintenance information 00001000 ABS 1169 XRNOSUB EQU 4*XRMAIFLD indicates no substitutions 00000800 ABS 1170 XRNOERRS EQU 2*XRMAIFLD indicates no error recovery/retries 00000400 ABS 1171 XRWWCHK EQU 1*XRMAIFLD indicates to perform write-check 1172 1173 * (R0:=request + control|R1:=ADR block buffer|R2:=ADR FBI buffer| 1174 * R3:=MS address|OPREQ unit (.vol)|R0=error code) 00000140 ABS 1175 ORMAINTR EQU 0140 maintenance read 00000142 ABS 1176 ORMAINTRSUB EQU 0142 maintenance read and substitute 1177 * (R0:=request|R1:=address|OPREQ 0|R0=error code|R2=data) 00000141 ABS 1178 ORREADNVM EQU 0141 get data from NVM 1179 * (R0:=request + control|R1:=ADR block buffer|R2:=ADR FBI buffer| 1180 * R3:=MS address|OPREQ unit (.vol)|R0=error code) 00000150 ABS 1181 ORMAINTW EQU 0150 maintenance write 1182 * (R0:=request|R1:=address|R2:=data|OPREQ 0|R0=error code) 00000151 ABS 1183 ORWRITENVM EQU 0151 write data into NVM 1184 * (R0:=request|R1:=MS address|OPREQ unit (.vol)|R0=dynstat| 1185 * R1=PPU status|R2=BFD Controller status) 00000152 ABS 1186 ORFORMAT EQU 0152 format a track 1187 * (R0:=request|R1:=sec/trk|R2:=trk/cyl|OPREQ |R0=error-code) 00000153 ABS 1188 ORSECTRK EQU 0153 set sec/trk and trk/cyl 1189 * (R0:=request|R1:=new state|OPREQ |R0=error-code|R1=old state) 00000154 ABS 1190 ORHEADCHK EQU 0154 start/inhibit head checker 1191 * (R0:=request|OPREQ |R0=error-code 00000155 ABS 1192 ORINITFMT EQU 0155 prepare volume for formatting 00000156 ABS 1193 ORRESETDRV EQU 0156 reinitialize drive information 1194 * (R0:=request|R1:=message size|R2:=message address|OPREQ 0| 1195 * R0=message serial number or error code) 00000160 ABS 1196 ORGENOPMSG EQU 0160 generate message to operator 1197 * (R0:=request|R1:=buffer size|R2:=buffer address|OPREQ anything| 1198 * R0=error code|R1=buffer remaining) 00000161 ABS 1199 ORGETOPMSG EQU 0161 get messages to operator 1200 * (R0:=request|R1:=message serial number|OPREQ 0|R0=error code) 00000162 ABS 1201 ORCANOPMSG EQU 0162 cancel message to operator 1202 1203 * (R0:=request|R1:=name-length|R2:=name-address|OPREQ 0|R0=error-code) 00000170 ABS 1204 ORSETPNUM EQU 0170 set entry in server name table 00000171 ABS 1205 ORCLRPNUM EQU 0171 clear entry in server name table 1206 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 157 (VIRTDEFS) F 9 Executive Request (XREQ) codes 1207 * (R0:=request|R1:=length-of-output-file-name|R2:=addr-of-output-file-name| 1208 * R3:=addr-of-logon-info|OPREQ input-unit-number|R0=error-code-or- 1209 * session-number) 00000180 ABS 1210 ORSTRTBAT EQU 0180 start spooled batch job 1211 * (R0:=request|R1:=length-of-logon-string|R2:=addr-of-logon-string 1212 * R3:=terminal-output-unit|OPREQ terminal-input-unit| 1213 * R0=error-code-or-session-number) 00000181 ABS 1214 ORSTRTTERM EQU 0181 remote port startup 1215 * (R0:=request|OPREQ unit|R0=error-code-or-session-number) 00000182 ABS 1216 ORSTRTJOB EQU 0182 start spooler-less batch job 1217 * (R0:=request|OPREQ 0|R0=error-code-or-session-number) 00000183 ABS 1218 ORSTRTSPLR EQU 0183 start spooler session 1219 1220 * (R0:=request|R2,3:=new volume name|OPREQ unit (a .vol)| 1221 * R0=error code) 00000190 ABS 1222 ORCVOLNAME EQU 0190 change volume name 1223 * (R0:=request|R2,3:=new volume password|OPREQ unit (a .vol)| 1224 * R0=error code) 00000191 ABS 1225 ORCVOLPWD EQU 0191 change volume password 1226 * (R0:=request|R1:=new customer number|R2:=new system serial number| 1227 * OPREQ unit (a .vol)|R0=error code) 00000192 ABS 1228 ORCVOLSSN EQU 0192 change volume SSN 1229 * (R0:=request|R1:=new value|OPREQ unit (a .vol)| 1230 * R0=error code) 00000193 ABS 1231 ORCVOLNEWO EQU 0193 change volume new owner flag 1232 * (R0:=request|R1:=buffer len|R2:=ptr to string|OPREQ unit (a .vol)| 1233 * R0=error code) 00000194 ABS 1234 ORCVOLTITLE EQU 0194 change volume title 1235 * (R0:=request|OPREQ unit (a .vol)|R0=error code| 1236 * R2,3=volume name) 00000198 ABS 1237 ORGVOLNAME EQU 0198 get volume name 1238 * (R0:=request|OPREQ unit (a .vol)|R0=error code| 1239 * R1=customer number|R2=system number) 0000019A ABS 1240 ORGVOLSSN EQU 019A get system serial number 1241 * (R0:=request|OPREQ unit (a .vol)|R0=error code| 1242 * R1=new owner flag) 0000019B ABS 1243 ORGVOLNEWO EQU 019B get volume new owner flag 1244 * (R0:=request|R1:=buffer size|R2:=buffer ptr|OPREQ unit (a .vol)| 1245 * R0:=error code|R1:=buffer remaining) 0000019C ABS 1246 ORGVOLTITLE EQU 019C get volume title 1247 1248 * (R0:=request|R1:=info value index|OPREQ 0|R0=error-code|R2=value requested) 000001A0 ABS 1249 ORGSYSINFO EQU 01A0 fetch system information 1250 1251 * (R0:=request|R1:=CPU number|OPREQ process number (0 means me)|R0=error-code| 1252 * R1:=original CPU number (0 if none)) 000001B0 ABS 1253 ORSETCPU EQU 01B0 assign a process to a particular CPU 1254 * (R0:=request|R1:=CPU number|OPREQ 0|R0=error-code| 1255 * R1:=CPU number 000001B1 ABS 1256 ORCPUSTOP EQU 01B1 stop a CPU from active service 000001B2 ABS 1257 ORCPUSTRT EQU 01B2 restart a stopped CPU 1258 * (R0:=request|R1:=number of pages|OPREQ 0|R0=error-code) 000001C0 ABS 1259 ORTAKEPAGS EQU 01C0 remove physical memory from use 1260 * (R0:=request|OPREQ |R0=error code) 000001D0 ABS 1261 ORPSTOP EQU 01D0 "stop" a session 000001D1 ABS 1262 ORPGO EQU 01D1 restart a session 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 158 (VIRTDEFS) F 9 Executive Request (XREQ) codes 1263 1264 ********************************************************************************** 1265 * * 1266 * When extending the range of OPREQ constants, please * 1267 * update the table of maximum values, XREQMAXTAB. * 1268 * * 1269 ********************************************************************************** 16 INPUT XREQINFOMACS format for info returned by XREQs 2 * System variable definition macros version 4.7 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 159 (XREQINFOMACS) F 10 Macro Definitions 4 5 * 4.7 890120 Added VT. RC. 6 * 4.6 870815 Added FSSTATABS. DH. 7 * 4.5 860523 Added PILGFSESS field (PROCINFORD). JB. 8 * 4.4 851017 Addition of PISYSPROC field (PROCINFORD). JB. 9 * 4.3 C8504 Addition of DIRFLOG field. MH 10 * 4.2 C8411 Addition of macro LUINFORD. JB. 11 * 4.1 C8410 DIRSERNO(1) now DIRUNITNM for hardware devices. JB. 12 * 4.0 C8409 Addition of macro UNDRPINFORD. JB. 13 * 3.7 C8407 Removed LOCK RC 14 * 3.6 Addition of DTYPECT and DTYPEVOL. DH 15 * 3.5 Addition of BCD overflow detect enable and floating 16 * point reduced precision enable in PSRDEFS. DH 17 * 3.4 Addition of DIRTRANS field. JB. 18 * 3.4 Addition of length field to share list read data RC 19 * 3.3 Addition of DIRGHOST field RC 20 * 2.1 Change of FSSTATPRW and addition of FSPRIVBKUP,XO,NOT 21 * 1.3 New field in DIRINFORD. JL. 22 * A8110 New field in PROCINFORD. JL. 23 * A8109 New field in FILESTAT, new macro MSGDEFS. JL. 24 * A8104 New field in DIRINFORD, PROCINFORD. JL. 25 * A8102 Minor changes to PROCINFORD. JL. 26 * A8007 Minor changes to DIRINFORD and PROCINFORD. JL. 27 * A7909 Initial release. RA. 28 29 ********************************************************************************** 30 * * 31 * This is the definition of macros that define symbols * 32 * that are required in communication with the system. This * 33 * file is INPUT in assembly language programs and it defines * 34 * macros that, when invoked, define the requested group of * 35 * symbols. The macro invocation is of the form: * 36 * * 37 * macname [list] * 38 * * 39 * where "macname" is the name of the requested macro and "list" is * 40 * optionally included (the square brackets denote optionality) if the * 41 * body of the macro (i.e., the definition of the symbols) is to * 42 * be listed. * 43 * * 44 * Macros that are defined herein are: * 45 * * 46 * DIRINFORD Format of data returned by directory information reads. * 47 * FILESTAT Fields and values in the static and dynamic file status * 48 * words. * 49 * FLDDEFS Definitions of instruction and address field names. * 50 * MSGDEFS Definitions of messages passed via URSENDMSG. * 51 * PSRDEFS Fields and values in the Process Status Register. * 52 * PROCINFORD Format of data returned by session information request. * 53 * SHLINFORD Format of data returned by shared list read request. * 54 * UNDRPINFORD Format of data of the underprocess tree structure. * 55 * LUINFORD Format of data returned by the local unit request. * 56 * * 57 ********************************************************************************** 58 59 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 160 (XREQINFOMACS) F 10 Macro Definitions 60 DIRINFORD MACRO 61 NOLIST 62 $P 63 BOX 64 65 This is the format of information that is returned to 66 the user when he requests directory information. The 67 header is returned only when the .DIR is at load point. 68 After that the buffer is filled with an integral number of 69 entries, one for each file. 70 When the directory is exhausted, an end-of-data status 71 is returned. 72 73 EBOX 74 75 DIRHINFO BASE R0 Header giving account information 76 DIRHLNTH BSS 1 Length of entry in words (now 8) 77 DIRFLAGS BSS 1 Flags 78 DIRSHADOW EQU DIRFLAGS/BIT 0 On if a shadow account 79 DIRFOREIGN EQU DIRFLAGS/BIT 1 On if account not at home here 80 DIRNETWORK EQU DIRFLAGS/BIT 2 On if account accessed via network 81 DIRVOLUME BSS2 1 Volume account is on (PAK12) 82 DIRSYSTEM BSS 1 System account is on (PAK6) 83 DIRACCOUNT BSS2 1 Account name (PAK12) 84 DIRPROJECT BSS 1 Project of account (PAK6) 85 DRCT 86 DIRHWIDE EQU DISPW DIRHINFO Template length 87 ORG DIRHINFO Recover template space 88 89 90 BOX 91 92 Template for .DIR file entry block 93 94 EBOX 95 96 DIREINFO BASE R0 Entry for individual file 97 DIRENTLEN BSS 1 Entry length in words 98 DIRNAME BSS2 1 Name of file (PAK12) 99 DIREXT BSS 1 File name extension (PAK6) 100 DIRCREATD BSS 1 Creation date 101 DIRLACSD BSS 1 Last access date 102 DIRLMODD BSS 1 Last modified date 103 DIRLBKUPD BSS 1 Last backup date 104 105 DIRTOTRACS BSSB 16 Total read accesses 106 DIRTOTWACS BSSB 16 Total write accesses 107 108 DIRRACS BSSB 16 Currently active EQUIPs for RO 109 DIRWACS BSSB 16 Currently active EQUIPs for RW 110 111 DIRMWACS BSSB 16 Currently active EQUIPs for MW 112 DIRTFL BSSB 24 Total file length (in blocks) 113 DIRROOTBLK BSSB 24 Root block (or 0 if not GOD) 114 115 DIRTYPE BSSB 8 Type of file (see FSSTATDTYP) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 161 (XREQINFOMACS) F 10 Macro Definitions 116 DIRACCESS BSSB 4 Access allowed (see FSSTATACS) 117 DIRRAFTYPE BSSB 2 Empty, Tiny, Small, Large 118 BSSB 2 filler 119 DIRPRGINT BSSB 8 Purge interval 120 DIRPRGFLG BSSB 1 On if file was purged 121 DIRNOBKUP BSSB 1 On if file should not be backed up 122 DIRRCVRD BSSB 1 On if file recovered from backup 123 DIRFWWSC BSSB 1 On if file EQUIPed for W at crash 124 DIRFBC BSSB 1 On if file being closed 125 DIRGHOST BSSB 1 On if file not yet recovered from backup 126 DIRTRANS BSSB 1 On if file opened when user program crashed 127 DIRFLOG BSSB 1 On if file access should be logged 128 129 BSSB 1 unused filler 130 DIRLRAF BSSB 1 On if a large (2 level) .RAF 131 DIRCUSE BSSB 16 current use count 132 133 DIRUSRFLD BSS 1 user-definable field 134 DIRSERNO BSS2 1 file serial number 135 DIRUNITNM EQU DIRSERNO(1) unit number for hardware devices 136 BSS 0 *** filler *** 137 DRCT 138 DIRENTWIDE EQU DISPW DIREINFO Template size in words 139 ORG DIREINFO Recover template space 140 EMAC end of DIRINFORD 141 142 143 FILESTAT MACRO 144 NOLIST 145 $P 146 BOX 147 148 Definition of the fields and values for the static and 149 dynamic statuses of a file. 150 151 EBOX 152 153 * Format of File static status 154 * 155 * EQU BIT 0 always zero 156 FSSTATPRIV EQU BITS 14:17 privilege to access device 157 FSSTATCRT EQU BIT 18 file was created by OPEN 158 FSSTATACS EQU BITS 19:21 access allowed to device 159 * EQU BIT 22 unused - reserved 160 FSSTATABS EQU BIT 23 on if unit is absolute I/O 161 FSSTATWSC EQU BIT 24 on if file writing when system crashed 162 FSSTATSAV EQU BIT 25 on if device in directory somewhere 163 FSSTATDTYP EQU BITS 26:31 type code for the device 164 165 * Values for FSSTATPRIV 166 * (privilege implies what you would be allowed to have) 167 FSPRIVRW EQU 0 read/write 168 FSPRIVRO EQU 1 read only 169 FSPRIVMOD EQU 2 modify 170 FSPRIVXO EQU 3 execute only 171 FSPRIVBKUP EQU 8 backup 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 162 (XREQINFOMACS) F 10 Macro Definitions 172 FSPRIVNOT EQU 0F no privilege 173 FSPRIVNWB EQU BIT 31 bit, if on, implies no write possible 174 * Values for FSSTATACS 175 * (access implies what you actually requested and have) 176 FSACSRW EQU 0 read/write 177 FSACSRO EQU 1 read only 178 FSACSAO EQU 2 append only 179 FSACSXO EQU 3 execute only 180 FSACSMW EQU 4 multiple write 181 FSACSDR EQU FSACSMW+1 multiple write 182 FSACSNDA EQU 7 no data access 183 FSACSNWB EQU BIT 31 bit, if on, sez no write possible 184 * Values for FSSTATDTYP 185 DTYPEUNDEF EQU 0 undefined and illegal 186 DTYPESAF EQU 1 sequential access file 187 DTYPERAF EQU 2 random access file 188 DTYPECODE EQU 3 code file 189 DTYPEPATH EQU 4 communication path 190 DTYPEDIR EQU 5 directory 191 DTYPENULL EQU 6 output eater 192 DTYPETERM EQU 7 interactive terminal 193 * EQU 8 unused (was lock) 194 DTYPETASK EQU 9 "batch" job submission unit 195 DTYPECDR EQU 10 card reader 196 DTYPELP EQU 11 line printer 197 DTYPEMT EQU 12 magnetic tape 198 DTYPECT EQU 13 cartridge magnetic tape 199 DTYPEVOL EQU 14 a volume 200 DTYPEVT EQU 15 video tape 201 DTYPELAST EQU 16 last code plus one 202 203 204 * Format of a file's dynamic status 205 FDSTATAERR EQU BIT 0 on if error code not zero 206 FDSTATLUN EQU BITS 4:11 lun having this status 207 FDSTATRTYP EQU BITS 16:19 type of last record read 208 FDSTATLP EQU BIT 20 on if device positioned at beginning 209 FDSTATERR EQU BITS 21:31 error code 210 211 * Values for FDSTATRTYP - record types 212 FDRTYPSYSB EQU BIT 28 if on, record is either EOD or EOF 213 FDRTYPEODB EQU BIT 31 if FDRTYPSYSB also, then EOD 214 FDRTYPTEXT EQU 0 text record 215 FDRTYPTXTF EQU 1 text with forms control 216 FDRTYPBIN EQU 2 binary record 217 FDRTYPLBL EQU 4 label record 218 FDRTYPCOMM EQU 5 comment record 219 FDRTYPFM EQU 8 file mark (end of file, EOF) 220 FDRTYPEOD EQU 9 end of data (EOD) 221 FDRTYPAEOD EQU 11 abnormal end of date (AEOD) 222 EMAC of FILESTAT 223 224 225 FLDDEFS MACRO 226 NOLIST 227 $P 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 163 (XREQINFOMACS) F 10 Macro Definitions 228 BOX 229 230 Definition of useful instruction and address fields. 231 232 EBOX 233 234 FLDADRS EQU BITS 15:31 word address in a pointer 235 FLDCHARS EQU BITS 15:1 character address in a pointer 236 FLDBITS EQU BITS 15:4 bit address in a pointer 237 FLDPAGE EQU BITS 15:21 page number in word address 238 FLDRAFPAGE EQU BITS 0:19 page number in RAF byte address 239 FLDUPR15 EQU BITS 0:14 upper 15 bits of a word 240 FLDCH0 EQU BITS 0:7 character 0 in a word 241 FLDCH1 EQU BITS 8:15 character 1 in a word 242 FLDCH2 EQU BITS 16:23 character 2 in a word 243 FLDCH3 EQU BITS 24:31 character 3 in a word 244 FLDMODE EQU BITS 10:14 mode part of an operand 245 FLDIMMED EQU BITS 14:31 immediate part of operand 246 FLDOPND EQU FLDMODE+FLDADRS instruction operand 247 248 EMAC end of FLDDEFS 249 250 251 MSGDEFS MACRO 252 NOLIST 253 $P 254 BOX 255 256 Definition of messages sent by URSENDMSG and received 257 by URGETMSG. 258 259 EBOX 260 261 MSGPROTO BASE R0 262 MSGPROC BSSB 16 when sending: session number of receiver 263 * when receiving: session number of sender 264 MSGCLASS BSSB 16 class number of this message (0..31) 265 MSGPRIVS BSS 1 privileges associated with this message 266 * (see below for format) 267 MSGSTEXT BSS 0 when sending: start of message text 268 MSGACCT BSSC 20 when receiving: account name of sender, 269 * in ASCII, padded with blanks, or blank 270 * if account name not given. 271 MSGRTEXT BSS 0 when receiving: start of message text 272 273 * Definition of bits MSGPRIVS: 274 275 MSGPRIVID EQU BIT 0 Sender's Privilege Account name will be put into MSGACCT. 276 MSGPRIVOS EQU BIT 1 Sender is the operating system. 277 MSGPRIVLID EQU BIT 2 Sender's Logged On Account name will be put into MSGACCT. 278 MSGPRIVCM EQU BIT 20 Sender is Control Mode 279 MSGPRIVNXO EQU BIT 21 Sender is NOT Execute Only. 280 MSGPRIVMGR EQU BIT 22 Sender can execute MANAGER requests. 281 MSGPRIVBKP EQU BIT 23 Sender can execute BACKUP requests. 282 MSGPRIVMW EQU BIT 24 . . . MAINTENANCE WRITE requests. 283 MSGPRIVMR EQU BIT 25 . . . MAINTENANCE READ requests. 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 164 (XREQINFOMACS) F 10 Macro Definitions 284 MSGPRIVOPR EQU BIT 26 . . . OPERATOR requests. 285 MSGPRIVG5 EQU BIT 27 . . . GROUP 5 (currently unused) requests. 286 MSGPRIVG4 EQU BIT 28 . . . GROUP 4 (message and batch) requests. 287 MSGPRIVG3 EQU BIT 29 . . . GROUP 3 (attribute change) requests. 288 MSGPRIVG2 EQU BIT 30 . . . GROUP 2 (catalog fetch) requests. 289 MSGPRIVG1 EQU BIT 31 . . . GROUP 1 (limit change) requests. 290 291 * Some message classes are pre defined (or at least usually used for...) 292 MSGCLSRESP EQU 0 response message 293 MSGCLSVERB EQU 1 verbal communication between users 294 MSGCLSOPR EQU 2 urgent communication from OPR 295 MSGCLSSPLR EQU 3 messages to the spooler 296 MSGCLSTERM EQU 4 concurrent session termination message 297 * EQU 5:15 reserved for BTI 298 * EQU 16:31 available to implementors 299 300 DRCT 301 ORG MSGPROTO recover lost space 302 EMAC of MSGDEFS 303 304 305 PSRDEFS MACRO 306 NOLIST 307 $P 308 BOX 309 310 Definition of Process Status Register. 311 312 EBOX 313 314 PSRBCDTRPB EQU BIT 22 BCD overflow trap enable 315 PSRFLTRPEB EQU BIT 23 floating point reduced precision enable 316 PSRFIXTRPB EQU BIT 24 fixed point arith error trap enable 317 PSRFLTTRPB EQU BIT 25 floating point arith error trap enable 318 PSRUNDTRPB EQU BIT 26 undefined number error trap enable 319 PSRMODIFB EQU BIT 27 modify arithmetic enable 320 PSROVERFB EQU BIT 28 overflow indication 321 PSRCARRYB EQU BIT 29 carry indication 322 PSRCONDB EQU BITS 30:31 condition (30-EQ, 31-LT) 323 * values used in changing PSR 324 PSRBCDTRP EQU 1*PSRBCDTRPB 325 PSRFLTRPE EQU 1*PSRFLTRPEB 326 PSRFIXTRP EQU 1*PSRFIXTRPB 327 PSRFLTTRP EQU 1*PSRFLTTRPB 328 PSRUNDTRP EQU 1*PSRUNDTRPB 329 PSRMODIF EQU 1*PSRMODIFB 330 PSROVERF EQU 1*PSROVERFB 331 PSRCARRY EQU 1*PSRCARRYB 332 333 EMAC end of PSRDEFS 334 335 336 PROCINFORD MACRO 337 NOLIST 338 $P 339 BOX 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 165 (XREQINFOMACS) F 10 Macro Definitions 340 341 The session information read request returns the 342 following block of information for each session. 343 344 EBOX 345 346 * Format of session information returned 347 PIPROTO BASE R0 348 PIPROCNUM BSSB 32-17 session number 349 PIENTLEN BSSB 17 length of this entry in words 350 PIWORDZ BSSB 32/2 bits giving more information 351 PIBATCH EQU PIWORDZ/BIT 31 on if a "batch" session 352 PIINTER EQU PIWORDZ/BIT 30 on if "interactive" session 353 PIDIALUP EQU PIWORDZ/BIT 29 on if a dialup port 354 PIINHIB EQU PIWORDZ/BIT 28 on if this port is inhibited 355 PIRFP EQU PIWORDZ/BIT 27 on if this is the special RFP term 356 PISHADL EQU PIWORDZ/BIT 26 on if logged on acct is shadow 357 PISHADA EQU PIWORDZ/BIT 25 on if alias acct is a shadow 358 PISPECPROC EQU PIWORDZ/BIT 24 on if job is special (started by ORSTRTJOB) 359 PISYSPROC EQU PIWORDZ/BIT 23 on if job is system process 360 361 PIPORTNUM BSSB 32/2 terminal port associated (-1 if none) 362 PISHORT EQU DISPW PIPROCNUM size of short element 363 * The above information is given for all sessions. The 364 * below information is only given if privileged. 365 PILOGACCT BSS 6 account logged on 366 PILAVOL EQU PILOGACCT(0) volume name 367 PILASYS EQU PILOGACCT(2) system name 368 PILAACCT EQU PILOGACCT(3) account name 369 PILAPROJ EQU PILOGACCT(5) division-project 370 PIALIASACT BSS 6 account aliased to 371 PIAAVOL EQU PIALIASACT(0) volume name 372 PIAASYS EQU PIALIASACT(2) system name 373 PIAAACCT EQU PIALIASACT(3) account name 374 PIAAPROJ EQU PIALIASACT(5) division-project 375 PIPROGNAME BSS 2 name of program (PAK12) 376 PISTATE BSS 2 program execution state (PAK12) 377 PIWCTIME BSS 1 wall clock time on (in minutes) 378 PICPUUSED BSS 1 cpu time used (in seconds) 379 PICPULIM BSS 1 cpu limit (in seconds) 380 PIDSKLIM BSS 1 disk space hard limit 381 PIDSKUSD BSS 1 disk space used 382 PISESUSD BSS 1 session space used 383 PISESLIM BSS 1 session space limit 384 PIWSSIZE BSS 1 working set size 385 PIDSKWARN BSS 1 disk block soft limit 386 PIPARENT BSS 1 session number of parent (or zero if none) 387 PISITE BSS 2 site name for this session 388 PILGFSESS BSS 1 session to send logoff message to 389 DRCT 390 PILONG EQU DISPW PIPROTO length of long information 391 PILOG EQU PILONG LOG 2 log length for getmem 392 ORG PIPROTO recover the space 393 EMAC end of PROCINFORD 394 395 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 166 (XREQINFOMACS) F 10 Macro Definitions 396 SHLINFORD MACRO 397 NOLIST 398 $P 399 BOX 400 401 Shared list information read format. 402 403 EBOX 404 405 SHRPROTO BASE R0 406 SHRACCESS BSSB 8 access given (codes for FSPRIVxx) 407 SHRPW BSSB 1 on if password present 408 BSSB 6 filler 409 SHRENLEN BSSB 17 contains length of this entry 410 SHRSYS BSS 1 system shared with 411 SHRACCT BSS 2 account shared with 412 SHRPROJ BSS 1 project shared with 413 DRCT 414 SHRLNTH EQU DISPW SHRPROTO length of an entry 415 ORG SHRPROTO 416 EMAC of SHLINFORD 417 418 419 UNDRPINFORD MACRO 420 NOLIST 421 $P 422 BOX 423 424 The under process structure read request returns the 425 following block of information for each process. 426 427 EBOX 428 429 UNDRPROTO BASE R0 430 UNDRRSTR BSSB 15 process restrictions 431 UNDRELEN BSSB 17 length of this entry, in words 432 UNDRLEVEL BSSB 9 level number of this under process 433 UNDRPSN BSSB 23 process serial number of this process 434 UNDRDPSN BSSB 23 process serial number of father 435 UNDRDBG BSSB 23 process serial number of debugger process 436 BSSB 18 reserved for future expansion 437 UNDRNAME BSS 2 process name 438 439 UNDRSTCTG1 EQU UNDRRSTR/BIT 31 on if group 1 restrictions (limit change) 440 UNDRSTCTG2 EQU UNDRRSTR/BIT 30 on if group 2 restrictions (catalog fetch) 441 UNDRSTCTG3 EQU UNDRRSTR/BIT 29 on if group 3 restrictions (acct att. chng) 442 UNDRSTCTG4 EQU UNDRRSTR/BIT 28 on if group 4 restrictions (unassigned) 443 UNDRSTCTG5 EQU UNDRRSTR/BIT 27 on if group 5 restrictions (unassigned) 444 UNDROPREQ EQU UNDRRSTR/BIT 26 on if operator requests restricted 445 UNDRMAINTR EQU UNDRRSTR/BIT 25 on if maintenance read restricted 446 UNDRMAINTW EQU UNDRRSTR/BIT 24 on if maintenance write restricted 447 UNDRBACKUP EQU UNDRRSTR/BIT 23 on if backup requests restricted 448 UNDRMANAGR EQU UNDRRSTR/BIT 22 on if manager requests restricted 449 UNDREXO EQU UNDRRSTR/BIT 21 on if address space is execute only 450 UNDRCNTLM EQU UNDRRSTR/BIT 20 on if in Control Mode 451 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 167 (XREQINFOMACS) F 10 Macro Definitions 452 DRCT 453 UNDRPLONG EQU DISPW UNDRPROTO 454 UNDRPLOG EQU UNDRPLONG LOG 2 455 ORG UNDRPROTO recover lost space 456 EMAC 457 458 459 LUINFORD MACRO 460 NOLIST 461 $P 462 BOX 463 464 The request that returns information on the local 465 units for a specific underprocess conforms to the following 466 format. 467 468 EBOX 469 470 LUPROTO BASE R0 471 LUEQUIVS BSSB 8 number of units opened to this device 472 LULASTREC BSSB 4 type of last record read 473 LULOADPT BSSB 1 unit is currently position at the load point 474 LUTRANS BSSB 1 on if unit has transaction in progress 475 BSSB 1 reserved for future expansion 476 LUELEN BSSB 17 length of this entry (words) 477 478 LUUNIT BSSB 8 unit number having this status 479 LUSSTAT BSSB 18 unit static status 480 BSSB 6 reserved for future expansion 481 482 LUPRIV EQU LUSSTAT/BITS 14:17 privilege to access this device 483 LUCRT EQU LUSSTAT/BIT 18 file created by OPEN 484 LUACS EQU LUSSTAT/BITS 19:21 access allowed to device 485 LUWWC EQU LUSSTAT/BIT 24 on if file writing when system crashed 486 LUSAVE EQU LUSSTAT/BIT 25 on if device in directory somewhere 487 LUTYPE EQU LUSSTAT/BITS 26:31 type of device 488 489 LUVOLNM BSS 2 volume name for device 490 LUSYSNM BSS 1 system name for device 491 LUACCT BSS 2 account name for device 492 LUACCPROJ BSS 1 div/proj name for device 493 LUFILENM BSS 2 filename for device 494 LUEXT BSS 1 filename extension for device 495 496 DRCT 497 LULONG EQU DISPW LUPROTO 498 LULOG EQU LULONG LOG 2 499 ORG LUPROTO recover lost space 500 501 EMAC 17 INPUT OPRQINFOMACS format for info returned by OPREQs 2 * Operator variable definition macros. 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 168 (OPRQINFOMACS) F 11 4 5 * A9107 Added ERLCSCSIDE, ERLCSCSIID and ERLCSCSIRS. JB. 6 * A9105 Modifications of trace event format. RC 7 * A8901 Addition of VT defs to DEVINFORD. RC 8 * A8805 Addition of disk name to several ERRORFILE entries. DH 9 * A8602 Addition of exchange save record types for accounting record. MH 10 * A8511 Addition of STOP and GO record types for accounting record. MH 11 * A8510 Addition LOAD and UNLOAD record types for accounting record. JB. 12 * A8508 Addition of SMU error code. MH. 13 * A8507 Changes to PORTFILE macro, PCFUNCT contains additional info. JB. 14 * A8504 Addition of new fields and record types for accounting record. MH. 15 * 3.6 Addition of VBSYINFORD. JB. 16 * 3.5 Added DIUNIT, DICHAN, and DISLOT to DEVINFORD. DH. 17 * 3.4 Added POTERMTYPE to PORTINFORD, PCTERMTYPE to PORTFILE. JB. 18 * 3.3 AUTHGDSK and AUTHGDSKA changed to AUTHS... RC. 19 * 2.0 New field in VOLINFORD. BB. 20 * 1.3 Addition of BKUPINFORD. BB. 21 * A8110 New fields in PORTFILE, PORTINFORD. JL. 22 * A8104a Changes to ERRORFILE. JL. 23 * A8104 Changes to ERRORFILE. JL. 24 * A8102 Addition of OPMSGINFO. Change PROCINFORD and ERRORFILE. JL. 25 * A8012a Addition of AUTHINFORD. Change DEVINFORD. New error codes. JL. 26 * A8008 Change of accounting record format. RA. 27 * A8007 Addition of DEVINFORD and TRINFORD. VOLINFORD changed. JL. 28 * A8005a Addition of ACCTFILE and ERRORFILE. RA. 29 * A8005 Addition of CONFINFRD. RA. 30 * A7912 Initial release. RA. 31 32 ********************************************************************************** 33 * * 34 * This is the definition of macros that define symbols * 35 * that are required in communication with the system. This * 36 * file is INPUT in assembly language programs and it defines * 37 * macros that, when invoked, define the requested group of * 38 * symbols. The macro invocation is of the form: * 39 * * 40 * macname [list] * 41 * * 42 * where "macname" is the name of the requested macro and "list" is * 43 * optionally included (the square brackets denote optionality) if the * 44 * body of the macro (i.e., the definition of the symbols) is to * 45 * be listed. * 46 * * 47 * Macros that are defined herein are: * 48 * * 49 * ACCTFILE Format of accounting file. * 50 * AFTINFORD Format of data returned by AFT information request. * 51 * AUTHINFORD Format of data returned by auth list information reads. * 52 * CONFINFORD Format of data returned by configuration request. * 53 * DEVINFORD Format of data returned by device information request. * 54 * ERRORFILE Format of error log file. * 55 * OPMSGINFO Format of data returned by operator message request. * 56 * PORTFILE Format of port configuration file. * 57 * PORTINFORD Format of data returned by port information request. * 58 * TRINFORD Format of data returned by stop trace request. * 59 * VOLINFORD Format of data returned by volume information request. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 169 (OPRQINFOMACS) F 11 60 * VBSYINFORD Format of data returned by volume busy request. * 61 * * 62 ********************************************************************************** 63 64 65 ACCTFILE MACRO 66 NOLIST 67 $P 68 BOX 69 70 Accounting files. 71 A system session writes records into accounting files 72 whenever certain events occur. The events and the format 73 of the files are described below. The files where log 74 entries are made are determined by a bit mask in the 75 ULLIMITS block called LIMLOGSPOT. Each accounting record is 76 written to as many as 4 log files: 77 78 user.divprj:ACCOUNTING.LOGFIL 79 MANAGER.divprj:ACCOUNTING.LOGFIL 80 MANAGER.div:ACCOUNTING.LOGFIL 81 MANAGER.SYS:ACCOUNTING.LOGFIL 82 83 The manufacturers account logging may go to himself, 84 MANAGER.!!!, or MANAGER.SYS. 85 These files should be opened as empty .RAFs. The 86 accounting session will add records to the end of the file 87 and advance the end pointer. The begin pointer is provided 88 for the benefit of the reading process. It is the 89 responsibility of the reading process to free blocks when 90 they are no longer needed, otherwise, the log file will 91 grow until it occupies all available space. Note that 92 block 0 should never be freed. 93 If AFEND is in the range of -AFRSIZE to 2*CPW, then it 94 is set to 2*CPW. The reading routine should do the same 95 for AFBEGIN. 96 97 It should be noted that for file entries being logged 98 the primary account name and project is for the account 99 owning the file and the secondary one is for the account 100 accessing the file. Also for aliases and unaliases the 101 file name and extension field is used to hold the logon 102 account name and project of the user performing the alias. 103 104 EBOX 105 106 AFBEGIN EQU 0 RAF char position of read pointer 107 AFEND EQU 1*4 RAF char position of write pointer 108 * (points to next records location) 109 110 AFRPROTO BASE R0 111 AFRTYPE BSSB 5 type of record 112 APTSLEEP EQU 0 sleep record (tested with JEQZ!) 113 APTSTARTUP EQU 1 system startup 114 APTON EQU 2 successful logon 115 APTPWW EQU 3 unsuccessful logon 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 170 (OPRQINFOMACS) F 11 116 APTALIAS EQU 4 alias 117 APTALIER EQU 5 alias failure 118 APTOFF EQU 6 logoff 119 APTALOFF EQU 7 unalias 120 APTPWRFAIL EQU 8 power failure 121 APTPWRUP EQU 9 power up restart 122 APTCONCP EQU 10 concurrent session startup 123 APTABORT EQU 11 opr abort 124 APTTERMIN EQU 12 opr terminate 125 APTEVICT EQU 13 opr evict 126 APTFILOP EQU 14 file open 127 APTFILCL EQU 15 file close 128 APTFBC EQU 16 file being destroyed 129 APTLOAD EQU 17 volume mount 130 APTUNLOAD EQU 18 volume dismount 131 APTSTOP EQU 19 stop process 132 APTGO EQU 20 start process 133 APTXSAVE EQU 21 file exchange save 134 APTMAX EQU 21 largest type 135 * Bit array of those APTs that are long 136 AFRSZLONG EQU 1*(BIT APTON)+1*(BIT APTALIAS)+1*(BIT APTOFF)+1*(BIT APTALOFF) 137 138 AFRPORTNUM BSSB 10 port number of activity 139 AFRLEN BSSB 17 character size of record 140 AFRPROCN BSSB 12 session number 141 AFRSHADOW BSSB 1 on if mentioned acct shadow 142 AFRFOREIGN BSSB 1 on if mentioned acct foreign 143 AFRFILLER BSSB 32-14 filler 144 AFRACCT BSS2 1 account name 145 AFRPROJ BSS 1 division-project 146 AFRTIME BSS2 1 time of occurrence 147 AFRSHORT EQU DISPC AFRTYPE size of short acct file record 148 AFRCPUTIME BSS 1 CPU time used (sec) 149 AFRSVDUSD BSS 1 saved file space (fb) 150 AFRSESMAX BSS 1 session output max (high water mark) 151 AFRACCT2 EQU AFRCPUTIME second account name in record 152 AFRPROJ2 EQU AFRSESMAX second project in record 153 154 AFRSIZE EQU DISPC AFRTYPE size of account file record 155 AFRWORDA BSS 1 156 AFRPORT2 EQU AFRWORDA/BITS 0:9 second port in record 157 AFRPROC2 EQU AFRWORDA/BITS 10:21 second session number in record 158 AFRLONG EQU DISPC AFRTYPE size of long account record 159 BSS 1 second word of file name 160 AFRFILNAM EQU AFRWORDA file name 161 AFRFILEXT BSS 1 file extention 162 AFRFILLEN EQU DISPC AFRTYPE size of record with file info in it 163 AFRMAXLEN EQU AFRFILLEN max length of an accounting record 164 DRCT 165 ORG AFRPROTO reclaim area 166 EMAC 167 168 169 AFTINFORD MACRO 170 NOLIST 171 $P 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 171 (OPRQINFOMACS) F 11 172 BOX 173 174 Format of each entry returned by the read AFT request. 175 176 EBOX 177 AIPROTO BASE R0 178 AIVOL BSS 2 volume name (PAK12) 179 AIACCT BSS 2 account name (PAK12) 180 AIPROJ BSS 1 account project (PAK6) 181 DRCT 182 AILEN EQU DISPW AIPROTO length of the entry in words 183 ORG AIPROTO 184 EMAC end of AFTINFORD 185 186 187 AUTHINFORD MACRO 188 NOLIST 189 $P 190 BOX 191 192 Authorization list read request results. 193 194 EBOX 195 196 AUTLPROTO BASE R0 197 AUTVNAME BSS2 1 volume name 198 BSS 2 unused 199 AUTDSK BSS 1 disk space authorized 200 AUTDSKA BSS 1 disk space delegated 201 AUTSDSK BSS 1 saved space authorized 202 AUTSDSKA BSS 1 saved space delegated 203 BSS 4 unused - reserved for future expansion 204 DRCT 205 AUTLLNTH EQU DISPW AUTLPROTO length of entry 206 ORG AUTLPROTO 207 EMAC 208 209 210 CONFINFORD MACRO 211 NOLIST 212 $P 213 BOX 214 215 Format of each entry returned by the read system 216 configuration request. 217 218 EBOX 219 220 SCPROTO BASE R0 221 SCSLOT BSSB 15 slot of device 222 SCLENGTH BSSB 17 length of the entry in words 223 SCTYPE BSS 1 PAK6 device type name 224 SCWRU BSS 1 WRU response of the device 225 SCCHAN BSS 1 channel number of device (-1 if none) 226 SCDTYPE BSS 1 PAK6 name of device on chan(-1 if none) 227 SCDWRU BSS 1 device WRU response (-1 if none) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 172 (OPRQINFOMACS) F 11 228 SCDUNIT BSS 1 unit on device controller (-1 if none) 229 SCDUSIZE BSS 1 size of device (-1 if no size) 230 SCDUUNIT BSS 1 PAK6 units of device size 231 DRCT 232 SCLEN EQU DISPW SCPROTO length of the entry in words 233 ORG SCPROTO 234 EMAC end of CONFINFORD 235 236 237 DEVINFORD MACRO 238 NOLIST 239 $P 240 BOX 241 242 Information returned by the device information 243 request. 244 245 EBOX 246 247 DIPROTO BASE R0 248 DISTART BSS 0 beginning of entry 249 DITYPE BSSB 15 device type: 250 DIDISK EQU 1 disk 251 DIMT EQU 2 magnetic tape (standard 9 track) 252 DICT EQU 3 cartridge tape (DEI) 253 DILP EQU 4 line printer 254 DIVT EQU 5 video tape (exabyte) 255 * others to be defined 256 DIENTLEN BSSB 17 length of this entry in words 257 DIDNAME BSS 1 device name (pak6) 258 DIHARDADR BSSB 16:1 hardware address 259 DIUNIT EQU BITS 28:31 unit number in hardware address 260 DICHAN EQU BITS 24:27 channel number in hardware address 261 DISLOT EQU BITS 20:23 slot number in hardware address 262 DIDEVINFO BSS 0 start of device-specific info 263 264 * For disks only: 265 DIDRVNUM BSSB 8 drive number (cable position) 266 DISPT BSSB 8 sectors per track 267 DITPC BSSB 16 tracks per cylinder 268 DIDISKLEN EQU DISPW DISTART length of disk entry 269 270 * For mag tapes only: 271 ORG DIPROTO/DIDEVINFO 272 DIMTPROC BSS 1 session number of owner (or zero if none) 273 DIMTLEN EQU DISPW DISTART length of mag tape entry 274 275 * For cart tapes only: 276 ORG DIPROTO/DIDEVINFO 277 DICTPROC BSS 1 session number of owner (or zero if none) 278 DICTLEN EQU DISPW DISTART length of cart tape entry 279 280 * For video tapes only: 281 ORG DIPROTO/DIDEVINFO 282 DIVTPROC BSS 1 session number of owner (or zero if none) 283 DIVTLEN EQU DISPW DISTART length of video tape entry 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 173 (OPRQINFOMACS) F 11 284 285 * For line printers only: 286 ORG DIPROTO/DIDEVINFO 287 DILPPROC BSS 1 session number of owner (or zero if none) 288 DILPLEN EQU DISPW DISTART length of line printer entry 289 290 DRCT 291 ORG DIPROTO recover space 292 EMAC 293 294 295 ERRORFILE MACRO 296 NOLIST 297 $P 298 BOX 299 300 The system logs in a file IO and other errors that 301 occur while the system is running. This file is of the 302 format given. The errors consist of a code and a variable 303 number of parameters. Defined error codes are ("|" 304 separates words): 305 306 ERLCEND | dummy parameter 307 ERLCTS ( no longer used ) 308 ERLCTEXT | variable length string (blank filled) 309 ERLCBFBI ( new code below ) 310 ERLCCKFBI ( new code below ) 311 ERLCBKFBI ( new code below ) 312 ERLCPFFBI ( no longer used ) 313 ERLCBLNK | MS address expected | found 314 ERLCFSAF | MS address 315 ERLCFUD1 | MS address 316 ERLCFUD2 | MS address 317 ERLCPPUBT | PF for channel | PPU status 318 ERLCCIAE | PF for channel | CIA status 319 ERLCCIATO | PF for channel 320 ERLCDSKTO | PF for channel | unit 321 ERLCSSUTO | PF for SSU 322 ERLCSUB ( new code below ) 323 ERLCNOSUB ( new code below ) 324 ERLCUNSUB ( new code below ) 325 ERLCPPUTO (no longer used) 326 ERLCBOOT | system version (upper) | system version (lower) | boot switches 327 ERLCMOUNT | volume number | drive name | volume name (upper) | 328 volume name (lower) 329 ERLCDMOUNT | volume number 330 ERLCMPE | status + virtual address | PF | block 331 ERLCMPED | PF | block 332 ERLCDNRDY ( new code below ) 333 ERLCRMNT | volume number | drive name 334 ERLCCTC (no longer used) 335 ERLCCTCTO (no longer used) 336 ERLCDSKRD ( new code below ) 337 ERLCDCNT | drive name | cable number | read count | write count 338 ERLCDSKRW ( new code below ) 339 ERLCLPERR | LP name | LP status 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 174 (OPRQINFOMACS) F 11 340 ERLCLPIFPE ( no longer used ) 341 ERLCLPTO | LP name 342 ERLCPPUBAD | PPU slot number 343 ERLCPPUOK | PPU slot number 344 ERLCCTLBAD | PPU slot number | channel number 345 ERLCCTLOK | PPU slot number | channel number 346 ERLCDATBAD | target date | current date 347 ERLCNVMTIM | dummy parm 348 ERLCMTC (no longer used) 349 ERLCMTCTO | page map value 350 ERLCMTCERR | drive name | operation | tape status | PPU status 351 ERLCDSKID | drive name | drive id (3 words) | 352 pack mfg | pack s/n | fmt date (2 words) | 353 volume name (2 words) 354 ERLCUNLOAD | drive name 355 ERLCDE | drive name | block number | seek address | 356 operation | BFD status | PPU status 357 ERLCPWFAIL | dummy parameter 358 ERLCPWRUP | dummy parameter 359 ERLCBFBI | drive name | MS address | expected | found 360 ERLCCKFBI | drive name | MS address | difference | found 361 ERLCBKFBI | drive name | MS address | found 362 ERLCRDGCS | drive name | MS address | segment# 363 ERLCSUB | drive name | bad MS address | substitute address 364 ERLCNOSUB | drive name | bad MS address | reason 365 ERLCUNSUB | drive name | bad MS address | substitute MS address 366 ERLCDNRDY | drive name | volume number 367 ERLCDSKRD | drive name | MS address | seek address 368 ERLCDSKRW | drive name | MS address | seek address 369 ERLCSCSIRS | drive name | MS address | seek address | operation | 370 SCSI status | PPU status | sense key | sense code 371 ERLCSCSIDE | drive name | block number | seek address | 372 operation | SCSI status | PPU status 373 ERLCSCSIID | drive name | vendor id (2 words) | 374 product id (3 words) | firmware rev (2 words) | 375 fmt date (2 words) | volume name (2 words) 376 377 The error logging file is SYSTEM.!!!:ERRORLOG.LOGFIL. 378 This file should be opened as an empty .RAF. The error 379 logging session will add records to the end of the file and 380 advance the end pointer. The begin pointer is provided for 381 the benefit of the reading process. It is the 382 responsibility of the reading process to free blocks when 383 they are no longer needed, otherwise, the log file will 384 grow until it occupies all available mass storage space. 385 Note that block 0 should never be freed ( except possibly 386 to release the entire file ). 387 If EFEND is in the range of -EFRSIZE to 2*CPW, then it 388 is set to 2*CPW. The reading routine should do the same 389 for EFBEGIN. 390 391 EBOX 392 393 * These addresses are used to get the pointers from the error log file 394 EFBEGIN EQU 0 pointer to first error entry 395 EFEND EQU 1*4 pointer to end of error entries 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 175 (OPRQINFOMACS) F 11 396 397 EFPROTO BASE R0 prototype of error entry 398 EFWORDA BSS 1 399 EFLEN EQU BITS 17:21 number of parameters for this error 400 EFERROR EQU BIT 22 0 => routine log entry, 1 => error 401 EFCODE EQU BITS 23:31 code for this error 402 EFTYPE EQU EFWORDA/BITS 0:14 code for this error 403 EFLENGTH EQU EFWORDA/BITS 15:31 length of this entry in words 404 EFDATE BSS 2 system time word when error happened 405 EFPARAMS LABEL first word of parameters 406 DRCT 407 ORG EFPROTO reclaim space 408 409 * The actual codes 410 ERLCEND EQU 1*EFLEN+0*EFERROR+01*EFCODE end system 411 *ERLCTS EQU 1*EFLEN+0*EFERROR+02*EFCODE time stamp 412 ERLCTEXT EQU 1*EFLEN+1*EFERROR+03*EFCODE text record 413 *ERLCBFBI EQU 3*EFLEN+1*EFERROR+04*EFCODE unused - was FBI type mismatch 414 *ERLCCKFBI EQU 3*EFLEN+1*EFERROR+05*EFCODE unused - was FBI checksum bad 415 *ERLCBKFBI EQU 2*EFLEN+1*EFERROR+06*EFCODE unused - was FBI DA mismatch 416 * EQU 6*EFLEN+1*EFERROR+07*EFCODE unused - was old format MS error 417 *ERLCPFFBI EQU 3*EFLEN+1*EFERROR+08*EFCODE bad FBI in PFPROC 418 ERLCBLNK EQU 3*EFLEN+1*EFERROR+09*EFCODE bad backward link while freeing 419 ERLCFSAF EQU 1*EFLEN+1*EFERROR+10*EFCODE bad block while freeing SAF 420 ERLCFUD1 EQU 1*EFLEN+1*EFERROR+11*EFCODE bad UD1 block while freeing DIR 421 ERLCFUD2 EQU 1*EFLEN+1*EFERROR+12*EFCODE bad UD2 block while freeing DIR 422 ERLCPPUBT EQU 2*EFLEN+1*EFERROR+13*EFCODE bad transfer status from PPU 423 ERLCCIAE EQU 2*EFLEN+1*EFERROR+14*EFCODE error code from CIA 424 ERLCCIATO EQU 1*EFLEN+1*EFERROR+15*EFCODE CIA deadman timeout 425 ERLCDSKTO EQU 2*EFLEN+1*EFERROR+16*EFCODE Disk deadman timeout 426 ERLCSSUTO EQU 1*EFLEN+1*EFERROR+17*EFCODE SSU timeout 427 *ERLCSUB EQU 2*EFLEN+1*EFERROR+18*EFCODE unused - was MS block substituted 428 *ERLCNOSUB EQU 2*EFLEN+1*EFERROR+19*EFCODE unused - was MS block not substituted 429 *ERLCUNSUB EQU 2*EFLEN+0*EFERROR+20*EFCODE unused - was MS block unsubstituted 430 *ERLCPPUTO EQU 1*EFLEN+1*EFERROR+21*EFCODE PPU timeout, PPU not talking 431 ERLCBOOT EQU 3*EFLEN+0*EFERROR+22*EFCODE system boot 432 ERLCMOUNT EQU 4*EFLEN+0*EFERROR+23*EFCODE volume mount 433 ERLCDMOUNT EQU 1*EFLEN+0*EFERROR+24*EFCODE volume dismount 434 ERLCMPE EQU 3*EFLEN+1*EFERROR+25*EFCODE memory parity error 435 ERLCMPED EQU 2*EFLEN+1*EFERROR+26*EFCODE memory parity error 436 *ERLCDNRDY EQU 2*EFLEN+1*EFERROR+27*EFCODE unused - was disk dropped ready 437 ERLCRMNT EQU 2*EFLEN+0*EFERROR+28*EFCODE volume remounted 438 *ERLCCTC EQU 4*EFLEN+1*EFERROR+29*EFCODE CTC operation error 439 *ERLCCTCTO EQU 2*EFLEN+1*EFERROR+30*EFCODE CTC deadman timeout 440 * EQU 5*EFLEN+1*EFERROR+31*EFCODE unused - was MS error 441 *ERLCDSKRD EQU 3*EFLEN+1*EFERROR+32*EFCODE unused - was perm read error 442 ERLCDCNT EQU 4*EFLEN+0*EFERROR+33*EFCODE disk activity count 443 *ERLCDSKRW EQU 2*EFLEN+0*EFERROR+34*EFCODE unused - was rewrite after read 444 ERLCLPERR EQU 2*EFLEN+1*EFERROR+35*EFCODE line printer error 445 *ERLCLPIFPE EQU 2*EFLEN+1*EFERROR+36*EFCODE line printer interface parity error (obsolete) 446 ERLCLPTO EQU 1*EFLEN+1*EFERROR+37*EFCODE line printer timeout 447 ERLCPPUBAD EQU 1*EFLEN+1*EFERROR+38*EFCODE PPU doesn't respond 448 ERLCPPUOK EQU 1*EFLEN+0*EFERROR+39*EFCODE PPU started talking again 449 ERLCCTLBAD EQU 2*EFLEN+1*EFERROR+40*EFCODE controller doesn't respond 450 ERLCCTLOK EQU 2*EFLEN+0*EFERROR+41*EFCODE controller is OK again 451 ERLCDATBAD EQU 2*EFLEN+1*EFERROR+42*EFCODE SSU clock is bad 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 176 (OPRQINFOMACS) F 11 452 ERLCNVMTIM EQU 1*EFLEN+1*EFERROR+43*EFCODE NVM time is bad 453 *ERLCMTC EQU 4*EFLEN+1*EFERROR+44*EFCODE MTC operation error 454 *ERLCMTCTO EQU 2*EFLEN+1*EFERROR+45*EFCODE MTC deadman timeout 455 ERLCMTCTO EQU 1*EFLEN+1*EFERROR+46*EFCODE MTC deadman timeout 456 ERLCMTCERR EQU 4*EFLEN+1*EFERROR+47*EFCODE MTC tape error 457 ERLCDSKID EQU 10*EFLEN+0*EFERROR+48*EFCODE drive and pack id 458 ERLCUNLOAD EQU 1*EFLEN+1*EFERROR+49*EFCODE unload disk heads 459 ERLCDE EQU 6*EFLEN+1*EFERROR+50*EFCODE disk I/O error 460 ERLCPWFAIL EQU 1*EFLEN+1*EFERROR+51*EFCODE power failure 461 ERLCPWRUP EQU 1*EFLEN+0*EFERROR+52*EFCODE power up restart 462 ERLCSMU EQU 2*EFLEN+1*EFERROR+53*EFCODE SMU error 463 ERLCBFBI EQU 4*EFLEN+1*EFERROR+54*EFCODE FBI type mismatch 464 ERLCCKFBI EQU 4*EFLEN+1*EFERROR+55*EFCODE FBI checksum bad 465 ERLCBKFBI EQU 3*EFLEN+1*EFERROR+56*EFCODE FBI MS block didn't match 466 ERLCRDGCS EQU 3*EFLEN+0*EFERROR+57*EFCODE reading MS correction segment 467 ERLCSUB EQU 3*EFLEN+1*EFERROR+58*EFCODE MS block substituted 468 ERLCNOSUB EQU 3*EFLEN+1*EFERROR+59*EFCODE MS block not substituted 469 ERLCUNSUB EQU 3*EFLEN+0*EFERROR+60*EFCODE MS block unsubstituted 470 ERLCDNRDY EQU 2*EFLEN+1*EFERROR+61*EFCODE disk dropped ready 471 ERLCDSKRD EQU 3*EFLEN+1*EFERROR+62*EFCODE permanent disk read error (data lost) 472 ERLCDSKRW EQU 3*EFLEN+0*EFERROR+63*EFCODE rewrite disk block after read 473 ERLCSCSIRS EQU 8*EFLEN+1*EFERROR+64*EFCODE request sense data for disk error 474 ERLCSCSIDE EQU 6*EFLEN+1*EFERROR+65*EFCODE SCSI disk I/O error 475 ERLCSCSIID EQU 13*EFLEN+0*EFERROR+66*EFCODE SCSI device identification 476 477 ERLMAXLEN EQU 13 maximum number of parameters 478 EMAC 479 480 481 OPMSGINFO MACRO 482 NOLIST 483 $P 484 BOX 485 486 Format of data returned by ORGETOPMSG. 487 488 EBOX 489 490 OMIPROTO BASE R0 491 OMISTART LABEL 492 OMIPROCNUM BSSB 15 session number originating message (or 0) 493 OMIENTLEN BSSB 17 length of this entry, in words 494 OMISERIAL BSSB 24 message serial number 495 OMILENGTH BSSB 8 length of this message, in characters 496 OMIMESSAGE BSSC 0 beginning of message text 497 DRCT 498 ORG OMIPROTO 499 EMAC 500 501 502 PORTFILE MACRO 503 NOLIST 504 $P 505 BOX 506 507 There is a file from which the system reads the 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 177 (OPRQINFOMACS) F 11 508 initial port configuration. That files format is described 509 herein. 510 The file is a RAF and the first words of it describe 511 the location of the entries for each port. Word zero of 512 the RAF (chars 0-3) is always zero so the file is not 513 mangled by other RAF users. Word 1 (PCPLENGTH) contains 514 the length of each port entry in characters and word 2 515 (PCPBASE) gives the character base for the information for 516 port zero. Therefore, to find the information of a 517 particular port, a program positions to *+. 519 Each of the entries are considered "not specified" if 520 the sign bit of its word is not on. This excludes PCTERMA 521 and PCTERMT which are always there. 522 523 EBOX 524 525 PCPLENGTH EQU 4 position of 4 chars giving length 526 PCPBASE EQU 8 position of 4 chars giving base 527 528 PCPROTO BASE R0 529 PCIBAUD BSS 1 input baud rate 530 PCOBAUD BSS 1 output baud rate 531 PCFUNCT BSS 1 532 PCFCTSP EQU BIT 24 clear to send processing 533 PCFXOFF EQU BIT 25 XON/XOFF processing 534 PCFBRKOUT EQU BIT 26 don't output when recieving break 535 PCFRDE EQU BIT 27 receive data enable 536 PCCHKIP EQU BIT 28 1 sez check parity of input character 537 PCPGEN EQU BITS 29:30 parity generation of output characters 538 PCFSTOPB EQU BIT 31 stop bits (0=>1, 1=>2) 539 PCCARW BSS 1 carriage width 540 PCHEIGHT BSS 1 height of a page 541 PCCRD BSS 1 carriage return delay (MS) 542 PCLFD BSS 1 line feed delay (MS) 543 PCFFD BSS 1 form feed delay (MS) 544 PCBKSPC BSS 1 backspace character 545 PCLKILLC BSS 1 line kill character 546 PCECHOM BSS 1 echo mode 547 PCTERMT BSS 1 terminal type code (pak6) 548 PCTERMG BSS 1 terminating character group 549 PCTERMA BSS 8 terminating character array 550 PCLOCATION BSSC 30 text describing terminal location 551 PCAUTOLOG BSS 10 auto logon account 552 PCIXOFF BSS 1 1 sez xoff port on input buffer full 553 PCFPROTO BSS 1 interface protocal 554 PCPNONE EQU 0 none 555 PCPDISC EQU 1 disconnect on DTR drop 556 PCP103H EQU 2 103 handshake 557 PCTSMTR BSS 1 initial state of our transmitters 558 PCTRI EQU BIT 24 ring indicator 559 PCTCARD EQU BIT 25 carrier detect 560 PCTDTR EQU BIT 26 data terminal ready/data set ready 561 PCTRTS EQU BIT 28 request to send/clear to send 562 PCHTD BSS 1 horizontal tab delay (MS) 563 PCBRCH BSS 1 'break' character 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 178 (OPRQINFOMACS) F 11 564 PCSITE BSS 2 site name for terminal (pak12) 565 PCTERMTYPE BSS 2 terminal type (pak12) 566 BSS 12 expansion 567 DRCT 568 PCLENGTH EQU DISPW PCPROTO 569 ORG PCPROTO 570 EMAC end of PORTFILE 571 572 573 PORTINFORD MACRO 574 NOLIST 575 $P 576 BOX 577 578 Information returned by the port information request. 579 580 EBOX 581 582 POPROTO BASE R0 583 POPORTNUM BSSB 32-17 the port being considered 584 POENTLEN BSSB 17 length of this entry in words 585 POWORDZ BSSB 32/2 586 * EQU POWORDZ/BIT 31 unused 587 POINTER EQU POWORDZ/BIT 30 "interactive terminal" 588 PODIALUP EQU POWORDZ/BIT 29 dialup port 589 POINHIB EQU POWORDZ/BIT 28 port is inhibited 590 PORFP EQU POWORDZ/BIT 27 remote front panel port 591 POPROCNUM BSSB 32/2 session number (zero if none) 592 POIBAUD BSS 1 input baud rate 593 POOBAUD BSS 1 output baud rate 594 POTTYPE BSS 1 *old* terminal "type" (use POTERMTYPE) 595 POICNT BSS 1 input character count 596 POOCNT BSS 1 output character count 597 POINTSTATE BSSC 1 interface state 598 POLASTST BSSC 1 last status from PORT 599 POLASTCOM BSSC 1 last command sent to PORT 600 POCIAPORT BSSC 1 actual port number on CIA 601 POTIMECNT BSS 1 timing count 602 POSITE BSS 2 site name for terminal (pak12) 603 POTERMTYPE BSS 2 terminal type (pak12) 604 DRCT 605 POLENGTH EQU DISPW POPROTO 606 POLOG EQU POLENGTH LOG 2 607 ORG POPROTO reclaim the space 608 EMAC end of PORTINFORD 609 610 611 TRINFORD MACRO 612 NOLIST 613 $P 614 BOX 615 616 Information returned by the stop trace request. 617 618 EBOX 619 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 179 (OPRQINFOMACS) F 11 620 TIPROTO BASE R0 621 TISLOT BSSB 4 slot number of CPU creating this entry 622 TIEVENT BSSB 10 class and event number 623 TITIME BSSB 18 right bits of clock 624 TIR0 BSS 1 contents of R0 at time of event 625 TIR1 BSS 1 contents of R1 at time of event 626 TIR2 BSS 1 contents of R2 at time of event 627 DRCT 628 TILENGTH EQU DISPW TIPROTO entry length 629 ORG TIPROTO 630 EMAC 631 632 633 VOLINFORD MACRO 634 NOLIST 635 $P 636 BOX 637 638 Information returned on volumes by the volume 639 information request. 640 641 EBOX 642 643 VIPROTO BASE R0 644 VIWORDZ BSSB 32-17 645 VIINHIB EQU VIWORDZ/BIT 31 on if access inhibited 646 VINOTMNT EQU VIWORDZ/BIT 30 on if not completely mounted 647 VISYSVOL EQU VIWORDZ/BIT 29 on if the system volume 648 VIQDW EQU VIWORDZ/BIT 27 on if writes queued 649 VIQDR EQU VIWORDZ/BIT 26 on if reads queued 650 VIADTBZY EQU VIWORDZ/BIT 25 on if ADT access busy 651 VIMAIM EQU VIWORDZ/BIT 24 on if maintenance mounted only 652 VIENTLEN BSSB 17 length of this entry in words 653 VIDNAME BSS 1 "name" of the drive (PAK6) 654 VIVNAME BSS 2 volume name (PAK12) 655 VIVNUM BSSB 8 system volume index number 656 VIBUSY BSSB 32-8 volume busy counter 657 VIFREEBLK BSS 1 free blocks on the volume 658 VITOTBLK BSS 1 total blocks on volume 659 VIACCTNUM BSS 1 number of accounts on the volume 660 VIREALNAME BSS 2 real name on volume label 661 DRCT 662 VILENGTH EQU DISPW VIPROTO 663 VILOG EQU VILENGTH LOG 2 664 ORG VIPROTO reclaim space 665 EMAC end of VOLINFORD 666 667 668 BKUPINFORD MACRO 669 NOLIST 670 $P 671 BOX 672 673 Definition of system header made in backup. 674 675 EBOX 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 180 (OPRQINFOMACS) F 11 676 677 HDRPROTO BASE R0 678 BKUPHDRW1 BSS 1 first word of header 679 FILEINFOT EQU BITS 0:14 type of backup information 680 FILEINFOTV EQU 0 volume information 681 FILEINFOTA EQU 1 account information 682 FILEINFOTF EQU 2 file information 683 FILEINFOTD EQU 3 file page information 684 FILEINFOTM EQU 4 mapped file page information 685 BKUPREV EQU BITS 15:31 revision number 686 BKUPHDRW2 BSS 1 second word of header 687 FSTBKUPLEN EQU BITS 0:14 first optional length 688 SNDBKUPLEN EQU BITS 15:31 second optional length 689 DRCT 690 BKUPHDRLEN EQU DISPW HDRPROTO length of header 691 ORG HDRPROTO reclaim space 692 EMAC end of BKUPINFORD 693 694 695 VBSYINFORD MACRO 696 NOLIST 697 $P 698 BOX 699 700 Format of information returned by the volume busy 701 request. 702 703 EBOX 704 705 VBPROTO BASE R0 706 BSSB 15 filler 707 VBLENFLD BSSB 17 length of this entry, in words 708 VBACCTNM BSS 2 account name 709 VBDIVPRJ BSS 1 division/project name 710 DRCT 711 VBLNTH EQU DISPW VBPROTO 712 ORG VBPROTO reclaim space 713 EMAC end of VBSYINFORD 714 18 INPUT MACROINVOK invocation of used macros 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 181 (MACROINVOK) F 12 3 ********************************************************************************** 4 * * 5 * Invocation of macros that are used globally. * 6 * * 7 ********************************************************************************** 8 9 PORTFILE LIST 9 ********************************************************************************** 9 * * 9 * There is a file from which the system reads the * 9 * initial port configuration. That files format is described * 9 * herein. * 9 * The file is a RAF and the first words of it describe * 9 * the location of the entries for each port. Word zero of * 9 * the RAF (chars 0-3) is always zero so the file is not * 9 * mangled by other RAF users. Word 1 (PCPLENGTH) contains * 9 * the length of each port entry in characters and word 2 * 9 * (PCPBASE) gives the character base for the information for * 9 * port zero. Therefore, to find the information of a * 9 * particular port, a program positions to *+. * 9 * Each of the entries are considered "not specified" if * 9 * the sign bit of its word is not on. This excludes PCTERMA * 9 * and PCTERMT which are always there. * 9 * * 9 ********************************************************************************** 9 00000004 ABS 9 PCPLENGTH EQU 4 position of 4 chars giving length 00000008 ABS 9 PCPBASE EQU 8 position of 4 chars giving base 9 00000000 9 PCPROTO BASE R0 00160800 0 BASE 9 PCIBAUD BSS 1 input baud rate 00160801 0 BASE 9 PCOBAUD BSS 1 output baud rate 00160802 0 BASE 9 PCFUNCT BSS 1 00003010 BYTE 9 PCFCTSP EQU BIT 24 clear to send processing 00003210 BYTE 9 PCFXOFF EQU BIT 25 XON/XOFF processing 00003410 BYTE 9 PCFBRKOUT EQU BIT 26 don't output when recieving break 00003610 BYTE 9 PCFRDE EQU BIT 27 receive data enable 00003810 BYTE 9 PCCHKIP EQU BIT 28 1 sez check parity of input character 00003A20 BYTE 9 PCPGEN EQU BITS 29:30 parity generation of output characters 00003E10 BYTE 9 PCFSTOPB EQU BIT 31 stop bits (0=>1, 1=>2) 00160803 0 BASE 9 PCCARW BSS 1 carriage width 00160804 0 BASE 9 PCHEIGHT BSS 1 height of a page 00160805 0 BASE 9 PCCRD BSS 1 carriage return delay (MS) 00160806 0 BASE 9 PCLFD BSS 1 line feed delay (MS) 00160807 0 BASE 9 PCFFD BSS 1 form feed delay (MS) 00160808 0 BASE 9 PCBKSPC BSS 1 backspace character 00160809 0 BASE 9 PCLKILLC BSS 1 line kill character 0016080A 0 BASE 9 PCECHOM BSS 1 echo mode 0016080B 0 BASE 9 PCTERMT BSS 1 terminal type code (pak6) 0016080C 0 BASE 9 PCTERMG BSS 1 terminating character group 0016080D 0 BASE 9 PCTERMA BSS 8 terminating character array 00160054 0 CACH 9 PCLOCATION BSSC 30 text describing terminal location 0016081D 0 BASE 9 PCAUTOLOG BSS 10 auto logon account 00160827 0 BASE 9 PCIXOFF BSS 1 1 sez xoff port on input buffer full 00160828 0 BASE 9 PCFPROTO BSS 1 interface protocal 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 182 (MACROINVOK) F 12 00000000 ABS 9 PCPNONE EQU 0 none 00000001 ABS 9 PCPDISC EQU 1 disconnect on DTR drop 00000002 ABS 9 PCP103H EQU 2 103 handshake 00160829 0 BASE 9 PCTSMTR BSS 1 initial state of our transmitters 00003010 BYTE 9 PCTRI EQU BIT 24 ring indicator 00003210 BYTE 9 PCTCARD EQU BIT 25 carrier detect 00003410 BYTE 9 PCTDTR EQU BIT 26 data terminal ready/data set ready 00003810 BYTE 9 PCTRTS EQU BIT 28 request to send/clear to send 0016082A 0 BASE 9 PCHTD BSS 1 horizontal tab delay (MS) 0016082B 0 BASE 9 PCBRCH BSS 1 'break' character 0016082C 0 BASE 9 PCSITE BSS 2 site name for terminal (pak12) 0016082E 0 BASE 9 PCTERMTYPE BSS 2 terminal type (pak12) 9 BSS 12 expansion 9 DRCT 0000003C ABS 9 PCLENGTH EQU DISPW PCPROTO 9 ORG PCPROTO 10 11 DIRINFORD LIST 11 ********************************************************************************** 11 * * 11 * This is the format of information that is returned to * 11 * the user when he requests directory information. The * 11 * header is returned only when the .DIR is at load point. * 11 * After that the buffer is filled with an integral number of * 11 * entries, one for each file. * 11 * When the directory is exhausted, an end-of-data status * 11 * is returned. * 11 * * 11 ********************************************************************************** 11 00000000 11 DIRHINFO BASE R0 Header giving account information 00160800 0 BASE 11 DIRHLNTH BSS 1 Length of entry in words (now 8) 00160801 0 BASE 11 DIRFLAGS BSS 1 Flags 00080011 0 ZBM 11 DIRSHADOW EQU DIRFLAGS/BIT 0 On if a shadow account 00080211 0 ZBM 11 DIRFOREIGN EQU DIRFLAGS/BIT 1 On if account not at home here 00080411 0 ZBM 11 DIRNETWORK EQU DIRFLAGS/BIT 2 On if account accessed via network 00160802 0 BASE 11 DIRVOLUME BSS2 1 Volume account is on (PAK12) 00160804 0 BASE 11 DIRSYSTEM BSS 1 System account is on (PAK6) 00160805 0 BASE 11 DIRACCOUNT BSS2 1 Account name (PAK12) 00160807 0 BASE 11 DIRPROJECT BSS 1 Project of account (PAK6) 11 DRCT 00000008 ABS 11 DIRHWIDE EQU DISPW DIRHINFO Template length 11 ORG DIRHINFO Recover template space 11 11 11 ********************************************************************************** 11 * * 11 * Template for .DIR file entry block * 11 * * 11 ********************************************************************************** 11 00000000 11 DIREINFO BASE R0 Entry for individual file 00160800 0 BASE 11 DIRENTLEN BSS 1 Entry length in words 00160801 0 BASE 11 DIRNAME BSS2 1 Name of file (PAK12) 00160803 0 BASE 11 DIREXT BSS 1 File name extension (PAK6) 00160804 0 BASE 11 DIRCREATD BSS 1 Creation date 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 183 (MACROINVOK) F 12 00160805 0 BASE 11 DIRLACSD BSS 1 Last access date 00160806 0 BASE 11 DIRLMODD BSS 1 Last modified date 00160807 0 BASE 11 DIRLBKUPD BSS 1 Last backup date 11 00080108 0 ZBM 11 DIRTOTRACS BSSB 16 Total read accesses 00082108 0 ZBM 11 DIRTOTWACS BSSB 16 Total write accesses 11 00080109 0 ZBM 11 DIRRACS BSSB 16 Currently active EQUIPs for RO 00082109 0 ZBM 11 DIRWACS BSSB 16 Currently active EQUIPs for RW 11 0008010A 0 ZBM 11 DIRMWACS BSSB 16 Currently active EQUIPs for MW 0008218A 0 ZBM 11 DIRTFL BSSB 24 Total file length (in blocks) 0008118B 0 ZBM 11 DIRROOTBLK BSSB 24 Root block (or 0 if not GOD) 11 00160030 0 CACH 11 DIRTYPE BSSB 8 Type of file (see FSSTATDTYP) 0008104C 0 ZBM 11 DIRACCESS BSSB 4 Access allowed (see FSSTATACS) 0008182C 0 ZBM 11 DIRRAFTYPE BSSB 2 Empty, Tiny, Small, Large 11 BSSB 2 filler 00160032 0 CACH 11 DIRPRGINT BSSB 8 Purge interval 0008301C 0 ZBM 11 DIRPRGFLG BSSB 1 On if file was purged 0008321C 0 ZBM 11 DIRNOBKUP BSSB 1 On if file should not be backed up 0008341C 0 ZBM 11 DIRRCVRD BSSB 1 On if file recovered from backup 0008361C 0 ZBM 11 DIRFWWSC BSSB 1 On if file EQUIPed for W at crash 0008381C 0 ZBM 11 DIRFBC BSSB 1 On if file being closed 00083A1C 0 ZBM 11 DIRGHOST BSSB 1 On if file not yet recovered from backup 00083C1C 0 ZBM 11 DIRTRANS BSSB 1 On if file opened when user program crashed 00083E1C 0 ZBM 11 DIRFLOG BSSB 1 On if file access should be logged 11 11 BSSB 1 unused filler 0008021D 0 ZBM 11 DIRLRAF BSSB 1 On if a large (2 level) .RAF 0008050D 0 ZBM 11 DIRCUSE BSSB 16 current use count 11 0016080E 0 BASE 11 DIRUSRFLD BSS 1 user-definable field 0016080F 0 BASE 11 DIRSERNO BSS2 1 file serial number 00160810 0 BASE 11 DIRUNITNM EQU DIRSERNO(1) unit number for hardware devices 11 BSS 0 *** filler *** 11 DRCT 00000011 ABS 11 DIRENTWIDE EQU DISPW DIREINFO Template size in words 11 ORG DIREINFO Recover template space 12 13 FILESTAT LIST 13 ********************************************************************************** 13 * * 13 * Definition of the fields and values for the static and * 13 * dynamic statuses of a file. * 13 * * 13 ********************************************************************************** 13 13 * Format of File static status 13 * 13 * EQU BIT 0 always zero 00001C40 BYTE 13 FSSTATPRIV EQU BITS 14:17 privilege to access device 00002410 BYTE 13 FSSTATCRT EQU BIT 18 file was created by OPEN 00002630 BYTE 13 FSSTATACS EQU BITS 19:21 access allowed to device 13 * EQU BIT 22 unused - reserved 00002E10 BYTE 13 FSSTATABS EQU BIT 23 on if unit is absolute I/O 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 184 (MACROINVOK) F 12 00003010 BYTE 13 FSSTATWSC EQU BIT 24 on if file writing when system crashed 00003210 BYTE 13 FSSTATSAV EQU BIT 25 on if device in directory somewhere 00003460 BYTE 13 FSSTATDTYP EQU BITS 26:31 type code for the device 13 13 * Values for FSSTATPRIV 13 * (privilege implies what you would be allowed to have) 00000000 ABS 13 FSPRIVRW EQU 0 read/write 00000001 ABS 13 FSPRIVRO EQU 1 read only 00000002 ABS 13 FSPRIVMOD EQU 2 modify 00000003 ABS 13 FSPRIVXO EQU 3 execute only 00000008 ABS 13 FSPRIVBKUP EQU 8 backup 0000000F ABS 13 FSPRIVNOT EQU 0F no privilege 00003E10 BYTE 13 FSPRIVNWB EQU BIT 31 bit, if on, implies no write possible 13 * Values for FSSTATACS 13 * (access implies what you actually requested and have) 00000000 ABS 13 FSACSRW EQU 0 read/write 00000001 ABS 13 FSACSRO EQU 1 read only 00000002 ABS 13 FSACSAO EQU 2 append only 00000003 ABS 13 FSACSXO EQU 3 execute only 00000004 ABS 13 FSACSMW EQU 4 multiple write 00000005 ABS 13 FSACSDR EQU FSACSMW+1 multiple write 00000007 ABS 13 FSACSNDA EQU 7 no data access 00003E10 BYTE 13 FSACSNWB EQU BIT 31 bit, if on, sez no write possible 13 * Values for FSSTATDTYP 00000000 ABS 13 DTYPEUNDEF EQU 0 undefined and illegal 00000001 ABS 13 DTYPESAF EQU 1 sequential access file 00000002 ABS 13 DTYPERAF EQU 2 random access file 00000003 ABS 13 DTYPECODE EQU 3 code file 00000004 ABS 13 DTYPEPATH EQU 4 communication path 00000005 ABS 13 DTYPEDIR EQU 5 directory 00000006 ABS 13 DTYPENULL EQU 6 output eater 00000007 ABS 13 DTYPETERM EQU 7 interactive terminal 13 * EQU 8 unused (was lock) 00000009 ABS 13 DTYPETASK EQU 9 "batch" job submission unit 0000000A ABS 13 DTYPECDR EQU 10 card reader 0000000B ABS 13 DTYPELP EQU 11 line printer 0000000C ABS 13 DTYPEMT EQU 12 magnetic tape 0000000D ABS 13 DTYPECT EQU 13 cartridge magnetic tape 0000000E ABS 13 DTYPEVOL EQU 14 a volume 0000000F ABS 13 DTYPEVT EQU 15 video tape 00000010 ABS 13 DTYPELAST EQU 16 last code plus one 13 13 13 * Format of a file's dynamic status 00000010 BYTE 13 FDSTATAERR EQU BIT 0 on if error code not zero 00000880 BYTE 13 FDSTATLUN EQU BITS 4:11 lun having this status 00002040 BYTE 13 FDSTATRTYP EQU BITS 16:19 type of last record read 00002810 BYTE 13 FDSTATLP EQU BIT 20 on if device positioned at beginning 00002AB0 BYTE 13 FDSTATERR EQU BITS 21:31 error code 13 13 * Values for FDSTATRTYP - record types 00003810 BYTE 13 FDRTYPSYSB EQU BIT 28 if on, record is either EOD or EOF 00003E10 BYTE 13 FDRTYPEODB EQU BIT 31 if FDRTYPSYSB also, then EOD 00000000 ABS 13 FDRTYPTEXT EQU 0 text record 00000001 ABS 13 FDRTYPTXTF EQU 1 text with forms control 00000002 ABS 13 FDRTYPBIN EQU 2 binary record 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 185 (MACROINVOK) F 12 00000004 ABS 13 FDRTYPLBL EQU 4 label record 00000005 ABS 13 FDRTYPCOMM EQU 5 comment record 00000008 ABS 13 FDRTYPFM EQU 8 file mark (end of file, EOF) 00000009 ABS 13 FDRTYPEOD EQU 9 end of data (EOD) 0000000B ABS 13 FDRTYPAEOD EQU 11 abnormal end of date (AEOD) 14 15 BKUPINFORD LIST 15 ********************************************************************************** 15 * * 15 * Definition of system header made in backup. * 15 * * 15 ********************************************************************************** 15 00000000 15 HDRPROTO BASE R0 00160800 0 BASE 15 BKUPHDRW1 BSS 1 first word of header 000000F0 BYTE 15 FILEINFOT EQU BITS 0:14 type of backup information 00000000 ABS 15 FILEINFOTV EQU 0 volume information 00000001 ABS 15 FILEINFOTA EQU 1 account information 00000002 ABS 15 FILEINFOTF EQU 2 file information 00000003 ABS 15 FILEINFOTD EQU 3 file page information 00000004 ABS 15 FILEINFOTM EQU 4 mapped file page information 00001F10 BYTE 15 BKUPREV EQU BITS 15:31 revision number 00160801 0 BASE 15 BKUPHDRW2 BSS 1 second word of header 000000F0 BYTE 15 FSTBKUPLEN EQU BITS 0:14 first optional length 00001F10 BYTE 15 SNDBKUPLEN EQU BITS 15:31 second optional length 15 DRCT 00000002 ABS 15 BKUPHDRLEN EQU DISPW HDRPROTO length of header 15 ORG HDRPROTO reclaim space 16 17 UNDRPINFORD LIST 17 ********************************************************************************** 17 * * 17 * The under process structure read request returns the * 17 * following block of information for each process. * 17 * * 17 ********************************************************************************** 17 00000000 17 UNDRPROTO BASE R0 000800F0 0 ZBM 17 UNDRRSTR BSSB 15 process restrictions 00081F10 0 ZBM 17 UNDRELEN BSSB 17 length of this entry, in words 00080091 0 ZBM 17 UNDRLEVEL BSSB 9 level number of this under process 00081371 0 ZBM 17 UNDRPSN BSSB 23 process serial number of this process 00080172 0 ZBM 17 UNDRDPSN BSSB 23 process serial number of father 00082F72 0 ZBM 17 UNDRDBG BSSB 23 process serial number of debugger process 17 BSSB 18 reserved for future expansion 00160804 0 BASE 17 UNDRNAME BSS 2 process name 17 00081C10 0 ZBM 17 UNDRSTCTG1 EQU UNDRRSTR/BIT 31 on if group 1 restrictions (limit change) 00081A10 0 ZBM 17 UNDRSTCTG2 EQU UNDRRSTR/BIT 30 on if group 2 restrictions (catalog fetch) 00081810 0 ZBM 17 UNDRSTCTG3 EQU UNDRRSTR/BIT 29 on if group 3 restrictions (acct att. chng) 00081610 0 ZBM 17 UNDRSTCTG4 EQU UNDRRSTR/BIT 28 on if group 4 restrictions (unassigned) 00081410 0 ZBM 17 UNDRSTCTG5 EQU UNDRRSTR/BIT 27 on if group 5 restrictions (unassigned) 00081210 0 ZBM 17 UNDROPREQ EQU UNDRRSTR/BIT 26 on if operator requests restricted 00081010 0 ZBM 17 UNDRMAINTR EQU UNDRRSTR/BIT 25 on if maintenance read restricted 00080E10 0 ZBM 17 UNDRMAINTW EQU UNDRRSTR/BIT 24 on if maintenance write restricted 00080C10 0 ZBM 17 UNDRBACKUP EQU UNDRRSTR/BIT 23 on if backup requests restricted 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 186 (MACROINVOK) F 12 00080A10 0 ZBM 17 UNDRMANAGR EQU UNDRRSTR/BIT 22 on if manager requests restricted 00080810 0 ZBM 17 UNDREXO EQU UNDRRSTR/BIT 21 on if address space is execute only 00080610 0 ZBM 17 UNDRCNTLM EQU UNDRRSTR/BIT 20 on if in Control Mode 17 17 DRCT 00000006 ABS 17 UNDRPLONG EQU DISPW UNDRPROTO 00000003 ABS 17 UNDRPLOG EQU UNDRPLONG LOG 2 17 ORG UNDRPROTO recover lost space 18 19 LUINFORD LIST 19 ********************************************************************************** 19 * * 19 * The request that returns information on the local * 19 * units for a specific underprocess conforms to the following * 19 * format. * 19 * * 19 ********************************************************************************** 19 00000000 19 LUPROTO BASE R0 00160000 0 CACH 19 LUEQUIVS BSSB 8 number of units opened to this device 00081040 0 ZBM 19 LULASTREC BSSB 4 type of last record read 00081810 0 ZBM 19 LULOADPT BSSB 1 unit is currently position at the load point 00081A10 0 ZBM 19 LUTRANS BSSB 1 on if unit has transaction in progress 19 BSSB 1 reserved for future expansion 00081F10 0 ZBM 19 LUELEN BSSB 17 length of this entry (words) 19 00160004 0 CACH 19 LUUNIT BSSB 8 unit number having this status 00081121 0 ZBM 19 LUSSTAT BSSB 18 unit static status 19 BSSB 6 reserved for future expansion 19 00081041 0 ZBM 19 LUPRIV EQU LUSSTAT/BITS 14:17 privilege to access this device 00081811 0 ZBM 19 LUCRT EQU LUSSTAT/BIT 18 file created by OPEN 00081A31 0 ZBM 19 LUACS EQU LUSSTAT/BITS 19:21 access allowed to device 00082411 0 ZBM 19 LUWWC EQU LUSSTAT/BIT 24 on if file writing when system crashed 00082611 0 ZBM 19 LUSAVE EQU LUSSTAT/BIT 25 on if device in directory somewhere 00082861 0 ZBM 19 LUTYPE EQU LUSSTAT/BITS 26:31 type of device 19 00160802 0 BASE 19 LUVOLNM BSS 2 volume name for device 00160804 0 BASE 19 LUSYSNM BSS 1 system name for device 00160805 0 BASE 19 LUACCT BSS 2 account name for device 00160807 0 BASE 19 LUACCPROJ BSS 1 div/proj name for device 00160808 0 BASE 19 LUFILENM BSS 2 filename for device 0016080A 0 BASE 19 LUEXT BSS 1 filename extension for device 19 19 DRCT 0000000B ABS 19 LULONG EQU DISPW LUPROTO 00000004 ABS 19 LULOG EQU LULONG LOG 2 19 ORG LUPROTO recover lost space 19 19 INPUT HALTDEFS system halt definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 187 (HALTDEFS) F 13 Definitions for operating system halts 4 5 ********************************************************************************** 6 * * 7 * Hardware provided displays * 8 * -------- -------- -------- * 9 * * 10 * The SSU and CPU may interact upon the discovery of * 11 * certain errors and display an appropriate error message in * 12 * the front panel display. This box contains a description * 13 * of those displays. * 14 * * 15 * POWER ON This display comes on when the SSU is cycling * 16 * MCLR and PFW after a power up start. * 17 * * 18 * BSE INIT This display comes on when BSE is already * 19 * asserted immediately after the SSU has * 20 * cycled MCLR and PFW. * 21 * * 22 * NO MEMORY This display comes on when the SSU finds no * 23 * MCU or SMU with memory at page zero. * 24 * * 25 * SELF TEST This display comes on while the SSU sends self * 26 * test commands to the other VRA modules, * 27 * waits two seconds and gets the WRU 15 (self * 28 * test responses). * 29 * * 30 * STF SLOTn This display comes on when the SSU gets either * 31 * a non-zero or a no response to a WRU 15. "n" * 32 * is the slot number of the offending module. * 33 * * 34 * NO CPU This display comes on when the SSU finds no CPU * 35 * in the system. * 36 * * 37 * BSE ACTIVE This display comes on when a module other than * 38 * the SSU is asserting BSE. * 39 * * 40 * ERRx SLOTn This display comes on when the SSU itself notices * 41 * a bus error. "x" is the error code (same as * 42 * the first digit of a WRU 1, and "n" is the slot * 43 * number of the offending module. * 44 * The codes for x are: * 45 * 1 - bus parity error * 46 * 2 - flags wrong or DBW bit wrong * 47 * 3 - bad command code * 48 * 4 - illegal address * 49 * 5 - RTO time out * 50 * 6 - response time out * 51 * 7 - illegal data * 52 * 8 - * 53 * 9 - data wrong during boot * 54 * A - bad WRU response * 55 * * 56 * CPUn ERRxx This display appears when a CPU sends the SSU a * 57 * CPU ERROR command. "n" is the slot number of * 58 * the CPU, and "xx" is the most significant byte * 59 * of the error data sent by the CPU. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 188 (HALTDEFS) F 13 Definitions for operating system halts 60 * * 61 * CPU ERROR CODES (Rev 12 and greater microcode) * 62 * * 63 * The CPU has two types of fatal errors: Bus errors * 64 * and CPU errors. When the CPU gets a Bus error, it asserts * 65 * BSE. When a CPU error occurs, a CPU error message is sent * 66 * to the SSU. In both cases, certain state information has * 67 * been saved by the CPU, and is accessable from the RFP. * 68 * * 69 * The state information is saved as follows: * 70 * * 71 * R11 (SP17) = Microstatus register 1 * 72 * R12 (SP18) = Microstatus register 2 ([28:31]=From register)* 73 * R13 (SP19) = Microstatus register 3 * 74 * R14 (SP20) = Input register 1 * 75 * R15 (SP21) = Input register 2 * 76 * R16 (SP22) = Output register 1 * 77 * R17 (SP23) = Output register 2 * 78 * R19 (SP24) [0:3] = Error code * 79 * [4:7] = Error parameter * 80 * [20:31] = ucode address where error was * 81 * detected * 82 * * 83 * The error codes are listed below. Error codes 1 * 84 * through 7 are Bus error codes and codes 8 through A are * 85 * CPU error codes. * 86 * * 87 * 1 --> Parity error on the Bus. * 88 * 2 --> Bad flags on the Bus. * 89 * 3 --> Bad command code on the Bus. * 90 * 4 --> Bad command address on the Bus. * 91 * 5 --> RTO timeout on the Bus. * 92 * 6 --> IBF timeout on the Bus. * 93 * 7 --> Parity and flag error on the Bus (same as * 94 * codes 1 and 2) * 95 * 8 --> Page fault during trap setup * 96 * 9 --> Page fault when trying to store console * 97 * area * 98 * A --> Hardware error * 99 * * 100 * The second digit of the error message is the error * 101 * parameter. These are used to indicate the type of word * 102 * which caused a flag or parity error. * 103 * * 104 * 0 --> No information * 105 * 1 --> Error in command word of received command * 106 * 2 --> Error in data word of received command * 107 * 3 --> Error in instruction fetch data * 108 * 4 --> Error in operand fetch data * 109 * 5 --> Error in pointer fetch data * 110 * 6 --> Error in interrupt poll data * 111 * 7 --> Error in trap fetch data * 112 * * 113 * POWER OFF This display comes on when the SSU sees the * 114 * Control Panel Power switch turned off. * 115 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 189 (HALTDEFS) F 13 Definitions for operating system halts 116 * acdctempPF This display comes on when the SSU sees a power * 117 * failure of some kind. * 118 * AC PF AC Power Fail warning (detected by the AC * 119 * Power Fail Detector board or from memory power * 120 * failure). * 121 * DC PF Bad +5 VDC on the SSU. * 122 * TEMPPF Overtemperature in the main cardcage. * 123 * Note: more than one of these may be active at * 124 * a time. * 125 * * 126 * SSU ERR ps This display comes on when the SSU fails its own * 127 * self test. "p" is the primary error code, and * 128 * "s" is the secondary error code. The error codes * 129 * are listed below: * 130 * 1 -- Real Time Clock not ticking * 131 * 2 -- SSU Ram Error 0 -- Zeros test error * 132 * 1 -- #FF test error * 133 * 2 -- Address test error * 134 * 3 -- Complement address test error * 135 * 3 -- SSU Bus Error 1 -- Reset logic error * 136 * 2 -- WBTOR/status error * 137 * 3 -- Call back logic error * 138 * 4 -- Data path error * 139 * 5 -- Parity error when good * 140 * parity expected * 141 * 6 -- No parity error when bad * 142 * parity forced * 143 * 4 -- Control Panel Switch read/write error * 144 * 5 -- Bootstrap Eprom checksum error * 145 * 6 -- Bus Control Register read/write error * 146 * * 147 * SSU HALTxx This code is displayed when the SSU microcode * 148 * has detected an internal inconsistency that * 149 * makes it unlikely to be able to continue. * 150 * xx gives the reason (see list below). * 151 * * 152 * SSU HALT CODE LIST FOR REV 14 MICROCODE * 153 * This is a list of SSU halt codes for SSU * 154 * microcode rev 14. (The halt code lists for * 155 * earlier microcode revisions are different.) * 156 * There are only two ways to restart an SSU that * 157 * has halted. One way is to manipulate the SSU's * 158 * program counter with a hardware debugger. The * 159 * other way to restart a halted SSU is to power * 160 * down the VRA cardcage and then power it up * 161 * again. (This is done by cycling the front panel * 162 * power switch.) * 163 * * 164 * HALT CODE EXPLANATION * 165 * * 166 * SSU HALT01 CreateProc called with all Process blocks in use * 167 * SSU HALT02 DestroyProc called with no process to destroy * 168 * SSU HALT03 Timer.Wait called with too low of a base address * 169 * SSU HALT04 Timer in use when Timer.Wait called * 170 * SSU HALT05 Cancel.Timer called with no timer in use * 171 * SSU HALT06 Event.Wait called with both events in use * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 190 (HALTDEFS) F 13 Definitions for operating system halts 172 * SSU HALT07 Cancel.Event called with no event in use * 173 * SSU HALT08 Cancel.Event called with incorrect event return index* 174 * SSU HALT09 PFW interrupt reached as general interrupt * 175 * SSU HALT0A CBN asserted with IBF unasserted * 176 * SSU HALT0B RFP.State = WF.Modem when starting from RXR interrupt* 177 * SSU HALT0C RFP.State = Send.Output when starting from RXR interrupt* 178 * SSU HALT0D RFP.State = Send.WF.CP when starting from RXR interrupt* 179 * SSU HALT0E RFP.State = WF.CP when starting from RXR interrupt * 180 * SSU HALT0F RFP.State = WF.Ring when entering from Txr Interrupt* 181 * SSU HALT10 RFP.State = WF.Modem when entering from Txr Interrupt* 182 * SSU HALT11 RFP.State = WF.Break when entering from Txr Interrupt* 183 * SSU HALT12 RFP.State = WF.CP when entering from Txr Interrupt * 184 * SSU HALT13 RFP.State = WF.Input.SOM when entering from Txr Interrupt* 185 * SSU HALT14 RFP.State = WF.InputChar when entering from Txr Interrupt* 186 * SSU HALT15 RFP.State = WF.Ring when entering from CP Interrupt * 187 * SSU HALT16 RFP.State = WF.Modem when entering from CP Interrupt* 188 * SSU HALT17 RFP.State = WF.Break when entering from CP Interrupt* 189 * SSU HALT18 RFP.State = Send.Output when entering from CP Interrupt* 190 * SSU HALT19 RFP.State = WF.Input.SOM when entering from CP Interrupt* 191 * SSU HALT1A RFP.State = WF.InputChar when entering from CP Interrupt* 192 * SSU HALT1B RFP.State = Send.Output when entering * 193 * SSU HALT1C RFP.State = Send.WF.CP when entering * 194 * SSU HALT1D RFP.State = WF.CP when entering from Short Timer interrupt* 195 * SSU HALT1E RFP.State = WF.Input.SOM when entering * 196 * SSU HALT1F RFP.State = WF.Ring when entering * 197 * SSU HALT20 RFP.State = Send.Output when entering * 198 * SSU HALT21 RFP.State = Send.WF.CP when entering * 199 * SSU HALT22 RFP.State = WF.CP when entering from Long Timer Interrupt* 200 * SSU HALT23 Trap for possible bugs, ReturnA with return index of 0* 201 * SSU HALT24 Trap for possible bugs, ReturnB with return index of 0* 202 * * 203 * HLTn ahhhh This display comes on when the CPU sends a CPU HALT * 204 * command to the SSU. "n" is the slot number of * 205 * the CPU. "ahhhh" is the halt code in the least * 206 * significant 22 bits of data from the CPU. Note: * 207 * if the halt code is all ones, the SSU will not * 208 * change the Control Panel display. * 209 * See the following descriptions of these codes. * 210 * * 211 * STPn ahhhh This display comes on when the CPU sends a CPU STOP * 212 * command to the SSU. "n" is the slot number of * 213 * the CPU. "ahhhh" is the stop code in the least * 214 * significant 22 bits of data from the CPU. Note: * 215 * if the stop code is all ones, the SSU will not * 216 * change the Control Panel display. * 217 * See the following descriptions of these codes. * 218 * * 219 * BOOT n This display comes on when the boot switch is * 220 * pushed. "n" is the value of the switches 1-4. * 221 * * 222 * FP RUNNING This display comes on when the Front Panel (RDU or * 223 * RITA) has control of the system. * 224 * * 225 * @@@@@@@@ These displays (and other similar ones) occur * 226 * ???????? when the logic driving the control panel * 227 * @ has failed or is not being clocked. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 191 (HALTDEFS) F 13 Definitions for operating system halts 228 * * 229 ********************************************************************************** 230 231 ********************************************************************************** 232 * * 233 * Other text displays * 234 * ----- ---- -------- * 235 * * 236 * See PROMBOOT for a description of its text error * 237 * messages. * 238 * During normal system operation, the front panel is * 239 * driven by the FPFLASHER routine in TIMER. That routine will * 240 * display one of the normal displays (selected by the FP * 241 * switches) alternating with any error messages. See the * 242 * timer routine for a description of the normal displays. * 243 * See the operator code for a description of the error * 244 * displays. * 245 * * 246 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 192 (HALTDEFS) F 13 Definitions for operating system halts 248 249 ********************************************************************************** 250 * * 251 * Operating System Halts * 252 * --------- ------ ----- * 253 * * 254 * The operating system is absolutely riddled with halts. * 255 * This is so that errors show up at the earliest possible * 256 * moment and give us a chance to find the source of the * 257 * problem. * 258 * In case bugs escape to the field, or a system has an * 259 * intermittant hardware problem, each halt has a unique code * 260 * associated with it. * 261 * The instruction word is sent to the SSU on a halt or a * 262 * stop. The SSU displays the HALT information on the front * 263 * panel. The left 3 characters on the display are "HLT" or * 264 * "STP" as appropriate. The next character is the slot * 265 * number of the CPU that sent the HALT or STOP. The next * 266 * character is a blank and the remaining 5 characters are * 267 * filled with the rightmost 22 bits of the instruction. The * 268 * left 6 bits are displayed as a 6 bit ASCII character and * 269 * the remaining 16 bits as 4 hex digits. * 270 * There are only a few STOP instructions. They are used * 271 * in those cases where a remedial course of action is readily * 272 * apparent and the cause of the error is at least partially * 273 * anticipated. A good example is that of a table filling up * 274 * where the extra entries can be safely discarded. The * 275 * operator may press run and the system will do its best to * 276 * continue operation. Even these STOPs, however, really * 277 * should not appear and their cause should be investigated. * 278 * * 279 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 193 (HALTDEFS) F 13 Definitions for operating system halts 281 282 ********************************************************************************** 283 * * 284 * Diagnostic actions * 285 * ---------- ------- * 286 * * 287 * When a halt or stop occurs, the appropriate code * 288 * should be found in the listing. To find them, use the * 289 * front panel display to produce a symbol of the form * 290 * 'HALTS10D1' or 'STOPF10A7'. This symbol may then be found * 291 * in the CREF for the OS. The definition will be found here * 292 * in the HALTDEFS file, and there will be one use of the * 293 * symbol. That place where the symbol is used often contains * 294 * commentary about what is in the registers, etc. * 295 * Any of these halts represents some problem discovered * 296 * by the system, generally quite a serious one. The notes in * 297 * this file give only a cursory feeling of what is happening. * 298 * In many cases, a HALT was inserted into the operating * 299 * system because it was easy to do, but we don't really * 300 * expect to see one. The 'bogus return from LIMITCHECK' is a * 301 * good example of this. Checking in the listing will just * 302 * show the HALT surrounded by relatively normal code and * 303 * commentary. * 304 * However, there are a number of halts that were * 305 * designed into the system to detect a specific class of * 306 * error. A check in the listing will reveal a more complete * 307 * description of the problem, and what registers mean what, * 308 * etc. These halts often get associated with a particular * 309 * bug, especially when the bug is not fixed right away. This * 310 * has the particular danger of causing that halt to assume a * 311 * low importance even after the bug is fixed. A good example * 312 * of this is the HLT S0007 that became intimately associated * 313 * with COMM input buffer overflows. This bug is now fixed, * 314 * yet anyone encountering a S0007 halt still thinks of it as * 315 * a known but not yet fixed COMM bug. Any new S0007 halts * 316 * now indicate some entirely different problem, or (ecch) * 317 * evidence that the bug is not really fixed. * 318 * Generally, the register readings should be recorded by * 319 * issuing a STATUS command to the RDU. In those cases where * 320 * the commentary indicates that a particular register * 321 * (generally R4) points to the console area (CA) of the * 322 * offending process, a dump of that CA is necessary (although * 323 * it is included in the crash dump, it is extremely helpful * 324 * to have without redialling the site to look at the crash * 325 * dump). * 326 * * 327 ********************************************************************************** 328 329 * HALT letter codes and meaning 00001460 BYTE 330 LETTERSPOT EQU BITS 10:15 position in HALT of letter 00020000 ABS 331 BHALT EQU ("B" AND 03F)*LETTERSPOT for bootstrap and power fail problems 00030000 ABS 332 CHALT EQU ("C" AND 03F)*LETTERSPOT control mode and system process errors 00040000 ABS 333 DHALT EQU ("D" AND 03F)*LETTERSPOT disk structure problem 00060000 ABS 334 FHALT EQU ("F" AND 03F)*LETTERSPOT a table has filled up 00080000 ABS 335 HHALT EQU ("H" AND 03F)*LETTERSPOT hardware problems 00090000 ABS 336 IHALT EQU ("I" AND 03F)*LETTERSPOT interrupt code error 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 194 (HALTDEFS) F 13 Definitions for operating system halts 000D0000 ABS 337 MHALT EQU ("M" AND 03F)*LETTERSPOT memory failure 00100000 ABS 338 PHALT EQU ("P" AND 03F)*LETTERSPOT for peripheral equipment problems 00130000 ABS 339 SHALT EQU ("S" AND 03F)*LETTERSPOT for system errors 00170000 ABS 340 WHALT EQU ("W" AND 03F)*LETTERSPOT errors from an offline utility 001A0000 ABS 341 ZHALT EQU ("Z" AND 03F)*LETTERSPOT for shutdown (sleep) errors 342 343 ********************************************************************************** 344 * * 345 * Important Notice!!! * 346 * All errors flagged with a star ("*") are security * 347 * violations. Exercise due caution in dealing with these * 348 * halts to avoid: * 349 * 1) offending customers who have accidently encountered one * 350 * 2) defeating the purpose of protecting BTI & proprietary * 351 * account owners. * 352 * * 353 ********************************************************************************** 354 002A0000 ABS 355 SVHLT EQU ("*" AND 03F)*LETTERSPOT for security violations 356 003FFFFF ABS 357 NOHALTCODE EQU -1/BITS 10:31 do not display HALT/STOP code in lights 358 359 * individual halt codes 360 361 * Power fail restart 362 * BHALT+01000 memory battery exhausted. Stored by SMU microcode 00021001 ABS 363 HALTB1001 EQU BHALT+01001 power up without corresponding power down processing 364 * This is the normal halt if power is 365 * cycled following a sleep. 00021004 ABS 366 HALTB1004 EQU BHALT+01004 VRA module missing at power up time 367 * This happens if someone changes the configuration 368 * of the system while it is powered down, e.g. by 369 * removing a CPU. 370 371 * PROMBOOT routine 00021002 ABS 372 HALTB1002 EQU BHALT+01002 power up, offline stuff not restartable 373 * B1002 is the normal halt if power is 374 * cycled following completion of off-line work. 00021003 ABS 375 STOPB1003 EQU BHALT+01003 recoverable error reading boot block 00022000 ABS 376 STOPB2XXX EQU BHALT+02000 disk DSKxxx failed self-test 377 378 * TAPEBOOT routine 00023010 ABS 379 HALTB3010 EQU BHALT+03010 invalid front panel switches for boot 00023011 ABS 380 HALTB3011 EQU BHALT+03011 *** to be determined *** 381 382 * TAPERECOVER routine 00023100 ABS 383 HALTB3100 EQU BHALT+03100 ran out of disk space in unusual circumstance 00023101 ABS 384 HALTB3101 EQU BHALT+03101 ran out of disk space allocating first sec block 00023102 ABS 385 HALTB3102 EQU BHALT+03102 ran out of disk space allocating second sec block 00023103 ABS 386 HALTB3103 EQU BHALT+03103 disk error reading IDX 00023104 ABS 387 HALTB3104 EQU BHALT+03104 disk error reading IDX 00023106 ABS 388 HALTB3106 EQU BHALT+03106 disk error reading IDX 00023107 ABS 389 HALTB3107 EQU BHALT+03107 disk error reading IDX 00023108 ABS 390 HALTB3108 EQU BHALT+03108 disk error reading IDX 00023109 ABS 391 HALTB3109 EQU BHALT+03109 duplicate account found 0002310A ABS 392 HALTB310A EQU BHALT+0310A duplicate file found 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 195 (HALTDEFS) F 13 Definitions for operating system halts 0002310B ABS 393 HALTB310B EQU BHALT+0310B in DUMMYACCT without a file or file page logical rec 0002310C ABS 394 HALTB310C EQU BHALT+0310C UDIR block overflow 0002310D ABS 395 HALTB310D EQU BHALT+0310D Illegal hardware type 0002310E ABS 396 HALTB310E EQU BHALT+0310E record miscompare on read twice option 0002310F ABS 397 HALTB310F EQU BHALT+0310F not recoverable tape error on reread 00023110 ABS 398 HALTB3110 EQU BHALT+03110 disk error reading UDIR 00023111 ABS 399 HALTB3111 EQU BHALT+03111 account not present for latecomer 00023112 ABS 400 HALTB3112 EQU BHALT+03112 excessive tape errors 00023113 ABS 401 HALTB3113 EQU BHALT+03113 excessive tape errors 402 403 * DISKCOPY routine 00023200 ABS 404 HALTB3200 EQU BHALT+03200 internal table error 00023201 ABS 405 HALTB3201 EQU BHALT+03201 internal table error 406 407 * DISKBOOT routine 00024004 ABS 408 HALTB4004 EQU BHALT+04004 no SSU found 00024011 ABS 409 HALTB4011 EQU BHALT+04011 disk error: volume label 00024012 ABS 410 HALTB4012 EQU BHALT+04012 disk error: security block 00024013 ABS 411 HALTB4013 EQU BHALT+04013 disk error: IDX 00024014 ABS 412 HALTB4014 EQU BHALT+04014 disk error: directory 00024015 ABS 413 HALTB4015 EQU BHALT+04015 system account not found 00024016 ABS 414 HALTB4016 EQU BHALT+04016 system or crashdump code file not found 00024017 ABS 415 HALTB4017 EQU BHALT+04017 crash dump file is not a code file 00024018 ABS 416 HALTB4018 EQU BHALT+04018 disk error: system file's CCB or data 00024019 ABS 417 HALTB4019 EQU BHALT+04019 system file not a CODE file 00024021 ABS 418 HALTB4021 EQU BHALT+04021 crashdump file not readable 00024022 ABS 419 HALTB4022 EQU BHALT+04022 crashdump file not writable 00024023 ABS 420 HALTB4023 EQU BHALT+04023 segment error status reading check segment 00024024 ABS 421 HALTB4024 EQU BHALT+04024 segment error status while writing 00024025 ABS 422 STOPB4025 EQU BHALT+04025 seek error while doing rezero operation 00024100 ABS 423 HALTB4100 EQU BHALT+04100 offline call to non-existent routine 424 425 * SALON (offline disk driver) 00024031 ABS 426 STOPB4031 EQU BHALT+04031 timeout during seek operation 427 428 * OPL (Offline Program Loader) 00025000 ABS 429 HALTB5000 EQU BHALT+05000 no PPU with comm found by OPL 00025001 ABS 430 HALTB5001 EQU BHALT+05001 no port boards found in first comm. 00025002 ABS 431 HALTB5002 EQU BHALT+05002 no EOP from read operation 00025003 ABS 432 HALTB5003 EQU BHALT+05003 comm not responding to output 00025004 ABS 433 HALTB5004 EQU BHALT+05004 boot switches too high for OPL 00025005 ABS 434 HALTB5005 EQU BHALT+05005 boot switches were too low for OPL 00025006 ABS 435 HALTB5006 EQU BHALT+05006 impossible fall out of IRJ loop 00025007 ABS 436 HALTB5007 EQU BHALT+05007 impossible fall out of JDR loop 437 438 * Halt definitions for DiskToTape. 439 * Halts in the packing process 00173210 ABS 440 HALTW3210 EQU WHALT+03210 first element in PRPQ was not volume name 00173211 ABS 441 HALTW3211 EQU WHALT+03211 wrong type encountered in PRPQ element 00173212 ABS 442 HALTW3212 EQU WHALT+03212 one of the disk blocks required for 443 * building a volume record is missing 00173213 ABS 444 HALTW3213 EQU WHALT+03213 bad PRPQ entry, wrong FBI type 445 446 * Halts in the encryption process 00173220 ABS 447 HALTW3220 EQU WHALT+03220 bad encryption format code 00173221 ABS 448 HALTW3221 EQU WHALT+03221 bad encrypt buffer size 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 196 (HALTDEFS) F 13 Definitions for operating system halts 449 450 * Halts in the tape writing process 00173230 ABS 451 HALTW3230 EQU WHALT+03230 could not write on tape, die for now 00173231 ABS 452 HALTW3231 EQU WHALT+03231 first record on TWQ was not fileset 00173232 ABS 453 HALTW3232 EQU WHALT+03232 could not write file mark 00173233 ABS 454 HALTW3233 EQU WHALT+03233 could not write end of tape record 00173234 ABS 455 HALTW3234 EQU WHALT+03234 could not write end of file set record 456 457 * 458 * Halt definitions for PieInTheSky volume rebuilder 459 * 00173300 ABS 460 HALTW3300 EQU WHALT+03300 Insufficient physical memory 00173301 ABS 461 HALTW3301 EQU WHALT+03301 Volume too large for program 462 463 464 * INITIAL 00026000 ABS 465 STOPB600X EQU BHALT+06000 memory is cabled wrong in slot X - RUN to ignore 00026040 ABS 466 HALTB6040 EQU BHALT+06040 PPL FBI table has filled up 00026044 ABS 467 HALTB6044 EQU BHALT+06044 no free pages for the initial process 468 * must rebuild or diskcopy system volume 469 470 * page fault processor 471 *** This batch of halts always represents errors in 472 *** OTHER parts of the system. Rather than getting 473 *** the CPU registers, remember that R4 of the CPU 474 *** that halted contains the console area address 475 *** for the failing process. Dump out the console 476 *** area (use DL in RDU) or execute the LDCA R4 477 *** instruction provided then dump the registers. 00130000 ABS 478 HALTS0000 EQU SHALT+0000 page fault with no user process running 00130001 ABS 479 HALTS0001 EQU SHALT+0001 monitor memory protect violation 00130002 ABS 480 HALTS0002 EQU SHALT+0002 VPAGE element not found 00130004 ABS 481 HALTS0004 EQU SHALT+0004 write into monitor memory 00130005 ABS 482 HALTS0005 EQU SHALT+0005 stop for unknown monitor page 00130007 ABS 483 HALTS0007 EQU SHALT+0007 reference to an unmapped window 00130008 ABS 484 HALTS0008 EQU SHALT+0008 wrong or not mapped virtual free storage 485 486 * MAPOUTFBI subroutine 0013001A ABS 487 STOPS001A EQU SHALT+001A PPLWINDOW is already mapped, check 488 * MFBILAST to see where last call was made from 489 490 * FINDVP routine 00130010 ABS 491 HALTS0010 EQU SHALT+00010 VM list changed out from under us 492 493 * memory parity error processing 000D00C0 ABS 494 HALTM00C0 EQU MHALT+000C0 another PE occurred while processing PE 000800C1 ABS 495 HALTH00C1 EQU HHALT+000C1 meaningless interrupt code (R2) on PE int 00080D00 ABS 496 HALTH0DSC EQU HHALT+00D00 a bus device is dead (gave no response) 000800C3 ABS 497 HALTH00C3 EQU HHALT+000C3 bus device giving repeated spurious errors 00080C00 ABS 498 HALTH0CSC EQU HHALT+00C00 abnormal data from device other than memory 499 * this normally means that a controller has 500 * failed to answer to some type of fetch. 501 * look for a dead controller in slot S, channel C. 000D00C5 ABS 502 HALTM00C5 EQU MHALT+000C5 parity error in OS tables 000D00C6 ABS 503 HALTM00C6 EQU MHALT+000C6 uncorrectable PE in resident OS 000D00C7 ABS 504 HALTM00C7 EQU MHALT+000C7 PE in resident OS while checksums not valid 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 197 (HALTDEFS) F 13 Definitions for operating system halts 001300C8 ABS 505 HALTS00C8 EQU SHALT+000C8 PAL not found 506 507 * dispatcher 00080021 ABS 508 HALTH0021 EQU HHALT+0021 mass storage error on required page 00130022 ABS 509 HALTS0022 EQU SHALT+0022 no PPL corresponding to recombined free storage page 00130023 ABS 510 HALTS0023 EQU SHALT+0023 used all of monitor memory 511 512 * scheduler 00130040 ABS 513 HALTS0040 EQU SHALT+0040 PCB not found on SQRUNNING 514 515 * liquidate a process 00130030 ABS 516 HALTS0030 EQU SHALT+0030 no PCB found for this process 00130031 ABS 517 HALTS0031 EQU SHALT+0031 no PCB found for this process 00130032 ABS 518 HALTS0032 EQU SHALT+0032 improper vanish call 00130033 ABS 519 HALTS0033 EQU SHALT+0033 improper vanish call 00130035 ABS 520 HALTS0035 EQU SHALT+0035 PPL busy count went negative 00130037 ABS 521 HALTS0037 EQU SHALT+0037 PPAGE list went bad 522 523 * ULBTWIDDLE routines 001300E0 ABS 524 HALTS00E0 EQU SHALT+00E0 fetchdir on a non-ULB 001300E1 ABS 525 HALTS00E1 EQU SHALT+00E1 freedir on a non-ULB 001300E2 ABS 526 HALTS00E2 EQU SHALT+00E2 freedir on already free directory 527 528 * WINDOW routines 00130062 ABS 529 HALTS0062 EQU SHALT+0062 attempted DUALWRITE of unlocked page 00130063 ABS 530 HALTS0063 EQU SHALT+0063 block not found in PPAGE list 00130064 ABS 531 STOPS0064 EQU SHALT+0064 window #1 not grubbed before XREQ return 00130065 ABS 532 STOPS0065 EQU SHALT+0065 window #2 not grubbed before XREQ return 533 534 * PROCINOUT routines 001300D0 ABS 535 HALTS00D0 EQU SHALT+00D0 PCB not found on SQxxxxx 001300D1 ABS 536 HALTS00D1 EQU SHALT+00D1 destroying UPC. VASP list didn't empty 001300D2 ABS 537 HALTS00D2 EQU SHALT+00D2 UERRSETY. Wrong PSA mapped. 538 539 * BLDPROCESS 00130070 ABS 540 HALTS0070 EQU SHALT+0070 no legal process number found for new process 00130071 ABS 541 HALTS0071 EQU SHALT+0071 could not initialize user free memory 00130072 ABS 542 HALTS0072 EQU SHALT+0072 could not reserve emergency user free memory 543 544 * GETMEM, FREEMEM 00130080 ABS 545 HALTS0080 EQU SHALT+0080 no free storage available 00130081 ABS 546 HALTS0081 EQU SHALT+0081 illegal block freed (low order bits) 00130082 ABS 547 HALTS0082 EQU SHALT+0082 illegal block freed (high order bits) 00130083 ABS 548 HALTS0083 EQU SHALT+0083 request for block larger than a page 00130084 ABS 549 HALTS0084 EQU SHALT+0084 request to free block larger than a page 550 551 * VGETMEM, VFREEMEM 00130086 ABS 552 HALTS0086 EQU SHALT+0086 wrong mapping while getting user memory 00130087 ABS 553 HALTS0087 EQU SHALT+0087 wrong mapping while freeing user memory 00130088 ABS 554 HALTS0088 EQU SHALT+0088 request for a block larger than a page 00130089 ABS 555 HALTS0089 EQU SHALT+0089 tried to free a block larger than a page 0013008A ABS 556 HALTS008A EQU SHALT+008A lost page out of the PSA 0013008B ABS 557 HALTS008B EQU SHALT+008B user ran out of free storage 0013008C ABS 558 HALTS008C EQU SHALT+008C completely out of physical primary storage 0013008D ABS 559 HALTS008D EQU SHALT+008D couldn't supply user any virtual pages 0013008E ABS 560 HALTS008E EQU SHALT+008E no idle pages for user memory lists 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 198 (HALTDEFS) F 13 Definitions for operating system halts 0013008F ABS 561 HALTS008F EQU SHALT+008F PPL not in FSPPLIST where it should be 562 563 * STACKER 00130090 ABS 564 HALTS0090 EQU SHALT+0090 stack overflow found by DROPCA 00130091 ABS 565 HALTS0091 EQU SHALT+0091 stack overflow found by FREESTACK 566 567 * GETPUTADT 001300A0 ABS 568 HALTS00A0 EQU SHALT+00A0 bad voln table 001300A1 ABS 569 HALTS00A1 EQU SHALT+00A1 duplicate entry while moving entries to disk 570 * THIS IS SERIOUS!!! Run REBUILD on the volume! 001300A3 ABS 571 HALTS00A3 EQU SHALT+00A3 no free lists in use, contrary indication 001300A4 ABS 572 HALTS00A4 EQU SHALT+00A4 no ADT list busy - which list was I using? 000400A5 ABS 573 HALTD00A5 EQU DHALT+00A5 error in both security blocks 001300A6 ABS 574 HALTS00A6 EQU SHALT+00A6 attempt to create too many ADT lists 575 576 * I/O interrupt processor 00090800 ABS 577 HALTI0800 EQU IHALT+0800 SLOTTABLE was garbage or 578 * interrupt from unbelievable slot 00090801 ABS 579 HALTI0801 EQU IHALT+0801 channel table garbage or interrupt 580 * from unbelievable device 581 582 * interrupt sorter 00080050 ABS 583 HALTH0050 EQU HHALT+0050 bad instruction from monitor 00080051 ABS 584 HALTH0051 EQU HHALT+0051 instruction trap from monitor 585 586 * MS driver 00130101 ABS 587 HALTS0101 EQU SHALT+0101 write: FBIDA and PPBLOCK disagree 00130102 ABS 588 HALTS0102 EQU SHALT+0102 remount: matched VOLN HCB <> 0 00100103 ABS 589 HALTP0103 EQU PHALT+0103 error writing non-substitutable block 00130104 ABS 590 HALTS0104 EQU SHALT+0104 MDV element not found in MDV list 00130105 ABS 591 HALTS0105 EQU SHALT+0105 bad segment number in segment reconstructor 592 593 * clock driver routine 00080700 ABS 594 STOPH0700 EQU HHALT+0700 clock moved backwards 595 596 * CIA driver 00100200 ABS 597 STOPP0200 EQU PHALT+0200 CIA board magically appeared 598 599 * CIA utility 00130210 ABS 600 HALTS0210 EQU SHALT+0210 terminator not found in block that claims it 00130213 ABS 601 HALTS0213 EQU SHALT+0213 bad command code passed 00130214 ABS 602 HALTS0214 EQU SHALT+0214 empty PSPROCLIST in CHECKLOGD 603 604 * CPUPATCH process 001310A0 ABS 605 HALTS10A0 EQU SHALT+010A0 patch for this rev level disappeared 606 607 * FREEFILE process 001310B0 ABS 608 HALTS10B0 EQU SHALT+010B0 passed garbage for type to free 001310B1 ABS 609 HALTS10B1 EQU SHALT+010B1 quit when error log file really bad 001310B2 ABS 610 HALTS10B2 EQU SHALT+010B2 called to free a swapping block 611 612 * accounting process 001310C0 ABS 613 HALTS10C0 EQU SHALT+010C0 couldn't unequip work unit 614 615 * substitution process 001010D1 ABS 616 STOPP10D1 EQU PHALT+010D1 multiple disk errors. go tries to continue 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 199 (HALTDEFS) F 13 Definitions for operating system halts 001010D2 ABS 617 HALTP10D2 EQU PHALT+010D2 error on bad trax block 001010D3 ABS 618 HALTP10D3 EQU PHALT+010D3 error on substitution block 000610D4 ABS 619 STOPF10D4 EQU FHALT+010D4 bad trax block is full. go to continue 001310D5 ABS 620 HALTS10D5 EQU SHALT+010D5 PPL not found 001310D6 ABS 621 HALTS10D6 EQU SHALT+010D6 substitution list entry not found 000610D7 ABS 622 STOPF10D7 EQU FHALT+010D7 substitution block is full 001310D8 ABS 623 HALTS10D8 EQU SHALT+010D8 substitution list element not found 624 625 * ULB manager 001310E0 ABS 626 HALTS10E0 EQU SHALT+010E0 bad ULB pointer given to FREEULB 001310E1 ABS 627 HALTS10E1 EQU SHALT+010E1 bad ULB pointer given to USEULB 001310E2 ABS 628 HALTS10E2 EQU SHALT+010E2 bad ULB pointer given to FREEULBLK 629 630 * DIOSETUP 00131300 ABS 631 HALTS1300 EQU SHALT+01300 locked page not found in VASP list 632 633 * Utility subroutines for logical units 001311F0 ABS 634 HALTS11F0 EQU SHALT+011F0 bad use count when linking FCB 635 636 * INITDEVACS 00131128 ABS 637 HALTS1128 EQU SHALT+01128 GFC use count went negative 00131129 ABS 638 HALTS1129 EQU SHALT+01129 GFC disappeared 639 640 * NOPEN code 00131131 ABS 641 HALTS1131 EQU SHALT+01131 illegal access for the file privilege 00131132 ABS 642 HALTS1132 EQU SHALT+01132 LIMITCHECK gave bogus return 00131133 ABS 643 HALTS1133 EQU SHALT+01133 LIMITCHECK gave bogus return 00131134 ABS 644 HALTS1134 EQU SHALT+01134 LIMITCHECK gave bogus return 00131135 ABS 645 HALTS1135 EQU SHALT+01135 LIMITCHECK gave bogus return 646 647 * SAF write code 00131108 ABS 648 HALTS1108 EQU SHALT+01108 LIMITCHECK gave bogus return 649 650 * RAF write code 00131110 ABS 651 HALTS1110 EQU SHALT+01110 existing DIR entry disappeared 00131111 ABS 652 HALTS1111 EQU SHALT+01111 LIMITCHECK gave bogus return 00131112 ABS 653 HALTS1112 EQU SHALT+01112 LIMITCHECK gave bogus return 00131113 ABS 654 HALTS1113 EQU SHALT+01113 LIMITCHECK gave bogus return 00131114 ABS 655 HALTS1114 EQU SHALT+01114 LIMITCHECK gave bogus return 00131115 ABS 656 HALTS1115 EQU SHALT+01115 LIMITCHECK gave bogus return 00131116 ABS 657 HALTS1116 EQU SHALT+01116 LIMITCHECK gave bogus return 658 00131118 ABS 659 HALTS1118 EQU SHALT+01118 existing DIR entry disappeared 0013111A ABS 660 HALTS111A EQU SHALT+0111A LIMITCHECK gave bogus return 0013111B ABS 661 HALTS111B EQU SHALT+0111B LIMITCHECK gave bogus return 0013111C ABS 662 HALTS111C EQU SHALT+0111C existing DIR entry disappeared 663 664 * terminal read code 00131120 ABS 665 HALTS1120 EQU SHALT+01120 no terminator in character list 666 667 * FRQCNTL 00131140 ABS 668 HALTS1140 EQU SHALT+01140 saved file not found by SRCHDIRSN 00131141 ABS 669 HALTS1141 EQU SHALT+01141 LIMITCHECK gave a bogus return 00131142 ABS 670 HALTS1142 EQU SHALT+01142 saved file not found by SRCHDIRSN 671 672 * FRQRAFCNTL 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 200 (HALTDEFS) F 13 Definitions for operating system halts 00131148 ABS 673 HALTS1148 EQU SHALT+01148 LIMITCHECK gave a bogus return 00131149 ABS 674 HALTS1149 EQU SHALT+01149 saved file directory entry disappeared 675 676 * implicit lock code 00131150 ABS 677 HALTS1150 EQU SHALT+01150 a lock control element disappeared 00131151 ABS 678 HALTS1151 EQU SHALT+01151 empty lock user ID list 679 680 * change file access 00131160 ABS 681 HALTS1160 EQU SHALT+01160 saved file not found in DIR 00131161 ABS 682 HALTS1161 EQU SHALT+01161 bogus access type 00131162 ABS 683 HALTS1162 EQU SHALT+01162 bogus access type 00131163 ABS 684 HALTS1163 EQU SHALT+01163 saved file not found in DIR 00131164 ABS 685 HALTS1164 EQU SHALT+01164 bogus access type 00131165 ABS 686 HALTS1165 EQU SHALT+01165 bogus access type 00131166 ABS 687 HALTS1166 EQU SHALT+01166 bogus access type 00131167 ABS 688 HALTS1167 EQU SHALT+01167 bogus access type 00131168 ABS 689 HALTS1168 EQU SHALT+01168 bogus access type 00131169 ABS 690 HALTS1169 EQU SHALT+01169 bogus access type 0013116A ABS 691 HALTS116A EQU SHALT+0116A bogus access type 0013116B ABS 692 HALTS116B EQU SHALT+0116B bogus access type 0013116C ABS 693 HALTS116C EQU SHALT+0116C bogus access type 0013116D ABS 694 HALTS116D EQU SHALT+0116D bogus access type 695 696 * SAVE code 00131170 ABS 697 HALTS1170 EQU SHALT+01170 saved file was not found in DIR 00131171 ABS 698 HALTS1171 EQU SHALT+01171 bogus access code 00131172 ABS 699 HALTS1172 EQU SHALT+01172 bogus access code 700 701 * unsave code 00131180 ABS 702 HALTS1180 EQU SHALT+01180 saved file no longer in DIR 00131181 ABS 703 HALTS1181 EQU SHALT+01181 bogus return from LIMITCHECK 704 705 * UNEQUIP code 00131191 ABS 706 HALTS1191 EQU SHALT+01191 FCB use count went negative 00131192 ABS 707 HALTS1192 EQU SHALT+01192 saved file no longer in DIR 00131193 ABS 708 HALTS1193 EQU SHALT+01193 disk error while closing unit list 00131198 ABS 709 HALTS1198 EQU SHALT+01198 UCE not found either global or local 00131199 ABS 710 HALTS1199 EQU SHALT+01199 list went bad 0013119A ABS 711 HALTS119A EQU SHALT+0119A couldn't find path control element 0013119C ABS 712 HALTS119C EQU SHALT+0119C file use count went negative 713 714 * RENAME code 001311A0 ABS 715 HALTS11A0 EQU SHALT+011A0 saved file no longer in directory 716 717 * SHARE/UNSHARE 001311B0 ABS 718 HALTS11B0 EQU SHALT+011B0 saved file disappeared 001311B1 ABS 719 HALTS11B1 EQU SHALT+011B1 LIMITCHECK returned impossible error 001311B2 ABS 720 HALTS11B2 EQU SHALT+011B2 LIMITCHECK returned impossible error 721 722 * catalog information request 001311C0 ABS 723 HALTS11C0 EQU SHALT+011C0 serious error, saved file not in DIR 001311C1 ABS 724 HALTS11C1 EQU SHALT+011C1 serious error, saved file not in DIR 001311C2 ABS 725 HALTS11C2 EQU SHALT+011C2 garbage in share list 726 727 * set account attribute 001311D0 ABS 728 HALTS11D0 EQU SHALT+011D0 bad index, was okay 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 201 (HALTDEFS) F 13 Definitions for operating system halts 729 730 * XRQUREQ1, XRQUREQ2, XRQUREQ3, and XRQUREQ4 001311E0 ABS 731 HALTS11E0 EQU SHALT+011E0 couldn't find under program 001311E1 ABS 732 HALTS11E1 EQU SHALT+011E1 stop if under program disappeared 001311E2 ABS 733 HALTS11E2 EQU SHALT+011E2 couldn't get back to over program 001311E3 ABS 734 HALTS11E3 EQU SHALT+011E3 underprogram disappeared 001311E5 ABS 735 HALTS11E5 EQU SHALT+011E5 run unit not found 736 737 * user interrupt processor 00031200 ABS 738 HALTC1200 EQU CHALT+01200 control mode error 00031201 ABS 739 HALTC1201 EQU CHALT+01201 system process error 00031202 ABS 740 HALTC1202 EQU CHALT+01202 mem error giving int to CM 741 742 * Operator requests 00031210 ABS 743 HALTC1210 EQU CHALT+01210 attempt to log off nobody 00131211 ABS 744 HALTS1211 EQU SHALT+01211 FCBs left in PSA 001A1212 ABS 745 HALTZ1212 EQU ZHALT+01212 can't get rid of volume 001A1213 ABS 746 HALTZ1213 EQU ZHALT+01213 system was sleeping and another request came in 00131214 ABS 747 HALTS1214 EQU SHALT+01214 volume went busy when not possible 00031215 ABS 748 HALTC1215 EQU CHALT+01215 erroneous parameter from CM 00031216 ABS 749 HALTC1216 EQU CHALT+01216 underprocesses left at logoff 00131218 ABS 750 HALTS1218 EQU SHALT+01218 giveaway unit disappeared 751 752 * auth list requests 00131224 ABS 753 HALTS1224 EQU SHALT+01224 LIMITCHECK returned impossible error 00131225 ABS 754 HALTS1225 EQU SHALT+01225 test indicates big account after known not 00131226 ABS 755 HALTS1226 EQU SHALT+01226 now sez big account, previously not 00131227 ABS 756 HALTS1227 EQU SHALT+01227 LIMITCHECK returned impossible error 00131228 ABS 757 HALTS1228 EQU SHALT+01228 previous manager account now super account 00131229 ABS 758 HALTS1229 EQU SHALT+01229 previous manager account now super account 759 760 * process creation 00131230 ABS 761 HALTS1230 EQU SHALT+01230 illegal device type in FCB 00131231 ABS 762 HALTS1231 EQU SHALT+01231 illegal device type in FCB 763 764 * AFTMANGLE 00061250 ABS 765 HALTF1250 EQU FHALT+01250 quit for full AFT or IDX 00131251 ABS 766 HALTS1251 EQU SHALT+01251 table overflow while expanding, impossible 00131252 ABS 767 HALTS1252 EQU SHALT+01252 dup entry while expanding table, impossible 00041253 ABS 768 STOPD1253 EQU DHALT+01253 disk error 00041254 ABS 769 HALTD1254 EQU DHALT+01254 both security blocks bad 00131255 ABS 770 HALTS1255 EQU SHALT+01255 new table too small while expanding IDX or AFT 771 772 * HOURPROC 00041261 ABS 773 HALTD1261 EQU DHALT+01261 both security blocks bad 002A1270 ABS 774 HLTSV1270 EQU SVHLT+01270 authorization to use system has expired 775 776 * Backup and Recovery requests 00131280 ABS 777 HALTS1280 EQU SHALT+01280 file gone when expanding to large RAF 00041281 ABS 778 HALTD1281 EQU DHALT+01281 could read neither copy of security block 00131282 ABS 779 HALTS1282 EQU SHALT+01282 file gone when expanding to large RAF 780 781 * Initial process 00027001 ABS 782 HALTB7001 EQU BHALT+07001 couldn't mount pack label 00027002 ABS 783 HALTB7002 EQU BHALT+07002 system volume could not be mounted 00027003 ABS 784 HALTB7003 EQU BHALT+07003 account finder table is bad 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 202 (HALTDEFS) F 13 Definitions for operating system halts 00027004 ABS 785 HALTB7004 EQU BHALT+07004 could not fit IDX into brand new AFT 00027007 ABS 786 HALTB7007 EQU BHALT+07007 no CM corresponding to system 787 * This stop is only temporary 00027008 ABS 788 STOPB7008 EQU BHALT+07008 couldn't write to terminal.config file 00027009 ABS 789 HALTB7009 EQU BHALT+07009 error on control mode file 0002700A ABS 790 HALTB700A EQU BHALT+0700A lun no longer in list 0002700B ABS 791 HALTB700B EQU BHALT+0700B could not unequip CM file 0002700C ABS 792 HALTB700C EQU BHALT+0700C not enough free space on system volume 0013700D ABS 793 HALTS700D EQU SHALT+0700D device type not in table when building HARDWARE.SYS 0013700E ABS 794 HALTS700E EQU SHALT+0700E could not find file in UDIR 795 796 * unauthorized resource module halts in initial. 797 * Form is SVHLT + 07000 + * 100 + 798 * * 10 + <0 for controller, 1 for units> 002A7000 ABS 799 HLTSV7000 EQU SVHLT+07000 system operation is no longer authorized 002A7100 ABS 800 HLTSV7100 EQU SVHLT+07100 unauthorized MCU 002A7101 ABS 801 HLTSV7101 EQU SVHLT+07101 more memory than authorized 002A7200 ABS 802 HLTSV7200 EQU SVHLT+07200 unauthorized CPU 002A7300 ABS 803 HLTSV7300 EQU SVHLT+07300 unauthorized PPU 002A7310 ABS 804 HLTSV7310 EQU SVHLT+07310 unauthorized disk controller 002A7311 ABS 805 HLTSV7311 EQU SVHLT+07311 unauthorized disk unit 002A7320 ABS 806 HLTSV7320 EQU SVHLT+07320 unauthorized line printer (controller & unit) 002A7380 ABS 807 HLTSV7380 EQU SVHLT+07380 unauthorized comm controller 002A7381 ABS 808 HLTSV7381 EQU SVHLT+07381 unauthorized comm port board 002A7390 ABS 809 HLTSV7390 EQU SVHLT+07390 unauthorized mag tape controller 002A7391 ABS 810 HLTSV7391 EQU SVHLT+07391 unauthorized mag tape unit 002A73A0 ABS 811 HLTSV73A0 EQU SVHLT+073A0 unauthorized cartridge tape controller 002A73A1 ABS 812 HLTSV73A1 EQU SVHLT+073A1 unauthorized cartridge tape unit 002A73B0 ABS 813 HLTSV73B0 EQU SVHLT+073B0 unauthorized video tape controller 002A73B1 ABS 814 HLTSV73B1 EQU SVHLT+073B1 unauthorized video tape unit 20 INPUT PAGEDEFS definitions for memory allocation 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 203 (PAGEDEFS) F 14 Virtual Page Definitions 4 5 ********************************************************************************** 6 * * 7 * Monitor Virtual Pages * 8 * * 9 * Page 0 [00000] * 10 * Physical page zero is mapped into monitor virtual page * 11 * zero during bootstrap and power fail recovery operations and * 12 * contains the code (either bootstrap or power up) and * 13 * appropriate tables. This page file entry is cleared by the * 14 * system at the end of the initial code and remains excluded * 15 * during normal system operation except when it is * 16 * specifically mapped in for the updating of the page map on * 17 * physical page zero (PFMAP). Because this virtual page is * 18 * illegal to reference (in general) any bug that causes a * 19 * reference to this page will be trapped in the page fault * 20 * processer rather than continuing to trash monitor memory. * 21 * Page 1 [00400] (CPUPAGE) * 22 * This virtual page is used only for variables local to a * 23 * single CPU including the Interrupt Vector Table (IVT). Each * 24 * CPU must have its own distinct physical page. However, * 25 * since a CPU needs only a small number of local variables, * 26 * the remainder of the physical page is available for other * 27 * use. Therefore, each physical page used as a CPU page is * 28 * also mapped into the page file in another virtual memory * 29 * location common to all CPUs and the remaining space in the * 30 * physical page is used for other tables or free storage by * 31 * using the virtual addresses that are common to all CPUs. * 32 * This page should not be pre-initialized by assembling * 33 * anything into it since it is not loaded by initial. * 34 * * * * * 35 * Window pages are pages in the monitor address space * 36 * that are treated like user virtual pages. That is, they * 37 * have their page file locations loaded and unloaded along * 38 * with the rest of the users pages, and page faults cause a * 39 * swap in. They are provided so that the virtual monitor has * 40 * virtual buffer space for each user. * 41 * Page 2 [00800] (WNDO1) * 42 * Page 3 [00C00] (WNDO2) * 43 * These virtual pages are used for the executive request * 44 * processor windows. * 45 * Page 4 [01000] (WNDO3) * 46 * This is the window used by any routines that might run * 47 * under the XREQ processor, such as the ADT manager. The XREQ * 48 * processor windows must not be disturbed by subsidiary * 49 * routines, so this window is provided as a scratch location * 50 * for them. * 51 * Page 5 [01400] (WNDO4) * 52 * This window is used by the mass storage driver routines * 53 * that deal with error correction and page copying. It may * 54 * also be used by other I/O devices. * 55 * Page 6 [01800] (CIX) * 56 * This virtual page is used as a temporary page file * 57 * location for conversations with the I/O devices. * 58 * * * * * 59 * Each resident page from 7 on is mapped to * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 204 (PAGEDEFS) F 14 Virtual Page Definitions 60 * exactly the same physical page by the page * 61 * map in all of the CPUs. * 62 * Page 7 [01C00] (HEADPAGE) * 63 * This virtual page is used for inter-CPU communication * 64 * (the system variable area). Each CPU maps the same physical * 65 * page into this location. Since the system variable area * 66 * does not use the entire area, the remainder of this physical * 67 * page is available for other use. In order to waste as * 68 * little space as possible, the physical page used here * 69 * contains a block of CPU local variables (mapped into page 1 * 70 * of only one CPU), the block of system variables (mapped into * 71 * page 7 of all CPUs), and the remaining space is used for * 72 * free storage (using the page 7 virtual addresses which are * 73 * common to all CPUs). * 74 * Page 8 [02000] (INITIAL) * 75 * This virtual page contains the initialization routines. * 76 * After system initialization, it is set excluded and the * 77 * physical page is available for use. The virtual page bit * 78 * in the AVPAGES array is set so that the monitor virtual * 79 * page may be subsequently used for free space. * 80 * * * * * 81 * Resident Pages * 82 * The resident monitor consists of code that must be * 83 * available at all times to service interrupts. This * 84 * includes: * 85 * I/O drivers and support routines * 86 * Interrupt handlers for PF, XREQ, parity error, IAPR * 87 * Code associated with the scheduling and dispatching * 88 * of processes. * 89 * During the bootstrap operation, the page file is * 90 * loaded so that each virtual page needed by the operating * 91 * system (as determined from the CCB) is allocated in the * 92 * next available page in the first memory. The bootstrap * 93 * then reads in the operating system. In initialization, * 94 * the system code may be spread between the available * 95 * memories (see the routine SPREADSYS in INITIAL). Once * 96 * this (potential) move is completed the physical pages are * 97 * completely locked in for the duration of the system * 98 * operation. The page files of each CPU are all set to * 99 * point to the physical memory as appropriate and this * 100 * mapping remains throughout system operation. A table is * 101 * maintained on page zero so that this mapping may be * 102 * restored following a power failure. * 103 * Page 9 [02400] * 104 * This is the first page of resident code. * 105 * * * * * 106 * "Virtual Monitor" * 107 * The original plan for the operating system was for much * 108 * of the OS code to be swappable. There was no particular * 109 * problem in the page fault processor since the mechanism to * 110 * load a page was essentially the same as for any user page. * 111 * However, in order for this to work there can be no locks * 112 * held during execution of any code that might page fault. We * 113 * originally attempted to move the code requiring locks into * 114 * the resident part of the system and deal with the critical * 115 * region problem by calling the code that was guaranteed to be * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 205 (PAGEDEFS) F 14 Virtual Page Definitions 116 * resident. Even this proved to be troublesome, however, * 117 * since a page fault could occur during the calling sequence. * 118 * Certain code (such as xGETMEM) has already locked a critical * 119 * region before returning for parameters. * 120 * In the end, the advent of 8 MB SMUs obviated the need * 121 * to expend any more energy on an intractable problem with, at * 122 * best, marginal improvement of the memory situation. * 123 * * * * * 124 * Monitor Table Space * 125 * The operating system constructs essentially all of its * 126 * "tables" in the form of linked lists. Routines called * 127 * xGETMEM and xFREEMEM are used to allocate storage for use * 128 * in these linked lists. See those routines for a description * 129 * of the methods used to manage the monitor free space. This * 130 * free space is divided into two major subdivisions. First, * 131 * that which is global and which must be present at essentially * 132 * all times that operating system code is running. This space * 133 * is limited by the size of the monitor address space. Second, * 134 * that space which is required only while the operating system * 135 * is dealing with a particular user. We have allocated four * 136 * pages of virtual address space that are mapped and unmapped * 137 * as required. See the description which follows labeled * 138 * "user table space". * 139 * The initial process only runs when the system is first * 140 * booted. This code may occupy up to two pages. Since * 141 * monitor address space is scarce, the last operation of the * 142 * initial process is to make the pages that it occupies * 143 * available in the AVPAGES array. * 144 * The virtual addresses from the end of the initial process * 145 * pages to the start of the user memory lists are all available * 146 * for allocation as free storage addresses. A bit array called * 147 * AVPAGES indicates whether a virtual page is in use or not. * 148 * These virtual pages are all managed by the dispatcher code * 149 * FSXPAND (or the initial code FREECHECK). When a physical * 150 * page is allocated to a particular monitor virtual page, the * 151 * appropriate page map value is loaded into the PFMAP array * 152 * on page zero (which is especially mapped and unmapped for * 153 * this update), and the appropriate monitor page file location * 154 * is loaded in all CPUs (and remains loaded during normal * 155 * system operation). * 156 * FBI Window * 157 * This window is used for any references to a resident * 158 * FBI. * 159 * There exists an FBI for each page. These FBIs are read * 160 * on disk reads, possibly modified while the page is resident, * 161 * and written on disk writes. Each FBI must be allocated * 162 * space for the entire time that the corresponding page is * 163 * resident. In order to avoid consuming monitor address space * 164 * for these FBIs they are mapped only as needed. That is, a * 165 * single virtual page is reserved to point to the physical * 166 * page containing the FBI currently of interest. The initial * 167 * code allocates an FBI each time it generates a PPL for a * 168 * page. The PPL indexes a table of page map values (rather * 169 * than attempting to store PMVs in each PPL) and provides the * 170 * offset into the physical page. * 171 * There are special provisions in crashdump to save the * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 206 (PAGEDEFS) F 14 Virtual Page Definitions 172 * pages containing the FBIs. * 173 * User Memory Lists * 174 * In order to allow the best use of the available monitor * 175 * address space, we have segregrated the system lists into two * 176 * groups, those that must be addressable at all times and * 177 * those that may be unmapped when the associated user is not * 178 * dispatched. Four pages of monitor address are reserved for * 179 * these mappable user lists and special GETMEM and FREEMEM * 180 * routines are provided to manage the free space. The * 181 * routines MAPINMEM and MAPOUTMEM are provided to load and * 182 * unload the appropriate page file locations. A map-in is * 183 * normally done when the user page file is loaded and a * 184 * map-out is done when the page file is unloaded. A few * 185 * routines (such as WHICHHUNT) need access to the user lists * 186 * while the user is not dispatched so they call MAPINMEM and * 187 * MAPOUTMEM directly. * 188 * There are special provisions in crashdump to save the 4 * 189 * pages from each CPU. * 190 * * * * * 191 * Monitor Page File Appearance * 192 * 1) Everything not explicitly mentioned is marked * 193 * 'illegal to reference'. * 194 * 2) The monitor CPU pages are always loaded in * 195 * PF81 RW. Each CPU has a different physical * 196 * page. They are assigned during boot and do * 197 * not move. * 198 * 3) The headpage is always loaded in PF87 RW. * 199 * 4) All monitor code is loaded RO. * 200 * 5) All monitor table space is always loaded RW. * 201 * * * * * 202 * The following pages are subject to memory management, * 203 * which means that a page might not be loaded into the page * 204 * file even though its process has been dispatched. * 205 * * 206 * 6) Monitor windows are loaded RO or RW as appropriate * 207 * only when a process having them mapped has been * 208 * dispatched. * 209 * 7) User pages are loaded RO or RW as appropriate only * 210 * when a process having them mapped has been dispatched. * 211 * * 212 ********************************************************************************** 213 214 ORG ZERO(WPP) virtual page zero is not used 215 * except for boot and power up processing 216 00000400 217 CPUPAGE BSS WPP individual CPU information page 00000081 ABS 218 PNCPUPAGE EQU MONPF+(CPUPAGE DISPW ZERO)/WPP page number 219 00000800 220 WNDO1 BSS WPP primary window for xreq buffer system 00000082 ABS 221 PNWNDO1 EQU MONPF+(WNDO1 DISPW ZERO)/WPP page number 222 00000C00 223 WNDO2 BSS WPP secondary window 00003070 BYTE 224 PASIGBITS EQU BITS 24:30 all but low order bit of PAVPN 00000083 ABS 225 PNWNDO2 EQU MONPF+(WNDO2 DISPW ZERO)/WPP page number 00000041 ABS 226 PNWNDO12 EQU PNWNDO2/PASIGBITS bits shared by PNWNDO1, PNWNDO2 227 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 207 (PAGEDEFS) F 14 Virtual Page Definitions 00001000 228 WNDO3 BSS WPP window for ADT routines 00000084 ABS 229 PNWNDO3 EQU MONPF+(WNDO3 DISPW ZERO)/WPP page number 230 00001400 231 WNDO4 BSS WPP mass storage driver window 00000085 ABS 232 PNWNDO4 EQU MONPF+(WNDO4 DISPW ZERO)/WPP page number 233 00001800 234 CIX BSS WPP channel index page 00000086 ABS 235 PNCIX EQU MONPF+(CIX DISPW ZERO)/WPP page number 236 00001C00 237 HEADPAGE BSS WPP inter-cpu variable page 00000087 ABS 238 PNHEADPAGE EQU MONPF+(HEADPAGE DISPW ZERO)/WPP page number 00001C80 239 FBIPOINTRS EQU HEADPAGE(080) table of PMVs for pages holding FBIs 240 00002000 241 INITPAGE BSS WPP this whole page is reserved for initialization 00000088 ABS 242 PNINITPAGE EQU MONPF+(INITPAGE DISPW ZERO)/WPP page number 243 244 ORG NPS*WPP-(MAXMAPVALS+1)*WPP FBI window 0001EC00 245 PPLWINDOW BSS WPP for mapping in pages of FBIs for PPLs 000000FB ABS 246 PNPPLWNDO EQU MONPF+(PPLWINDOW DISPW ZERO)/WPP page number 247 248 ORG NPS*WPP-(MAXMAPVALS*WPP) first "user virtual" page 0001F000 249 USERMEM LABEL page reserved for user memory lists 000000FC ABS 250 PNUSERMEM EQU MONPF+(USERMEM DISPW ZERO)/WPP page number 251 BSS WPP LOG 2 area for free memory lists 0000000A ABS 252 UMEMSIZE EQU DISPW USERMEM number of lists 253 BSS 3 filler 0001F00D 254 UMEMXTRA BSS 1 pointer to reserve memory 00000007 ABS 255 XALOG EQU 7 log size of reserve memory 0001F00E 256 UMEMPSA BSS 1 PSA associated with this storage 0001F00F 257 UMEMLOCK BSS 1 lock word for user free storage 258 * BSS (WPP-DISPW USERMEM)+(MAXMAPVALS-1)*WPP the rest of the area 259 260 ORG CPUPAGE restore LC to safe place 22 INPUT CPUPAGE definitions of CPUs variables 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 208 (CPUPAGE) F 15 CPU Page Definitions 3 4 ********************************************************************************** 5 * * 6 * RESIDENT TABLE DEFINITIONS * 7 * * 8 ********************************************************************************** 9 10 11 ********************************************************************************** 12 * * 13 * CPUPAGE * 14 * Due to the nature of this multi-processor system, each * 15 * CPU requires a small number of private variables for use * 16 * during interrupt processing, etc. This is provided by * 17 * having each CPU page file location CPUPAGE point to a * 18 * different physical page. Each CPU then has temporary * 19 * storage areas that are totally isolated from any other CPU, * 20 * but the exact same code will run properly on any CPU * 21 * without indexing tables by CPU number. Following are * 22 * definitions for this page. * 23 * * 24 ********************************************************************************** 25 26 ********************************************************************************** 27 * * 28 * Interrupting Devices Mask * 29 * This word is defined by the hardware. It is read up * 30 * by each CPU. Bits 0:15 contain a one bit for each * 31 * corresponding slot that may interrupt. This tells the CPU * 32 * what slots to poll when the bus interrupt line is asserted. * 33 * This word also contains in bits 28:31 the slot number of * 34 * the SSU that is running the front panel. This is so that * 35 * the CPU microcode knows where to send notice of any * 36 * problems that it might encounter. * 37 * * 38 ********************************************************************************** 39 40 ORG CPUPAGE(1) machine defined locations 00000401 41 INTABLSLOT BSS 1 mask of slots that may interrupt 42 * and SSU slot number 43 44 ********************************************************************************** 45 * * 46 * Interrupt Vector Table * 47 * In each entry, the first word is the new console area * 48 * pointer. The second is the new program counter. Each is * 49 * right justified. The rest is unused. * 50 * When an interrupt occurs, the CPU stores the registers * 51 * according to its current console register, picks up a new * 52 * CA and PC from the IVT, fixes the MSR and PSR, and sets * 53 * several other registers as described in the comments. * 54 * * 55 ********************************************************************************** 56 00000402 57 IVTPWFL BSS 2 POWER FAILURE 58 * R2:=why 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 209 (CPUPAGE) F 15 CPU Page Definitions 59 * 1 - power fail 60 * 2 - temp fault 61 * R4:=previous CA address 00000404 62 IVTMEMPAR BSS 2 MEMORY ERROR 63 * R2:=why 64 * 0 - no response, inst fetch 65 * 1 - abnormal data, inst fetch 66 * 2 - no response, opnd fetch 67 * 3 - abnormal data, opnd fetch 68 * 4 - no response, interrupt poll 69 * 5 - abnormal data, interrupt poll 70 * R3:=where (18 bit virtual address) 71 * ( or slot number if R2 = 4 or 5 ) 72 * R4:=previous CA address 00000406 73 IVTPAGE BSS 2 PAGE FAULT 74 * R2:=why 75 * 1 - read from excluded 76 * 2 - write on read-only 77 * 3 - write on excluded 78 * R3:=where (8 bit page file address) 79 * R4:=previous CA address 00000408 80 IVTIOINT BSS 2 I/O INTERRUPTS 81 * R2:=IP response 82 * R3:=interrupting slot number 83 * R4:=previous CA address 0000040A 84 IVTIAPR BSS 2 ASSOCIATED PROCESSOR INTERRUPT 85 * no data is remembered, only the 86 * fact that an IAPR was requested 87 * R4:=previous CA address 0000040C 88 IVTXREQ BSS 2 XREQ INSTRUCTION 89 * R2:=trapping opcode ( 08 ) 90 * R3:=operand of instruction 91 * R4:=previous CA address 0000040E 92 IVTUERR BSS 2 USER ERROR CONDITIONS 93 * R2:=why (see the UINT codes) 94 * R3:=parameter to why 95 * R4:=previous CA address 00000410 96 IVTXCALL BSS 2 XCALL TRAPS 97 * R2:=instruction image 98 * R3:=operand 99 * R4:=previous CA address 100 101 * end of IVT 102 00000412 103 CPPSA BSS 1 pointer to PSA of session being 104 * run by this CPU (zero if none) 00000413 105 CMAPPSA BSS 1 pointer to the PSA whose virtual free 106 * storage is currently mapped (zero if 107 * none). 00000414 108 CPCUPC BSS 1 pointer to UPC of process being 109 * run by this CPU (zero if none) 00000415 110 OURSLOT BSS 1 this CPUs slot number 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 210 (CPUPAGE) F 15 CPU Page Definitions 112 113 ********************************************************************************** 114 * * 115 * The following array is used to save the page map * 116 * values for the virtual free storage required by this user * 117 * on this CPU. The reason we need to save this away is so * 118 * that during a crashdump we can find each of these pages and * 119 * write them out to the crashdump file. Each time that a new * 120 * user is run and his free storage mapped in we update this * 121 * array. CAUTION!!! Warning, the boot code expects, nay, * 122 * demands, that this array begin at a particular word * 123 * address. If this changes this then the boot code must also * 124 * be modified or beware the consequences. Currently this * 125 * address is #41A. * 126 * * 127 ********************************************************************************** 128 129 BSS 4 allow a little room 0000041A 130 UMAPVALS BSS MAXMAPVALS array to store the free storage page 131 * map values. 132 133 * Console area used by this processor for the dispatcher. 134 0000041E 135 PCONSOLE BSS CALNTH 136 0000042D 137 RESSTAKTOP BSS 32 stack area for some resident routines 0000044D 138 RESSTAK LABEL 139 0000044D 140 CPXTRACA BSS 1 extra CA/Stack for this CPU 141 142 * Flag to indicate successful power fail execution 143 0000044E 144 POWERFLAG BSS 1 0 during normal operation, 145 * if positive, powerfail shutdown was completed, 146 * and this word points to the interrupted CA 147 * if negative, power fail restart is in progress. 0000044F 148 POWERUPLOC BSS 1 At power-fail time, where to resume interrupted routine 00000450 149 POWERRTNPC BSS 1 At power-up time, location where routine was interrupted 150 151 * Temps used by the page file routines 152 00000451 153 VMTSSLA BSS 1 00000452 154 VMTSSLB BSS 1 155 156 * Temps used by getmem and freemem routines. Please note 157 * that these variables MUST NOT be altered without holding MEMLOCK. 158 00000453 159 GETMR2 BSS 2 00000454 160 GETMR3 EQU GETMR2(1) 00000455 161 GETMREGS BSS 2 00000457 162 GETMR7 BSS 1 163 00000453 164 FREMR2 EQU GETMR2 00000454 165 FREMR3 EQU GETMR3 00000455 166 FREMR4 EQU GETMREGS 00000457 167 FREMR7 EQU GETMR7 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 211 (CPUPAGE) F 15 CPU Page Definitions 168 169 170 * These variables are for routines that are called by getmem and freemem 171 * so that we do not need to use the stack. This is because various 172 * callers may not have a stack during system startup, most notably 173 * the I/O drivers. 174 00000458 175 MEMVAR1 BSS 1 used by CPUPFLOAD routine 00000459 176 MEMVARPC BSS 1 place to store return address 0000045A 177 MEMVARPC2 BSS 1 additional storage for return addresses 0000045B 178 MEMVAREG1 BSS 1 additional area to save away registers 0000045C 179 MEMVAREG2 BSS 1 ditto!!! 180 181 * Variable locations used by the FINDVP routine 182 0000045D 183 FNDVPLPSA BSS 1 => PSA of eventual VM list 0000045E 184 FNDVPFPN BSS 1 page number originally searched for 0000045F 185 FNDVPPN BSS 1 final page number looked for 00000460 186 FNDVPVMR BSS 1 => root of VM list containing found VM element 00000461 187 FNDVPUPC BSS 1 => UPC where VM element was found 0 means not indirect reference 188 189 * Variable for memory parity error routine 190 00000462 191 MEMERRFLAG BSS 1 1 sez processing parity error 192 193 * Temps used by performance monitors 194 00000463 195 DYNLINK BSS 1 return link for DYNMON 00000464 196 DYNTEMP BSS 1 temp for DYNMON 197 198 * Temp used by MAPINFBI to save away return address 199 00000465 200 MFBILAST BSS 1 last call to MAPINFBI 00000466 201 MOFBILAST BSS 1 last call to MAPOUTFBI 202 203 BSS 4 room to patch in additional CPU temps 204 0000006B DISP 205 CPULNTH EQU DISP CPUPAGE amount of this page needed for 206 * the variables local to a CPU 207 208 ********************************************************************************** 209 * * 210 * The range of virtual addresses represented by the * 211 * remainder of this page is never used. In order not to * 212 * waste the physical memory, each physical page used as a * 213 * CPUPAGE is mapped into another location in the address * 214 * space: one that may be shared by all of the CPUs. The * 215 * remaining unused space on the physical page is then used * 216 * through that alias. * 217 * * 218 ********************************************************************************** 23 INPUT COREDEFS in-core structure definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 212 (COREDEFS) F 16 Resident Data Structure Definitions 3 4 ********************************************************************************** 5 * * 6 * HEADPAGE * 7 * This page contains constants, variables, and list * 8 * control elements that are accessable to every CPU on the * 9 * system at the same address. * 10 * Since this physical page is also mapped into the page * 11 * file at another virtual address by one CPU and used as its * 12 * CPU page, we skip over the variables that we reference * 13 * through that alias. * 14 * * 15 ********************************************************************************** 16 17 ORG HEADPAGE(CPULNTH) skip over CPU #1 private variables 18 19 ********************************************************************************** 20 * * 21 * The following flag is set to zero when the system is * 22 * totally together and ready to accept useful work. * 23 * * 24 ********************************************************************************** 25 01C6B 00000001 26 BOOTFLAG VFD 1+STORE booting in progress 27 28 ********************************************************************************** 29 * * 30 * Pointers for system free storage * 31 * The system builds most of its tables from system free * 32 * storage elements. The space is managed by a binary buddy * 33 * system. The blocks are arranged carefully on power of 2 * 34 * address boundaries so that the address tells whether any * 35 * given block is the first half or last half of its parent. * 36 * Note that these lists are terminated by a word which * 37 * has zeros in the link field (a legal list terminator) but * 38 * has a high bit on. This is so that the search for a buddy * 39 * in FREEMEM (via RLSHLE) will never fall off the end of the * 40 * list, but will stop at the insertion point, even if the * 41 * insertion point is at the end of the list. * 42 * There are no whole pages placed into the whole page * 43 * lists. Instead, FREEMEM will place such pages into the * 44 * systems idle page list. When GETMEM needs a whole page to * 45 * break up, it finds it in the idle page list. GETMEM has no * 46 * provisions for failure on an attempt to find a whole page * 47 * list. Therefore, the system must ensure that the idle page * 48 * list always contains sufficient pages for GETMEM. * 49 * * 50 ********************************************************************************** 51 01C6C 00000000 52 MEMLOCK VFD STORE lock word for the FS lists 53 01C6D 01000000 54 MEMLIST VFD 01000000 1 word blocks 01C6E 01000000 55 VFD 01000000 2 01C6F 01000000 56 VFD 01000000 4 01C70 01000000 57 VFD 01000000 8 01C71 01000000 58 VFD 01000000 16 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 213 (COREDEFS) F 16 Resident Data Structure Definitions 01C72 01000000 59 VFD 01000000 32 01C73 01000000 60 VFD 01000000 64 01C74 01000000 61 VFD 01000000 128 01C75 01000000 62 VFD 01000000 256 01C76 01000000 63 VFD 01000000 512 0000000A DISP 64 MEMLISTMAX EQU DISP MEMLIST indicate largest allowable request 65 * The following must be true so storage handlers can share code 66 ASSERTEQ MEMLISTMAX,UMEMSIZE 66 BSS MEMLISTMAX-UMEMSIZE error if MEMLISTMAX < UMEMSIZE 66 BSS UMEMSIZE-MEMLISTMAX error if UMEMSIZE < MEMLISTMAX 67 68 69 ********************************************************************************** 70 * * 71 * Physical Page Element List for Pages Being Used for Free Storage. * 72 * When a whole page is to be used the PPL is first * 73 * removed from the whole page list and placed into this list. * 74 * If a whole page is ever recombined, it is first found in * 75 * this list and then moved to the whole page list. * 76 * This list does not contain a PPL for any of the * 77 * CPUPAGEs, since they obviously may not be recombined. * 78 * Also, during INITIAL, PPLs are generated and use up a * 79 * substantial amount of free storage. Since PPLs are not * 80 * freed, these pages can never be recombined. The PPLs for * 81 * those pages are therefore removed from this list and freed. * 82 * They are then almost certainly re-used as a PPL * 83 * immediately. * 84 * * 85 ********************************************************************************** 86 01C77 00000000 87 FSPPLIST VFD STORE inuse free storage PPL holder 88 89 ********************************************************************************** 90 * * 91 * Physical page elements for whole available free pages. * 92 * The reason this list exists is for the VGETMEM and * 93 * VFREEMEM routines. Since these routines give free storage * 94 * to one user only, we had to separate pages to be used by * 95 * the system as a whole and those by a user. You will note * 96 * that MEMLIST no longer contains pointers to whole pages, * 97 * the pointer should always be null. Now whenever a whole * 98 * page is needed we come here and get one for the user. A * 99 * special note, when the system needs a whole page for the * 100 * BLDPROCESS routine we get it directly from the idle page * 101 * list. The lock, WPAGELOCK, must be held when searching * 102 * and/or modifying the whole page list. * 103 * * 104 ********************************************************************************** 105 01C78 00000000 106 WPAGELOCK VFD STORE lock for the whole page list 01C79 00000000 107 WHOLEPAGE VFD STORE whole page PPL holder 108 109 ********************************************************************************** 110 * * 111 * FREE STORAGE PAGE COUNT * 112 * This count word is the excess (positive) or deficiency * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 214 (COREDEFS) F 16 Resident Data Structure Definitions 113 * (negative) of whole pages in the whole page list. A count * 114 * of zero causes no action. Otherwise, the dispatcher * 115 * attempts to move pages between the idle page list and the * 116 * whole page list to ensure the proper amount of free * 117 * storage. * 118 * The count word is decremented by GETMEM when a whole * 119 * page is split up. It is incremented by FREEMEM when a * 120 * whole page is produced. It is adjusted by the dispatcher * 121 * when a page is moved to or from the idle list. The count * 122 * may also be adjusted by a process (such as the comm. * 123 * processor) in order to alter the amount of available free * 124 * memory. * 125 * Some special circumstances exist during initial. * 126 * Since the DISPATCHER is not running, INITIAL must * 127 * occasionally put another idle page into WHOLEPAGE. GETMEM * 128 * busily decrements this count whenever it breaks one up. * 129 * After INITIAL has run to completion, it sets this word to * 130 * indicate to the DISPATCHER how many more whole pages are * 131 * needed for the system operation. * 132 * * 133 ********************************************************************************** 134 01C7A 00000000 135 FSXCOUNT VFD STORE - 136 137 ********************************************************************************** 138 * * 139 * PPL FBI PAGE MAP TABLE * 140 * To conserve monitor virtual address space, the FBIs * 141 * associated with Physical Page Elements (PPLs) are kept * 142 * apart from the the PPLs themselves in resident blocks that * 143 * are not always mapped. Access to an FBI is gained by * 144 * mapping in the appropriate block using the PM values in * 145 * PPLPFMAP and using a displacement into that block to locate * 146 * the FBI itself. * 147 * INITIAL sets up PPLPFMAP when it processes a memory * 148 * board. PPLPMINDX is the index into PPLPFMAP that is * 149 * currently being used. If non-zero, the number in that * 150 * table location is the PM value of the block currently being * 151 * allocated for FBIs. PPLPMDISP is the displacement into that * 152 * block of the next allocatable FBILNTH words. INITIAL * 153 * stores into each PPL it builds the index and displacement * 154 * for that PPLs FBI. The PPLWINDOW virtual page is used to * 155 * map in the blocks. * 156 * * 157 ********************************************************************************** 158 159 ORG FBIPOINTRS(-2) force map to defined location 160 01C7E 00000000 161 PPLPMINDX VFD 0 current index into PPLPFMAP 01C7F 00000000 162 PPLPMDISP VFD 0 current disp into current block 000003F4 ABS 163 PPLMAXDISP EQU ((WPP/FBILNTH)-1)*FBILNTH last FBI in block 00000042 ABS 164 PPLMAPSIZE EQU 66 66 blocks = 24 MB 00001C80 165 PPLPFMAP BSS PPLMAPSIZE table of PM values for PPL FBIs 166 167 ********************************************************************************** 168 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 215 (COREDEFS) F 16 Resident Data Structure Definitions 169 * USED ADDRESS SPACE ARRAY * 170 * This array has one bit for every monitor virtual page. * 171 * Set bits indicate that the virtual page address is * 172 * available for use ( usually as a free storage address ). * 173 * Pages omitted in the assembled words are: * 174 * page 0, CPUPAGE, WNDO1, WNDO2, * 175 * WNDO3, WNDO4, CIX, HEADPAGE, * 176 * INITPAGE, PPLWINDOW, and the USERPAGES * 177 * Other pages are removed by the initial routines. * 178 * MAXMAPVALS controls the number of pages available for user * 179 * virtual free storage. This value also controls the area * 180 * reserved in the PSA for page map values that map virtual * 181 * pages to physical pages. * 182 * * 183 ********************************************************************************** 184 00401CC2 185 AVPAGES BSSB 0 set up array of 1 bit elements 01CC2 FFFFFFFF 186 VFDB 9:0,23:-1 01CC4 FFFFFFFF 187 VFD -1,-1 01CC5 00000000 188 VFDB (WORDLNTH-1)-MAXMAPVALS:-1,1:0,MAXMAPVALS:0 01CC6 00481CBE 189 PAVPAGES PTR AVPAGES(-MONPF) pointer to above bit array 190 191 ********************************************************************************** 192 * * 193 * The monitor from time to time must load up the * 194 * physical page zero page file location in order to adjust * 195 * the power fail tables. The page map value is stored here. * 196 * * 197 ********************************************************************************** 198 01CC7 00000000 199 PAGEZERO VFD STORE page map value for physical/virtual page zero 01CC8 00000000 200 TOTALPAGES VFD STORE total pages of memory in system 201 202 ********************************************************************************** 203 * * 204 * Parity error recovery information * 205 * Each page of the resident operating system has a * 206 * checksum word stored into the following table. Therefore, * 207 * if only one word goes bad, we can reconstruct it from the * 208 * checksum and the other words on the page. The checksum is * 209 * the XOR of all of the words on the page. * 210 * There are also a number of circumstances that cause * 211 * "flakey" parity error interrupts, for which recovery is * 212 * neither possible nor necessary. When we get one of these, * 213 * we save the page file value and the time of the interrupt * 214 * below. If we get a second one with the same page file * 215 * value within 10 seconds of the first one, we declare the * 216 * device to be very flakey and halt. * 217 * * 218 ********************************************************************************** 219 00000028 ABS 220 MAXMEMCKS EQU 40 maximum words of memory checksums 01CC9 00000000 221 MEMCHKLOCK VFD STORE 1 iff a CPU attempting an XOR recovery 00001CCA 222 MEMCKSUM BSS MAXMEMCKS checksum words 223 * WARNING! Must have at least as 224 * many words here as there are 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 216 (COREDEFS) F 16 Resident Data Structure Definitions 225 * pages in the resident operating 226 * system. 01CF2 00000000 227 MPEPFILE VFD STORE page file of last flakey interrupt 01CF4 00000000 228 MPEDATE VFD STORE,STORE date and time of last flakey interrupt 229 230 ********************************************************************************** 231 * * 232 * CPU COMMUNICATIONS LOCK * 233 * In order to prevent awkward hangups, any STTB/LDFB * 234 * operation addressed to another CPU must be interlocked by * 235 * this word so that 2 CPUs never simultaneously try to * 236 * communicate with one another. * 237 * This applies to LDFB and STTB in any combination, * 238 * including STTB/STTB due to a subtle timing possibility (the * 239 * CPUs wait for RTO to go away before they will answer a * 240 * CBN). * 241 * Surprise! This also applies to regular loads and * 242 * stores if they are addressed to another CPU. Same reason * 243 * applies. * 244 * * 245 ********************************************************************************** 246 01CF5 00000000 247 CPUCOMLOCK VFD STORE communications lock 248 249 ********************************************************************************** 250 * * 251 * Bits are set in this word to indicate system tasks * 252 * that must be completed. See DISPATCHER for bit definitions * 253 * * 254 ********************************************************************************** 255 01CF6 00000000 256 FLAGS VFD STORE 257 258 * counters for CPUs on the system. 01CF7 00000000 259 CPUCOUNT VFD 0+STORE total number of CPUs 01CF8 00000000 260 CPUCOUNT1 VFD 0+STORE count of non-frozen CPUs 01CF9 00000000 261 CPUCOUNT2 VFD 0+STORE count of CPUs after power fail 01CFA 00000000 262 CPUINIT VFD 0+STORE count of CPUs on initial page 263 00001CFB 264 CPUSLOTS BSS NUMSLOTS slot numbers of all CPUs 265 01D0B 00000000 266 BUSYCPUS VFD STORE number of CPUs that are 267 * currently running a process 268 269 ********************************************************************************** 270 * * 271 * Flag to say that the system wishes to sleep. Zero sez * 272 * running, non-zero means halt when I/O finished. If * 273 * non-zero, PSA pointer for session doing sleep. * 274 * * 275 ********************************************************************************** 276 01D0C 00000000 277 SLEEPFLAG VFD 0+STORE non-zero sez sleep 278 279 ********************************************************************************** 280 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 217 (COREDEFS) F 16 Resident Data Structure Definitions 281 * If non-zero: the system will not answer the telephone, * 282 * processes will not be created by the CIA driver, and logon * 283 * requests will be refused. Initialized as one so that nothing * 284 * will happen until the system is together. Also set by SLEEP. * 285 * * 286 ********************************************************************************** 287 01D0D 00000001 288 ALLINHIBIT VFD 1+STORE non-zero sez inhibit 289 290 ********************************************************************************** 291 * * 292 * Every time that PLOCK is required to loop while * 293 * waiting for a lock, this location is incremented. * 294 * * 295 ********************************************************************************** 296 01D0E 00000000 297 DYNWAIT VFD 0+STORE dynamic wait count 298 299 ********************************************************************************** 300 * * 301 * The following lock controls the searching of and * 302 * suspending in SQFILEWAIT. That list's lock itself is not * 303 * sufficient since it gets locked and unlocked while being * 304 * searched and entered (the marvels of structured code). * 305 * This lock insures that the searching of the file wait list * 306 * and then the subsequent possible suspension does not allow * 307 * other processes to sneak through. * 308 * * 309 ********************************************************************************** 310 01D0F 00000000 311 FILEWAITL VFD STORE access to SQFILEWAIT controller 312 313 ********************************************************************************** 314 * * 315 * OPEN (and anybody else), when talking to the spooler, * 316 * sends an ID so that the response can be verified to be a * 317 * response to the sent request. This thing is referenced * 318 * with an INCL. We only wait so long for responses from the * 319 * spooler. The time-out value (in seconds) is kept here. * 320 * * 321 ********************************************************************************** 322 01D10 00000000 323 SPLRMSGID VFD 0 message ID to the spooler 01D11 00000258 324 SPLRTIME VFD 600 seconds to wait for response 325 326 ********************************************************************************** 327 * * 328 * Process Serial Number. Whenever a new underprocess is created * 329 * we need to give it a process serial number. The following * 330 * variable is incremented and the low-order 23 bits are used * 331 * as the serial number. Overflow is ignored because it * 332 * provides wrap-around. Duplicates are inevitable, however * 333 * they are unlikely between successive system boots. * 334 * * 335 ********************************************************************************** 336 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 218 (COREDEFS) F 16 Resident Data Structure Definitions 00000017 ABS 337 PSNFLDLN EQU 23 PSN field length 01D12 00000000 338 PROCSERNM VFD STORE process serial number 339 340 ********************************************************************************** 341 * * 342 * TSMSAGE is a counter that is incremented each time the * 343 * clock scheduling interrupt (TICK) occurs. This count is * 344 * used in determining if the processes waiting in MSWAIT * 345 * should have their pages aged or not. The reason being, * 346 * that we want to keep from aging pages away from processes * 347 * in MSWAIT. Note that if we do take pages away then a * 348 * certain percentage will almost certainly be requested * 349 * again. * 350 * TSMSTIME indicates how many times we go through the * 351 * TICK routine before we age pages in the MSWAIT queue. If * 352 * this number is increased, pages will age more slowly. If * 353 * decreased, pages age more rapidly. Since TICK is called * 354 * every two seconds pages held by processes in MSWAIT will * 355 * hang around for quite sometime, unless TSMSTIME is * 356 * exceedingly small (1 or 2). * 357 * * 358 ********************************************************************************** 359 0000000F ABS 360 TSMSTIME EQU 0F age pages every 30 seconds 01D13 0000000F 361 TSMSAGE VFD TSMSTIME MSWAIT age counter 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 219 (COREDEFS) F 16 Resident Data Structure Definitions 363 364 * PERFORMANCE MONITORS: 365 366 ********************************************************************************** 367 * * 368 * DYNAMIC WAIT - A table may be allocated that will have * 369 * entries counted each time a CPU has to loop while waiting * 370 * for a lock. This will tell us where we have lock * 371 * contention. * 372 * * 373 ********************************************************************************** 374 01D14 00000000 375 DYNBLOCK VFD 0+STORE address of monitoring block, if any 00001EC0 BYTE 376 DYNBITS EQU BITS 15:26 bits of PC to use as index 00000100 ABS 377 DYNBASE EQU 02000/DYNBITS below this we don't account 00000400 ABS 378 DYNMAX EQU WPP number of entries in table (02000 - 0A000) 379 380 ********************************************************************************** 381 * * 382 * INSTRUCTION HISTOGRAM - One of the CPU's in a * 383 * multi-CPU system may be captured to spend all of its time * 384 * sampling the PC's of other CPU's and creating a histogram * 385 * of the instruction usage within the monitor. In this way, * 386 * we can find out where we are spending our time, and where * 387 * to concentrate on improvements. * 388 * * 389 ********************************************************************************** 390 01D15 00000000 391 IHBUSY VFD 0+STORE 0 => no monitoring in progress, 392 * 1 => some CPU is collecting data, 393 * -1=> request CPU to stop collecting data. 394 395 * Header for returned information 00001D16 396 MONHDR LABEL 00001D16 397 IHBASE BSS 1 lowest PC to track 00001D17 398 IHBUKSIZE BSS 1 bits of PC to use as index 00000008 ABS 399 MONHDRLEN EQU DISPC MONHDR 400 00000800 ABS 401 IHMAX EQU 2048 number of entries in table 00000002 ABS 402 IHBLOCKN EQU (IHMAX+WPP-1)/WPP number of pages to allocate 00001D18 403 IHBLOCKS BSS IHBLOCKN pointers to the allocated pages 404 405 406 ********************************************************************************** 407 * * 408 * XREQ CALL HISTOGRAM - A subroutine in the XREQ * 409 * interrupt processor can be enabled to tabulate in histogram * 410 * form the number of times each request is used. Note that * 411 * this information is gathered VERY early in the XREQ game, * 412 * therefore the table will include entries for illegal (or * 413 * non-existent) requests as well as for the legal ones. * 414 * * 415 ********************************************************************************** 416 01D1A 00000000 417 XHBUSY VFD 0+STORE 0 => no monitoring in progress, 418 * 1 => someone is collecting data 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 220 (COREDEFS) F 16 Resident Data Structure Definitions 419 01D1B FEC00000 420 XHCHECK NOP 0 inst executed by XREQ processor 00000800 ABS 421 XHMAX EQU 2048 number of entries in table 00000002 ABS 422 XHBLOCKN EQU (XHMAX+WPP-1)/WPP number of pages to allocate 00001D1C 423 XHBLOCKS BSS XHBLOCKN pointers to the allocated pages 424 425 * header to give back with the info, mimics LOWPC and BUCKSIZE 426 * of instruction and dynwait monitors 01D1E 00000000 427 XMONHDR VFD 0 lowest XREQ recorded 01D1F 00000001 428 VFD 1 "increment" (we record all XREQs) 00000008 ABS 429 XMONHDRLEN EQU DISPC XMONHDR length of header 430 431 * table of table heads by XREQ type 01D20 00000000 432 XHTABLCK VFD 0 lock for table (list type) 00001D21 433 XHTABTAB LABEL 01D21 00000000 434 VFD 0 unimplemented 01D22 00000000 435 VFD 0 unimplemented 01D23 00000000 436 FREQTAB VFD 0 FREQs 01D24 00000000 437 VFD 0 unimplemented 01D25 00000000 438 UREQTAB VFD 0 UREQs 01D26 00000000 439 OPREQTAB VFD 0 OPREQs 01D27 00000000 440 VFD 0 unimplemented 01D28 00000000 441 BREAKTAB VFD 0 BREAK instruction 00000020 ABS 442 XHTABLEN EQU DISPC XHTABTAB char length of table 443 444 445 ********************************************************************************** 446 * * 447 * TRACE TABLE - a block may be allocated to record the * 448 * most recent 256 events that have occurred. This is most * 449 * useful for system dubugging. * 450 * * 451 ********************************************************************************** 452 01D29 00000000 453 TRACEADDR VFD 0+STORE address of trace table page 01D2A 00000000 454 TRACEINDEX VFD STORE index of last entry in table 01D2B 00000000 455 TRACEGIVEN VFD STORE index of last entry returned to user 456 00001D2C 457 TRACECALL BASE table of instructions executed by TRACE macro 01D2C FEC00000 458 MSTRACE NOP 0 class 00 - MS driver 01D2D FEC00000 459 CIATRACE NOP 0 class 01 - CIA driver 01D2E FEC00000 460 ULBTRACE NOP 0 class 02 - ULB manager 01D2F FEC00000 461 NOP 0 class 03 - unassigned 01D30 FEC00000 462 MTTRACE NOP 0 class 04 - mag tape driver 01D31 FEC00000 463 LPTRACE NOP 0 class 05 - line printer driver 01D32 FEC00000 464 SUBSTRACE NOP 0 class 06 - substitution process 01D33 FEC00000 465 NOP 0 class 07 - unassigned 01D34 FEC00000 466 NOP 0 class 08 - unassigned 01D35 FEC00000 467 NOP 0 class 09 - unassigned 01D36 FEC00000 468 NOP 0 class 10 - unassigned 01D37 FEC00000 469 NOP 0 class 11 - unassigned 01D38 FEC00000 470 NOP 0 class 12 - unassigned 01D39 FEC00000 471 NOP 0 class 13 - unassigned 01D3A FEC00000 472 NOP 0 class 14 - unassigned 01D3B FEC00000 473 NOP 0 class 15 - unassigned 01D3C FEC00000 474 NOP 0 class 16 - unassigned 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 221 (COREDEFS) F 16 Resident Data Structure Definitions 01D3D FEC00000 475 NOP 0 class 17 - unassigned 01D3E FEC00000 476 NOP 0 class 18 - unassigned 01D3F FEC00000 477 NOP 0 class 19 - unassigned 01D40 FEC00000 478 NOP 0 class 20 - unassigned 01D41 FEC00000 479 NOP 0 class 21 - unassigned 01D42 FEC00000 480 NOP 0 class 22 - unassigned 01D43 FEC00000 481 NOP 0 class 23 - unassigned 01D44 FEC00000 482 NOP 0 class 24 - unassigned 01D45 FEC00000 483 NOP 0 class 25 - unassigned 01D46 FEC00000 484 NOP 0 class 26 - unassigned 01D47 FEC00000 485 NOP 0 class 27 - unassigned 01D48 FEC00000 486 NOP 0 class 28 - unassigned 01D49 FEC00000 487 NOP 0 class 29 - unassigned 01D4A FEC00000 488 NOP 0 class 30 - unassigned 01D4B FEC00000 489 NOP 0 class 31 - unassigned 490 DRCT 491 492 ********************************************************************************** 493 * * 494 * READ/WRITE COUNTS BY BLOCK TYPE - The following * 495 * vectors are used to accumulate the numbers of reads and * 496 * writes for each FBI type. These vectors are indexed * 497 * starting with zero. FBI type 0 is undefined, so the 0th * 498 * word holds the table size since it should never be * 499 * incremented (!). * 500 * * 501 ********************************************************************************** 502 00000016 ABS 503 MAXFBITYPE EQU 016 largest index in table 01D4C 00000017 504 READCOUNTS VFD MAXFBITYPE+1 size of table 505 BSS MAXFBITYPE counters of READS 01D63 00000017 506 WRITCOUNTS VFD MAXFBITYPE+1 size of table 507 BSS MAXFBITYPE counters of WRITES 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 222 (COREDEFS) F 16 Resident Data Structure Definitions 509 510 ********************************************************************************** 511 * * 512 * Generalized system process template. * 513 * All the system processes that may be started have * 514 * control blocks that conform to the following format. The * 515 * lock word is used when adding to or deleting from the list * 516 * of elements. The busy word tells us that a process of this * 517 * type has been or is about to be started except for free * 518 * file, which uses a special mechanism. Only interlocked * 519 * instructions should be used to set the busyword. * 520 * * 521 ********************************************************************************** 522 00001D7A 523 FFCPCPROT BASE R4 00170800 4 BASE 524 FFCPCLOCK BSS 1 lock word for the list 00170801 4 BASE 525 FFCPCLIST BSS 1 root of list of elements 00170802 4 BASE 526 FFCPCBUSY BSS 1 zero or non-zero if process started 00170803 4 BASE 527 FFCPCNAME BSS2 1 name to give process 00170805 4 BASE 528 FFCPCPC BSS 1 initial PC for process 00170806 4 BASE 529 FFCPCPROC BSS 1 process to start 530 DRCT 531 ORG FFCPCPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 223 (COREDEFS) F 16 Resident Data Structure Definitions 533 534 ********************************************************************************** 535 * * 536 * File Freer Queue * 537 * List of disk structures being freed. A process is in * 538 * charge of freeing the disk structures and when something is * 539 * placed in the queue the freeing process is started if it is * 540 * idle. The lock on the free list locks the list of free * 541 * file elements. The FFCPCBUSY word (marked unused) is not * 542 * used for the free file process since a special mechanism is * 543 * used for free file to allow multiple freefile processes to * 544 * run simultaneously. The word must be included here so that * 545 * this control block matches the others. Free file processes * 546 * are started based on the number of elements in the list and * 547 * the number of free file processes that currently exists. * 548 * * 549 ********************************************************************************** 550 01D7A 00000000 551 FFLOCK VFD STORE one if FF list locked 01D7B 00000000 552 FFLIST VFD STORE root of the freeing list 01D7C 00000000 553 VFD STORE (unused. makes structure match) 01D7D B674F85C 554 PAK12 SYS_FREEFILE name of the FF process 01D7F 000050B5 555 VFD ADR FFPRESTART place to start the process 01D80 00000100 556 VFD 1*BIT FLFREEFL process to start is free file 557 01D81 00000000 558 FFLISTSIZ VFD STORE+0 num elements in FF list 01D82 00000000 559 FFPROCS VFD STORE+0 num of FF processes going 560 00001D83 561 FFPROT BASE R0 element in the free file list 00160800 0 BASE 562 FFWORDA BSS 1 00080080 0 ZBM 563 FFTYPE EQU FFWORDA/BITS 0:7 FBI type of structure being freed 00081F10 0 ZBM 564 FFLINK EQU FFWORDA/FLDADRS link to the next element in list 00160801 0 BASE 565 FFBLOCK BSS 1 MS address of structure head 00080081 0 ZBM 566 FFDRIVE EQU FFBLOCK/VOLFIELD drive where structure resides 00081181 0 ZBM 567 FFMSBLK EQU FFBLOCK/MSBLKFIELD root block of the structure 00160802 0 BASE 568 FFVOLBPTR BSS 1 pointer to the busy counter in the VOLN element 569 DRCT 00000003 DISP 570 FFLNTH EQU DISP FFPROT length of a FF list element 00000002 ABS 571 FFLOG EQU FFLNTH LOG 2 size of element for free memory routines 572 ORG FFPROT recover lost space 573 574 * extra codes for FFTYPE, since no FBITYPE corresponding 575 00000000 ABS 576 FFTUNKNOWN EQU 0 a single block of unknown type 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 224 (COREDEFS) F 16 Resident Data Structure Definitions 578 579 ********************************************************************************** 580 * * 581 * Queue of Elements to be put into the ADT * 582 * A process is in charge of consuming these elements and * 583 * calling the PUTFREEBLK routine to cause them to be placed * 584 * into the ADT for that volume. This process is started if * 585 * it is idle when a new element is queued. The lock on the * 586 * list locks only the list of elements. The busy word * 587 * indicates whether the ADT process has been started or not. * 588 * * 589 ********************************************************************************** 590 01D83 00000000 591 PADTLOCK VFD STORE one if PADT list locked 01D84 00000000 592 PADTLIST VFD STORE root of the list 01D85 00000000 593 PADTBUSY VFD STORE flag indicating ADT started 01D86 B674F9EF 594 PAK12 SYS_PUTADT name of this process 01D88 00005201 595 VFD ADR PADTRSTRT place to start the process 01D89 00000080 596 VFD 1*BIT FLADT process to start is ADT 597 00001D8A 598 PADTPROT BASE R0 element in the put adt list 00160800 0 BASE 599 PADTWORDA BSS 1 00081F10 0 ZBM 600 PADTLINK EQU PADTWORDA/FLDADRS link to next element 00160801 0 BASE 601 PADTBLOCK BSS 1 MS address of structure head 00080081 0 ZBM 602 PADTDRIVE EQU PADTBLOCK/VOLFIELD drive where block resides 00081181 0 ZBM 603 PADTMSBLK EQU PADTBLOCK/MSBLKFIELD MS address 604 DRCT 00000002 DISP 605 PADTLNTH EQU DISP PADTPROT length of a put adt list element 00000001 ABS 606 PADTLOG EQU PADTLNTH LOG 2 size of element for free memory routines 607 ORG PADTPROT recover lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 225 (COREDEFS) F 16 Resident Data Structure Definitions 609 610 ********************************************************************************** 611 * * 612 * List of elements that contain volume numbers that have * 613 * been maintenance mounted and need to be dismounted. The * 614 * VOLN element has been marked as unusable and once the busy * 615 * count hits zero we can do our thing. One reason we have a * 616 * separate process is to save stack space, since the dismount * 617 * routines use quite a bit of it. * 618 * * 619 ********************************************************************************** 620 01D8A 00000000 621 DMNTLOCK VFD STORE lock for this list 01D8B 00000000 622 DMNTLIST VFD STORE root of the element list 01D8C 00000000 623 DMNTBUSY VFD STORE flag indicating dismounter started 01D8D B674F803 624 PAK12 SYS_DISMOUNT name of this process 01D8F 00005221 625 VFD ADR DMNTSTRT place to start this process 01D90 00000400 626 VFD 1*BIT FLDISMNT flag to start dismount process 627 00001D91 628 DMNTPROTO BASE R0 element for the volume dismounter 00160800 0 BASE 629 DMNTWORDA BSS 1 00081F10 0 ZBM 630 DMNTLINK EQU DMNTWORDA/FLDADRS link to next element in the list 00160801 0 BASE 631 DMNTVOLN BSS 1 volume number to dismount 632 DRCT 00000001 ABS 633 DMNTLOG EQU (DISPW DMNTPROTO) LOG 2 log of the block size 634 ORG DMNTPROTO recover lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 226 (COREDEFS) F 16 Resident Data Structure Definitions 636 637 ********************************************************************************** 638 * * 639 * ERROR LOG QUEUE * 640 * Error log process and queue. Errors generated by the * 641 * system are placed in the below defined queue and then a * 642 * process will consume this queue and write the errors onto * 643 * the error log. The ERRLOGLOCK locks only the list of * 644 * elements. The busyword indicates whether the error log * 645 * process has been started or not. * 646 * * 647 ********************************************************************************** 648 01D91 00000000 649 ERRLOGLOCK VFD STORE lock for list ( one if locked ) 01D92 00000000 650 ERRLOGLIST VFD 0+STORE root of element list 01D93 00000000 651 ERRLOGBUSY VFD 0+STORE flag indicating error log started 01D94 B674F834 652 PAK12 SYS_ERRORLOG name of this process 01D96 00005241 653 VFD ADR ELPRESTART place to start this process 01D97 00000040 654 VFD 1*BIT FLERRLOG process to start is error log 655 01D98 00000000 656 ERRLOGCNT VFD 0+STORE number of logged errors 657 00001D99 658 ERLPROT BASE R0 00160800 0 BASE 659 ERLWORDA BSS 1 000800F0 0 ZBM 660 ERLTYPE EQU ERLWORDA/UPR15 type of error (fields below) 661 ERLLEN EQU EFLEN length of error params in words 662 * (does not include this word) 663 ERERROR EQU EFERROR flag saying count ECNT 664 ERLCODE EQU EFCODE type of error 00081F10 0 ZBM 665 ERLLINK EQU ERLWORDA/FLDADRS link to next element 00160801 0 BASE 666 ERLDATE BSS 2 time of the error 00160803 0 BASE 667 ERLPARAMS LABEL variable size parameter list 668 * the rest of the message is ERLTYPE/ERLLEN 669 * words long 670 DRCT 671 ORG ERLPROT recover the space 672 00000002 ABS 673 ERLFUNK EQU (ERLPARAMS DISPW ERLWORDA)-1 674 675 ERRORFILE LIST 675 ********************************************************************************** 675 * * 675 * The system logs in a file IO and other errors that * 675 * occur while the system is running. This file is of the * 675 * format given. The errors consist of a code and a variable * 675 * number of parameters. Defined error codes are ("|" * 675 * separates words): * 675 * * 675 * ERLCEND | dummy parameter * 675 * ERLCTS ( no longer used ) * 675 * ERLCTEXT | variable length string (blank filled) * 675 * ERLCBFBI ( new code below ) * 675 * ERLCCKFBI ( new code below ) * 675 * ERLCBKFBI ( new code below ) * 675 * ERLCPFFBI ( no longer used ) * 675 * ERLCBLNK | MS address expected | found * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 227 (COREDEFS) F 16 Resident Data Structure Definitions 675 * ERLCFSAF | MS address * 675 * ERLCFUD1 | MS address * 675 * ERLCFUD2 | MS address * 675 * ERLCPPUBT | PF for channel | PPU status * 675 * ERLCCIAE | PF for channel | CIA status * 675 * ERLCCIATO | PF for channel * 675 * ERLCDSKTO | PF for channel | unit * 675 * ERLCSSUTO | PF for SSU * 675 * ERLCSUB ( new code below ) * 675 * ERLCNOSUB ( new code below ) * 675 * ERLCUNSUB ( new code below ) * 675 * ERLCPPUTO (no longer used) * 675 * ERLCBOOT | system version (upper) | system version (lower) | boot switches* 675 * ERLCMOUNT | volume number | drive name | volume name (upper) | * 675 * volume name (lower) * 675 * ERLCDMOUNT | volume number * 675 * ERLCMPE | status + virtual address | PF | block * 675 * ERLCMPED | PF | block * 675 * ERLCDNRDY ( new code below ) * 675 * ERLCRMNT | volume number | drive name * 675 * ERLCCTC (no longer used) * 675 * ERLCCTCTO (no longer used) * 675 * ERLCDSKRD ( new code below ) * 675 * ERLCDCNT | drive name | cable number | read count | write count * 675 * ERLCDSKRW ( new code below ) * 675 * ERLCLPERR | LP name | LP status * 675 * ERLCLPIFPE ( no longer used ) * 675 * ERLCLPTO | LP name * 675 * ERLCPPUBAD | PPU slot number * 675 * ERLCPPUOK | PPU slot number * 675 * ERLCCTLBAD | PPU slot number | channel number * 675 * ERLCCTLOK | PPU slot number | channel number * 675 * ERLCDATBAD | target date | current date * 675 * ERLCNVMTIM | dummy parm * 675 * ERLCMTC (no longer used) * 675 * ERLCMTCTO | page map value * 675 * ERLCMTCERR | drive name | operation | tape status | PPU status * 675 * ERLCDSKID | drive name | drive id (3 words) | * 675 * pack mfg | pack s/n | fmt date (2 words) | * 675 * volume name (2 words) * 675 * ERLCUNLOAD | drive name * 675 * ERLCDE | drive name | block number | seek address | * 675 * operation | BFD status | PPU status * 675 * ERLCPWFAIL | dummy parameter * 675 * ERLCPWRUP | dummy parameter * 675 * ERLCBFBI | drive name | MS address | expected | found * 675 * ERLCCKFBI | drive name | MS address | difference | found * 675 * ERLCBKFBI | drive name | MS address | found * 675 * ERLCRDGCS | drive name | MS address | segment# * 675 * ERLCSUB | drive name | bad MS address | substitute address * 675 * ERLCNOSUB | drive name | bad MS address | reason * 675 * ERLCUNSUB | drive name | bad MS address | substitute MS address * 675 * ERLCDNRDY | drive name | volume number * 675 * ERLCDSKRD | drive name | MS address | seek address * 675 * ERLCDSKRW | drive name | MS address | seek address * 675 * ERLCSCSIRS | drive name | MS address | seek address | operation | * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 228 (COREDEFS) F 16 Resident Data Structure Definitions 675 * SCSI status | PPU status | sense key | sense code * 675 * ERLCSCSIDE | drive name | block number | seek address | * 675 * operation | SCSI status | PPU status * 675 * ERLCSCSIID | drive name | vendor id (2 words) | * 675 * product id (3 words) | firmware rev (2 words) | * 675 * fmt date (2 words) | volume name (2 words) * 675 * * 675 * The error logging file is SYSTEM.!!!:ERRORLOG.LOGFIL. * 675 * This file should be opened as an empty .RAF. The error * 675 * logging session will add records to the end of the file and * 675 * advance the end pointer. The begin pointer is provided for * 675 * the benefit of the reading process. It is the * 675 * responsibility of the reading process to free blocks when * 675 * they are no longer needed, otherwise, the log file will * 675 * grow until it occupies all available mass storage space. * 675 * Note that block 0 should never be freed ( except possibly * 675 * to release the entire file ). * 675 * If EFEND is in the range of -EFRSIZE to 2*CPW, then it * 675 * is set to 2*CPW. The reading routine should do the same * 675 * for EFBEGIN. * 675 * * 675 ********************************************************************************** 675 675 * These addresses are used to get the pointers from the error log file 00000000 ABS 675 EFBEGIN EQU 0 pointer to first error entry 00000004 ABS 675 EFEND EQU 1*4 pointer to end of error entries 675 00001D99 675 EFPROTO BASE R0 prototype of error entry 00160800 0 BASE 675 EFWORDA BSS 1 00002250 BYTE 675 EFLEN EQU BITS 17:21 number of parameters for this error 00002C10 BYTE 675 EFERROR EQU BIT 22 0 => routine log entry, 1 => error 00002E90 BYTE 675 EFCODE EQU BITS 23:31 code for this error 000800F0 0 ZBM 675 EFTYPE EQU EFWORDA/BITS 0:14 code for this error 00081F10 0 ZBM 675 EFLENGTH EQU EFWORDA/BITS 15:31 length of this entry in words 00160801 0 BASE 675 EFDATE BSS 2 system time word when error happened 00160803 0 BASE 675 EFPARAMS LABEL first word of parameters 675 DRCT 675 ORG EFPROTO reclaim space 675 675 * The actual codes 00000401 ABS 675 ERLCEND EQU 1*EFLEN+0*EFERROR+01*EFCODE end system 675 *ERLCTS EQU 1*EFLEN+0*EFERROR+02*EFCODE time stamp 00000603 ABS 675 ERLCTEXT EQU 1*EFLEN+1*EFERROR+03*EFCODE text record 675 *ERLCBFBI EQU 3*EFLEN+1*EFERROR+04*EFCODE unused - was FBI type mismatch 675 *ERLCCKFBI EQU 3*EFLEN+1*EFERROR+05*EFCODE unused - was FBI checksum bad 675 *ERLCBKFBI EQU 2*EFLEN+1*EFERROR+06*EFCODE unused - was FBI DA mismatch 675 * EQU 6*EFLEN+1*EFERROR+07*EFCODE unused - was old format MS error 675 *ERLCPFFBI EQU 3*EFLEN+1*EFERROR+08*EFCODE bad FBI in PFPROC 00000E09 ABS 675 ERLCBLNK EQU 3*EFLEN+1*EFERROR+09*EFCODE bad backward link while freeing 0000060A ABS 675 ERLCFSAF EQU 1*EFLEN+1*EFERROR+10*EFCODE bad block while freeing SAF 0000060B ABS 675 ERLCFUD1 EQU 1*EFLEN+1*EFERROR+11*EFCODE bad UD1 block while freeing DIR 0000060C ABS 675 ERLCFUD2 EQU 1*EFLEN+1*EFERROR+12*EFCODE bad UD2 block while freeing DIR 00000A0D ABS 675 ERLCPPUBT EQU 2*EFLEN+1*EFERROR+13*EFCODE bad transfer status from PPU 00000A0E ABS 675 ERLCCIAE EQU 2*EFLEN+1*EFERROR+14*EFCODE error code from CIA 0000060F ABS 675 ERLCCIATO EQU 1*EFLEN+1*EFERROR+15*EFCODE CIA deadman timeout 00000A10 ABS 675 ERLCDSKTO EQU 2*EFLEN+1*EFERROR+16*EFCODE Disk deadman timeout 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 229 (COREDEFS) F 16 Resident Data Structure Definitions 00000611 ABS 675 ERLCSSUTO EQU 1*EFLEN+1*EFERROR+17*EFCODE SSU timeout 675 *ERLCSUB EQU 2*EFLEN+1*EFERROR+18*EFCODE unused - was MS block substituted 675 *ERLCNOSUB EQU 2*EFLEN+1*EFERROR+19*EFCODE unused - was MS block not substituted 675 *ERLCUNSUB EQU 2*EFLEN+0*EFERROR+20*EFCODE unused - was MS block unsubstituted 675 *ERLCPPUTO EQU 1*EFLEN+1*EFERROR+21*EFCODE PPU timeout, PPU not talking 00000C16 ABS 675 ERLCBOOT EQU 3*EFLEN+0*EFERROR+22*EFCODE system boot 00001017 ABS 675 ERLCMOUNT EQU 4*EFLEN+0*EFERROR+23*EFCODE volume mount 00000418 ABS 675 ERLCDMOUNT EQU 1*EFLEN+0*EFERROR+24*EFCODE volume dismount 00000E19 ABS 675 ERLCMPE EQU 3*EFLEN+1*EFERROR+25*EFCODE memory parity error 00000A1A ABS 675 ERLCMPED EQU 2*EFLEN+1*EFERROR+26*EFCODE memory parity error 675 *ERLCDNRDY EQU 2*EFLEN+1*EFERROR+27*EFCODE unused - was disk dropped ready 0000081C ABS 675 ERLCRMNT EQU 2*EFLEN+0*EFERROR+28*EFCODE volume remounted 675 *ERLCCTC EQU 4*EFLEN+1*EFERROR+29*EFCODE CTC operation error 675 *ERLCCTCTO EQU 2*EFLEN+1*EFERROR+30*EFCODE CTC deadman timeout 675 * EQU 5*EFLEN+1*EFERROR+31*EFCODE unused - was MS error 675 *ERLCDSKRD EQU 3*EFLEN+1*EFERROR+32*EFCODE unused - was perm read error 00001021 ABS 675 ERLCDCNT EQU 4*EFLEN+0*EFERROR+33*EFCODE disk activity count 675 *ERLCDSKRW EQU 2*EFLEN+0*EFERROR+34*EFCODE unused - was rewrite after read 00000A23 ABS 675 ERLCLPERR EQU 2*EFLEN+1*EFERROR+35*EFCODE line printer error 675 *ERLCLPIFPE EQU 2*EFLEN+1*EFERROR+36*EFCODE line printer interface parity error (obsolete) 00000625 ABS 675 ERLCLPTO EQU 1*EFLEN+1*EFERROR+37*EFCODE line printer timeout 00000626 ABS 675 ERLCPPUBAD EQU 1*EFLEN+1*EFERROR+38*EFCODE PPU doesn't respond 00000427 ABS 675 ERLCPPUOK EQU 1*EFLEN+0*EFERROR+39*EFCODE PPU started talking again 00000A28 ABS 675 ERLCCTLBAD EQU 2*EFLEN+1*EFERROR+40*EFCODE controller doesn't respond 00000829 ABS 675 ERLCCTLOK EQU 2*EFLEN+0*EFERROR+41*EFCODE controller is OK again 00000A2A ABS 675 ERLCDATBAD EQU 2*EFLEN+1*EFERROR+42*EFCODE SSU clock is bad 0000062B ABS 675 ERLCNVMTIM EQU 1*EFLEN+1*EFERROR+43*EFCODE NVM time is bad 675 *ERLCMTC EQU 4*EFLEN+1*EFERROR+44*EFCODE MTC operation error 675 *ERLCMTCTO EQU 2*EFLEN+1*EFERROR+45*EFCODE MTC deadman timeout 0000062E ABS 675 ERLCMTCTO EQU 1*EFLEN+1*EFERROR+46*EFCODE MTC deadman timeout 0000122F ABS 675 ERLCMTCERR EQU 4*EFLEN+1*EFERROR+47*EFCODE MTC tape error 00002830 ABS 675 ERLCDSKID EQU 10*EFLEN+0*EFERROR+48*EFCODE drive and pack id 00000631 ABS 675 ERLCUNLOAD EQU 1*EFLEN+1*EFERROR+49*EFCODE unload disk heads 00001A32 ABS 675 ERLCDE EQU 6*EFLEN+1*EFERROR+50*EFCODE disk I/O error 00000633 ABS 675 ERLCPWFAIL EQU 1*EFLEN+1*EFERROR+51*EFCODE power failure 00000434 ABS 675 ERLCPWRUP EQU 1*EFLEN+0*EFERROR+52*EFCODE power up restart 00000A35 ABS 675 ERLCSMU EQU 2*EFLEN+1*EFERROR+53*EFCODE SMU error 00001236 ABS 675 ERLCBFBI EQU 4*EFLEN+1*EFERROR+54*EFCODE FBI type mismatch 00001237 ABS 675 ERLCCKFBI EQU 4*EFLEN+1*EFERROR+55*EFCODE FBI checksum bad 00000E38 ABS 675 ERLCBKFBI EQU 3*EFLEN+1*EFERROR+56*EFCODE FBI MS block didn't match 00000C39 ABS 675 ERLCRDGCS EQU 3*EFLEN+0*EFERROR+57*EFCODE reading MS correction segment 00000E3A ABS 675 ERLCSUB EQU 3*EFLEN+1*EFERROR+58*EFCODE MS block substituted 00000E3B ABS 675 ERLCNOSUB EQU 3*EFLEN+1*EFERROR+59*EFCODE MS block not substituted 00000C3C ABS 675 ERLCUNSUB EQU 3*EFLEN+0*EFERROR+60*EFCODE MS block unsubstituted 00000A3D ABS 675 ERLCDNRDY EQU 2*EFLEN+1*EFERROR+61*EFCODE disk dropped ready 00000E3E ABS 675 ERLCDSKRD EQU 3*EFLEN+1*EFERROR+62*EFCODE permanent disk read error (data lost) 00000C3F ABS 675 ERLCDSKRW EQU 3*EFLEN+0*EFERROR+63*EFCODE rewrite disk block after read 00002240 ABS 675 ERLCSCSIRS EQU 8*EFLEN+1*EFERROR+64*EFCODE request sense data for disk error 00001A41 ABS 675 ERLCSCSIDE EQU 6*EFLEN+1*EFERROR+65*EFCODE SCSI disk I/O error 00003442 ABS 675 ERLCSCSIID EQU 13*EFLEN+0*EFERROR+66*EFCODE SCSI device identification 675 0000000D ABS 675 ERLMAXLEN EQU 13 maximum number of parameters 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 230 (COREDEFS) F 16 Resident Data Structure Definitions 677 678 ********************************************************************************** 679 * * 680 * System Accounting Process Queue * 681 * This is a list of accounting records that must be * 682 * written to the various accounting files. A process is in * 683 * charge of writing the records to mass storage. If it is * 684 * not already running, it is started when an entry is placed * 685 * into the queue. The APLOCK locks only the list of * 686 * elements. The busyword indicates whether the accounting * 687 * process has been started or not. * 688 * * 689 ********************************************************************************** 690 01D99 00000000 691 APLOCK VFD STORE one if AP list locked 01D9A 00000000 692 APLIST VFD STORE root of the accounting list - top bit is lock 01D9B 00000000 693 APBUSY VFD STORE flag indicating accounting started 01D9C B674F785 694 PAK12 SYS_ACCOUNT name for this process 01D9E 00005316 695 VFD ADR ACCTRESTRT place to start this process 01D9F 00000200 696 VFD 1*BIT FLACCTNG process to start is accounting 697 01DA0 00000000 698 APREQUE VFD 0*STORE incremented for every requeued accounting element 699 700 ACCTFILE LIST 700 ********************************************************************************** 700 * * 700 * Accounting files. * 700 * A system session writes records into accounting files * 700 * whenever certain events occur. The events and the format * 700 * of the files are described below. The files where log * 700 * entries are made are determined by a bit mask in the * 700 * ULLIMITS block called LIMLOGSPOT. Each accounting record is * 700 * written to as many as 4 log files: * 700 * * 700 * user.divprj:ACCOUNTING.LOGFIL * 700 * MANAGER.divprj:ACCOUNTING.LOGFIL * 700 * MANAGER.div:ACCOUNTING.LOGFIL * 700 * MANAGER.SYS:ACCOUNTING.LOGFIL * 700 * * 700 * The manufacturers account logging may go to himself, * 700 * MANAGER.!!!, or MANAGER.SYS. * 700 * These files should be opened as empty .RAFs. The * 700 * accounting session will add records to the end of the file * 700 * and advance the end pointer. The begin pointer is provided * 700 * for the benefit of the reading process. It is the * 700 * responsibility of the reading process to free blocks when * 700 * they are no longer needed, otherwise, the log file will * 700 * grow until it occupies all available space. Note that * 700 * block 0 should never be freed. * 700 * If AFEND is in the range of -AFRSIZE to 2*CPW, then it * 700 * is set to 2*CPW. The reading routine should do the same * 700 * for AFBEGIN. * 700 * * 700 * It should be noted that for file entries being logged * 700 * the primary account name and project is for the account * 700 * owning the file and the secondary one is for the account * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 231 (COREDEFS) F 16 Resident Data Structure Definitions 700 * accessing the file. Also for aliases and unaliases the * 700 * file name and extension field is used to hold the logon * 700 * account name and project of the user performing the alias. * 700 * * 700 ********************************************************************************** 700 00000000 ABS 700 AFBEGIN EQU 0 RAF char position of read pointer 00000004 ABS 700 AFEND EQU 1*4 RAF char position of write pointer 700 * (points to next records location) 700 00001DA1 700 AFRPROTO BASE R0 00080050 0 ZBM 700 AFRTYPE BSSB 5 type of record 00000000 ABS 700 APTSLEEP EQU 0 sleep record (tested with JEQZ!) 00000001 ABS 700 APTSTARTUP EQU 1 system startup 00000002 ABS 700 APTON EQU 2 successful logon 00000003 ABS 700 APTPWW EQU 3 unsuccessful logon 00000004 ABS 700 APTALIAS EQU 4 alias 00000005 ABS 700 APTALIER EQU 5 alias failure 00000006 ABS 700 APTOFF EQU 6 logoff 00000007 ABS 700 APTALOFF EQU 7 unalias 00000008 ABS 700 APTPWRFAIL EQU 8 power failure 00000009 ABS 700 APTPWRUP EQU 9 power up restart 0000000A ABS 700 APTCONCP EQU 10 concurrent session startup 0000000B ABS 700 APTABORT EQU 11 opr abort 0000000C ABS 700 APTTERMIN EQU 12 opr terminate 0000000D ABS 700 APTEVICT EQU 13 opr evict 0000000E ABS 700 APTFILOP EQU 14 file open 0000000F ABS 700 APTFILCL EQU 15 file close 00000010 ABS 700 APTFBC EQU 16 file being destroyed 00000011 ABS 700 APTLOAD EQU 17 volume mount 00000012 ABS 700 APTUNLOAD EQU 18 volume dismount 00000013 ABS 700 APTSTOP EQU 19 stop process 00000014 ABS 700 APTGO EQU 20 start process 00000015 ABS 700 APTXSAVE EQU 21 file exchange save 00000015 ABS 700 APTMAX EQU 21 largest type 700 * Bit array of those APTs that are long 2B000000 ABS 700 AFRSZLONG EQU 1*(BIT APTON)+1*(BIT APTALIAS)+1*(BIT APTOFF)+1*(BIT APTALOFF) 700 00080AA0 0 ZBM 700 AFRPORTNUM BSSB 10 port number of activity 00081F10 0 ZBM 700 AFRLEN BSSB 17 character size of record 000800C1 0 ZBM 700 AFRPROCN BSSB 12 session number 00081811 0 ZBM 700 AFRSHADOW BSSB 1 on if mentioned acct shadow 00081A11 0 ZBM 700 AFRFOREIGN BSSB 1 on if mentioned acct foreign 00081D21 0 ZBM 700 AFRFILLER BSSB 32-14 filler 00160802 0 BASE 700 AFRACCT BSS2 1 account name 00160804 0 BASE 700 AFRPROJ BSS 1 division-project 00160805 0 BASE 700 AFRTIME BSS2 1 time of occurrence 0000001C ABS 700 AFRSHORT EQU DISPC AFRTYPE size of short acct file record 00160807 0 BASE 700 AFRCPUTIME BSS 1 CPU time used (sec) 00160808 0 BASE 700 AFRSVDUSD BSS 1 saved file space (fb) 00160809 0 BASE 700 AFRSESMAX BSS 1 session output max (high water mark) 00160807 0 BASE 700 AFRACCT2 EQU AFRCPUTIME second account name in record 00160809 0 BASE 700 AFRPROJ2 EQU AFRSESMAX second project in record 700 00000028 ABS 700 AFRSIZE EQU DISPC AFRTYPE size of account file record 0016080A 0 BASE 700 AFRWORDA BSS 1 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 232 (COREDEFS) F 16 Resident Data Structure Definitions 000800AA 0 ZBM 700 AFRPORT2 EQU AFRWORDA/BITS 0:9 second port in record 000814CA 0 ZBM 700 AFRPROC2 EQU AFRWORDA/BITS 10:21 second session number in record 0000002C ABS 700 AFRLONG EQU DISPC AFRTYPE size of long account record 700 BSS 1 second word of file name 0016080A 0 BASE 700 AFRFILNAM EQU AFRWORDA file name 0016080C 0 BASE 700 AFRFILEXT BSS 1 file extention 00000034 ABS 700 AFRFILLEN EQU DISPC AFRTYPE size of record with file info in it 00000034 ABS 700 AFRMAXLEN EQU AFRFILLEN max length of an accounting record 700 DRCT 700 ORG AFRPROTO reclaim area 701 00001DA1 702 APPROT BASE R4 element in the accounting list 00170800 4 BASE 703 APWORDA BSS 1 00090050 4 ZBM 704 APWHOGETS EQU APWORDA/BITS 0:4 bit mask of whose acct. file 00091F10 4 ZBM 705 APLINK EQU APWORDA/FLDADRS 00170801 4 BASE 706 APRECORD BSS (AFRMAXLEN+3)/CPW holds the accounting entry (round up) 707 DRCT 0000000E DISP 708 APLNTH EQU DISP APPROT length of accounting list element 00000004 ABS 709 APLOG EQU APLNTH LOG 2 log size of element for free storage 710 ORG APPROT recover lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 233 (COREDEFS) F 16 Resident Data Structure Definitions 712 713 ********************************************************************************** 714 * * 715 * CPU4s can load microcode patches into their RAM from a * 716 * predefined patch file. We read in any patch files at boot * 717 * time and keep them linked in a list. At power up and boot * 718 * we tell the CPUs to load the microcode patches. * 719 * * 720 ********************************************************************************** 721 01DA1 00000000 722 PATCHLIST VFD STORE list of CPU microcode patches 01DA2 B674F7E2 723 CPUPROCNAM PAK12 SYS_CPUPATCH 724 00001DA4 725 CPUPPROTO BASE R3 0016C000 3 CACH 726 CPUPREV BSSB 8 rev level this patch is for 727 BSSB 7 filler 0008DF10 3 ZBM 728 CPUPLINK BSSB ADDRESS link to next patch 00000001 ABS 729 CPUPSIZE EQU DISPW CPUPREV length of the control stuff 0016C801 3 BASE 730 CPUPLNTH BSS 1 length of actual CPU patch 0016C802 3 BASE 731 CPUPSTRT BSS 0 where the rest of the patch goes 732 DRCT 733 ORG CPUPPROTO recover space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 234 (COREDEFS) F 16 Resident Data Structure Definitions 735 736 ********************************************************************************** 737 * * 738 * When a CPU is removed from service for load testing, * 739 * etc. we need to keep track of it. The following is a list, * 740 * lock, and element which is used for this purpose * 741 * * 742 ********************************************************************************** 743 01DA4 00000000 744 IDLECPULCK VFD STORE 01DA5 00000000 745 IDLECPULST VFD STORE 01DA6 00000000 746 IDLECPUCNT VFD STORE number of idle CPUs 01DA7 B674FA66 747 IDLENAME PAK12 SYS_STOPCPU 00002710 ABS 748 IDLETIME EQU 10000 time to wait between seeing if it 749 * is time to resume normal work 750 00001DA9 751 ICPROTO BASE R2 752 BSSB 4 some filler 00088840 2 ZBM 753 ICSLOT BSSB 4 slot number of idle CPU 00089010 2 ZBM 754 ICNOTBUILT BSSB 1 1 sez this process has been built 00089210 2 ZBM 755 ICSTART BSSB 1 when set sez we should start back to work 756 BSSB 5 some more filler 00089F10 2 ZBM 757 ICLINK BSSB ADDRESS link to next element 758 DRCT 00000000 ABS 759 ICBLKLOG EQU (DISPW ICPROTO) LOG 2 760 ORG ICPROTO 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 235 (COREDEFS) F 16 Resident Data Structure Definitions 762 763 ********************************************************************************** 764 * * 765 * PROCESS IOBOUND QUEUES * 766 * The PCB for each process not currently running appears * 767 * in exactly one of these queues. * 768 * The PCQPARM word in each PCB contains a parameter that * 769 * usually indicates in some way what releases the user from * 770 * the queue that he is in. * 771 * Usually, users are placed onto the distal end of these * 772 * queues and removed when appropriate or from the proximal * 773 * end ( first on, first off ). However, the runnable queue * 774 * is kept in run priority order (calculated by the * 775 * scheduler). * 776 * SQLOCKS is an array of lock words corresponding to the * 777 * queues. At least one routine (SHUTDOWN) relies on the fact * 778 * that this array immediately follows the array of queue * 779 * heads. * 780 * The appropriate number from the SDPARM array is used * 781 * to determine the pre-aging of pages when a process is * 782 * entered into that queue. * 783 * * 784 ********************************************************************************** 785 786 ********************************************************************************** 787 * * 788 * When entries are added to or removed from this table * 789 * of queues, the SDPARM, LFWEIGHTAB, and STATENAME arrays * 790 * must be altered to match! * 791 * * 792 ********************************************************************************** 793 00001DA9 794 SQBEGIN LABEL start of the user wait queues 795 00000000 ABS 796 NQRUNNING EQU DISPW SQBEGIN number of this queue 01DA9 00000000 797 SQRUNNING VFD FLDADRS*STORE currently running users 798 * PCQPARM contains the CPU slot number 799 00000001 ABS 800 NQRUNNABLE EQU DISPW SQBEGIN number of this queue 01DAA 00000000 801 SQRUNNABLE VFD FLDADRS*STORE users ready but waiting ( not IOBOUND ) 802 * PCQPARM contains this elements queue priority 803 00000002 ABS 804 NQMSWAIT EQU DISPW SQBEGIN 01DAB 00000000 805 SQMSWAIT VFD FLDADRS*STORE waiting for page from MS 806 * PCQPARM contains the MS block number 807 * PCQPARM2 contains the virtual page number 808 00000003 ABS 809 NQDIOWAIT EQU DISPW SQBEGIN 01DAC 00000000 810 SQDIOWAIT VFD FLDADRS*STORE waiting for a direct I/O transfer 811 * PCQPARM contains address of an I/O control block 812 00000004 ABS 813 NQDIRWAIT EQU DISPW SQBEGIN 01DAD 00000000 814 SQDIRWAIT VFD FLDADRS*STORE waiting for directory 815 * PCQPARM contains the ULB pointer 816 00000005 ABS 817 NQADTWAIT EQU DISPW SQBEGIN 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 236 (COREDEFS) F 16 Resident Data Structure Definitions 01DAE 00000000 818 SQADTWAIT VFD FLDADRS*STORE waiting for ADT blocks 819 * PCQPARM contains the volume number 820 00000006 ABS 821 NQIDXWAIT EQU DISPW SQBEGIN 01DAF 00000000 822 SQIDXWAIT VFD FLDADRS*STORE waiting for IDX 823 * PCQPARM contains volume number, or zero if waiting for AFT 824 00000007 ABS 825 NQLOCKWAIT EQU DISPW SQBEGIN 01DB0 00000000 826 SQLOCKWAIT VFD FLDADRS*STORE waiting for access to file resource lock 827 * PCQPARM = vol num, resource number, 828 and file serial number 829 * PCQPARM2 = requested access 830 00000008 ABS 831 NQFILEWAIT EQU DISPW SQBEGIN 01DB1 00000000 832 SQFILEWAIT VFD FLDADRS*STORE waiting for file access 833 * PCQPARM = vol num and file serial number waiting for 834 * PCQPARM2 = requested access 835 00000009 ABS 836 NQPATHWAIT EQU DISPW SQBEGIN 01DB2 00000000 837 SQPATHWAIT VFD FLDADRS*STORE waiting for info to/from .PATH 838 * PCQPARM => path control block waiting on (sign if writing) 839 0000000A ABS 840 NQMSGWAIT EQU DISPW SQBEGIN 01DB3 00000000 841 SQMSGWAIT VFD FLDADRS*STORE waiting to send/receive MSG 842 * PCQPARAM => my PSA if, receiving, other PSA with sign set 843 * if waiting to send 844 0000000B ABS 845 NQUNITWAIT EQU DISPW SQBEGIN 01DB4 00000000 846 SQUNITWAIT VFD FLDADRS*STORE waiting to send/receive UNIT 847 * PCQPARAM => my PSA if, receiving, other PSA with sign set 848 * if waiting to send 849 0000000C ABS 850 NQTERMWAIT EQU DISPW SQBEGIN 01DB5 00000000 851 SQTERMWAIT VFD FLDADRS*STORE waiting for terminal input 852 * PCQPARM => TCB waiting on 853 0000000D ABS 854 NQTRMOWAIT EQU DISPW SQBEGIN 01DB6 00000000 855 SQTRMOWAIT VFD FLDADRS*STORE waiting for terminal output 856 * PCQPARM => TCB waiting on 857 0000000E ABS 858 NQTIMEWAIT EQU DISPW SQBEGIN 01DB7 00000000 859 SQTIMEWAIT VFD FLDADRS*STORE waiting for the clock to move 860 * PCQPARM = event bits waiting for 861 0000000F ABS 862 NQSTOPWAIT EQU DISPW SQBEGIN 01DB8 00000000 863 SQSTOPWAIT VFD FLDADRS*STORE process stopped by another 864 00000010 ABS 865 NQTROUBLE EQU DISPW SQBEGIN 01DB9 00000000 866 SQTROUBLE VFD FLDADRS*STORE troublemaker 867 * PCQPARM contains jail term 868 00000011 ABS 869 NQUEUES EQU DISPW SQBEGIN number of user wait queues 870 00001DBA 871 SQLOCKS BSS NQUEUES locks for the SQs 872 873 * define a bit array to indicate the queues on which new elements 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 237 (COREDEFS) F 16 Resident Data Structure Definitions 874 * must be added at the end (i.e. queues for resources) 4C000000 ABS 875 FIRSTPART EQU (1*BIT NQRUNNABLE)+(1*BIT NQDIRWAIT)+(1*BIT NQADTWAIT) 03800000 ABS 876 SECONDPART EQU (1*BIT NQIDXWAIT)+(1*BIT NQLOCKWAIT)+(1*BIT NQFILEWAIT) 00700000 ABS 877 THIRDPART EQU (1*BIT NQPATHWAIT)+(1*BIT NQMSGWAIT)+(1*BIT NQUNITWAIT) 01DCB 00481DCC 878 SQAPPENDIT PTR SQENDARRAY/BIT 0 01DCC 4FF00000 879 SQENDARRAY VFD FIRSTPART+SECONDPART+THIRDPART 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 238 (COREDEFS) F 16 Resident Data Structure Definitions 881 882 ********************************************************************************** 883 * * 884 * SDPARM array * 885 * When a process is placed into a queue, its pages are * 886 * all aged by the number extracted from this table, then the * 887 * TAKEOLD routine is called to remove any ancient pages. * 888 * When a user gets suspended, we can assume that he will * 889 * stay suspended for a short length of time. During this * 890 * time, the pages that he owns might more profitably be used * 891 * by other running processes. These parameter values are * 892 * adjusted based on the expected length of time that the * 893 * process will spend suspended in the corresponding queue. * 894 * If a parameter is decreased, it has the effect of * 895 * leaving more pages in the users working set when he enters * 896 * the queue. If he remains in the queue for a short time * 897 * only, he will have more pages available when he is * 898 * restarted. * 899 * If a parameter is increased, it has the effect of * 900 * removing more pages from the users working set when he * 901 * enters the queue. He will therefore have fewer pages * 902 * available when he leaves the queue, even if he stays * 903 * suspended for a very short time. * 904 * Note that on a heavily loaded system, a parameter * 905 * greater that MMAGE means that essentially no pages will be * 906 * left in this users working set when he is suspended. * 907 * Note also, that the IDLSPEED parameter controls * 908 * additional periodic aging of a suspended users working set. * 909 * The value for the sizewait (trouble maker) queue is * 910 * set to the largest value that can be added to an existing * 911 * PAGEAGE without overflowing the field. This ensures that * 912 * during the shutdown of a troublemaker we remove all of his * 913 * pages. * 914 * * 915 ********************************************************************************** 916 01DCC 00000000 917 SDPARM VFDB 16:0 running (never used) 01DCD 00000000 918 VFDB 16:0 runnable 01DCE 00000000 919 VFDB 16:0,0 mswait, diowait 01DD0 00000004 920 VFDB 16:4,4,4,4 dirwait, adtwait, idxwait, lockwait 01DD0 0000000C 921 VFDB 16:00C filewait 01DD2 00000008 922 VFDB 16:008,008,008 pathwait, msgwait, unitwait 01DD3 00000010 923 VFDB 16:010,010 termwait, termowait 01DD3 00000010 924 VFDB 16:010 timewait 01DD4 00001FFF 925 VFDB 16:01FFF stopwait 01DD4 00001FFF 926 VFDB 16:01FFF trouble 00000011 ABS 927 SDPARMNUM EQU (DISPB SDPARM)/16 number of entries in this table 928 ASSERTEQ NQUEUES,SDPARMNUM make sure it's right number 928 BSS NQUEUES-SDPARMNUM error if NQUEUES < SDPARMNUM 928 BSS SDPARMNUM-NQUEUES error if SDPARMNUM < NQUEUES 01DD6 04081DCD 929 PSDPARM PTR SDPARM pointer to above table 930 931 ********************************************************************************** 932 * * 933 * Load factor parameters. * 934 * The load factor algorithm calculates a number based on * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 239 (COREDEFS) F 16 Resident Data Structure Definitions 935 * the number of users waiting for system resources (NOT user * 936 * controllable resources). The LFWEIGHT table controls the * 937 * the amount of weight given for each user in a given SQ. In * 938 * order to smooth out the variations in this value, the newly * 939 * calculated value is combined with the old value using a * 940 * weighted averaging scheme. Here live the parameters that * 941 * get changed controlling the load factor algorithm. The * 942 * constants used are defined in TICK. * 943 * * 944 ********************************************************************************** 945 01DD7 00000000 946 LOADFACT VFD STORE current integer load factor 01DD8 00000000 947 SCALEDLF VFD STORE the raw (scaled) version of the load factor 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 240 (COREDEFS) F 16 Resident Data Structure Definitions 949 950 ********************************************************************************** 951 * * 952 * PHYSICAL PAGE ELEMENTS (PPL) * 953 * Exactly one PPL exists for each swappable physical * 954 * page on the system. This element may be in: the chain of * 955 * available pages (PPIDLE), one of the chains of active pages * 956 * (PPAGELIST), or held by the mass storage driver during a * 957 * transfer in. Also, if a physical page is reserved for free * 958 * storage, the PPL is placed in a special holding area by the * 959 * free storage manager ( so that if the page is later * 960 * recombined, its PPL may be returned to the idle list ). * 961 * The PPAGELIST actually consists of multiple list heads * 962 * in order to reduce search time. A hash code on PPBLOCK * 963 * determines which list head is used. Due to the uniform * 964 * distribution and unsystematic use of block numbers, the * 965 * rightmost bits of PPBLOCK are used directly as the hash * 966 * code. * 967 * A copy of the file block identifier for the disk block * 968 * is kept associated with the PPL. FBIs for PPLs are always * 969 * accessed via the PPLWINDOW virtual page. Page map values * 970 * for pages containing PPL FBI's are kept in the PPLPFMAP * 971 * table. Each PPL has an index into this table (PPFBIBLK) in * 972 * which location the PM value for its FBI is kept. Another * 973 * field, PPFBIDISP is the displacement into the virtual page * 974 * of the first word of the FBI. PPLWINDOW is kept generally * 975 * unmapped. Access to it is acquired by first mapping in the * 976 * page. Interrupts must be off throughout access, as the * 977 * interrupt system is not smart enough to re-map this window * 978 * should it destroy it. Watch out for page fault interrupts! * 979 * The PPMODIFIED bit is set to indicate that this * 980 * physical page ( or its FBI ) has been altered. Implicitly, * 981 * the altered page must be written to mass storage. * 982 * The PPPUTADT bit indicates that this block is being * 983 * written to mass storage because it has been freed. After * 984 * the prior users MS data is safely destroyed (by this * 985 * write), the PPL is set to indicate that no MS block is * 986 * present. This is so that a subsequent zeropage request for * 987 * this block will not cause two main memory pages to be * 988 * images of the same MS block (this would be fatal!). * 989 * Afterwards, the block is made available in the ADT. We also * 990 * move this PPL to the head of the clean IDLE list (where it * 991 * will be used next). * 992 * The PPFWIP bit indicates that this page is being * 993 * forced out to Mass Storage, generally because of a * 994 * crashproofing requirement. This bit forces any new * 995 * reference to this page to wait for the forcewrite to * 996 * finish. * 997 * The PPBUSYWORD is incremented for each PAL that exists * 998 * and for each MSQ write element that exists. If this count * 999 * goes to zero on a dirty page, a MSQ write element is * 1000 * created. If this count goes to zero on a clean page, the * 1001 * PPL is moved to the IDLE list. * 1002 * * 1003 ********************************************************************************** 1004 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 241 (COREDEFS) F 16 Resident Data Structure Definitions 00000006 ABS 1005 LOGHASHTSZ EQU 6 number of bits used for hash 00000040 ABS 1006 HASHTSIZ EQU 2 POWER LOGHASHTSZ number of page table headers 00003460 BYTE 1007 PPHASHFLD BITS (32-LOGHASHTSZ):31 field in MS address which 1008 * is used for hashing 01DD9 00000000 1009 PPIDLOCK VFD STORE lock for idle lists (clean and used) 01DDA 00000000 1010 PPIDLCOUNT VFD STORE count of idle pages (clean and used) 01DDB 00000000 1011 PPLASTL VFD STORE last chain searched for used idle pages 1012 00000005 ABS 1013 LIDLHASHSZ EQU 5 number of bits used for hash 00000020 ABS 1014 IDLETBSZ EQU 2 POWER LIDLHASHSZ size of used idle tables 00003650 BYTE 1015 IDLHASHFLD BITS (32-LIDLHASHSZ):31 field in MS address used 1016 * for hashing 01DDC 00000000 1017 PPCLNIDLE VFD STORE list of 'clean' idle pages 00001DDD 1018 PPUSDIDLE BSS IDLETBSZ chain of 'used' idle pages 00001DFD 1019 PPENDIDLE BSS IDLETBSZ ends of 'used' idle page chains 1020 1021 * ( PPLs in PPIDLE ) 1022 01E1D 00000000 1023 PPLINIT VFD STORE list of PPLs generated for INITIAL and 1024 * INITPROC pages. These get added to the 1025 * clean idle list after INITPROC has run. 1026 01E1E 00000000 1027 PPERRLOCK VFD STORE lock used for the following list 01E1F 00000000 1028 PPERRLIST VFD STORE list of "retired" pages (usually due 1029 * to parity errors) PPLs 01E20 00000000 1030 PPERRCOUNT VFD 0+STORE count of retired pages 1031 00001E21 1032 PPAGELOCK BSS HASHTSIZ locks for PPAGE lists 00001E61 1033 PPAGELIST BSS HASHTSIZ chain of physical pages 1034 1035 1036 NOLIST CREF 00130000 4 REG 1037 PPL EQU R4 pointer to PPAGE element 1038 LIST CREF 00001EA1 1039 PPAGEPROT BASE PPL PHYSICAL PAGE ELEMENT 1040 BSSB 2 for readability 000904A0 4 ZBM 1041 PPFBIDISP BSSB WPP LOG 2 displacement part of FBI location 00091810 4 ZBM 1042 DUALWPPL BSSB 1 indicates second PPL in dualwrite 1043 BSSB 2 for readability 00091F10 4 ZBM 1044 PPLINK BSSB ADDRESS link to next element 1045 00170801 4 BASE 1046 PPBLOCK BSS 1 drive and MS block number 1047 00170802 4 BASE 1048 PPBUSYWORD BSS 1 count of page access elements pointing here 00090052 4 ZBM 1049 PPCNTL EQU PPBUSYWORD/BITS 0:4 control field 00090012 4 ZBM 1050 PPMODIFIED EQU PPCNTL/BIT 27 page modified flag 00090212 4 ZBM 1051 PPDISKERR EQU PPCNTL/BIT 28 on if mass storage error reading in block 00090412 4 ZBM 1052 PPPUTADT EQU PPCNTL/BIT 29 when page is written out, MS driver 1053 * should place block into ADT and 1054 * prevent block from being found resident. 00090612 4 ZBM 1055 PPFWIP EQU PPCNTL/BIT 30 indicates a force write is in progress 00090812 4 ZBM 1056 PPMEMERR EQU PPCNTL/BIT 31 a parity error has occurred on this page 00090C62 4 ZBM 1057 PPFBIBLK EQU PPBUSYWORD/BITS 6:11 index into PPLPFMAP for FBI 00001E10 BYTE 1058 PPBSYHIBIT EQU BIT 15 highest bit still in the count field 1059 * the busy count is tested with a JZA 1060 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 242 (COREDEFS) F 16 Resident Data Structure Definitions 00170803 4 BASE 1061 PPPMVALUE BSS 1 page map value, always read/write here 1062 * the copy of this value that 1063 * goes into a PAL will be made 1064 * read-only there if needed. 1065 DRCT 00000004 ABS 1066 PPLNTH EQU DISPW PPAGEPROT length of a PPAGE element 00000002 ABS 1067 PPLOG EQU PPLNTH LOG 2 1068 ORG PPAGEPROT 1069 1070 ********************************************************************************** 1071 * * 1072 * PPFB elements. * 1073 * For a few special cases, a PPL and a corresponding FBI * 1074 * are placed into a single block of free storage. This * 1075 * definition serves to format a block of this form. * 1076 * * 1077 ********************************************************************************** 1078 00001EA1 1079 PPFBPROTO BASE PPL 1080 BSS PPLNTH allot room for the PPL 00170804 4 BASE 1081 PPFBFBI BSS FBILNTH and room for the FBI 1082 DRCT 0000000F ABS 1083 PPFBLNTH EQU DISPW PPFBPROTO length of the element 00000004 ABS 1084 PPFBLOG EQU PPFBLNTH LOG 2 1085 ORG PPFBPROTO 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 243 (COREDEFS) F 16 Resident Data Structure Definitions 1087 1088 ********************************************************************************** 1089 * * 1090 * For doing system load testing pages are sometimes * 1091 * taken out of service from the system. We keep track of * 1092 * these pages on the TAKELIST. TAKENUM is set to indicate the * 1093 * number of pages we want removed from the system, and * 1094 * TAKECOUNT is the number actually removed. The dispatcher * 1095 * checks to see if these are equal and if not will do what * 1096 * ever is necessary to make them equal. * 1097 * * 1098 ********************************************************************************** 1099 01EA1 00000000 1100 TAKELOCK VFD STORE lock for the following list 01EA2 00000000 1101 TAKELIST VFD STORE list of pages taken from system 01EA3 00000000 1102 TAKENUM VFD STORE number of pages requested to be taken 01EA4 00000000 1103 TAKECOUNT VFD STORE number of pages actually taken 1104 00000014 ABS 1105 TAKEFUDGE EQU 20 number of extra pages needed beyond 1106 * the amount used by the system and 1107 * a set amount for each user 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 244 (COREDEFS) F 16 Resident Data Structure Definitions 1109 ********************************************************************************** 1110 * * 1111 * Session Name/Number Table * 1112 * This table associates server names (like "!SPOOLER") * 1113 * with session numbers. It is manipulated with the * 1114 * URGETPNUM, ORSETPNUM and ORCLRPNUM requests. * 1115 * * 1116 ********************************************************************************** 1117 01EA5 00000000 1118 PNAMELOCK VFD STORE lock for this list (LOCKLIST & SRCHLIST) 01EA6 00000000 1119 PNAMELIST VFD STORE root for this list 1120 00001EA7 1121 PNAMEPROT BASE R0 one for each server name 00160800 0 BASE 1122 PNAMELINK BSS 1 link to next PNAME element 00160801 0 BASE 1123 PNAMEPROC BSS 1 session number responsible for this entry 00160802 0 BASE 1124 PNAMELEN BSS 1 length of the following name 00000028 ABS 1125 PNAMEMAXLN EQU 40 maximum name length 0016000C 0 CACH 1126 PNAMENAME BSSC PNAMEMAXLN the actual name 1127 DRCT 00000004 ABS 1128 PNAMELOG EQU (DISPW PNAMEPROT) LOG 2 log size of this block 1129 ORG PNAMEPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 245 (COREDEFS) F 16 Resident Data Structure Definitions 1131 1132 ********************************************************************************** 1133 * * 1134 * Operator Message List * 1135 * The following list describes the pending messages to * 1136 * the operator. These can be automatically generated by the * 1137 * system (eg, for device not ready errors) or by XREQs. The * 1138 * first 10 characters of each message will be displayed in * 1139 * the front panel lights and the rest is available for output * 1140 * to the operator via an XREQ. * 1141 * Each message has a unique serial number (assigned * 1142 * sequentially from 1 after boot) which is never re-used. * 1143 * The serial number is needed to cancel a message. * 1144 * * 1145 ********************************************************************************** 1146 01EA7 00000000 1147 OPMSGLOCK VFD STORE lock for the operator message list 01EA8 00000000 1148 OPMSGLIST VFD STORE head of the list 1149 00001EA9 1150 OPMSGPROTO BASE R0 prototype of message 00160800 0 BASE 1151 OPMSGWORDA BSS 0 word label for beginning 00080010 0 ZBM 1152 OPMSGHORN BSSB 1 sound horn when displaying this message 000802E0 0 ZBM 1153 OPMSGPROC BSSB 14 session originating message 00081F10 0 ZBM 1154 OPMSGLINK BSSB ADDRESS link to next element 00080181 0 ZBM 1155 OPMSGID BSSB 24 message serial number 00160007 0 CACH 1156 OPMSGLEN BSSB 8 length of this message 00160802 0 BASE 1157 OPMSGTEXT LABEL 00160008 0 CACH 1158 OPMSGTEXTC BSSC 0 1159 BSS 32-(DISPW OPMSGWORDA) room for message text 00000077 ABS 1160 OPMSGMAXLN EQU (DISPC OPMSGTEXT)-1 max message length, 1161 * with room for final null 1162 DRCT 00000005 ABS 1163 OPMSGLOG EQU (DISPW OPMSGPROTO) LOG 2 log size of block 1164 ORG OPMSGPROTO recover lost space 1165 01EA9 00000000 1166 OPMSGSER VFD STORE last serial number assigned 01EAA 00000000 1167 OPMSGDISP VFD STORE serial number of message being displayed 1168 * (zero if normal display) 24 INPUT VIRTCOREDEFS virtual system in-core structure definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 246 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 3 4 ********************************************************************************** 5 * * 6 * USER LIMIT LIST * 7 * This list contains the limits for accounts that are in * 8 * use. When a file is referenced or an account is logged * 9 * onto the system its limit block is copied into a resident * 10 * ULB. This allows all usage of an account to be accounted * 11 * and limited by one copy of that accounts limits. * 12 * ULLOCK is incremented by one when someone is searching * 13 * the list and decremented once the searcher has incremented * 14 * the busy counter on his entry. The top bit of ULLOCK goes * 15 * on when someone wishes to modify the links of the list - * 16 * any new searchers must wait and the modifier must wait * 17 * until all searching is finished. * 18 * Note that ULLOCK locks all changing of the first word * 19 * of the ULB. A failure may occur if the first word is * 20 * changed without the lock held, even if the change is by a * 21 * RMW instruction. Especially note the individual bits in * 22 * the upper part of the word. * 23 * The ULLIMITS part of this block is a bit by bit copy * 24 * of the UDLIMITS area in the directory corresponding to this * 25 * entry. Whenever one wants to update any of these fields in * 26 * the ULB they should hold the lock ULLIMLOCK. For whole word * 27 * entries RMW instructions will be sufficient. Note that * 28 * some of these fields are cleared with a STZ, this is not a * 29 * RMW instruction. Since the limits are not critical fields * 30 * ( not likely to cause a system crash ) this is an * 31 * acceptable risk. * 32 * * 33 ********************************************************************************** 34 01EAB 00000000 35 ULLIST VFD FLDADRS*STORE root of user limit list 01EAC 00000000 36 ULLOCK VFD STORE lock word for user limit list 01EAD 00000000 37 DIRLOCKING VFD STORE in the process of locking or unlocking a ULB 01EAE 00000000 38 SYSTEMULB VFD FLDADRS*STORE pointer to system overhead ULB 01EAF 00000000 39 ULLIMLOCK VFD STORE lock for updating ULB limits 40 41 NOLIST CREF 00130000 4 REG 42 ULB EQU R4 43 LIST CREF 00001EB0 44 USERLIMITS BASE ULB USER LIMITS BLOCK 00170800 4 BASE 45 ULWORDA BSS 1 00090010 4 ZBM 46 ULSHADOW EQU ULWORDA/BIT 0 on if account is a shadow 00090210 4 ZBM 47 ULFOREIGN EQU ULWORDA/BIT 1 on if account volume is foreign 00090410 4 ZBM 48 ULRAFDIR EQU ULWORDA/BIT 2 1 sez directory is two level indexed 00090610 4 ZBM 49 ULNOTHERE EQU ULWORDA/BIT 3 on if ULB is only partially here 50 * ( being destroyed ) 10000000 ABS 51 ULNOTHING EQU 1*BIT 3 to set above bit 000908B0 4 ZBM 52 ULIDENT EQU ULWORDA/BITS 4:14 constant value identifying a ULB 00000765 ABS 53 ULIDVAL EQU 0765 value in ULIDENT (looks like xECA) 00091F10 4 ZBM 54 ULLINK EQU ULWORDA/FLDADRS pointer to next limit block 00170801 4 BASE 55 ULBLOCK BSS 1 MS address of directory 00090081 4 ZBM 56 ULDRIVE EQU ULBLOCK/VOLFIELD drive dir. on 00091181 4 ZBM 57 ULMSBLK EQU ULBLOCK/MSBLKFIELD drive address of dir. 00170802 4 BASE 58 ULACCNM BSS2 1 programmer name of account 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 247 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 00170804 4 BASE 59 ULACCPROJ BSS 1 division-project of account 60 * NOTE: CAUTION, HAZARD, DANGER, DANGER. The following 61 * word may not be modified at any time, in any way shape 62 * or form, by any operation that is not a RMW. No 63 * ZBMs will do. 00170805 4 BASE 64 ULBUSYWORD BSS 1 80000000 ABS 65 ULBLOCKING EQU 1*BIT 0 bit set in busy word to indicate dir in use 66 * The following symbol may only be used to examine 67 * the current count. It may not be modified. 00091F15 4 ZBM 68 ULBUSYCTR EQU ULBUSYWORD/FLDADRS count of people using this ULB 69 * UDLIMITS -- copy of directory information 00170806 4 BASE 70 ULLIMITS BSS LIMITSIZE user limits 00170806 4 BASE 71 ULRWORD EQU ULLIMITS/RESTRWORD restrictions word 00090816 4 ZBM 72 ULRSTRG1 EQU ULRWORD/XREQRSTR/BIT 31 00090616 4 ZBM 73 ULRSTRG2 EQU ULRWORD/XREQRSTR/BIT 30 00090416 4 ZBM 74 ULRSTRG3 EQU ULRWORD/XREQRSTR/BIT 29 00090216 4 ZBM 75 ULRSTRG4 EQU ULRWORD/XREQRSTR/BIT 28 00090016 4 ZBM 76 ULRSTRG5 EQU ULRWORD/XREQRSTR/BIT 27 00170807 4 BASE 77 ULPWORD EQU ULLIMITS/PRIVWORD privilege word 00090047 4 ZBM 78 ULFACCESS EQU ULPWORD/LIMFACCESS file access control 00090847 4 ZBM 79 ULPACCESS EQU ULPWORD/LIMPACCESS password access control 00091A57 4 ZBM 80 ULLOGSPOT EQU ULPWORD/LIMLOGSPOT where to write accounting info 00170808 4 BASE 81 ULTIMLIM EQU ULLIMITS/TIMLIM time limit ( in seconds ) 00170809 4 BASE 82 ULTIMUSD EQU ULLIMITS/TIMUSD time used ( in seconds ) 0017080A 4 BASE 83 ULWLCKLIM EQU ULLIMITS/WLCKLIM wall clock limit ( in minutes ) 0017080B 4 BASE 84 ULWLCKUSD EQU ULLIMITS/WLCKUSD wall clock time used ( in minutes ) 0009018C 4 ZBM 85 ULDSKSAVL EQU ULLIMITS/DSKSAVL saved disk blocks limit 0009318C 4 ZBM 86 ULDSKWARN EQU ULLIMITS/DSKWARN disk block warning limit 0009218D 4 ZBM 87 ULDSKLIM EQU ULLIMITS/DSKLIM disk block hard limit 0009118E 4 ZBM 88 ULDSKUSD EQU ULLIMITS/DSKUSD disk blocks used 89 * end of copy of directory information 0017080F 4 BASE 90 ULSCRDSK BSS 1 scratch disk space 91 DRCT 00000004 ABS 92 ULLOG EQU (DISP USERLIMITS) LOG 2 length of limit block 93 ORG USERLIMITS 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 248 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 95 96 ********************************************************************************** 97 * * 98 * PROCESS CONTROL BLOCK * 99 * One PCB is associated with each session. This block * 100 * holds the suspension information for a process. The reason * 101 * these exist and the information is not just kept in the PSA * 102 * is that it is planned that someday the PSA would be in * 103 * virtual memory and that the PCBs would be the only * 104 * guaranteed resident part of a user. Thus it holds his * 105 * running/suspended information. * 106 * The first three words of this list element are locked * 107 * by the lock word for the SQ. The remainder is locked by * 108 * PCNTLLOCK. * 109 * * 110 ********************************************************************************** 111 01EB0 00000000 112 PCCOUNT VFD STORE number of entries in PCONTROL list 01EB1 00000000 113 PCONTROL VFD FLDADRS*STORE list of process control blocks 114 * non-standard links 01EB2 00000000 115 PCNTLLOCK VFD STORE lock for above and PCNUMARRAY 116 * incremented when searching, 117 * sign on when changing 01EB3 00481EB4 118 PPCNUMARR PTR PCNUMARRAY/BIT 0 bit pointer to pnum array 01EB4 7FFFFFFF 119 PCNUMARRAY VFD 07FFFFFFF array of available process numbers 01EB6 FFFFFFFF 120 VFD -1,-1 (0 is not available) 01EB8 FFFFFFFF 121 VFD -1,-1 ARRAY SIZE MUST BE POWER OF TWO, 01EBA FFFFFFFF 122 VFD -1,-1 GREATER THAN TWO (for FINDSESSNM 01EBC FFFFFFFF 123 VFD -1,-1 to work) 01EBE FFFFFFFF 124 VFD -1,-1 array is locked by PCNTLLOCK 01EC0 FFFFFFFF 125 VFD -1,-1 01EC2 FFFFFFFF 126 VFD -1,-1 01EC3 FFFFFFFF 127 VFD -1 16 words = 511 possible numbers 00000010 ABS 128 PCNUMARRSZ EQU DISPW PCNUMARRAY size of table 129 00130000 4 REG 130 PCB EQU R4 00001EC4 131 PCBPROT BASE PCB 00170000 4 CACH 132 PCQPARM2 BSSB 8 extra reason field for shutdown 00091010 4 ZBM 133 PCQCLNMARK BSSB 1 marker used by WHICHHUNT 00091260 4 ZBM 134 PCQUEUE BSSB 6 'name' of queue this session is in 00091F10 4 ZBM 135 PCQLINK BSSB ADDRESS link in queue 00170801 4 BASE 136 PCQPARM BSS 2 reason that user is in this queue 137 138 * Above locked by SQLOCKS, below by PCNTLLOCK 139 0000000C ABS 140 PROCNUMSIZ EQU 12 size of session number in bits 141 * ( may have 4096 sessions ) 00001000 ABS 142 MAXPROCNUM EQU 2 POWER PROCNUMSIZ highest session number (+1) 000900C3 4 ZBM 143 PCPROCNUM BSSB PROCNUMSIZ identifying session number 00091813 4 ZBM 144 PCSYSPROC BSSB 1 one sez this is a system process 00091A13 4 ZBM 145 PCSPECPROC BSSB 1 this guy is special (not an ALL for the OPR) 146 BSSB 1 filler to make things easier to read 00091F13 4 ZBM 147 PCPSADRS BSSB ADDRESS pointer to associated PSA 000900C4 4 ZBM 148 PCPARENT BSSB PROCNUMSIZ session number of parent session 149 BSSB 3 filler to make things readable 00091F14 4 ZBM 150 PCNXTCB BSSB ADDRESS pointer to next PCB 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 249 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 00170805 4 BASE 151 PCBSITE BSS 2 site name for this session 152 153 DRCT 00000007 DISP 154 PCBLNTH EQU DISP PCBPROT length of a PCB 00000003 ABS 155 PCBLOG EQU PCBLNTH LOG 2 size for memory routines 156 ORG PCBPROT reclaim lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 250 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 158 159 ********************************************************************************** 160 * * 161 * VIRTUAL TABLES * 162 * * 163 ********************************************************************************** 164 165 ********************************************************************************** 166 * * 167 * PROCESS STATUS AREA * 168 * A PSA is created for each user session. It contains * 169 * the chain heads for all of the lists associated with the * 170 * session, pointers to other items associated with the * 171 * session, and any other miscellaneous items required. * 172 * * 173 * PSLOCK and foreign access to a PSA. * 174 * * 175 * A PSA may be safely accessed by either the process * 176 * that is running from that PSA or by a properly cautious * 177 * process via the PCB list. These cases are explained * 178 * separately: * 179 * * 180 * 1) The session data structures are designed to allow free access to * 181 * the process running out of the PSA. That is, nearly no locking * 182 * is required to diddle the structures. The only exceptions being, * 183 * creation, destruction, and modification of those structures that * 184 * are required by the asynchronous interrupts. * 185 * Creation: since access is gained to the PSA via its PCB, a * 186 * session is created by building the PSA and all associated * 187 * tables and then lastly placing the PCB into the PCB list. * 188 * Destruction: since someone could be looking at the PSA while * 189 * it is being destroyed, the PCB is first removed from its * 190 * list and the destroyer waits until PSLOCK is unlocked. * 191 * That is, the session is removed so no one else may find it * 192 * and then you wait until all of the lookers are gone. * 193 * Session data structure examination: the process running from * 194 * the PSA may examine any data structure associated with that * 195 * PSA without any locking since only that process modifies * 196 * the structures and any transient modifiers only add to * 197 * the ends of lists. The exceptions to this are the UPCVASP * 198 * and UPCWSX lists that may be altered by the core scheduler * 199 * on any interrupt. Examination and/or modification of * 200 * these lists may only occur in the resident system with the * 201 * interrupts off. * 202 * Session data structure modification: the process running * 203 * from the PSA may modify list links freely except for the * 204 * following lists that require that PSLOCK be locked: * 205 * PSUERROR, PSGIFTUNIT * 206 * In general, though, all lists should be added to and deleted * 207 * from "cleanly". That is, at every instant the list should * 208 * be searchable. * 209 * NOTE: An interlocking problem exists in relation to * 210 * PSDFLTDIR. The current UPC (PSCURRPROC) may change * 211 * this pointer (in FRALIAS and ORBYE) and call FREEULB * 212 * or FREEULBC. If this is the only user of the ULB, * 213 * the ULB space is freed. Another session doing a * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 251 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 214 * URSESSINFO or ORSESSINFO request against this session * 215 * may get a 'bad ULB' halt (HALT10E1) if it (in STATPI) * 216 * grabs the ULB being freed. A semaphore is impossible * 217 * since it would have to to be locked (IOFF) across the * 218 * FREEULB or FREEULBC, but the latter subroutines may * 219 * result in a page fault. We settle for minimizing the * 220 * critical region by expanding, slightly, the time * 221 * between changing the pointer and freeing the ULB. * 222 * * 223 * * 224 * 2) For the posting of asynchronous events, one process is required * 225 * to examine and add entries to another session's PSA lists. * 226 * The PSA is found via its PCB so, to protect the looker from * 227 * having the PSA destroyed out from under it, either the PCB * 228 * list should be locked (so that it and its PSA cannot be * 229 * removed) or the wait queue that it's in should be locked * 230 * (so that the process cannot run to destroy itself) until * 231 * PSLOCK is locked. For a foreign looker, PSLOCK must * 232 * be locked to either look at or to modify anything in * 233 * the PSA. The only foreign accessors are * 234 * those that are either posting an event interrupt or * 235 * examining the current interrupt mask to see if it should * 236 * post one. These examine the registers in the console area (the * 237 * "bottom most" one) or add to the error list. * 238 * * 239 ********************************************************************************** 240 00001EC4 241 PSAPROT BASE R2 PROGRAM STATUS AREA 00088010 2 ZBM 242 PSWAITED BSSB 1 1 sez job released from wait queue 243 (SQLOCKWAIT or SQFILEWAIT) 244 * scheduling variables 00088230 2 ZBM 245 PSLOCKCNTR BSSB 3 count for each resource locked 246 BSSB 8 filler 00089830 2 ZBM 247 PSPRIORITY BSSB 3 priority for this session 248 * 0 is highest priority, 7 least valuable 00089F10 2 ZBM 249 PSCACHN BSSB ADDRESS pntr to chain of console areas 250 00168004 2 CACH 251 PSGRACE BSSB 8 grace for ex-trouble-makers 00089071 2 ZBM 252 PSPFFREQ BSSB 7 disk xfers frequency parameter 00089F11 2 ZBM 253 PSCACHNP1 BSSB ADDRESS pntr to 2nd console area in chain 254 000880F2 2 ZBM 255 PSWSSIZE BSSB 15 working set size (oversized) 00089F12 2 ZBM 256 PSPROCCB BSSB ADDRESS pntr to process control block 257 00088043 2 ZBM 258 PSOURCPU BSSB 4 CPU that we want to run on (0=>don't care) 000888B3 2 ZBM 259 PSLGFSESS BSSB 11 session to send logoff message to 00089F13 2 ZBM 260 PSUSERLIMP BSSB ADDRESS pntr to user limit block (logged on) 261 00088044 2 ZBM 262 PSDDIRPRIV BSSB 4 privilege to access default dir. 00088854 2 ZBM 263 PSPRIVMASK BSSB 5 bits for current restrictions enforced 264 * by user, same bits as UPCPRIV 00089214 2 ZBM 265 PSCNTLMODE BSSB 1 bit indicating current UPC is CM 00089414 2 ZBM 266 PSENDRUN BSSB 1 says to put guy at end of SQRUNNABLE 267 BSSB 4 filler 00089F14 2 ZBM 268 PSDFLTDIR BSSB ADDRESS pntr to ULB of directory used as default (alias) 269 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 252 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 270 BSSB 15 filler 00089F15 2 ZBM 271 PSPROCLIST BSSB ADDRESS ptr to all UPC blocks 272 00088116 2 ZBM 273 PSCURRPROC BSSB ADDRESS ptr to current UPC block 0008A316 2 ZBM 274 PSUNITS BSSB ADDRESS list of global UCEs for this session 275 BSSB 13 filler 00089F17 2 ZBM 276 PSFCBLIST BSSB ADDRESS list of all FCBs for this session 277 00168808 2 BASE 278 EVENTLOCK BSS 1 event lock for URDELAY and GIVEUINT 279 00168809 2 BASE 280 PSGIFTUNIT BSS 1 list of gift units 281 BSS 0 the following words are not implicitly interlocked 0008810A 2 ZBM 282 PSSUMCPU BSSB 16 sum of CPU time used 0008A10A 2 ZBM 283 PSSUMSDT BSSB 16 sum of shut down time 0000FFFF ABS 284 PSSUMMAX EQU (2 POWER 16)-1 max possible value for above fields. 0008810B 2 ZBM 285 PSLASTQUAN BSSB 16 size of last quantum 0016880C 2 BASE 286 PSLOCK BSS 1 lock controlling foreign access 287 * to these fields: PSUERROR, PSGIFTUNIT 0016880D 2 BASE 288 PSUERROR BSS 1 list of pending user error codes 289 * error list locked by PSLOCK 290 * Following fields define the format of both PSUERROR and UPCUERROR, 291 * the 'root' words of the user error lists for the session and for 292 * individual underprocesses. Some fields are not used by both, and 293 * the non-user should leave such fields 0. 00001610 BYTE 294 RTVMFISRB EQU BIT 11 on if session should get UINTVMFISR 00001810 BYTE 295 RTSTOPB EQU BIT 12 on if session is to go to STOPWAIT 00001A10 BYTE 296 RTSWITCHB EQU BIT 13 on if to switch this session out 00001C10 BYTE 297 RTVERYBADB EQU BIT 14 1 sez a monitor interruptable condition in list 00001750 BYTE 298 RTUERRORZ EQU RTVMFISRB+RTSTOPB+RTSWITCHB+RTVERYBADB+FLDADRS 299 0016880E 2 BASE 300 PSSHUTTIME BSS 1 time of last shutdown 0016880F 2 BASE 301 PSQUANTPTR BSS 1 serial number of quantum timer element 00168810 2 BASE 302 PSTIMEUSED BSS 1 cpu time used ( in ms. ) 00168811 2 BASE 303 PSTIMLIM BSS 1 limit for PSTIMEUSED ( in ms. ) 00168812 2 BASE 304 PSSESUSD BSS 1 session output blocks created 00168813 2 BASE 305 PSSESLIM BSS 1 session output blocks limit 00168814 2 BASE 306 PSSESMAX BSS 1 session output blocks maximum (high water mark) 00168815 2 BASE 307 PSHELDATE BSS2 1 wall clock time of hello 00168817 2 BASE 308 PSOPMSGID BSS 1 id of most recent message to operator 00168818 2 BASE 309 PSMSGALLOW BSS 1 mask for message classes allowed 00168819 2 BASE 310 PSMSGINT BSS 1 mask for msg classes causing interrupt 0016881A 2 BASE 311 PSMSGLIST BSS 1 list of pending messages 0016881B 2 BASE 312 PSMAPVALS BSS MAXMAPVALS PM values for free storage pages, 313 * defined with page file definintions. 314 DRCT 00000005 ABS 315 PSLOG EQU (DISPW PSAPROT) LOG 2 length of PSA 316 ORG PSAPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 253 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 318 319 ********************************************************************************** 320 * * 321 * Temporary area used in the processing of file name * 322 * parameters. * 323 * * 324 ********************************************************************************** 325 326 NOLIST CREF 00134000 5 REG 327 EQT EQU R5 328 LIST CREF 00001EC4 329 EQTEMPPROT BASE EQT 00174800 5 BASE 330 EQWORDA BSS 1 00094010 5 ZBM 331 CNTLPKFLG EQU EQWORDA/BIT 0 on if control chars to pack as letters 00174801 5 BASE 332 EQVOLUME BSS2 1 volume name 00174803 5 BASE 333 EQSYSTEM BSS 1 system name 00174804 5 BASE 334 EQVOLPW BSS2 1 password (not used as yet) 00000005 ABS 335 EQELSIZE EQU DISPW EQVOLUME words in each part 00174806 5 BASE 336 EQACCT BSS2 1 account name 00174808 5 BASE 337 EQACCTPROJ BSS 1 account project 00174809 5 BASE 338 EQACCTPW BSS2 1 account directory password 0017480B 5 BASE 339 EQFILENM BSS2 1 filename 0017480D 5 BASE 340 EQFILEEXT BSS 1 file name extension 0017480E 5 BASE 341 EQFILEPW BSS2 1 file access password 342 DRCT 00000004 ABS 343 EQTEMPLOG EQU (DISPW EQTEMPPROT) LOG 2 344 ORG EQTEMPPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 254 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 346 347 ********************************************************************************** 348 * * 349 * GLOBAL FILE CONTROL BLOCK * 350 * All files opened for multiple write get a global file * 351 * control block to coordinate the actions between users. The * 352 * GFCs are kept in a linked list which must be locked * 353 * whenever searching for an element in the list. A pointer * 354 * to a GFC is kept in the FCB of any unit opened to a MW * 355 * file. * 356 * * 357 ********************************************************************************** 358 01EC4 00000000 359 GFCLIST VFD STORE linked list of GFCs 01EC5 00000000 360 GFCLOCK VFD STORE lock for the above list 361 00001EC6 362 GFCPROT BASE R3 0008C0F0 3 ZBM 363 GFUSECNT BSSB 15 count of users using this file 0008DF10 3 ZBM 364 GFLINK BSSB ADDRESS link to next GFC in the list 365 0008C021 3 ZBM 366 GFRAFTYPE BSSB 2 type of RAF 367 * 0 -> empty RAF 368 * 1 -> tiny RAF 369 * 2 -> small RAF 370 * 3 -> large RAF 371 BSSB 30 filler 372 0016C802 3 BASE 373 GFBLOCK BSS 1 root block of the file 0008C082 3 ZBM 374 GFVOL EQU GFBLOCK/VOLFIELD volume number portion of MS address 0008D182 3 ZBM 375 GFMSBLK EQU GFBLOCK/MSBLKFIELD actual block number 376 0016C803 3 BASE 377 GFFSN BSS 2 file serial number 0008C083 3 ZBM 378 GFFSNVOL EQU GFFSN/VOLFIELD 379 0016C805 3 BASE 380 GFXPNDLOCK BSS 1 lock held whenever a user is expanding 381 * the file 382 DRCT 00000003 ABS 383 GFCLOG EQU (DISPW GFCPROT) LOG 2 384 ORG GFCPROT recover wasted space 385 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 255 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 387 388 ********************************************************************************** 389 * * 390 * PATH CONTROL BLOCK * 391 * All the .PATHs in the system have an element in the * 392 * below list. These elements contain the queue elements for * 393 * the messages in the queue and the count of how many readers * 394 * and writers there are currently. * 395 * * 396 ********************************************************************************** 397 01EC6 00000000 398 PATHLOCK VFD 0 search and modify lock for list 01EC7 00000000 399 PATHLIST VFD 0 list of PATH control blocks 400 00001EC8 401 PTHPROT BASE R0 .PATH control block 00160800 0 BASE 402 PTHWORDA BSS 1 00081F10 0 ZBM 403 PTHLINK EQU PTHWORDA/FLDADRS link to next control block 404 00160801 0 BASE 405 PTHWORDB BSS 1 00080011 0 ZBM 406 PTHRDR EQU PTHWORDB/BIT 0 on if a reader exists 00080211 0 ZBM 407 PTHUSED EQU PTHWORDB/BIT 1 on if path hookup was once complete 00080411 0 ZBM 408 PTHINTE EQU PTHWORDB/BIT 2 ints enabled by reader 000808B1 0 ZBM 409 PTHSIZE EQU PTHWORDB/BITS 4:14 words used for messages 00000200 ABS 410 MAXPATHCORE EQU 2 POWER 9 max core use for message buffers 00081F11 0 ZBM 411 PTHQUE EQU PTHWORDB/FLDADRS root of message queue 412 00080112 0 ZBM 413 PTHREADER BSSB ADDRESS => PCB of path reader 00082312 0 ZBM 414 PTHREADFCB BSSB ADDRESS FCB pointer for reader of path 415 BSSB 7 filler 00081373 0 ZBM 416 PTHEXCWR BSSB PSNFLDLN UPC PSN with exclusive write access 417 00160804 0 BASE 418 PTHID BSS 2 creation date of path (unique identifier) 00080084 0 ZBM 419 PTHVOL EQU PTHID(0)/BITS 0:7 volume path is from 000810C4 0 ZBM 420 PTHBUSY EQU PTHID(0)/BITS 8:19 number of people equipped to path 000828C4 0 ZBM 421 PTHIDTOP EQU PTHID(0)/BITS 20:31 top 12 bits of date code 422 00160806 0 BASE 423 PTHWRTRS BSS 1 number of writers using this 00160807 0 BASE 424 PTHLOCK BSS 1 locks WORDB through end 425 DRCT 00000008 ABS 426 PTHLNTH EQU DISPW PTHPROT 00000003 ABS 427 PTHLOG EQU PTHLNTH LOG 2 428 ORG PTHPROT 429 430 * Proto-type for path message queue elements 00001EC8 431 PTHEPROT BASE R0 00160800 0 BASE 432 PTHEWORDA BSS 1 000800B0 0 ZBM 433 PTHENCHARS EQU PTHEWORDA/BITS 0:10 number of characters in record 00081640 0 ZBM 434 PTHELOGL EQU PTHEWORDA/BITS 11:14 word length of block log 2 00081F10 0 ZBM 435 PTHELINK EQU PTHEWORDA/BITS 15:31 pointer to next record 00160004 0 CACH 436 PTHECHARB BSSC 1 00080011 0 ZBM 437 PTHECONTN EQU PTHECHARB/BIT 24 indicates continued record 00080271 0 ZBM 438 PTHERTYPE EQU PTHECHARB/BITS 25:31 record type 00000005 ABS 439 PTHEHDR EQU DISPC PTHEWORDA fixed header size, in characters 00160005 0 CACH 440 PTHECHARS BSSC 0 user record starts here 441 DRCT 442 ORG PTHEPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 256 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 443 000000FB ABS 444 MAXRECWR EQU 64*CPW-PTHEHDR longest chunk allowed in path queue 445 * (user record size to use 64 words) 446 447 ********************************************************************************** 448 * * 449 * The next three sections define the structures used to * 450 * implement locks on file resources. The general structure * 451 * is that DLOCKLIST holds the list of Lock Control Blocks * 452 * (LOKs). Each LOK holds a list of Resource Control Elements * 453 * (RCEs). Each RCE holds a list of Lock Identifiers. (LIDs). * 454 * The first word of LOK elements in DLOCKLIST are locked by * 455 * DLOCKLOCK. Everything else (rest of LOKs, RCEs, and LIDs) * 456 * are locked by LOKLOCK. * 457 * * 458 ********************************************************************************** 459 ********************************************************************************** 460 * * 461 * LOCK CONTROL BLOCK * 462 * One of these elements exists for each of the files for * 463 * which there is at least one resource in use. They are * 464 * created when a locking a resource of a file for which there * 465 * are no current resources. They are destroyed when * 466 * LOKRCELIST becomes empty. A lock bit is provided for * 467 * access to LOKRCELIST and any structure or data therein. * 468 * Processes that attempt to lock a resource already held by * 469 * someone else are suspended if either one wants/has write or * 470 * if someone else is already suspended waiting for that * 471 * resource. Waiting processes suspend in SQLOCKWAIT. The * 472 * shutdown parameter is the LOKSERIAL number with the * 473 * resource number plugged into LOCKRESFIELD of the first word * 474 * (a tight fit!). The "additional reason" field in the PCB * 475 * holds the type of access the guy wants. * 476 * * 477 ********************************************************************************** 478 01EC8 00000000 479 DLOCKLOCK VFD STORE search and modify lock for list 01EC9 00000000 480 DLOCKLIST VFD STORE list of LOK control blocks 000010C0 BYTE 481 LOCKRESFLD EQU BITS 8:19 extra bits in PCB to ID resource 482 00001ECA 483 LOKPROT BASE R0 lock control block 00160800 0 BASE 484 LOKLINK BSS 1 link to next LOK 00160801 0 BASE 485 LOKLOCK BSS 1 lock for sublists and data 00160802 0 BASE 486 LOKRCELIST BSS 1 full word pointer to resources 00160803 0 BASE 487 LOKRCECNT BSS 1 number of RCEs on this LOK 488 BSS 2 filler 00160806 0 BASE 489 LOKSERIAL BSS2 1 serial number of this file 00080086 0 ZBM 490 LOKVOL EQU LOKSERIAL/VOLFIELD volume that file is from 491 * (to catch duplicate serial numbers) 492 DRCT 00000008 ABS 493 LOKLNTH EQU DISPW LOKPROT length of an element 00000003 ABS 494 LOKLOG EQU LOKLNTH LOG 2 log length for GETMEM 495 ORG LOKPROT recover lost space 496 497 ********************************************************************************** 498 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 257 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 499 * RESOURCE CONTROL ELEMENT * 500 * Each of these elements holds the list of users for a * 501 * particular "resource" from the file. They are created when * 502 * locking a resource for which there are no users. They are * 503 * destroyed when RCELIDLIST becomes empty. They can only be * 504 * accessed when the corresponding LOK element is locked. * 505 * * 506 ********************************************************************************** 507 00001ECA 508 RCEPROT BASE R0 resource control element 00160800 0 BASE 509 RCELINK BSS 1 link to next RCE 00160801 0 BASE 510 RCERESRCE BSS 1 resource number 511 BSS 1 filler 00160803 0 BASE 512 RCELIDLIST BSS 1 full word list head for users 513 DRCT 00000002 ABS 514 RCELOG EQU (DISP RCEPROT) LOG 2 515 ORG RCEPROT 516 517 ********************************************************************************** 518 * * 519 * LOCK IDENTIFIER * 520 * These elements identify a resource user. The * 521 * existence of one of these elements on the RCE list * 522 * signifies that the named session currently locks the * 523 * resource. LIDs are created and destroyed as the user locks * 524 * and unlocks the resource . LIDFCB identifies the logical * 525 * unit which was used to lock the file. When that unit is * 526 * closed all LIDs associated with it are destroyed. * 527 * LIDREADING indicates whether the lock is for reading * 528 * access. * 529 * * 530 ********************************************************************************** 531 00001ECA 532 LIDPROT BASE R0 Lock IDentifier 00080010 0 ZBM 533 LIDREADING BSSB 1 1 says for read access, 0 for write 534 BSSB 14 filler 00081F10 0 ZBM 535 LIDLINK BSSB ADDRESS link to next LID 00160801 0 BASE 536 LIDTAG LABEL labels word identifying user 000800C1 0 ZBM 537 LIDSESSION BSSB PROCNUMSIZ session number of user 538 BSSB WORDLNTH-ADDRESS-PROCNUMSIZ filler for readability 00081F11 0 ZBM 539 LIDFCB BSSB ADDRESS users unit used to lock 540 DRCT 00000001 ABS 541 LIDLOG EQU (DISP LIDPROT) LOG 2 542 ORG LIDPROT 543 544 ********************************************************************************** 545 * * 546 * USER ERROR ENTRY * 547 * One of these blocks get associated with the user * 548 * whenever an error occurs requiring a User Interrupt or * 549 * an entry to Control Mode. Elements specific to a UPC * 550 * (e.g. instruction failure) go on the UPC, all others * 551 * go on the PSA. The lists are maintained FIFO, except * 552 * that "serious" errors leap to the front. They are * 553 * checked whenever the session is associated with a CPU * 554 * that is passing through the dispatcher. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 258 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 555 * In addition to an error code and subcode, each * 556 * element has a modest control field to help us internally. * 557 * The 'Control Mode error' flag indicates whether the error * 558 * is directed toward the Control Mode process (e.g. Evict). * 559 * The 'very bad' flag indicates whether the error is * 560 * particularly serious. These errors are processed ahead * 561 * of all others in the list, and can not be "held off". * 562 * Also, they are the only errors that are processed even * 563 * if the process is in monitor state. The 'skip debug' * 564 * flag says whether the error was explicitly generated by * 565 * a debugger and so should not be given back to that * 566 * debugger. * 567 * * 568 ********************************************************************************** 569 00001ECA 570 UERPROT BASE R0 00160800 0 BASE 571 UERWORDA BSS 1 000800D0 0 ZBM 572 UERCODEZ EQU UERWORDA/BITS 0:12 control bits and code 00002610 BYTE 573 CMERRB EQU BIT 19 sez error is destined for CM 00001000 ABS 574 CMERR EQU 1*CMERRB 00002810 BYTE 575 VERYBADB EQU BIT 20 sez error is serious 00000800 ABS 576 VERYBAD EQU 1*VERYBADB 00002A10 BYTE 577 SKIPDEBUGB EQU BIT 21 sez miss debugger on pass up 00002CA0 BYTE 578 CODEPART EQU BITS 22:31 error code itself 00080210 0 ZBM 579 UERVERYBAD EQU UERCODEZ/VERYBADB 00080410 0 ZBM 580 UERCSKIPDB EQU UERCODEZ/SKIPDEBUGB 000806A0 0 ZBM 581 UERCODE EQU UERCODEZ/CODEPART 00081F10 0 ZBM 582 UERLINK EQU UERWORDA/FLDADRS link to next error 00160801 0 BASE 583 UERPARAM BSS 1 extra information on error 584 DRCT 00000001 ABS 585 UERLOG EQU (DISP UERPROT) LOG 2 size of UER element 586 ORG UERPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 259 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 588 589 ********************************************************************************** 590 * * 591 * Message Queue Element * 592 * Each of these elements describes a message sent via * 593 * URSENDMSG. They are chained off of the PSA of the receiving * 594 * session in chronological order. All of the message lists * 595 * are locked by MSGLOCK. * 596 * * 597 ********************************************************************************** 598 01ECA 00000000 599 MSGLOCK VFD STORE lock for these lists - PLOCK and PUNLOCK 600 00001ECB 601 MQEPROT BASE R0 message queue element 00160800 0 BASE 602 MQESTART BSS 0 beginning of element 00080040 0 ZBM 603 MQELOGSIZ BSSB 4 log size of this block 000808B0 0 ZBM 604 MQELENGTH BSSB 11 length of message, in characters 00081F10 0 ZBM 605 MQELINK BSSB ADDRESS link to next message 606 00160801 0 BASE 607 MQEBUF BSS 0 start of message buffer 00080101 0 ZBM 608 MQEPROC BSSB 16 session number of sender 00082101 0 ZBM 609 MQECLASS BSSB 16 class of this message (0..31) 00160802 0 BASE 610 MQEPRIVS BSS 1 privileges asserted with this message 00000008 ABS 611 MQEHEADLEN EQU DISPC MQEBUF size of preceeding header 612 00000014 ABS 613 MQEACCTLEN EQU 20 number of characters in account name 0016000C 0 CACH 614 MQEACCT BSSC MQEACCTLEN privilege account of sender 00160020 0 CACH 615 MQETEXT BSSC 0 beginning of message text 616 00000200 ABS 617 MQEMAXCORE EQU WPP/2 maximum core occupied by all MQEs for 1 session 00000018 ABS 618 MQEOVHDLEN EQU (MQEBUF DISPC MQESTART)+MQEACCTLEN overhead on message length 000007E8 ABS 619 MQEMAXLEN EQU MQEMAXCORE*CPW-MQEOVHDLEN length of longest allowed message 620 621 DRCT 622 ORG MQEPROT 623 624 * Define message format for user buffer. 625 MSGDEFS LIST 625 ********************************************************************************** 625 * * 625 * Definition of messages sent by URSENDMSG and received * 625 * by URGETMSG. * 625 * * 625 ********************************************************************************** 625 00001ECB 625 MSGPROTO BASE R0 00080100 0 ZBM 625 MSGPROC BSSB 16 when sending: session number of receiver 625 * when receiving: session number of sender 00082100 0 ZBM 625 MSGCLASS BSSB 16 class number of this message (0..31) 00160801 0 BASE 625 MSGPRIVS BSS 1 privileges associated with this message 625 * (see below for format) 00160802 0 BASE 625 MSGSTEXT BSS 0 when sending: start of message text 00160008 0 CACH 625 MSGACCT BSSC 20 when receiving: account name of sender, 625 * in ASCII, padded with blanks, or blank 625 * if account name not given. 00160807 0 BASE 625 MSGRTEXT BSS 0 when receiving: start of message text 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 260 (VIRTCOREDEFS) F 17 Virtual System Data Structure Definitions 625 625 * Definition of bits MSGPRIVS: 625 00000010 BYTE 625 MSGPRIVID EQU BIT 0 Sender's Privilege Account name will be put into MSGACCT. 00000210 BYTE 625 MSGPRIVOS EQU BIT 1 Sender is the operating system. 00000410 BYTE 625 MSGPRIVLID EQU BIT 2 Sender's Logged On Account name will be put into MSGACCT. 00002810 BYTE 625 MSGPRIVCM EQU BIT 20 Sender is Control Mode 00002A10 BYTE 625 MSGPRIVNXO EQU BIT 21 Sender is NOT Execute Only. 00002C10 BYTE 625 MSGPRIVMGR EQU BIT 22 Sender can execute MANAGER requests. 00002E10 BYTE 625 MSGPRIVBKP EQU BIT 23 Sender can execute BACKUP requests. 00003010 BYTE 625 MSGPRIVMW EQU BIT 24 . . . MAINTENANCE WRITE requests. 00003210 BYTE 625 MSGPRIVMR EQU BIT 25 . . . MAINTENANCE READ requests. 00003410 BYTE 625 MSGPRIVOPR EQU BIT 26 . . . OPERATOR requests. 00003610 BYTE 625 MSGPRIVG5 EQU BIT 27 . . . GROUP 5 (currently unused) requests. 00003810 BYTE 625 MSGPRIVG4 EQU BIT 28 . . . GROUP 4 (message and batch) requests. 00003A10 BYTE 625 MSGPRIVG3 EQU BIT 29 . . . GROUP 3 (attribute change) requests. 00003C10 BYTE 625 MSGPRIVG2 EQU BIT 30 . . . GROUP 2 (catalog fetch) requests. 00003E10 BYTE 625 MSGPRIVG1 EQU BIT 31 . . . GROUP 1 (limit change) requests. 625 625 * Some message classes are pre defined (or at least usually used for...) 00000000 ABS 625 MSGCLSRESP EQU 0 response message 00000001 ABS 625 MSGCLSVERB EQU 1 verbal communication between users 00000002 ABS 625 MSGCLSOPR EQU 2 urgent communication from OPR 00000003 ABS 625 MSGCLSSPLR EQU 3 messages to the spooler 00000004 ABS 625 MSGCLSTERM EQU 4 concurrent session termination message 625 * EQU 5:15 reserved for BTI 625 * EQU 16:31 available to implementors 625 625 DRCT 625 ORG MSGPROTO recover lost space 25 INPUT USERCOREDEFS user in-core structure definitions 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 261 (USERCOREDEFS) F 18 User Data Structure Definitions 3 4 ********************************************************************************** 5 * * 6 * OVER/UNDER PROGRAM CONTROL * 7 * These blocks keep the variables that are associated * 8 * with a particular program ( memory, restrictions, * 9 * registers, ... etc ). Programs in a session are organized * 10 * as a tree with CM being at the top, with sons, * 11 * grandchildren, etc below it. * 12 * The PSA has one pointer to the tree head and another * 13 * pointer to the current program. Normally, there are only * 14 * two programs in any session: control mode at the top level * 15 * and the users program below it. A debugger may be inserted * 16 * between them. * 17 * A note on memory management. As discussed in the * 18 * scheduler notes, a PAL present in any UPC will prevent a * 19 * page from being removed from memory. However, a PAL does * 20 * not by itself make a volume busy. Therefore, PALs in the * 21 * working set must always be associated with a volume busy * 22 * count, otherwise the volume may be dismounted while pages * 23 * from it are still present in the PPAGE list. As a practical * 24 * matter, we must prevent any page that is part of the volume * 25 * structure (label, sec, idx) from being placed into the WSX * 26 * list. If a page is present and associated with any type of * 27 * file, it is okay to place it into the WSX. * 28 * * 29 ********************************************************************************** 30 00001ECB 31 UPCPROT BASE R0 00160800 0 BASE 32 UPCWORDA BSS 1 00081F10 0 ZBM 33 UPCSONPTR EQU UPCWORDA/FLDADRS pointer to son process 000800F0 0 ZBM 34 UPCPRIV EQU UPCWORDA/UPR15 35 00003E10 BYTE 36 UPRSTCTG1B EQU BIT 31 on if group 1 restrictions (limit change) 00003C10 BYTE 37 UPRSTCTG2B EQU BIT 30 on if group 2 restrictions (catalog fetch) 00003A10 BYTE 38 UPRSTCTG3B EQU BIT 29 on if group 3 restrictions (acct att. chng) 00003810 BYTE 39 UPRSTCTG4B EQU BIT 28 on if group 4 restrictions (unassigned) 00003610 BYTE 40 UPRSTCTG5B EQU BIT 27 on if group 5 restrictions (unassigned) 00003410 BYTE 41 UPOPREQB EQU BIT 26 on if operator requests restricted 00003210 BYTE 42 UPMAINTRB EQU BIT 25 on if maintenance read restricted 00003010 BYTE 43 UPMAINTWB EQU BIT 24 on if maintenance write restricted 00002E10 BYTE 44 UPBACKUPB EQU BIT 23 on if backup requests restricted 00002C10 BYTE 45 UPMANAGRB EQU BIT 22 on if manager requests restricted 00002A10 BYTE 46 UPEXECUTOB EQU BIT 21 on if address space is execute only 00002810 BYTE 47 UPCNTLMODB EQU BIT 20 on if in CONTROL MODE 000003E0 ABS 48 UPDFLTREST EQU 1*UPMANAGRB+1*UPMAINTWB+1*UPMAINTRB+1*UPBACKUPB+1*UPOPREQB 49 * default restrictions 50 00081C10 0 ZBM 51 UPRSTCTG1 EQU UPCPRIV/UPRSTCTG1B 00081A10 0 ZBM 52 UPRSTCTG2 EQU UPCPRIV/UPRSTCTG2B 00081810 0 ZBM 53 UPRSTCTG3 EQU UPCPRIV/UPRSTCTG3B 00081610 0 ZBM 54 UPRSTCTG4 EQU UPCPRIV/UPRSTCTG4B 00081410 0 ZBM 55 UPRSTCTG5 EQU UPCPRIV/UPRSTCTG5B 00081210 0 ZBM 56 UPOPREQ EQU UPCPRIV/UPOPREQB 00081010 0 ZBM 57 UPMAINTR EQU UPCPRIV/UPMAINTRB 00080E10 0 ZBM 58 UPMAINTW EQU UPCPRIV/UPMAINTWB 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 262 (USERCOREDEFS) F 18 User Data Structure Definitions 00080C10 0 ZBM 59 UPBACKUP EQU UPCPRIV/UPBACKUPB 00080A10 0 ZBM 60 UPMANAGR EQU UPCPRIV/UPMANAGRB 00080810 0 ZBM 61 UPEXECUTO EQU UPCPRIV/UPEXECUTOB 00080610 0 ZBM 62 UPCNTLMODE EQU UPCPRIV/UPCNTLMODB 63 00080041 0 ZBM 64 UPCTERMGRP BSSB 4 terminating character set 65 BSSB 3 filler 00080E11 0 ZBM 66 UPCIMDBUG BSSB 1 says whether prog thinks its debugging 00081011 0 ZBM 67 UPCNETINTE BSSB 1 non-empty term unit interrupt enable 00081371 0 ZBM 68 UPCSERNM BSSB PSNFLDLN underprocess serial number 69 BSSB 15 filler to make things easy to read 00081F12 0 ZBM 70 UPCCONSOLE BSSB ADDRESS => CCA at this level 71 BSSB 15 filler to make things easy to read 00081F13 0 ZBM 72 UPCPRIVULB BSSB ADDRESS => ULB giving privilege 000800F4 0 ZBM 73 UPCMAGEV BSSB 15 maximum age of PAL in VASP list 00081F14 0 ZBM 74 UPCRUNFCB BSSB ADDRESS unit this is executing from 000800F5 0 ZBM 75 UPCMAGEW BSSB 15 maximum age of PAL in WSX list 00081F15 0 ZBM 76 UPCUNITS BSSB ADDRESS => local unit list 000800F6 0 ZBM 77 UPXAGEVASP BSSB 15 extra page age for VASP list 00081F16 0 ZBM 78 UPCBROPTR BSSB ADDRESS pointer to brother process 000800F7 0 ZBM 79 UPXAGEWSX BSSB 15 extra page age for WSX list 00081F17 0 ZBM 80 UPCDADPTR BSSB ADDRESS pointer to father, our creator 81 BSSB 9 filler 00081378 0 ZBM 82 UPCERRPSN BSSB PSNFLDLN process to pass our errors to 00160809 0 BASE 83 UPCPROCNM BSS2 1 "name" of process 84 * PSLOCK of sponsoring PSA must be locked 85 * during ANY alteration of UPCUERROR or 86 * the associated UER list. Format of 87 * this word is exactly the same as that 88 * of PSUERROR (though some fields aren't 89 * actually used by both, and must remain 90 * 0 when "unused"). 0016080B 0 BASE 91 UPCUERROR BSS 1 error list root (see PSUERROR format) 0016080C 0 BASE 92 UPCINTTIME BSS 1 time for time interrupt 93 * The virtual monitor may examine UPCVMLIST 94 * with the interrupts on, since it is the only 95 * code allowed to modify the UPCVMLIST. 96 * ----- THESE MUST BE FULL WORD FIELDS ----- 0016080D 0 BASE 97 UPCVMLIST BSS 1 => virtual memory list of this level 0016080E 0 BASE 98 UPCWVMLIST BSS 1 => virtual memory list for windows 99 * The UPCVASP and UPCWSX may be altered on 100 * any interrupt, so the process looking 101 * or altering must not page fault and must 102 * have interrupts off. These list heads must 103 * be full words. 0016080F 0 BASE 104 UPCVASP BSS 1 => list of currently mapped or mappable pages 00160810 0 BASE 105 UPCWSX BSS 1 => working set extension 106 * (list of recently mapped pages) 00160811 0 BASE 107 UPCTIMESER BSS 1 serial number of time interrupt request 00160812 0 BASE 108 UPCTERMA BSS 256/WORDLNTH terminating character array 109 DRCT 0000001A ABS 110 UPCLNTH EQU DISPW UPCPROT size of an element 00000005 ABS 111 UPCLOG EQU UPCLNTH LOG 2 log size for free memory routines 112 ORG UPCPROT reclaim lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 263 (USERCOREDEFS) F 18 User Data Structure Definitions 114 115 ********************************************************************************** 116 * * 117 * UNIT CONTROL ELEMENT * 118 * A unit control element (UCE) is created for each open * 119 * logical unit. It contains the number of that unit and the * 120 * address of the FCB corresponding to the device. UCEs for * 121 * local units (1:100) are kept in the UPC (UPCUNITS) of the * 122 * process. UCEs for global units (101:200) are kept in the * 123 * PSA (PSUNITS). * 124 * * 125 ********************************************************************************** 126 00001ECB 127 UCEPROT BASE R0 00160800 0 BASE 128 UCWORDA BSS 1 00080080 0 ZBM 129 UCEUNIT EQU UCWORDA/BITS 0:7 logical unit # for this element 000000FF ABS 130 MAXUNIT EQU 255 largest unit number allowed 00081F10 0 ZBM 131 UCELINK EQU UCWORDA/FLDADRS link to next element 132 BSSB 15 filler 00081F11 0 ZBM 133 UCEFCB BSSB ADDRESS address of FCB for this element 134 DRCT 00000001 ABS 135 UCELOG EQU (DISPW UCEPROT) LOG 2 size of UCE element 136 137 ORG UCEPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 264 (USERCOREDEFS) F 18 User Data Structure Definitions 139 140 ********************************************************************************** 141 * * 142 * FILE CONTROL BLOCK * 143 * A file control block (FCB) is created for each opened * 144 * device. The FCB contains all of the resident controlling * 145 * information for that unit. * 146 * These elements are chained together in a PSA list * 147 * (PSFCBLIST). They are pointed to by UCEs in the global * 148 * list (PSUNITS) and UCEs in the local unit lists of the * 149 * underprocesses (UPCUNITS). The use count FCBUSYCNT * 150 * indicates the number of UCEs sharing this FCB (i.e. by unit * 151 * equivalence). UCEs come and go, but the FCB is freed when * 152 * its use count goes to zero. * 153 * * 154 ********************************************************************************** 155 156 NOLIST CREF 00134000 5 REG 157 FCB EQU R5 pointer to file control block 158 LIST CREF 00001ECB 159 FCBPROT BASE FCB FILE CONTROL BLOCK 160 00174800 5 BASE 161 FCWORDA BSS 1 00094080 5 ZBM 162 FCBUSYCNT EQU FCWORDA/BITS 0:7 number of UCEs using this FCB 00095040 5 ZBM 163 FCREQUEST EQU FCWORDA/BITS 8:11 sub-op of request being made 164 * EQU FCWORDA/BIT 12 unused 00095A10 5 ZBM 165 FCRELOC EQU FCWORDA/BIT 13 store relocation (used in some XREQs) 00095C10 5 ZBM 166 FCDIRINUSE EQU FCWORDA/BIT 14 on if directory locked by 167 * this FCBs process 00095F10 5 ZBM 168 FCLINK EQU FCWORDA/FLDADRS link to next element 169 00174801 5 BASE 170 FCBLOCK BSS 1 the current mass storage address 00094081 5 ZBM 171 FCDRIVE EQU FCBLOCK/VOLFIELD drive containing this file 00095181 5 ZBM 172 FCMSBLK EQU FCBLOCK/MSBLKFIELD block number on this drive 173 00094182 5 ZBM 174 FCTFL BSSB MSBLKLOG total file length 00097182 5 ZBM 175 FCLPBLK BSSB MSBLKLOG load point block (minor access block if RAF) 00096183 5 ZBM 176 FCMABLK BSSB MSBLKLOG if RAF, addr of major access block (0 if small) 00095114 5 ZBM 177 FCLIMITPTR BSSB ADDRESS pntr to limit block for this file 00097214 5 ZBM 178 FCSRCHSN BSSB 1 used by the directory searchers 179 * 1 sez look for serial number 00097484 5 ZBM 180 FCECHOLUN BSSB MAXUNIT LOG 2 unit to echo read lines on (zero if none) 181 * The dynamic status word in the FCB 00094455 5 ZBM 182 FCDYNSTAT BSSB 5 00094445 5 ZBM 183 FCLASTREAD EQU FCDYNSTAT/BITS 27:30 00094C15 5 ZBM 184 FCLOADPT EQU FCDYNSTAT/BIT 31 00002050 BYTE 185 FCDSTATPLC EQU FDSTATRTYP+FDSTATLP place for these bits in status 186 * The static status word in the FCB 00094F25 5 ZBM 187 FCSTATSTAT BSSB 18 00094E45 5 ZBM 188 FCPRIV EQU FCSTATSTAT/FSSTATPRIV 00095615 5 ZBM 189 FCCRT EQU FCSTATSTAT/FSSTATCRT 00095835 5 ZBM 190 FCACCESS EQU FCSTATSTAT/FSSTATACS 00096015 5 ZBM 191 FCABSIO EQU FCSTATSTAT/FSSTATABS 00096215 5 ZBM 192 FCFEWSC EQU FCSTATSTAT/FSSTATWSC 00096415 5 ZBM 193 FCSAVED EQU FCSTATSTAT/FSSTATSAV 00096665 5 ZBM 194 FCHTYPE EQU FCSTATSTAT/FSSTATDTYP 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 265 (USERCOREDEFS) F 18 User Data Structure Definitions 195 00097215 5 ZBM 196 FCOPWRITE BSSB 1 on iff last operation was WRITE 00097415 5 ZBM 197 FCSPOOLED BSSB 1 non zero if executed with the spooler 00097615 5 ZBM 198 FCTRANS BSSB 1 on if file opened when user program crashed 00097815 5 ZBM 199 FCFBD BSSB 1 bit OR'd into FDFBD when the FCB is freed 200 * indicates file is being destroyed 00097A15 5 ZBM 201 FCCMUNIT BSSB 1 says that unit number is in Control Mode range 00097CA5 5 ZBM 202 FCQUEUEID BSSB 10 ID of file from spooler (1023 max) 203 204 * These two fields are used to define the end of file 205 * for SAFs (FCEND is used to avoid the chain search) 206 * and for RAFs (FCEPP is the last byte pointer). 207 * For other devices, these words contain other fields. 00095186 5 ZBM 208 FCEND BSSB MSBLKLOG last block disk address 00174807 5 BASE 209 FCEPP BSS 1 last block byte position pointer 210 00174808 5 BASE 211 FCCPP BSS 1 current position pointer 00094148 5 ZBM 212 FCCBLK EQU FCCPP/PGNUMFLD current block number minus one 000968C8 5 ZBM 213 FCCBYTE EQU FCCPP/BYTEDISP current byte in current block 214 00095F16 5 ZBM 215 FCDCBPTR EQU FCEND/BITS 15:31 pointer to hardware control block 00095C16 5 ZBM 216 FCRESEEK EQU FCEND/BIT 14 1 sez must go through RAF structure 00095826 5 ZBM 217 FCRAFTYPE EQU FCEND/BITS 12:13 RAF type field 218 00174809 5 BASE 219 FCSERIAL BSS2 1 file serial number/account serial number 0017480B 5 BASE 220 FCNAME BSS2 1 name of file if saved 0017480D 5 BASE 221 FCNAMEEXT BSS 1 extension of filename 222 223 * These two symbols are used in .DIRs 00174807 5 BASE 224 FCANAME EQU FCEPP account name (with FCCPP) 0017480D 5 BASE 225 FCAPROJ EQU FCNAMEEXT and extension 226 227 * This symbol is used in .VOLs 0017480B 5 BASE 228 FCVNAME EQU FCNAME volume name 229 230 * What follows is the non-permanent part of the FCB 0017480E 5 BASE 231 FCPWORD BSS2 1 password while EQUIPing file 0017480E 5 BASE 232 FCJCXH EQU FCPWORD(0) pointer to current index entry 0017480F 5 BASE 233 FCJCDE EQU FCPWORD(1) pointer to current directory entry 234 BSS 0 235 DRCT 00000004 ABS 236 FCLOG EQU (DISPW FCBPROT) LOG 2 SIZE OF AN FCB ELEMENT 237 * 238 239 ORG FCBPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 266 (USERCOREDEFS) F 18 User Data Structure Definitions 241 242 ********************************************************************************** 243 * * 244 * PAGE ACCESS ELEMENTS * 245 * Page access elements exist whenever a page is resident * 246 * and a user is actively using it. A page access element * 247 * will be in the users UPCVASP list if it is currently mapped * 248 * into virtual memory, or in the UPCWSX list if it has been * 249 * recently referenced but is no longer mapped. * 250 * When a user is set up to run, his virtual address * 251 * space list (UPCVASP) is scanned and the page file is loaded * 252 * according to the page access elements found. * 253 * * 254 ********************************************************************************** 255 0000000E ABS 256 PALRTLOG EQU 14 length of the page age fields 257 258 NOLIST CREF 00130000 4 REG 259 PAL EQU R4 used for pointer to PALs 260 LIST CREF 261 00001ECB 262 PALMNT BASE PAL PAGE ACCESS ELEMENT 00170800 4 BASE 263 PAWORDA BSS 0 word label for following fields 00170000 4 CACH 264 PAVPN BSSB 8 page number in users virtual memory 00091010 4 ZBM 265 PAINDVP BSSB 1 PAL associated with indirect VP element 00091210 4 ZBM 266 PALOCK BSSB 1 locked into main memory 267 * See definition of MDVMAIFLD for description of the following field 00091430 4 ZBM 268 PAMAIFLD BSSB 3 maintenance field 269 BSSB 2 filler 00091F10 4 ZBM 270 PALINK BSSB ADDRESS link to next element 271 00170801 4 BASE 272 PAPMVALUE BSS 1 page map value 273 00170802 4 BASE 274 PAWORDC BSS 0 (for clearing on initialization) 000900E2 4 ZBM 275 PAGEAGE BSSB PALRTLOG time since last reference 00091C12 4 ZBM 276 PAMODIFIED BSSB 1 page modified flag 00091F12 4 ZBM 277 PAFCB BSSB ADDRESS FCB that page is mapped from, zero if not 00170803 4 BASE 278 PAPPLPTR BSS 1 pointer to associated PPL 279 DRCT 280 00000004 DISP 281 PALNTH EQU DISP PALMNT length of a PAL 00000002 ABS 282 PALOG EQU PALNTH LOG 2 block size indicator 283 ORG PALMNT recover lost space 284 285 286 ********************************************************************************** 287 * * 288 * VIRTUAL PAGE ELEMENTS * 289 * Each virtual page element contains the information * 290 * required to find a page whether or not it is resident. * 291 * Often, the FBI type indicator on a block is being * 292 * changed. The VPFBIOLD field is then used to hold the type * 293 * that should have been on the volume. The operation of * 294 * VPFBIOLD & VPFBINEW is as follows: if OLD = 0 and NEW = * 295 * then a block is read in and checked to ensure * 296 * that it is of that type. If OLD = and NEW = * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 267 (USERCOREDEFS) F 18 User Data Structure Definitions 297 * then a block of type OLD is read in and it is * 298 * converted to type NEW. If both OLD and NEW = 0, then no FBI * 299 * type checking is done. * 300 * Virtual pages that have no VPAGE element are presumed * 301 * to be zero pages. VPAGE elements are built whenever the * 302 * contents of a page is specified, such as when a zero page * 303 * is referenced or a RAF or CODE page is mapped in. * 304 * The lock bit is copied into the PAL for the associated * 305 * page. This bit must be cleared by doing: 1) a SETWNDOx on * 306 * the page. 2) an ULKPAGE. 3) A GRUBPAGE (or GRUBWNDO). 4) a * 307 * FORCEWRITE or DUALWRITE. * 308 * Indirect VP elements allow a debugging type process to * 309 * look at the memory of some other process. The VP element * 310 * specifies a process and page number. Please note also, * 311 * that VPFBITYPE in an indirect VP element must be a 0. A * 312 * particular problem with this structure is that a VP element * 313 * may be used to construct a PAL for the VASP list. The PAL * 314 * will then continue to refer to that page until it ages out, * 315 * even though a process has been inserted or destroyed. When * 316 * a page fault occurs after the ageing, PFPROC goes to the * 317 * new process to construct the PAL. This can manifest itself * 318 * as a timing dependent bug, since the end result depends on * 319 * page aging algorithms invisible to the user. * 320 * Each UPC has a list (UPCVMLIST) of all of its user * 321 * virtual pages that have been allocated. * 322 * The monitor also has a list (MONVM) of all of its * 323 * virtual (not resident) pages. The MONVM list is set up by * 324 * system initialization. * 325 * * 326 ********************************************************************************** 327 328 NOLIST CREF 00134000 5 REG 329 VPP EQU R5 normal ptr register for VPAGE 330 LIST CREF 331 00001ECB 332 VPAGEPROT BASE VPP virtual page element 333 BSSB 7 filler 00094E80 5 ZBM 334 VPCNTL BSSB 8 control field 00003010 BYTE 335 VPNOSUBB EQU BIT 24 ignore substitution process 00003210 BYTE 336 VPNOERRB EQU BIT 25 do not perform error recovery/retries 00003410 BYTE 337 VPWWCHKB EQU BIT 26 if set write check this page 00003030 BYTE 338 VPMAIFLD EQU BITS 24:26 bits indicating maintenance functions 00003610 BYTE 339 VPEXCLUDEB EQU BIT 27 page is excluded, access gives trap 00003810 BYTE 340 VPZEROPGB EQU BIT 28 request for zero page bit 00003620 BYTE 341 VPCNTLSRF EQU VPEXCLUDEB+VPZEROPGB magic combined field 342 * Field decoded by jump table in PFPROC. Codes are: 343 * 00 - normal 344 * 01 - zero page 345 * 10 - excluded 346 * 11 - zero page or resident copy 00003A10 BYTE 347 VPCNTLOCB EQU BIT 29 own copy bit 348 * 0 sez give error on write 349 * protect violation. 350 * 1 sez make a copy on write 351 * protect violation. 00003C10 BYTE 352 VPCNTLLKB EQU BIT 30 marks page as locked in core 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 268 (USERCOREDEFS) F 18 User Data Structure Definitions 00003E10 BYTE 353 VPCNTLROB EQU BIT 31 marks page as read only 00003650 BYTE 354 VPCNTLFLD EQU BITS 27:31 actual control field 355 00000000 ABS 356 VPCNTLW EQU 0*VPCNTLROB value of VPCNTL if writeable 00000001 ABS 357 VPCNTLRO EQU 1*VPCNTLROB value of VPCNTL if read only 00000002 ABS 358 VPCNTLLK EQU 1*VPCNTLLKB value of VPCNTL if locked 00000004 ABS 359 VPCNTLOC EQU 1*VPCNTLOCB value of VPCNTL if user allowed impure copy 360 * EQU 0*VPCNTLSRF value of VPCNTL for normal page 00000008 ABS 361 VPZEROPG EQU 1*VPCNTLSRF value of VPCNTL if zero page requested 00000010 ABS 362 VPEXCLUDE EQU 2*VPCNTLSRF value of VPCNTL if illegal to reference 00000018 ABS 363 VPCNTLNR EQU 3*VPCNTLSRF value sez no read 00000020 ABS 364 VPWWCHK EQU 1*VPWWCHKB value of VPCNTL if to write check page 00000040 ABS 365 VPNOERR EQU 1*VPNOERRB value of VPCNTL if errors ignored 00000080 ABS 366 VPNOSUB EQU 1*VPNOSUBB value of VPCNTL if substitutions ignored 367 00095F10 5 ZBM 368 VPLINK BSSB ADDRESS link to next element 369 00174004 5 CACH 370 VPVPN BSSB 8 virtual page number 000000FF ABS 371 NOSUCHVPN EQU 0FF an impossible number for this field 00095011 5 ZBM 372 VPINDRCT BSSB 1 flag saying indirect reference 373 BSSB 6 space filler 00000000 ABS 374 VPNOFCB EQU 0 code indicating no FCB associated with this page 00095F11 5 ZBM 375 VPFCB BSSB ADDRESS FCB address (if .CODE or .RAF page) 376 00174802 5 BASE 377 VPWORDC BSS 1 has same format as MSQWORDC 00002470 BYTE 378 VPFBIOLDB EQU BITS 18:24 type to read in if type changing 00003270 BYTE 379 VPFBINEWB EQU BITS 25:31 ultimate type of block 00094272 5 ZBM 380 VPFBIOLD EQU VPP,VPWORDC/UPR15/VPFBIOLDB 00095072 5 ZBM 381 VPFBINEW EQU VPP,VPWORDC/UPR15/VPFBINEWB 000942E2 5 ZBM 382 VPFBITYPE EQU VPP,VPWORDC/UPR15/(VPFBIOLDB+VPFBINEWB) 00095F12 5 ZBM 383 VPERAD EQU VPP,VPWORDC/FLDADRS error address 384 00174803 5 BASE 385 VPBLOCK BSS 1 volume number and MS block number 00094083 5 ZBM 386 VPDRIVE EQU VPBLOCK/VOLFIELD drive index number 00095183 5 ZBM 387 VPMSBLK EQU VPBLOCK/MSBLKFIELD relative MS block number 388 * VPBLOCK contains the following info if this VP element 389 * is an indirect reference: 00094083 5 ZBM 390 VPINDPN EQU VPBLOCK/BITS 0:7 page number in other address space 00001370 BYTE 391 UPCSRLFLD EQU BITS (WORDLNTH-PSNFLDLN):(WORDLNTH-1) process serial number field 00095373 5 ZBM 392 VPUPCSERL EQU VPBLOCK/UPCSRLFLD UPC serial number of page owner 393 DRCT 00000004 DISP 394 VPAGELNTH EQU DISP VPAGEPROT length of VPAGE element 00000002 ABS 395 VPLOG EQU VPAGELNTH LOG 2 size for memory routines 396 ORG VPAGEPROT 397 00000085 ABS 398 HIUSERPAGE EQU PNWNDO4 highest page in user VM list 399 01ECB 00000000 400 MONVM VFD FLDADRS*STORE root for monitor virtual memory list 401 402 ********************************************************************************** 403 * * 404 * Control Mode Virtual Page List * 405 * The initializer equips the control mode file and uses * 406 * the code control block to build this list. Each page in * 407 * the CCB produces a VPAGE element prototype for this list. * 408 * These VPAGE elements have user memory page numbers and are * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 269 (USERCOREDEFS) F 18 User Data Structure Definitions 409 * set up to give own copies when written on. These elements * 410 * are copied and used in the VM list of the users in control * 411 * mode. * 412 * * 413 ********************************************************************************** 414 01ECC 00000000 415 CMODEVP VFD STORE list of CM VPAGE elements 01ECD 00000000 416 CMODECA VFD STORE copy of CM CA from CCB 0000003E ABS 417 CMCHAR EQU ">" prompt char for control mode 418 419 420 ********************************************************************************** 421 * * 422 * Initial Control-Mode Entry Code Definitions * 423 * These codes appear in R1 when Control-Mode is * 424 * initially entered to tell it how the new session came into * 425 * existance. * 426 * * 427 ********************************************************************************** 428 00000010 BYTE 429 CMSKAPPL EQU BIT 0 on if CM should set skill=application 00000210 BYTE 430 CMBATCHJOB EQU BIT 1 on if this is a batch job 00000410 BYTE 431 CMERRIDS EQU BIT 2 on if insufficient disk space for logon 00000610 BYTE 432 CMERRINH EQU BIT 3 on if terminal inhibited 000009C0 BYTE 433 CMENTRYCD EQU BITS 4:31 entry code: 00000000 ABS 434 CMNLOGIO EQU 0 not logged on, std input and output exist 00000001 ABS 435 CMNLOGI EQU 1 not logged on, std input only exists 00000002 ABS 436 CMLOGIO EQU 2 logged on, std input and output exist 00000003 ABS 437 CMLOGI EQU 3 logged on, std input only exists 00000004 ABS 438 CMCONCP EQU 4 concurrent session creation 26 INPUT COREIOTABS in-core I/O tables 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 270 (COREIOTABS) F 19 Resident I/O tables 3 4 ********************************************************************************** 5 * * 6 * Tables describing the configuration of this system. * 7 * * 8 ********************************************************************************** 9 10 ********************************************************************************** 11 * * 12 * SLOTTABLE * 13 * This table contains one word for each device address on * 14 * the mousebus. The upper 3 bits of each word indicate the type * 15 * of device that the bootstrap found in that slot. Zero * 16 * indicates nobody home. The address of each word corresponding * 17 * to a channel points to a channel control element. The lower * 18 * bits in each CPU's entry contain WRU0 info for that CPU. This * 19 * prevents having to reference IBSLOTS on zero page for CPU * 20 * microcode patching. * 21 * * 22 ********************************************************************************** 23 00001ECE 24 SLOTTABLE BSS NUMSLOTS channel descriptor block pointers 00000030 BYTE 25 SLOTTYPE EQU BITS 0:2 type of device in this slot 00001F10 BYTE 26 SLOTPTR EQU FLDADRS pointer to channel element 00000DA0 BYTE 27 SLOTCPUI EQU BITS 6:31 CPU WRU0 info 28 29 ********************************************************************************** 30 * * 31 * Location to hold the page map value for the active SSU. * 32 * * 33 ********************************************************************************** 34 01EDE 00000000 35 CLOCKPF VFD 0+STORE holds page map value for SSU 36 00001EDF 37 FPSWITCH BSS 1 current state of the FP switches 00001EE0 38 FPSWITCHB BSS 1 switches at boot time 39 40 ********************************************************************************** 41 * * 42 * The SSU provides a .TERM for maintenance use through * 43 * the RDU. This terminal behaves pretty much like one on the * 44 * COMM, except that essentially all configuration items (baud * 45 * rate, DTR, etc.) are controlled by SSU microcode. We have * 46 * here a pointer to the TCB so that the read/write code, and * 47 * even a lot of COMM driver code can be used to drive this * 48 * special diagnostic terminal. * 49 * A flag is provided for output so that we know whether * 50 * the SSU is busy processing output characters. If the flag * 51 * is set, we must wait for an output ready interrupt. If the * 52 * flag is not set, we can output a new character immediately * 53 * (but must set the flag). * 54 * A lock is provided for input so that we don't have the * 55 * problem of multiple CPUs each picking up an input character * 56 * thus causing them to be inserted in the order that the CPUs * 57 * get through the TCLOCK wait. * 58 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 271 (COREIOTABS) F 19 Resident I/O tables 59 ********************************************************************************** 60 00001EE1 61 FPTCB BSS 1 => terminal control block for front panel 01EE2 00000000 62 FPTERMBZY VFD 0+STORE busy flag for FP output 01EE3 00000000 63 FPCHARINLK VFD 0+STORE indicates CPU busy processing input char 64 65 ********************************************************************************** 66 * * 67 * This word is set to one if the SSU is a new enough * 68 * version (MINVERSION) to support break and dwell processing * 69 * with port 0. We also define here the first version of the * 70 * SSU that contains a working new 2K NVM. * 71 * * 72 ********************************************************************************** 73 00001EE4 74 SSUVER BSS 1 1 sez new version of SSU 0000000D ABS 75 MINVERSION EQU 13 oldest SSU version that is compatible 0000000F ABS 76 NVMVERSION EQU 15 version with new 2K NVM 77 78 ********************************************************************************** 79 * * 80 * The date word is updated on each clock interrupt. In * 81 * order that it may be used to provide unique file serial * 82 * numbers, it is also incremented whenever it is fetched for * 83 * use as a file serial number. Also, it may never be set * 84 * back by a clock interrupt. * 85 * The newer SSUs update FDATE constantly for us. To * 86 * insure unique serial numbers we keep the last serial number * 87 * given in FSNDATE and make sure FDATE is larger than * 88 * FSNDATE. If FDATE is not larger we increment FSNDATE and * 89 * hand that back as the serial number. * 90 * FDATE is assembled as zeros. This is so that the * 91 * initial startup code will run no matter what is in the real * 92 * time clock. That is, FDATE will never have to be set back * 93 * in time by the simple minded routines that normally deal * 94 * with it. * 95 * Initproc is responsible for ensuring that the SSU * 96 * clock is reasonable before it lets the system run. Among * 97 * other things, it ensures that the SSU clock is not earlier * 98 * than: * 99 * 1) the time of the last system assembly * 100 * 2) the time stored in the NVM * 101 * 3) the time stored in the security block * 102 * Also, times too far into the future are caught. * 103 * * 104 ********************************************************************************** 105 01EE6 00000000 106 FDATE VFD 00,00 the clock is 44 bits, right justified 01EE7 A0081EE5 107 FDATEPTR PTR FDATE/DATEHORD field in time with 32 bit date 01EE8 00000000 108 FDATELOCK VFD 0 lock for date field modification 01EEA 00000000 109 FSNDATE VFD 00,00 last serial number dispensed 110 111 ********************************************************************************** 112 * * 113 * The following variables are used to control the accuracy * 114 * of the system SSU clock. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 272 (COREIOTABS) F 19 Resident I/O tables 115 * FDATERROR contains the number of milliseconds that the * 116 * operator told us the clock was in error, + indicates that the * 117 * clock is slow, - indicates fast. The SSU clock will be * 118 * adjusted at a rate of 1000 ppm so as not to shock accounting * 119 * routines or user benchmarks. * 120 * FDATEDRFT is the parts per billion that the clock seems * 121 * to drift, + indicates that the clock is slow, - indicates * 122 * fast. This is calculated from the successive error * 123 * corrections that the operator makes. It should be noted that * 124 * this error correction scheme runs only when the system is * 125 * running. This shouldn't be any hardship, since it should be * 126 * unusual for the system to be shut down for any appreciable * 127 * length of time. * 128 * The drift correction is vitally dependant on the * 129 * accuracy of the adjustments made by the operator. The * 130 * ultimate accuracy of the clocks in the BTI lab has been * 131 * better than one second a month. This means that the operator * 132 * should use a time reference that is close to WWV in * 133 * stability. * 134 * LASTCORR is the time that the clock was last * 135 * corrected. * 136 * Ideally, all of these variables would be stored in the * 137 * NVM to ensure that they remain with the particular clock * 138 * whose values they represent. However, since the NVM is * 139 * space limited, only the drift value is stored there. It is * 140 * placed into the NVM when a new value is calculated and read * 141 * out during system boot. * 142 * The correction date is not crucial to proper * 143 * functioning of the algorithms, since once it is set by a * 144 * new correction all future corrections will be evaluated * 145 * properly. The current error in the clock is zero almost * 146 * all of the time, and when set will most likely be nulled * 147 * out before a system sleep. Therefore, these values are * 148 * relegated to the security block. These values are stored * 149 * during the hour interrupt processing and during sleep * 150 * processing, and are restored at system boot. * 151 * * 152 ********************************************************************************** 153 00001EEB 154 LASTCORR BSS2 1 date clock last corrected 01EED 00000000 155 FDATERROR VFD STORE ms that the clock is off 01EEE 00000000 156 FDATEDRFT VFD STORE ppb that the clock drifts 157 158 ********************************************************************************** 159 * * 160 * TIMEZONE * 161 * This word contains the 3 letter abb. for the systems * 162 * local time zone in the left three characters. The * 163 * rightmost character is an 8 bit signed number indicating * 164 * the difference from UT. If you live where the local time is * 165 * not an even hour off from UT, you're tough out of luck. * 166 * * 167 ********************************************************************************** 168 00001EEF 169 TIMEZONE BSS 0 01EEF FFFFFFF8 170 VFDC "P","S","T",-8 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 273 (COREIOTABS) F 19 Resident I/O tables 171 172 ********************************************************************************** 173 * * 174 * TIMER QUEUE * 175 * All work with the queue or with the I/O device is * 176 * interlocked with this lock word. TIMESERIAL is used to * 177 * provide unique identifiers for use by the TIMEKILL routine. * 178 * The available codes may be used at rates up to about 100 * 179 * each second. With a 32 bit field, nothing over 1 year is * 180 * safe. One month is a reasonable maximum delay! The queue * 181 * is kept in order by time. * 182 * Note that TMRLINK is made a full word since we have * 183 * no use for the upper 15 bits and this makes the loads and * 184 * stores use the faster base mode addressing. * 185 * * 186 ********************************************************************************** 187 01EF0 00000000 188 TIMESERIAL VFD 0+STORE serial number for queue elements 01EF1 00000000 189 TIMERLOCK VFD STORE queue and device lock word 01EF2 00000000 190 TIMERQ VFD STORE list head 00130000 4 REG 191 TMR EQU R4 register used for timer element pointer 192 00001EF3 193 TMRPROT BASE TMR timer queue element prototype 00170800 4 BASE 194 TMRLINK BSS 1 link to next element 00170801 4 BASE 195 TMRTIME BSS2 1 time at which interrupt is scheduled to occur 00090043 4 ZBM 196 TMRCPU BSSB 4 slot number of cpu to get this interrupt 197 * zero cannot be a cpu, so that number 198 * indicates that any cpu can take it 199 BSSB 11 filler 00091F13 4 ZBM 200 TMRPC BSSB ADDRESS location to go to on time out 00170804 4 BASE 201 TMRSERIAL BSS 1 this elements serial number 00170805 4 BASE 202 TMRPARAM BSS 1 parameter to interrupt 203 DRCT 00000006 ABS 204 TMRLNTH EQU DISPW TMRPROT length of timer element 00000003 ABS 205 TMRLOG EQU TMRLNTH LOG 2 log of element length 206 ORG TMRPROT recover space 207 00001EF3 208 DEADMANTMR BSS 1 serial number of DEADMAN's timer request 209 210 ********************************************************************************** 211 * * 212 * Non Volatile memory * 213 * The non-volatile memory (NVM) in the SSU is a slow * 214 * memory taking some 120 milliseconds (sic) to erase and write * 215 * a location. The new 2K NVM is faster, but it still requires * 216 * several milliseconds to complete a write. Worse yet, the * 217 * state of a location if the power fails during an erase/write * 218 * operation is completely undefined. We therefore store most * 219 * data twice and alternate a flag to indicate which copy is to * 220 * be used. This is relatively crashproof. * 221 * Here are the locks for operations on the NVM. Any * 222 * write operation makes the NVM busy. If the NVM is busy, * 223 * any operation causes the requesting process to be queued. * 224 * Last are the values that control the clock values in the * 225 * NVM. They currently are variable because it is possible to * 226 * have two different NVM sizes. The old SSUs have 128 bytes * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 274 (COREIOTABS) F 19 Resident I/O tables 227 * while the new SSUs have 2048 bytes. The base value, count * 228 * and mask word are set dynamically during each boot. * 229 * Since there are multiple clock values the latest date * 230 * is assumed to be the good date iff another clock value is * 231 * within an hour or so, else the dates are all assumed to be * 232 * bogus. * 233 * * 234 ********************************************************************************** 235 01EF4 00000000 236 NVMBSYLOCK VFD STORE lock word for NVM 01EF5 00000000 237 NVMBSYFLAG VFD STORE flag indicating NVM busy 238 239 * DO NOT rearrange the following four words!!!!!!! 01EF6 00000000 240 NVMCLOCKS VFD STORE base address of the clocks 01EF7 00000000 241 NVMCLKNUM VFD STORE number of legtimate clock values 01EF8 00000000 242 NVMCLKMASK VFD STORE mask for clock index 01EF9 00000000 243 NVMCLKINDX VFD STORE last good NVM clock index 244 245 246 ********************************************************************************** 247 * * 248 * The following is this system's serial number that is * 249 * fetched from the SSU. It consists of two halves, the upper * 250 * being the 'customer number' and the lower being the * 251 * 'customers system number'. Customer 0 is BTI. The system * 252 * name is either this number in PAK6 if not in a network, or * 253 * the net node name if networking. * 254 * * 255 ********************************************************************************** 256 01EFA 00000001 257 SYSTEMSN VFD 00001 customer 0, system 1 01EFB 0BE8D400 258 SYSTEMNM PAK6 0&1 the 'name' of the system 259 260 ********************************************************************************** 261 * * 262 * The following word is the start up number which is * 263 * incremented every time the system is booted. It is a full * 264 * word number, but the bottom 8 bits are never zero. These * 265 * are used to validate file use counts in case of system * 266 * crashes. * 267 * * 268 ********************************************************************************** 269 00001EFC 270 SYSTEMSUN BSS 1 01EFD C20C1EFC 271 FILESUNP PTR SYSTEMSUN/BITS 24:31 00101EFD @ 272 FILESUN EQU @FILESUNP 273 274 ********************************************************************************** 275 * * 276 * SMU ELEMENT * 277 * This block is used to keep track of all SMUs on the * 278 * system. * 279 * * 280 ********************************************************************************** 281 01EFE 00000000 282 SMULIST VFD 0 pointer to first element in this list 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 275 (COREIOTABS) F 19 Resident I/O tables 283 00000006 ABS 284 SMUCHKINTV EQU 6 number of times though DEADMAN between reading 285 * SMU error log 01EFF 00000006 286 SMUCHKCNT VFD SMUCHKINTV we decrement this count each time 287 * through DEADMAN. When it equals 0 we reset it 288 * and read the SMU error log. 289 00001F00 290 SMUPROT BASE R3 0008C040 3 ZBM 291 SMUSLOT BSSB 4 slot containing this SMU 292 BSSB 11 filler 0008DF10 3 ZBM 293 SMULINK BSSB ADDRESS pointer to next in list 294 DRCT 00000000 ABS 295 SMUBLKLOG EQU (DISPW SMUPROT) LOG 2 log size of this block 296 ORG SMUPROT recover lost space 297 298 ********************************************************************************** 299 * * 300 * PPU CONTROL ELEMENT * 301 * This block contains a pointer to a control block for * 302 * each operational peripheral controller. * 303 * * 304 ********************************************************************************** 305 00001F00 306 PPUPROT BASE R5 descriptor for an individual PPU 00174800 5 BASE 307 PPUPF BSS 1 page file to get to the PPU 00174801 5 BASE 308 PPUOPMSGID BSS 1 id of msg to operator saying PPU is bad 00174802 5 BASE 309 PPULASTST BSS 1 internal status on last interrupt 00174803 5 BASE 310 PPU3WORD BSS 1 1 sez this PPU can do triple word transfers 00174804 5 BASE 311 PPUCNTLPTR BSS PPUCHANS pointers to controller tables 00000080 BYTE 312 DEVTYPE EQU CH0 field contains the type of device here 00001F10 BYTE 313 DEVPTR EQU FLDADRS field contains pointer to device control element 314 DRCT 00000003 ABS 315 PPULOG EQU (DISP PPUPROT) LOG 2 length of PPU element 316 ORG PPUPROT recover the lost space 317 01F00 00006540 318 PPUBADSTAT VFD 1*PPUIBCNR+1*PPUIMPE+1*PPUICONF+1*PPUIDPPE+1*PPUIXTRA 319 * bits in the PPU channel status 320 * signifying transfer error 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 276 (COREIOTABS) F 19 Resident I/O tables 322 323 ********************************************************************************** 324 * * 325 * COMM CONTROL ELEMENT * 326 * * 327 ********************************************************************************** 328 00001F01 329 COMLIST BSS 1 root of list of COM elements 330 00001F02 331 COMPROT BASE R0 descriptor for a CIA 00160800 0 BASE 332 COMLINK BSS 1 link to next COM element 00160801 0 BASE 333 COMWRU BSS 1 WRU response from controller 00160802 0 BASE 334 COMPF BSS 1 PF to access this CIA 00160803 0 BASE 335 COMOPMSGID BSS 1 id of message saying controller not talking 00160804 0 BASE 336 COMLASTST BSS 1 status word 1 on last interrupt 00160805 0 BASE 337 COMWORDC BSS 1 00080215 0 ZBM 338 COMTIMEOUT EQU COMWORDC/BIT 1 1 sez CIA timed out 00083085 0 ZBM 339 COMSTATE EQU COMWORDC/BITS 24:31 state of driver 00000000 ABS 340 COMSTIDLE EQU 0 idle (must be zero) 00000001 ABS 341 COMSTREAD EQU 1 doing read 00000002 ABS 342 COMSTWRITE EQU 2 doing write 00000003 ABS 343 COMSTWRIT2 EQU 3 doing continuation write 00000004 ABS 344 COMSTDREAD EQU 4 'delayed' read 00160806 0 BASE 345 COMINBUF BSS 1 comm input buffer pointer 00160807 0 BASE 346 COMINBUFS BSS 1 size of input buffer 00160808 0 BASE 347 COMOUTBUF BSS 1 comm output buffer pointer 00160809 0 BASE 348 COMOUTBUFS BSS 1 size of output buffer 0016080A 0 BASE 349 COMTRMTMNG BSS 1 count of terminals timing on this CIA 0016080B 0 BASE 350 COMFRSTTRM BSS 1 first terminal in list of TCBs for this CIA 0016080C 0 BASE 351 COMTERMS BSS 8 one pointer for each of the 8 boards 352 DRCT 00000005 ABS 353 COMLOG EQU (DISPW COMPROT) LOG 2 log size of COM element 354 ORG COMPROT recover the lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 277 (COREIOTABS) F 19 Resident I/O tables 356 357 ********************************************************************************** 358 * * 359 * TERMINAL CONTROL BLOCK * 360 * Each terminal has a TCB associated with it to control * 361 * the console output and input and to hold a PCB pointer. * 362 * * 363 * A terminal is not associated with any process in * 364 * particular, but supposedly only one PSA points to each * 365 * active TCB. A TCPCADRS of zero sez no process associated * 366 * with this terminal, otherwise it points to the process * 367 * control block of the process. * 368 * * 369 * TCB elements are an unusual size (not near a multiple * 370 * of 2) and are never destroyed, so while they behave like a * 371 * normal linked list, the elements are constructed from much * 372 * larger chunks of free memory and the excess is freed. * 373 * * 374 * LOCKING * 375 * There are many fields in a TCB that may be updated by * 376 * asynchronously running processes, such as the user process * 377 * and the driver. There are basicly three critical regions * 378 * in use here. These critical regions are as follows... * 379 * 1) The section at the beginning. This section is * 380 * interlocked by the implicit fact that only the * 381 * current user process can modify fields therein. * 382 * 2) There is a section that is only altered by the * 383 * driver. This section includes the fields in * 384 * line and also TCTIMECNT which has been moved * 385 * to the end of the TCB so as to not interfere * 386 * with ZBM addressing range. * 387 * 3) The remaining section may be altered by either * 388 * the driver or the user process. Anyone altering * 389 * any field in this section must hold TCLOCK. * 390 * * 391 * Special note should be made of the fields TCPCADRS, * 392 * TCINTE, and TCFCB. These fields are set by CHECKLOGD which * 393 * is in the driver. However, this can only happen if no user * 394 * process is currently attached to this TCB. These fields, * 395 * which otherwise are only modified by the implicit process * 396 * part, are therefore placed there. * 397 * * 398 ********************************************************************************** 399 01F02 00000000 400 TERMCOUNT VFD STORE number of logged on terminals 01F03 00000001 401 TERMNUM VFD 1 number of terminals found 402 * (first terminal is number 1) 01F04 00000000 403 TERMBASE VFD FLDADRS*STORE => base of real terminal TCBs 01F05 00000000 404 TERMWBUSY VFD STORE number of terminals busy writing 00000200 ABS 405 MAXTERMNUM EQU 512 number of terminals possible 000007BA ABS 406 MAXINQUE EQU (80+2)*24+10 max number of chars in input queue 000003DD ABS 407 MAXIXOFF EQU MAXINQUE/2 max in input queue before getting XOFFed 00000004 ABS 408 TCCMNDBURD EQU 4 each command in output counts this many 409 * characters toward suspending the process 410 * for terminal output wait 411 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 278 (COREIOTABS) F 19 Resident I/O tables 00130000 4 REG 412 TCB EQU R4 POINTER TO TERMINAL CONTROL BLOCK 413 00001F06 414 TCBPROT BASE TCB TERMINAL CONTROL BLOCK 00090040 4 ZBM 415 TCRT BSSB 4 current record type 00090890 4 ZBM 416 TCTNUM BSSB (MAXTERMNUM LOG 2) logical terminal number field 00091A10 4 ZBM 417 TCRFP BSSB 1 on if special SSU terminal 00091C10 4 ZBM 418 TCINHIB BSSB 1 on if logon access inhibited 00091F10 4 ZBM 419 TCLINK BSSB ADDRESS link to next element 420 * (fills first word) 000900F1 4 ZBM 421 TCIRATE BSSB 15 input baud rate 00091EF1 4 ZBM 422 TCORATE BSSB 15 output baud rate 00093C21 4 ZBM 423 TCECHO BSSB 2 echo status 00000000 ABS 424 ECHOMOFF EQU 0 no echo 00000001 ABS 425 ECHOMCIA EQU 1 echo done by controller 00000002 ABS 426 ECHOMSOFT EQU 2 echo done by me 00000003 ABS 427 ECHOMREAD EQU 3 echo done on read 428 000900A2 4 ZBM 429 TCMAXCHAR BSSB 10 number of chars before suspend (funct of baud) 000914A2 4 ZBM 430 TCUNSUSP BSSB 10 number of output chars to unsuspend 000928C2 4 ZBM 431 TCCRDELAY BSSB 12 carriage return delay 432 000900C3 4 ZBM 433 TCLFDELAY BSSB 12 line feed delay 000918C3 4 ZBM 434 TCFFDELAY BSSB 12 form feed delay 0017000F 4 CACH 435 TCCIAPORT BSSB 8 hardware port number on CIA 436 00170010 4 CACH 437 TCCRWIDTH BSSB 8 carriage width 00170011 4 CACH 438 TCSCRNHTH BSSB 8 screen height 00170012 4 CACH 439 TCLASTCOM BSSB 8 last transmitter setting command 00170013 4 CACH 440 TCLASTCOM2 BSSB 8 last CIA option selected 441 00170014 4 CACH 442 TCBAUDROOM BSSB 8 how much to remove from TCOUTSPACE to 443 * keep the output buffer from overfilling 00091015 4 ZBM 444 TCXOFFIQ BSSB 1 1 sez we XOFF the terminal if input buffer overfills 00091225 4 ZBM 445 TCACS BSSB 2 bits indicating access to this terminal 00091215 4 ZBM 446 TCACSRO EQU TCACS/BIT 30 on sez this terminal is accessed RO 00091415 4 ZBM 447 TCACSRW EQU TCACS/BIT 31 on sez this terminal is accessed RW 00091615 4 ZBM 448 TCINTTCG BSSB 1 sez TCG/TCS is for a NE terminal trapper 00091815 4 ZBM 449 TCRDRTCG BSSB 1 sez TCG/TCS is for a terminal reader (CPCUPC) 450 BSSB 2 filler 00091F15 4 ZBM 451 TCFCB BSSB ADDRESS FCB address of terminal user 452 00170018 4 CACH 453 TCBRCH BSSB 8 'break' character 00091076 4 ZBM 454 TCLKILLC BSSB 7 line kill character 00091F16 4 ZBM 455 TCCIABLOCK BSSB ADDRESS => CIA control block 456 457 BSSB 8 filler 00091077 4 ZBM 458 TCBKSPC BSSB 7 backspace character 00091F17 4 ZBM 459 TCPCADRS BSSB ADDRESS pointer to associated process control block 460 461 BSS 0 ensure word boundary, see box below 000900C8 4 ZBM 462 TCHTDELAY BSSB 12 horizontal tab delay 00091838 4 ZBM 463 TCPVC BSSB 3 previous line print control 00091E18 4 ZBM 464 TCINTE BSSB 1 interrupts enabled by term user 00092018 4 ZBM 465 TCINECHOD BSSB 1 on if chars in line echoed 466 467 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 279 (COREIOTABS) F 19 Resident I/O tables 468 * * 469 * The field TCCONTROL has three components. TCINTPROTO * 470 * and TCMODEM are locked by the implicit process lock. They * 471 * consequently are made to fall into the last word of the * 472 * implicitly locked region of the TCB. TCINTSTATE however, * 473 * is locked by the CIA driver lock. We fiddle to make that * 474 * component of TCCONTROL fall into the word reserved for * 475 * control by this driver lock. * 476 * The fields TCOUTSPACE, TCLASTST, TCTIMERTN, and * 477 * TCTIMECNT are also interlocked by the driver lock. * 478 * * 479 ********************************************************************************** 480 481 482 BSSB 13 filler to make word boundary between ... 483 * ...TCMODEM and TCINTSTATE 00093C78 4 ZBM 484 TCCONTROL BSSB 7 control for phones stuff 00093C28 4 ZBM 485 TCINTPROTO EQU TCCONTROL/BITS 25:26 interface protocol 486 * EQU 0 no interface control 487 * EQU 1 DTR/DSR disconnect 488 * EQU 2 modem handling 00090019 4 ZBM 489 TCMODEM EQU TCCONTROL/BIT 27 1 iff modem on port 00090249 4 ZBM 490 TCINTSTATE EQU TCCONTROL/BITS 28:31 current state of interface 491 * EQU 0 initialize 492 * EQU 1 restart 00000002 ABS 493 TCINTSNORM EQU 2 normal state 494 * and many more 00090A39 4 ZBM 495 TCTIMERTN BSSB 3 routine to process timeout 496 BSSB 1 filler to make easier to read 00091289 4 ZBM 497 TCOUTSPACE BSSB 256 LOG 2 space available in hardware output buffer 00092289 4 ZBM 498 TCLASTST BSSB 8 last port status 499 500 ********************************************************************************** 501 * * 502 * Beware that the following fields may only be changed * 503 * when TCLOCK is held. This is because all of the fields * 504 * here are ZBMs and they are not interlocked. * 505 * I assure you that this is true and it has been * 506 * discovered and re-discovered many, many times the hard way. * 507 * This applies down to the lock word itself. Several * 508 * whole words are placed down at the end (since ZBMs must be * 509 * within 15 words of the beginning) that need not be * 510 * interlocked. * 511 * * 512 ********************************************************************************** 513 514 BSS 0 force word boundary 000900FA 4 ZBM 515 TCTTOCNT BSSB (WORDLNTH-ADDRESS) number of chars in output queue 00091F1A 4 ZBM 516 TCTTOBP BSSB ADDRESS POINTER TO OUTPUT BUFFER BEGINNING 0009011B 4 ZBM 517 TCTTOEP BSSB ADDRESS POINTER TO OUTPUT BUFFER END 000922FB 4 ZBM 518 TCTTICNT BSSB (WORDLNTH-ADDRESS) number of chars in input queue 0009011C 4 ZBM 519 TCTTIEP BSSB ADDRESS POINTER TO INPUT BUFFER END 0009231C 4 ZBM 520 TCTTIBP BSSB ADDRESS POINTER TO INPUT BUFFER BEGINNING 0009041D 4 ZBM 521 TCREADIP BSSB 1 on if read in progress 0009061D 4 ZBM 522 TCINQFILL BSSB 1 on if input queue overflow, cleared by read 0009083D 4 ZBM 523 TCTERMGRP BSSB 3 terminating character group 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 280 (COREIOTABS) F 19 Resident I/O tables 00000000 ABS 524 TCTERMGRP0 EQU 0 standard term set 0 00000001 ABS 525 TCTERMGRP1 EQU 1 standard term set 1 00000002 ABS 526 TCTERMGRP2 EQU 2 standard term set 2 00000003 ABS 527 TCTERMGRPU EQU 3 user defined term set 00090E1D 4 ZBM 528 TCINECHO BSSB 1 on if to echo character input 0009101D 4 ZBM 529 TCIQXOFFED BSSB 1 on if input has been XOFFed 530 0017080E 4 BASE 531 TCTERMLOC BSS 1 holds location of terminator, 0 iff none 00091F1E 4 ZBM 532 TCTERMTCQ EQU TCTERMLOC/FLDADRS holds pointer to TCQ of terminator 000900FE 4 ZBM 533 TCTERMCHLC EQU TCTERMLOC/UPR15 holds index to terminator 534 535 ********************************************************************************** 536 * * 537 * End of the items that must be modified only when * 538 * TCLOCK is held, except for TCLOCK itself, which was moved * 539 * after TCTERMA so that TCTERMA could have a ZBM pointer made * 540 * easily. * 541 * * 542 ********************************************************************************** 543 0017080F 4 BASE 544 TCTERMA BSS 256/WORDLNTH user terminating character set 545 0017005C 4 CACH 546 TCTIMEFLAG BSSC 0 we keep a negative count so this char 547 * should be all 1's when terminal is timing 00170817 4 BASE 548 TCTIMECNT BSS 1 timing counter, counted up 00170818 4 BASE 549 TCLOCK BSS 1 on sez pointers being changed 00170819 4 BASE 550 TCTERMTYPE BSS 2 terminal type 0017081B 4 BASE 551 TCSITE BSS 2 terminal site name 552 DRCT 0000001D ABS 553 TCBLNTH EQU DISPW TCBPROT length of a TCB entry 554 ORG TCBPROT 555 556 ********************************************************************************** 557 * * 558 * A character input/output queue element looks like: * 559 * * 560 ********************************************************************************** 561 0012C000 3 REG 562 TCQ EQU R3 00001F06 563 TCQPROT BASE TCQ 0016C000 3 CACH 564 TCQFIRST BSSB 8 index to first character minus one 0008D060 3 ZBM 565 TCQLOG BSSB 6 log size of this block 0008DC10 3 ZBM 566 TCQCOMND BSSB 1 in output Q: on if second word a command 567 * in input Q: 0008DF10 3 ZBM 568 TCQLINK BSSB ADDRESS link to next element 0016C801 3 BASE 569 TCQWORDB BSS 0 second word 0016C004 3 CACH 570 TCQLAST BSSC 1 index to last character 0016C005 3 CACH 571 TCQSIZE BSSC 1 size of block in characters 00000006 ABS 572 TCQUSED EQU DISPC TCQFIRST num of chars used in block before info 0016C005 3 CACH 573 TCQCHARS EQU TCQSIZE characters (first index = 1) 574 BSS 0 variable length block 575 DRCT 576 ORG TCQPROT 577 578 * If carrying a command (output list) or an error (input list) 579 * the following format is used: 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 281 (COREIOTABS) F 19 Resident I/O tables 0008C081 3 ZBM 580 TCQCCODE EQU TCQWORDB/CH0 the command code 0008D181 3 ZBM 581 TCQCPARMS EQU TCQWORDB/(CH1+CH2+CH3) the parameter to the command 582 * or the error code 0016C000 3 CACH 583 TCQCLNTH EQU TCQFIRST the length of command in characters 000000FF ABS 584 TCQMXDELAY EQU (2 POWER 8)-1 maximum delay value that fits here 585 586 ********************************************************************************** 587 * * 588 * Table of number of characters that go into the various * 589 * queue element sizes. Indexed by log(2) of size. * 590 * * 591 ********************************************************************************** 592 00001F06 593 TCQSIZES LABEL 01F06 00000000 594 VFD 0 01F07 00000002 595 VFD (2 POWER (DISPW TCQSIZES))*CPW-TCQUSED 01F08 0000000A 596 VFD (2 POWER (DISPW TCQSIZES))*CPW-TCQUSED 01F09 0000001A 597 VFD (2 POWER (DISPW TCQSIZES))*CPW-TCQUSED 01F0A 0000003A 598 VFD (2 POWER (DISPW TCQSIZES))*CPW-TCQUSED 00001F0B 599 TCQMAXSIZE LABEL 01F0B 0000007A 600 VFD (2 POWER (DISPW TCQSIZES))*CPW-TCQUSED 601 602 ********************************************************************************** 603 * * 604 * Each of the CIA commands have a length and here is a * 605 * table of same indexed by command code. A length of zero * 606 * sez that this code is not a command. * 607 * * 608 ********************************************************************************** 609 01F0D 00000002 610 TCQCLENS VFDC 0,3,3,2,1,1,2,2 80-87 01F0F 00000002 611 VFDC 1,1,2,2,1,2,2,2 88-8F 01F11 00000000 612 VFDC 1,4,0,0,0,0,0,0 90-97 (pseudo-commands) 01F12 020C1EEC 613 TCQCLEN PTR TCQCLENS(-080) 614 615 ********************************************************************************** 616 * * 617 * Char used inside comm routines to indicate break. * 618 * * 619 ********************************************************************************** 620 00000100 ABS 621 BREAKMARK EQU 0100 indicates incoming break 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 282 (COREIOTABS) F 19 Resident I/O tables 623 624 ********************************************************************************** 625 * * 626 * MASS STORAGE CONTROLLER ELEMENT * 627 * This block contains the information for each mass * 628 * storage controller. * 629 * * 630 ********************************************************************************** 631 00000003 ABS 632 LOGUPC EQU 3 size of unit number field 00000008 ABS 633 UPC EQU 2 POWER LOGUPC number of units on a controller 634 01F13 00000000 635 MCTLIST VFD STORE list of all MS controllers 0013C000 7 REG 636 MCT EQU R7 637 00001F14 638 MCTPROT BASE MCT mass storage controller table proto 0017C800 7 BASE 639 MCTLINK BSS 1 link to next controller element 0017C801 7 BASE 640 MCTPMVALUE BSS 1 page file value to access this controller 0017C802 7 BASE 641 MCTOPMSGID BSS 1 id of message saying BFD not talking 0017C803 7 BASE 642 MCTELOCK BSS 1 lock word to prevent two processors 643 * from talking to one BFD simultaneously 0009C014 7 ZBM 644 MCTBUSY BSSB 1 indicates data transfer going 0009C234 7 ZBM 645 MCTUNIT BSSB LOGUPC indicates which unit going 0009C814 7 ZBM 646 MCTTIMEOUT BSSB 1 timeout flag: set by DEADMAN 0009CA34 7 ZBM 647 MCTMAXUNIT BSSB LOGUPC largest unit on this controller 0009D014 7 ZBM 648 MCTDEAD BSSB 1 on if PPU or BFD is not talking 649 BSSB 16 filler 0017C805 7 BASE 650 MCTDRIVE BSS UPC pointers to drive elements 651 DRCT 0000000D DISP 652 MCTLNTH EQU DISP MCTPROT length of controller table 00000004 ABS 653 MCTLOG EQU MCTLNTH LOG 2 log of element length 654 ORG MCTPROT 655 656 ********************************************************************************** 657 * * 658 * MASS STORAGE DEVICE LIST * 659 * Each separately addressable mass storage device has * 660 * an entry in this list. Each entry has its own queue of * 661 * requests. This allows the mass storage driver to keep the * 662 * greatest possible number of requests going at all times. * 663 * This list is locked by MDVLOCK (using LOCKLIST and * 664 * SRCHLIST). * 665 * * 666 ********************************************************************************** 667 01F14 00000000 668 MDVLOCK VFD STORE lock word for MDVLIST 01F15 00000000 669 MDVLIST VFD FLDADRS*STORE list of all MS devices 00134000 5 REG 670 MDV EQU R5 671 00001F16 672 MDVPROT BASE MDV MASS STORAGE DRIVE TABLE 00174800 5 BASE 673 MDVWORDA BSS 1 first word of MDV. All store-type 674 * references to this word MUST be 675 * read-modify-writes. 00000080 BYTE 676 MDVVOLFLD EQU BITS 0:7 field for volume number 00094080 5 ZBM 677 MDVVOLUME EQU MDVWORDA/MDVVOLFLD volume residing here (0 if none) 00095010 5 ZBM 678 MDVREADY EQU MDVWORDA/BIT 8 1 => drive is ready (mount is allowed) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 283 (COREIOTABS) F 19 Resident I/O tables 00095210 5 ZBM 679 MDVCHKSTAT EQU MDVWORDA/BIT 9 1 => must check drive status for offline 00095410 5 ZBM 680 MDVLOGCNT EQU MDVWORDA/BIT 10 1 => must log activity counts 00095610 5 ZBM 681 MDVCHKHEAD EQU MDVWORDA/BIT 11 1 => must check for head crash 00095830 5 ZBM 682 MDVUNIT EQU MDVWORDA/BITS 12:(12+LOGUPC-1) unit number of this drive 00095F10 5 ZBM 683 MDVLINK EQU MDVWORDA/FLDADRS link for volume list 684 00094011 5 ZBM 685 MDVDIDXFER BSSB 1 a request has been completed 00094231 5 ZBM 686 MDVSTATE BSSB 3 current state of unit 687 * use caution if you feel a need to reassign 688 * states because several jump tables use them 689 * code state 00000000 ABS 690 MDVSTINIT EQU 0 drive must be initialized 00000001 ABS 691 MDVSTRUN EQU 1 drive code is runnable 00000002 ABS 692 MDVSTSEEK EQU 2 awaiting seek end 00000003 ABS 693 MDVSTONCYL EQU 3 waiting our turn to start data transfer 00000004 ABS 694 MDVSTDT EQU 4 transferring data - awaiting interrupt 00000005 ABS 695 MDVSTKILL EQU 5 MDV should be destroyed 00000006 ABS 696 MDVSTPFAIL EQU 6 interrupted by power failure 00000007 ABS 697 MDVSTIDLE EQU 7 delaying for IDLETIME milliseconds 698 00094811 5 ZBM 699 MDVWPROT BSSB 1 last known BFDSSWPROT (write-protect) 700 BSSB 4 filler 00095231 5 ZBM 701 MDVCABLE BSSB LOGUPC cable position of drive 702 BSSB 3 filler 00095F11 5 ZBM 703 MDVCNTL BSSB ADDRESS address of controller block (MCT) 704 00094012 5 ZBM 705 MDVBADDISK BSSB 1 1 => heads have been unloaded because of crash 00094212 5 ZBM 706 MDVBADSKS BSSB 1 1 => disk can't seek, should go offline 707 BSSB 14 filler 0017400A 5 CACH 708 MDVTRKPCYL BSSB 8 number of tracks per cylinder 0017400B 5 CACH 709 MDVSECPTRK BSSB 8 number of sectors per track 00174803 5 BASE 710 MDVERRWORD BSS 1 error control word 00000010 BYTE 711 MDVNOSUBB EQU BIT 0 on if substitution procedure ignored 00094013 5 ZBM 712 MDVNOSUB EQU MDVERRWORD/MDVNOSUBB on if substitution procedure ignored 00000210 BYTE 713 MDVNOERRSB EQU BIT 1 on if error recovery/retries skipped 00094213 5 ZBM 714 MDVNOERRS EQU MDVERRWORD/MDVNOERRSB on if error recovery/retries skipped 00000410 BYTE 715 MDVWWCHKB EQU BIT 2 on if block should be write checked 00094413 5 ZBM 716 MDVWWCHK EQU MDVERRWORD/MDVWWCHKB on if block should be write checked 00094023 5 ZBM 717 MDVSPECDA EQU MDVERRWORD/(MDVNOSUBB+MDVNOERRSB) non-zero skips PPL/FBI DA mismatch HALT 00094033 5 ZBM 718 MDVMAIFLD EQU MDVERRWORD/(MDVNOSUBB+MDVNOERRSB+MDVWWCHKB) bits for maintenance functions 00000610 BYTE 719 MDVNOLOGB EQU BIT 3 on if error logging disabled 00094613 5 ZBM 720 MDVNOLOG EQU MDVERRWORD/MDVNOLOGB on if error logging disabled 00094813 5 ZBM 721 MDVREWRITE EQU MDVERRWORD/BIT 4 on if block should be rewritten 00094A13 5 ZBM 722 MDVSUB EQU MDVERRWORD/BIT 5 on if block should be substituted 723 * BITS 6:7 unused 00095043 5 ZBM 724 MDVFLTERRS EQU MDVERRWORD/BITS 8:11 fault errors 00000005 ABS 725 MDVFLERLIM EQU 5 limit for fault errors 00095843 5 ZBM 726 MDVSKERRS EQU MDVERRWORD/BITS 12:15 seek error counter 00000005 ABS 727 MDVSKERLIM EQU 5 maximum number allowed 00096083 5 ZBM 728 MDVCHERRS EQU MDVERRWORD/BITS 16:23 channel error counter 00000032 ABS 729 MDVCHERLIM EQU 50 limit for channel errors 00097083 5 ZBM 730 MDVDKERRS EQU MDVERRWORD/BITS 24:31 disk media error counter 00000014 ABS 731 MDVDKERLIM EQU 20 maximum number allowed 000949C3 5 ZBM 732 MDVERRFLDS EQU MDVERRWORD/BITS 4:31 field indicating errors, if any 733 00000005 ABS 734 MDVRZRTLIM EQU 5 limit of immediate re-zero retries 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 284 (COREIOTABS) F 19 Resident I/O tables 00000005 ABS 735 MDVRZERLIM EQU 5 limit of times we can hit MDVRZRTLIM 736 00174804 5 BASE 737 MDVMAXSEEK BSS 1 first illegal seek address (hardware format) 00174805 5 BASE 738 MDVNAME BSS 1 PAK6 name of drive 739 00174806 5 BASE 740 MDVCOUNTS BSS2 1 activity counters 00174806 5 BASE 741 MDVREADCNT EQU MDVCOUNTS(0) number of read operations performed 00174807 5 BASE 742 MDVWRITCNT EQU MDVCOUNTS(1) number of write operations performed 743 00174808 5 BASE 744 MDVSEEKADR BSS 1 most recent seek address 745 746 * The following two words must be contiguous! 00174809 5 BASE 747 MDVBFDSTAT BSS 2 BFD status at transfer end 0017480A 5 BASE 748 MDVPPUSTAT EQU MDVBFDSTAT(1) PPU status at transfer end 0017480B 5 BASE 749 MDVLOPSTAT BSS 2 last operation status 750 0017480D 5 BASE 751 MDVTIMCODE BSS 1 time code used on write operation 0017480E 5 BASE 752 MDVVOLNAME BSS 2 name of volume mounted here 00174810 5 BASE 753 MDVFMTDAT BSS 2 formatted date of pack here 00174812 5 BASE 754 MDVTIMESER BSS 1 serial number of timer reset for next head-crash check 00174813 5 BASE 755 MDVIDLESER BSS 1 serial number of timer reset for coroutine delay 00174814 5 BASE 756 MDVCHKCYL BSS 1 cylinder last used for head-crash check 00174815 5 BASE 757 MDVRZPROBS BSS 1 number of times REZERO failed 00174816 5 BASE 758 MDVBTRXDA BSS 1 disk address of bad tracks block 00174817 5 BASE 759 MDVBTRXPPL BSS 1 addr of PPL containing bad tracks block 00174818 5 BASE 760 MDVSUBSDA BSS 1 disk address of substitution block 00174819 5 BASE 761 MDVSUBSPPL BSS 1 addr of PPL containing substitution block 0017481A 5 BASE 762 MDVSIZE BSS 1 size of drive in blocks 763 0017481B 5 BASE 764 MDVPC BSS 1 save area for PC in coroutine call 0017481C 5 BASE 765 MDVSAVER34 BSS 2 save area for R3-R4 in coroutine call 0017481E 5 BASE 766 MDVSAVER67 BSS 2 save area for R6-R7 in coroutine call 767 DRCT 00000020 DISP 768 MDVLNTH EQU DISP MDVPROT LENGTH OF DRIVE INFORMATION 00000005 ABS 769 MDVLOG EQU MDVLNTH LOG 2 log of element length 770 ORG MDVPROT 771 772 ********************************************************************************** 773 * * 774 * MASS STORAGE QUEUE ELEMENT * 775 * When MS blocks are requested, an element of this form * 776 * is created for each such block. * 777 * When a block becomes resident, its PPL is entered into * 778 * the PPAGELIST or PPIDLE and the MSQ element is discarded. * 779 * Whenever any page comes in, the SQMSWAIT queue is * 780 * searched for ALL users requesting this page. * 781 * Requests for writes of a page also fetch blocks of * 782 * this general form, but only the MSQXPTR and MSQPPPTR words * 783 * are significant. MSQXPTR may contain a pointer to a * 784 * temporary, duplicate PPL used to cause a write of the page * 785 * to two different locations on mass storage. The write * 786 * represented by the duplicate PPL is done first, then that * 787 * duplicate PPL is freed. MSQXPTR is set to zero. The MSQ * 788 * element then represents a normal write. * 789 * Note that the mass storage driver looks at the queue * 790 * head elements with the queues unlocked ( although it locks * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 285 (COREIOTABS) F 19 Resident I/O tables 791 * the queue before removing an element ). In other words, * 792 * the inserting routines must complete the queue elements * 793 * before they are inserted into the queue ( which must be * 794 * locked by the inserting routine ) and new elements may not * 795 * be added to the beginning of the queue (unless the queue is * 796 * empty). * 797 * * 798 ********************************************************************************** 799 01F16 00000000 800 MSQINLOCK VFD STORE lock word for the mass storage input queues 01F17 00000000 801 MSQOUTLOCK VFD STORE lock for the MS output queues 802 0012C000 3 REG 803 MSQ EQU R3 pointer to read request element 804 00001F18 805 MSQPROT BASE MSQ request queue element proto 0016C800 3 BASE 806 MSQWORDA BSS 1 first word 0008C0F0 3 ZBM 807 MSQTYPE EQU MSQWORDA/UPR15 R contains control info 00003010 BYTE 808 MSQREINIT EQU BIT 24 R read is actually an MDV re-init 00003210 BYTE 809 MSQFORMAT EQU BIT 25 R read is actually a format operation 00003430 BYTE 810 MSQMAIFLD EQU BITS 26:28 RW maintenance field (see MDVMAIFLD) 00003C10 BYTE 811 MSQZPAGE EQU BIT 30 R provide a zero page ( no MS read ) 812 * the new address bit must also be 813 * set for a zero page request. 00003E10 BYTE 814 MSQSNEWAD EQU BIT 31 R indicate a block number switch 00003C20 BYTE 815 MSQTYPFLD EQU BITS 30:31 non maintenance part of the field 0008DF10 3 ZBM 816 MSQLINK EQU MSQWORDA/FLDADRS RW link to next element 817 0016C801 3 BASE 818 MSQBLOCK BSS 1 R drive and MS block number 0016C802 3 BASE 819 MSQACTAD BSS 1 R actual MS address to be read 0016C802 3 BASE 820 MSQPPPTR EQU MSQACTAD W points to the PPL 0016C803 3 BASE 821 MSQXPTR BSS 1 RW points to a secondary PPL-FBI, 0 if none 822 DRCT 00000004 ABS 823 MSQLNTH EQU DISPW MSQPROT 00000002 ABS 824 MSQLOG EQU MSQLNTH LOG 2 825 ORG MSQPROT recover lost space 826 827 ********************************************************************************** 828 * * 829 * Busy words which note if I/O devices are still busy. * 830 * Used mainly to know when to halt after a sleep, and also * 831 * for the front panel display. * 832 * * 833 ********************************************************************************** 834 01F18 00000000 835 DISKRBUSY VFD 0+STORE increment for element in a MS read queue 01F19 00000000 836 DISKWBUSY VFD 0+STORE increment for element in a MS write queue 837 838 ********************************************************************************** 839 * * 840 * The following two values are used in the insertion of * 841 * disk read elements into the MS read queue. All elements that * 842 * are placed onto the disk read queue are place at the head of * 843 * the list (right behind the first one). This is done in an * 844 * attempt to push users through MSWAIT more rapidly. To * 845 * prevent starvation of some poor guy we put every DISKRENDth * 846 * element onto the end of the list, DISKCOUNT is our count to * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 286 (COREIOTABS) F 19 Resident I/O tables 847 * tell us when to do this. * 848 * * 849 ********************************************************************************** 850 01F1A 00000000 851 DISKCOUNT VFD 0 count of disk reads up to DISKREND 01F1B 0000001E 852 DISKREND VFD 30 every 30th element goes onto the end. 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 287 (COREIOTABS) F 19 Resident I/O tables 854 855 ********************************************************************************** 856 * * 857 * Magnetic Tape Controller Element * 858 * This block contains all control information associated * 859 * with a given tape controller. * 860 * * 861 ********************************************************************************** 862 0013C000 7 REG 863 MTC EQU R7 register normally holds pointer to MTC 01F1C 00000000 864 MTCLIST VFD STORE head of MT controller list 865 00001F1D 866 MTCPROT BASE MTC tape controller element 0017C800 7 BASE 867 MTCLINK BSS 1 link to next element 0017C801 7 BASE 868 MTCPMVALUE BSS 1 page file value to access this controller 0017C802 7 BASE 869 MTCOPMSGID BSS 1 id of message saying MTC not talking 0017C803 7 BASE 870 MTCELOCK BSS 1 lock word to prevent two processors 871 * from talking to the one controller, also locks 872 * flags and lists 873 874 * The following two words are referenced and altered without 875 * holding any locks. They therefore need their own words. 0017C804 7 BASE 876 MTCTIMEOUT BSS 1 number of intervals remaining before timeout 0017C805 7 BASE 877 MTCREQUEST BSS 1 set by user when he wants something done 878 879 BSSB 2 filler 0009C426 7 ZBM 880 MTCTYPE BSSB 2 0 if CT, 1 if MT, 2 if VT 0009C816 7 ZBM 881 MTCDEAD BSSB 1 on if controller or PPU not talking 0009CA36 7 ZBM 882 MTCUNIT BSSB 3 unit number to start scan from 883 BSSB 7 filler 0009DF16 7 ZBM 884 MTCBUSY BSSB 17 => MTU element that has controller busy 885 00000004 ABS 886 MTCUPC EQU 4 units per tape controller 00000003 ABS 887 MTUNITMASK EQU MTCUPC-1 mask to isolate low bits 0017C807 7 BASE 888 MTCDRIVE BSS MTCUPC pointers to MTU elements for each unit 889 DRCT 00000004 ABS 890 MTCLOG EQU (DISPW MTCPROT) LOG 2 size for getmem 891 ORG MTCPROT recover lost space 892 893 894 ********************************************************************************** 895 * * 896 * Magnetic Tape Unit Element * 897 * Each tape unit has an element in one of these queues. * 898 * This element contains all status and control information * 899 * for that unit, including the queue of user buffer space * 900 * elements. * 901 * * 902 ********************************************************************************** 903 01F1D 00000000 904 MTULIST VFD STORE list head for MT units 01F1E 00000000 905 CTULIST VFD STORE list head for CT units 01F1F 00000000 906 VTULIST VFD STORE list head for VT units 00134000 5 REG 907 MTU EQU R5 register normally holds MT unit pointer 908 00001F20 909 MTUPROT BASE MTU 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 288 (COREIOTABS) F 19 Resident I/O tables 00174800 5 BASE 910 MTUSTART LABEL beginning of MTU element 911 912 * The following words may only be altered while MTCELOCK is held. 00094020 5 ZBM 913 MTUSTATE BSSB 2 current drive state 00000000 ABS 914 MTUSTRUN EQU 0 runnable 00000001 ABS 915 MTUSTWAIT EQU 1 waiting to start data transfer 00000002 ABS 916 MTUSTBUSY EQU 2 busy with data transfer 00000003 ABS 917 MTUSTPFAIL EQU 3 interrupted by power failure 00094460 5 ZBM 918 MTUDNUM BSSB 6 drive number (sequential from 0) 00095040 5 ZBM 919 MTUUNIT BSSB 4 unit number on controller 00095810 5 ZBM 920 MTUEOF BSSB 1 last record read was a file mark 00095A20 5 ZBM 921 MTUDENSITY BSSB 2 density value (0=lowest, 3=highest) 00095F10 5 ZBM 922 MTULINK BSSB 17 link to next element 923 00094021 5 ZBM 924 MTUTYPE BSSB 2 0 => CT unit, 1 => MT unit, 2 => VT unit, 000944A1 5 ZBM 925 MTUERRCODE BSSB 10 error code from last operation 00095831 5 ZBM 926 MTUTRACK BSSB 3 track number (for CT's) 00095F11 5 ZBM 927 MTUCNTL BSSB 17 pointer to MTC element 928 929 * The following word may be altered by both the user and the 930 * tape driver, hence you must hold MTREQLOCK when trying to 931 * change one of these fields. 00174008 5 CACH 932 MTUREQUEST BSSB 8 request code from user 00000001 ABS 933 MTURQREW EQU 1 do rewind 00000002 ABS 934 MTURQSEFF EQU 2 do skip to EOF forward 00000003 ABS 935 MTURQSEFB EQU 3 do skip to EOF backward 00000004 ABS 936 MTURQFWSP EQU 4 do forward space 00000005 ABS 937 MTURQBKSP EQU 5 do back space 00000006 ABS 938 MTURQREAD EQU 6 do read 00000007 ABS 939 MTURQWRITE EQU 7 do write 00000008 ABS 940 MTURQWFM EQU 8 do write file mark 00000009 ABS 941 MTURQGAP EQU 9 do erase gap 0000000A ABS 942 MTURQSET EQU 10 do select track and density 0000000B ABS 943 MTURQCYCLE EQU 11 cycle tape 944 BSSB 24 filler 945 946 * The following word is changed only by the user, therefore 947 * no lock need be held when changing its value. 00174803 5 BASE 948 MTUPCADRS BSS 1 pointer to PCB of user 949 950 * The following, being full word fields, do not get us 951 * into nearly so much trouble with interlocks. 00174804 5 BASE 952 MTUNAME BSS 1 name of this drive 00174805 5 BASE 953 MTUMSGID BSS 1 id of message about drive not ready 00174806 5 BASE 954 MTURECLEN BSS 1 record length (set by user before 955 * write request, set by driver 956 * during read request) 00174807 5 BASE 957 MTUREQLEN BSS 1 requested length for read 00174808 5 BASE 958 MTUUBS BSS 1 pointer to head of UBS chain (set by user) 00174809 5 BASE 959 MTUNUBS BSS 1 pointer to next UBS element to use 960 961 * The following two words MUST be contiguous (referenced by LD2, etc.) 0017480A 5 BASE 962 MTUPPUSTAT BSS 1 PPU status from last transfer 0017480B 5 BASE 963 MTUMTCSTAT BSS 1 tape controller status from last transfer 964 0017480C 5 BASE 965 MTUSAVER34 BSS 2 save area for R3,R4 for drive coroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 289 (COREIOTABS) F 19 Resident I/O tables 0017480E 5 BASE 966 MTUSAVER67 BSS 2 save area for R6,R7 for drive coroutine 00174810 5 BASE 967 MTUPC BSS 1 save area for PC for drive coroutine 968 969 * Stack area is currently 15 words in length 970 BSS 32-(DISPW MTUSTART) stack for drive coroutine 00174820 5 BASE 971 MTUSTACK LABEL label for top of stack 972 DRCT 00000005 ABS 973 MTULOG EQU (DISPW MTUPROT) LOG 2 size for getmem 974 ORG MTUPROT recover lost space 975 976 977 ********************************************************************************** 978 * * 979 * The following lock is held by users while requesting a * 980 * tape operation. It is held by the driver while awakening a * 981 * user. * 982 * * 983 ********************************************************************************** 984 01F20 00000000 985 MTREQLOCK VFD STORE tape request lock 986 987 988 ********************************************************************************** 989 * * 990 * User Buffer Space elements * 991 * These elements are set up whenever the user specifies * 992 * a buffer that is to be locked in and be used by a direct * 993 * I/O device. They are created as the pages are locked in by * 994 * DIOSETUP. * 995 * * 996 ********************************************************************************** 997 00001F21 998 UBSPROT BASE R0 00160000 0 CACH 999 UBSVPN BSSB 8 virtual page number locked in here 1000 BSSB 7 filler 00081F10 0 ZBM 1001 UBSLINK BSSB ADDRESS link to next element 00160801 0 BASE 1002 UBSMAW BSS 1 memory address word (in format for PPU) 00160802 0 BASE 1003 UBSBCW BSS 1 byte count word (in format for PPU) 1004 DRCT 00000002 ABS 1005 UBSLOG EQU (DISPW UBSPROT) LOG 2 size of UBS elements for GETMEM 1006 ORG UBSPROT recover lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 290 (COREIOTABS) F 19 Resident I/O tables 1008 1009 ********************************************************************************** 1010 * * 1011 * The following element describes a line printer * 1012 * controller. * 1013 * * 1014 ********************************************************************************** 1015 0012C000 3 REG 1016 LPC EQU R3 register for accessing this 01F21 00000000 1017 LPCLIST VFD STORE list of all line printers 00001F22 1018 LPCPROT BASE LPC 0016C800 3 BASE 1019 LPCLINK BSS 1 link to next LPC element 0016C801 3 BASE 1020 LPCPMVALUE BSS 1 page map value for controller 0016C802 3 BASE 1021 LPCMSGID1 BSS 1 id of message saying LPC not talking 0016C803 3 BASE 1022 LPCMSGID2 BSS 1 id of message saying LPC not ready 0016C804 3 BASE 1023 LPCNAME BSS 1 device name (pak6) 0016C805 3 BASE 1024 LPCELOCK BSS 1 lock to prevent 2 CPU's from diddling 0016C806 3 BASE 1025 LPCBUFPTR BSS 1 pointer to line buffer block 0016C807 3 BASE 1026 LPCFLAGS BSS 1 flags - change via RMW 0008C017 3 ZBM 1027 LPCTIMEOUT EQU LPCFLAGS/BIT 0 time out flag 0008C217 3 ZBM 1028 LPCBUSY EQU LPCFLAGS/BIT 1 write operation (or load VVFU) in progress 0008C417 3 ZBM 1029 LPCOPEN EQU LPCFLAGS/BIT 2 someone has this LP open 0008C617 3 ZBM 1030 LPCWAITING EQU LPCFLAGS/BIT 3 someone is suspended in DIO wait 0008C847 3 ZBM 1031 LPCUNIT EQU LPCFLAGS/BITS 4:7 unit number of LP (from dip switches) 0008D017 3 ZBM 1032 LPCLDVVFU EQU LPCFLAGS/BIT 8 on if load VVFU in progress 0008D217 3 ZBM 1033 LPCVVFUON EQU LPCFLAGS/BIT 9 on if VVFU should be enabled 0008D417 3 ZBM 1034 LPCDEAD EQU LPCFLAGS/BIT 10 on if PPU or controller not talking 0016C808 3 BASE 1035 LPCPCADRS BSS 1 addr of PCB of current user (if LPCOPEN) 0016C809 3 BASE 1036 LPCVVFULNS BSS 1 number of lines of VVFU data 0000005A ABS 1037 LPCVVFUMAX EQU 90 max number of lines of VVFU data 0016C80A 3 BASE 1038 LPCVVFUDAT BSS (LPCVVFUMAX+1)/2 data for VVFU 1039 DRCT 00000037 ABS 1040 LPCLNTH EQU DISPW LPCPROT length of entry 00000006 ABS 1041 LPCLOG EQU LPCLNTH LOG 2 1042 ORG LPCPROT 1043 1044 1045 ********************************************************************************** 1046 * * 1047 * Format of line printer buffer block. This block * 1048 * exists only while the line printer is open. * 1049 * * 1050 ********************************************************************************** 1051 00001F22 1052 LPBPROT BASE R0 00160800 0 BASE 1053 LPBPHYSADR BSS 1 physical address of page containing this block 00160801 0 BASE 1054 LPBLINECNT BSS 1 number of lines currently in buffer 00160802 0 BASE 1055 LPBFIRSTLN BSS 1 index of first line to output 00160803 0 BASE 1056 LPBNEXTLN BSS 1 index of next line to put into buffer 00000007 ABS 1057 LPBMAXCNT EQU 7 max number of lines in buffer 00000024 ABS 1058 LPBLINESZ EQU 36 number of words per line 00160804 0 BASE 1059 LPBLINES BSS LPBMAXCNT*LPBLINESZ buffer space 1060 * The first word of each line is the data 1061 * to store into LPC to cause the write. 1062 * The actual line starts at the second word. 1063 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 291 (COREIOTABS) F 19 Resident I/O tables 00000008 ABS 1064 LPBLOG EQU (DISPW LPBPROT) LOG 2 size log 2 1065 ORG LPBPROT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 292 (COREIOTABS) F 19 Resident I/O tables 1067 1068 ********************************************************************************** 1069 * * 1070 * VOLUME NAME ELEMENT * 1071 * Each volume mounted on the system has one of the * 1072 * following blocks associated with it. This gives the name * 1073 * of the volume, a list of some free blocks, and pointers to * 1074 * the disk routines for this volume. * 1075 * The VOLNTABLE, indexed by the volume number, contains * 1076 * a pointer to the VOLN element. When adding an element, * 1077 * deleting an element, or searching the entire table, it is * 1078 * necessary to hold VOLNLOCK (which is really index zero in * 1079 * the table). However, if you have a volume number and are * 1080 * looking for the VOLN element, and you are sure that the * 1081 * VOLN element is not about to go away, you can directly * 1082 * index into the table without locking it. VOLNLOCK is * 1083 * acquired using LOCKLIST or SRCHLIST, and release with * 1084 * UNLOCKLIST or UNSRCHLIST. * 1085 * Some of the VOLN entries have funny names. If the * 1086 * name is not printable, then the volume is not completely * 1087 * mounted or is maintenance mounted. If you mount a volume * 1088 * with the same name as one that is already mounted, it is * 1089 * given the name "!", where is the * 1090 * actual name of the volume and is the smallest * 1091 * integer that will make the name unique. will be * 1092 * truncated from the right if necessary. * 1093 * * 1094 ********************************************************************************** 1095 00000001 ABS 1096 SYSVOLNUM EQU 1 number assigned to system volume 00000040 ABS 1097 MAXVOLNUM EQU 64 maximum volume number (+1) 00001F22 1098 VOLNTABLE BSS MAXVOLNUM pointers to VOLN elements 00001F22 1099 VOLNLOCK EQU VOLNTABLE(0) lockword is index zero in table 1100 00000080 ABS 1101 VOLNLEN EQU 128 length of volume table elements 00130000 4 REG 1102 VLN EQU R4 1103 00001F62 1104 VOLNPROT BASE VLN 00170800 4 BASE 1105 VOLNSTART BSS 0 00090010 4 ZBM 1106 VOLNSYS BSSB 1 on if this be the system volume 00090210 4 ZBM 1107 VOLNNEWLST BSSB 1 on if creating a new ADT list 00090410 4 ZBM 1108 VOLNCLNUP BSSB 1 causes PUTFREEBLK to force out ADT 00090610 4 ZBM 1109 VOLNSBFLAG BSSB 1 on if substitution process exists 00090840 4 ZBM 1110 VOLNNOUSE BSSB 4 field sez volume not available 00090810 4 ZBM 1111 VOLNAWAY EQU VOLNNOUSE/BIT 28 volume in process of being dismounted 00090A10 4 ZBM 1112 VOLNMOUNT EQU VOLNNOUSE/BIT 29 on if not completely mounted 00090C10 4 ZBM 1113 VOLNINHIB EQU VOLNNOUSE/BIT 30 all new accesses to this volume 1114 * are inhibited 00090E10 4 ZBM 1115 VOLNMAIM EQU VOLNNOUSE/BIT 31 on if maintenance mounted 00091180 4 ZBM 1116 VOLNMSGID BSSB 24 id of message about volume 1117 00090181 4 ZBM 1118 VOLNBTRXBK BSSB MSBLKLOG address of bad trax block 00093181 4 ZBM 1119 VOLNSUBBLK BSSB MSBLKLOG address of substitution block 00092182 4 ZBM 1120 VOLNSECBK1 BSSB MSBLKLOG address of primary security block 00091183 4 ZBM 1121 VOLNSECBK2 BSSB MSBLKLOG address of secondary security block 1122 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 293 (COREIOTABS) F 19 Resident I/O tables 00090184 4 ZBM 1123 VOLNADTPT BSSB MSBLKLOG current ADT block 1124 BSSB 1 FILLER 00093274 4 ZBM 1125 VOLNADTFBX BSSB (PPLMAPSIZE LOG 2) index into PPLPFMAP for FBI 1126 00090015 4 ZBM 1127 VOLNHDCK BSSB 1 on if head checker is inhibited 00090215 4 ZBM 1128 VOLNFOREN BSSB 1 on if volume is foreign 000904A5 4 ZBM 1129 VOLNADTDSP BSSB (WPP LOG 2) disp into PPLWINDOW for FBI 1130 BSSB 3 FILLER 00091F15 4 ZBM 1131 VOLNHCB BSSB ADDRESS => hardware control block 1132 00170806 4 BASE 1133 VOLNBLOCK BSS 1 word used in setting windows 00090086 4 ZBM 1134 VOLNNUM EQU VOLNBLOCK/VOLFIELD number of this volume 00091186 4 ZBM 1135 VOLNMSBLK EQU VOLNBLOCK/MSBLKFIELD temp block pointer 1136 00170807 4 BASE 1137 VOLNSECAD BSS 1 MS address for security block 00090087 4 ZBM 1138 VOLNSNUM EQU VOLNSECAD/VOLFIELD volume number 00091187 4 ZBM 1139 VOLNSMSBLK EQU VOLNSECAD/MSBLKFIELD displacement 1140 00170808 4 BASE 1141 VOLNIDXLK BSS 1 lock for these two counters 1142 00090019 4 ZBM 1143 VOLNIDXMOD BSSB 1 counted if table modifier around 000902D9 4 ZBM 1144 VOLNIDXLOK BSSB 13 counted for each searching table 1145 BSSB 1 FILLER 00091F19 4 ZBM 1146 VOLNIDXPTR BSSB ADDRESS pointer to IDXT block for table 1147 0017080A 4 BASE 1148 VOLNSUBQ BSS 1 queue of substitution requests 0017080B 4 BASE 1149 VOLNSUBQL BSS 1 lock for substitution request queue 0017080C 4 BASE 1150 VOLNFBZY BSS 1 set if resident lists busy 0017080D 4 BASE 1151 VOLNADTF BSS 1 set if MS ADT tables busy 1152 * ( a process is already running to 1153 * empty/fill the resident table ) 1154 0017080E 4 BASE 1155 VOLNSSN BSS 1 system serial number of this volume 0009010E 4 ZBM 1156 VOLNCUST EQU VOLNSSN/CUSTNUM customer number part 0017080F 4 BASE 1157 VOLNRNAME BSS2 1 real name of volume 00170811 4 BASE 1158 VOLNNAME BSS2 1 the RAD packed name of this volume 00170813 4 BASE 1159 VOLNMNTDAT BSS2 1 date when pack was mounted 00170815 4 BASE 1160 VOLNBUSY BSS 1 the count of processes referencing this volume 1161 * one for each ULB and for each non-user process 1162 * (file freer, device queuer, etc.) 1163 1164 ********************************************************************************** 1165 * * 1166 * Following are the queues of I/O requests pending for * 1167 * this volume. These must remain contiguous and in this order. * 1168 * * 1169 ********************************************************************************** 1170 00170816 4 BASE 1171 VOLNREADQ BSS 1 read requests 00170817 4 BASE 1172 VOLNWRITEQ BSS 1 write requests 1173 1174 ********************************************************************************** 1175 * * 1176 * The following two variables are used when a volume is * 1177 * being initialized and recovered onto. VOLNINLIST contains * 1178 * a pointer to a list of elements representing bad tracks * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 294 (COREIOTABS) F 19 Resident I/O tables 1179 * with the end element representing the size of the pack. * 1180 * VOLNBCNTR is successively incremented to provide all MS * 1181 * addresses on the volume. * 1182 * * 1183 ********************************************************************************** 1184 00170818 4 BASE 1185 VOLNINLIST BSS 1 initialization list 00170819 4 BASE 1186 VOLNBCNTR BSS 1 block counter 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 295 (COREIOTABS) F 19 Resident I/O tables 1188 ********************************************************************************** 1189 * * 1190 * Resident ADT section of the volume name list element. * 1191 * * 1192 ********************************************************************************** 1193 0017081A 4 BASE 1194 VOLNFRECNT BSS 1 number of free blocks in the below list 0017081B 4 BASE 1195 VOLNFRELST BSS 1 number of free blocks in this ADT chain 0017081C 4 BASE 1196 VOLNFREBLK BSS 1 number of free blocks on the volume 1197 * (excludes count of entries in below list) 0017081D 4 BASE 1198 VOLNSIZE BSS 1 number of blocks on this volume 1199 1200 ********************************************************************************** 1201 * * 1202 * When disk space gets low an operator message is sent. * 1203 * Its serial number is saved here so that when disk space * 1204 * goes above the critical level the message can be cancelled. * 1205 * * 1206 ********************************************************************************** 1207 0017081E 4 BASE 1208 VOLNLOMSN BSS 1 low disk space message serial number 00000100 ABS 1209 BLKWRNMIN EQU 256 number of blocks at which to give warning 00000118 ABS 1210 BLKWRNMAX EQU 280 number of blocks at which to remove warning 1211 00000008 ABS 1212 VOLNFREDSP EQU 8 displacement from middle for fill or empty 00000005 ABS 1213 VOLNFREMIN EQU 5 displacement from end for starting action 00000061 ABS 1214 VOLNFREEN EQU VOLNLEN-(DISP VOLNSTART) number of free block 1215 * pointers herein 1216 0017081F 4 BASE 1217 VOLNFREE BSS VOLNFREEN area for free block addresses 1218 DRCT 00000007 ABS 1219 VOLNLOG EQU VOLNLEN LOG 2 size for free memory routines 1220 ORG VOLNPROT recover the space 1221 1222 ********************************************************************************** 1223 * * 1224 * VINLIST * 1225 * This is the format for the small elements linked * 1226 * together in the VOLNINLIST chain. * 1227 * * 1228 ********************************************************************************** 1229 00001F62 1230 VINPROT BASE R0 volume initializer element 00160800 0 BASE 1231 VINLINK BSS 1 link to next element 00160801 0 BASE 1232 VINBLOCK BSS 1 bad block MS address 1233 * (note that the last list element 1234 * contains the pack size which is 1235 * the first address that doesn't exist) 1236 DRCT 00000002 ABS 1237 VINLEN EQU DISPW VINPROT element length 00000001 ABS 1238 VINLOG EQU VINLEN LOG 2 log size for GETMEM 1239 ORG VINPROT recover lost space 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 296 (COREIOTABS) F 19 Resident I/O tables 1241 1242 ********************************************************************************** 1243 * * 1244 * Substitution Queue Element * 1245 * This is the list of requests to substitute or * 1246 * unsubstitute mass storage blocks. The disk driver requests * 1247 * that a block be substituted when it encounters a soft error * 1248 * reading a block, and the ADT manager requests that a block * 1249 * be unsubstituted when that block is finally freed. Since * 1250 * it is inconvenient for either of them to do the * 1251 * substitutions themselves, they just put one of these * 1252 * elements onto a queue and let the substitution process * 1253 * worry about it. * 1254 * There is one of these lists for each volume, anchored * 1255 * at VOLNSUBQ, and locked by VOLNSUBQL. Elements are appended * 1256 * to the list by SUBSTITUTE and UNSUBS, and removed by * 1257 * SUBSPROC. * 1258 * * 1259 ********************************************************************************** 1260 00001F62 1261 SUBQUEUE BASE R0 substitution queue element 00160800 0 BASE 1262 SUBQWORDA BSS 1 first word 00080080 0 ZBM 1263 SUBQREQ EQU SUBQWORDA/CH0 0 => substitute, 1 => unsubstitute 00081F10 0 ZBM 1264 SUBQLINK EQU SUBQWORDA/FLDADRS link to next element 00160801 0 BASE 1265 SUBQBLOCK BSS 1 block number to substitute or 1266 unsubstitute (includes volume number) 1267 DRCT 00000001 ABS 1268 SUBQLOG EQU (DISPW SUBQUEUE) LOG 2 size log 2 1269 ORG SUBQUEUE 1270 1271 ********************************************************************************** 1272 * * 1273 * Substitution List Element * 1274 * This is the list of substituted blocks on the system. * 1275 * There is one chain containing any substitutions that have * 1276 * been made on any mounted volume. * 1277 * This list is created by MOUNTSUBS, destroyed by * 1278 * DISMTSUBS and altered by SUBSPROC. * 1279 * * 1280 ********************************************************************************** 1281 01F62 00000000 1282 SUBSLOCK VFD STORE lock word for substitution list 01F63 00000000 1283 SUBSLIST VFD STORE list of substitution elements 1284 00001F64 1285 SUBLIST BASE R0 substitution list element 00160800 0 BASE 1286 SUBLLINK BSS 1 link to next element 00160801 0 BASE 1287 SUBLBAD BSS 1 bad block number (includes volume number) 00160802 0 BASE 1288 SUBLGOOD BSS 1 substitute block number (includes volume number) 1289 DRCT 00000002 ABS 1290 SUBLLOG EQU (DISPW SUBLIST) LOG 2 size log 2 1291 ORG SUBLIST 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 297 (COREIOTABS) F 19 Resident I/O tables 1293 1294 ********************************************************************************** 1295 * * 1296 * Account Finder Table head * 1297 * This points to a block of free storage that contains * 1298 * an array of block numbers of the account finder table. * 1299 * This is fetched from the system volume when the system is * 1300 * initialized. * 1301 * * 1302 ********************************************************************************** 1303 01F64 00000000 1304 AFTINDEX VFD FLDADRS*STORE pointer to resident AFT 01F65 00000000 1305 AFTLOCK VFD STORE lock word for next two counters 01F66 00000000 1306 AFTLOOKERS VFD STORE number of folk looking at AFT 01F67 00000000 1307 AFTMODIFY VFD STORE number of folk wishing to modify AFT 1308 00000000 ABS 1309 AFTACSRO EQU 0 indicates read only access requested 00000001 ABS 1310 AFTACSMO EQU 1 indicates modify access requested 1311 1312 ********************************************************************************** 1313 * * 1314 * User InDeX Table Head * 1315 * Entries that point at the blocks in IDX's or the AFT. * 1316 * The IDXT blocks of the IDX's are pointed to from the volume * 1317 * name entry while the AFT is pointed to from the head page. * 1318 * The block is of variable length. * 1319 * IDXTBNUM should never be zero, but buckets within the * 1320 * range of IDXTBNUM may have zero for pointers (in which * 1321 * case, they are created as needed). * 1322 * * 1323 ********************************************************************************** 1324 00001F68 1325 IDXTABPROT BASE R4 00170800 4 BASE 1326 IDXTBLOCK BSS 1 current block number 00090080 4 ZBM 1327 IDXTVOL EQU IDXTBLOCK/VOLFIELD volume that table is on 00091180 4 ZBM 1328 IDXTMSBLK EQU IDXTBLOCK/MSBLKFIELD relative disk address 00170004 4 CACH 1329 IDXTFBIT BSSB 8 type of table 00170005 4 CACH 1330 IDXTBNUM BSSB 8 number of buckets in below lists 00092101 4 ZBM 1331 IDXTENTS BSSB 16 total number of entries in buckets 00170802 4 BASE 1332 IDXTTEMP3 BSS 1 holds insert point - block number 00170803 4 BASE 1333 IDXTTEMP4 BSS 1 holds insert point - memory address 00000004 ABS 1334 IDXTPWR2 EQU DISPW IDXTVOL difference of number of buckets from 1335 * power of two 00170804 4 BASE 1336 IDXTBUCKET LABEL one word entry for each bucket 1337 * (holds MS address of corresponding 1338 * bucket. zero indicates bucket was 1339 * empty, so it was not created) 1340 * ... (variable length) 1341 DRCT 1342 ORG IDXTABPROT recover lost space 1343 00001F68 1344 PATCHAREA BSS 80 area for system patches 01FB8 FFFFFFFF 1345 VFD ONEBITS so that we notice the end of the area 00001FB9 1346 HEADPAGEND LABEL first unused word of head page 1347 28 INPUT IBLOCK definitions for initialization 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 298 (IBLOCK) F 20 Initialization information block 4 5 ********************************************************************************** 6 * * 7 * Physical page zero is reserved for bootstrap and power * 8 * fail. While this page is in use, it is mapped into virtual * 9 * page zero of the monitors address space. Otherwise, * 10 * monitor virtual page zero is illegal to reference ( to help * 11 * catch various errors ). * 12 * This file (IBLOCK) defines all locations in the second * 13 * half (200:3FF) of page zero and is assembled with each * 14 * program that uses that area. * 15 * * 16 * Page zero has the following map: * 17 * locs contents * 18 * ---- -------- * 19 * 0000-01ff code copied from PROM in SSU that does * 20 * booting, etc. During system operation * 21 * this bootstrap area is overlaid by the * 22 * power fail restart code. * 23 * 0200:02ff 16 16-word blocks, one for each slot on * 24 * the bus. Each contains the responses * 25 * for WRUs 0 thru 15 on that slot. * 26 * 0300:030f currently unused. Reserved for * 27 * hardware features. * 28 * * * * end of hardware dependent area * 29 * 0310:031E communication area between PROMBOOT, * 30 * DISKBOOT, and the Operating System * 31 * *** this boundary is approximate * 32 * 031F:032F variable area * 33 * 0330:035F stack area for PROMBOOT and DISKBOOT * 34 * 0360:03ff Information saved by the system to * 35 * allow rebuilding of the page file after * 36 * a power failure. * 37 * * 38 ********************************************************************************** 39 40 ORG MA (WPP/2) start in second half of page 00000200 41 IBLOCK LABEL 00000200 42 WRUIPROTO BASE 00000000 DISP 43 WRU0 BSS 1 identity and revision 00000001 DISP 44 WRU1 BSS 1 bus error info 00000002 DISP 45 WRU2 BSS 1 bus error info 00000003 DISP 46 WRU3 BSS 1 bus error info 00000004 DISP 47 WRU4 BSS 1 device dependent info 00000005 DISP 48 WRU5 BSS 1 device dependent info 00000006 DISP 49 WRU6 BSS 1 device dependent info 00000007 DISP 50 WRU7 BSS 1 device dependent info 00000008 DISP 51 WRU8 BSS 1 device dependent info 00000009 DISP 52 WRU9 BSS 1 device dependent info 0000000A DISP 53 WRU10 BSS 1 device dependent info 0000000B DISP 54 WRU11 BSS 1 device dependent info 0000000C DISP 55 WRU12 BSS 1 device dependent info 0000000D DISP 56 WRU13 BSS 1 device dependent info 0000000E DISP 57 WRU14 BSS 1 device dependent info 0000000F DISP 58 WRU15 BSS 1 self test results 59 DRCT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 299 (IBLOCK) F 20 Initialization information block 00000010 ABS 60 WRUIMAX EQU DISPW WRUIPROTO size of WRU info block 61 ORG WRUIPROTO recover the lost space 62 00000200 63 WRUINFO BSS NUMSLOTS*WRUIMAX WRU info blocks, 1 per slot 00000300 64 EWRUINFO LABEL 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 300 (IBLOCK) F 20 Initialization information block 66 67 ********************************************************************************** 68 * * 69 * Reserved for future feature. * 70 * This area was assigned as the communication area * 71 * between macro code and micro code for a debugging feature. * 72 * * 73 ********************************************************************************** 74 75 BSS 16 76 77 ********************************************************************************** 78 * * 79 * End of hardware assigned area. * 80 * * 81 ********************************************************************************** 82 83 ********************************************************************************** 84 * * 85 * Variable area * 86 * The area between here and the tables at the end is * 87 * available for assignment as: * 88 * 1) variables to be communicated between PROMBOOT, * 89 * DISKBOOT, and the SYSTEM. * 90 * 2) variables to be communicated between CPUs * 91 * during system initialization. * 92 * 3) variables local to PROMBOOT or DISKBOOT. * 93 * * 94 ********************************************************************************** 95 96 ********************************************************************************** 97 * * 98 * PROMBOOT constructs a page map value for the SSU with * 99 * the SSU command offset and saves it in SSUPF for future use * 100 * by DISKBOOT, OPL, and the Operating System. * 101 * PROMBOOT uses several pages of memory. When control * 102 * is passed on, PHPNAV may be used to determine the next * 103 * available memory page. * 104 * * 105 ********************************************************************************** 106 00000310 107 SSUPF BSS 1 page map value for SSU control 00000311 108 PHPNAV BSS 1 PF contents for last used page 109 110 ********************************************************************************** 111 * * 112 * This is the contents of the CPU interrupt polling word * 113 * built by initial. It is here so that the many CPUs may * 114 * each load it. * 115 * * 116 ********************************************************************************** 117 00000312 118 INTDEVICES BSS 1 interrupt polling word 119 120 ********************************************************************************** 121 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 301 (IBLOCK) F 20 Initialization information block 122 * PROMBOOT recovers from the SSU the contents of the * 123 * front panel switches at boot time and stores the value * 124 * here. * 125 * DISKBOOT and the system get the switches from here * 126 * so that everyone is using the same data. * 127 * * 128 ********************************************************************************** 129 00000313 130 FPSWITCHX BSS 1 131 132 ********************************************************************************** 133 * This holds the filename of the routine loaded. The * 134 * system can thus find its name here. * 135 ********************************************************************************** 136 00000314 137 CALLNAME BSS2 1 the name of the system loaded 138 139 ********************************************************************************** 140 * * 141 * This block contains the information from DISKBOOT * 142 * about the disk from which it booted the system. It is used * 143 * by the system to ensure that the "system volume" is the * 144 * same one used by DISKBOOT. This vector must be in the same * 145 * format as an offline device control block. * 146 * During TAPEBOOT this same vector is used to describe * 147 * the tape unit that we have booted from. * 148 * * 149 ********************************************************************************** 150 00000316 151 BOOTDEVCB BSS 0 control block for booted device 00000316 152 BOOTDEVPF BSS 1 page file for boot device 00000317 153 BOOTUNIT BSS 1 unit number for boot unit 154 00000318 155 BOOTSCPTRK BSS 1 sectors per track 00000319 156 BOOTRKPCYL BSS 1 tracks per cylinder 157 BSS 4 remainder of disk control block 158 159 ********************************************************************************** 160 * During initialization, one processor is chosen as a * 161 * master and the other processors wait on this flag until it * 162 * is cleared by the "master" processor. * 163 ********************************************************************************** 164 0000031E 165 RELESEFLAG BSS 1 multi-proc control during initial 166 167 ********************************************************************************** 168 * This is the FBI buffer for use by PROMBOOT, * 169 * DISKBOOT, and TAPEBOOT. * 170 ********************************************************************************** 171 0000031F 172 BOOTFBIBF BSS FBILNTH FBI buffer for DISKBOOT 173 174 ********************************************************************************** 175 * * 176 * Definitions for tape boot reading and decryption. * 177 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 302 (IBLOCK) F 20 Initialization information block 178 * A tape suitable for the tape boot operation contains a * 179 * TAPEBOOT record after the first file mark on the tape. The * 180 * TAPEBOOT record must be followed by TOPL and other offline * 181 * utility programs. The second file mark on the tape * 182 * indicates the end of the boot utility programs, and the * 183 * beginning of the +BACKUP info. The format for these tape * 184 * records are all the same, and are all (TPHDRLNTH+WPP)*CPW * 185 * characters long, with the first TPHDRLNTH*CPW characters a * 186 * label for convenience in identifying the record. The * 187 * remainder of the record consists of the encrypted TAPEBOOT, * 188 * or offline utility program code. * 189 * * 190 ********************************************************************************** 191 0000000B ABS 192 TPHDRLNTH EQU FBILNTH length of header on tapeboot record 0000031F 193 TPHDRBF EQU BOOTFBIBF buffer for tapeboot record header 0000032A 194 TPHDR BASE 00000000 DISP 195 TPHDRTAG BSS 2 block identifier (name) 00000002 DISP 196 TPHDRIND BSS 1 word for decryptor to use 00000003 DISP 197 TPHDRDATE BSS 2 date backup tape was made 198 BSS 4 (reserved) 00000009 DISP 199 TPHDRDCKS BSS 1 checksum of data block 0000000A DISP 200 TPHDRHCKS BSS 1 checksum of header 201 DRCT 202 ORG TPHDR 0000000C ABS 203 SIZELOG2 EQU 12 log of decrypt buffer size 00001000 ABS 204 L EQU 2 POWER SIZELOG2 size of the decrypt buffer (in characters) 00000003 ABS 205 ROUNDS EQU 3 number of rounds of encryption 206 207 ********************************************************************************** 208 * * 209 * The following area is used for variables that are * 210 * local to PROMBOOT, DISKBOOT, TAPEBOOT, or INITIAL. These * 211 * variables may, of course, have different definitions for * 212 * each user. * 213 * * 214 ********************************************************************************** 215 0000032A 216 VARAREA LABEL marks beginning of re-usable area 217 218 ********************************************************************************** 219 * Definitions for PROMBOOT. * 220 ********************************************************************************** 221 0400032A 222 KEYH BSS 16:0 describe key by half words 0000032A 223 KEYIND BSS 1 holds the indicator (read from tape) 0000032B 224 KEYPWDATE BSS2 1 holds XOR of PW and backup date 0000032D 225 APROGBC BSS 1 data pointer for decrypting 0000032E 226 APROGB5S BSS 1 data pointer for decrypting 227 228 ********************************************************************************** 229 * * 230 * The IZONEWORD is used to hold the local time zone * 231 * information. This word is picked up by the SRCHDIR routine * 232 * of DISKBOOT and TAPEBOOT from the security block * 233 * (SECTZONE). It is used by OPL utilities to enable printing * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 303 (IBLOCK) F 20 Initialization information block 234 * of local times. * 235 * * 236 ********************************************************************************** 237 0000032F 238 IZONEWORD BSS 1 holds time zone word 00000330 239 BOOTYPE BSS 1 boot type for PROMBOOT 00000331 240 BOOTCLOC BSS 1 control location for PROMBOOT 241 00000332 242 IBLKPATCH BSS 0 patch area, may be used for variables 243 244 ********************************************************************************** 245 * * 246 * This ORG is the beginning of the power fail table * 247 * area. The tables that follow are (in addition to acting * 248 * as bootstrap variables) also passed to the power fail * 249 * restart code. * 250 * Note that simple variables should not overlay these * 251 * tables unless a careful determination is made that no * 252 * conflict exists. * 253 * These tables should be zeroed to start. * 254 * Since the stacks grow toward low memory, the stack * 255 * top label is defined here. * 256 * * 257 ********************************************************************************** 258 259 ORG MA (WPP-2*NUMSLOTS-NPS) place flush with end of page 00000360 260 IBSTACK LABEL 261 262 ********************************************************************************** 263 * * 264 * The initial boot into memory containing parity errors * 265 * requires that a fill operation be done to clear out the * 266 * parity errors. This label marks the limit of the area * 267 * that must be filled. * 268 * * 269 ********************************************************************************** 270 00000360 271 EVARCLEAR LABEL 272 273 ********************************************************************************** 274 * * 275 * This table holds the page map value for each page that * 276 * was assigned as a CPUPAGE. The HEADPAGE also becomes the * 277 * CPUPAGE for the 'master' CPU. However, that entry is not * 278 * made until well into the system initialization. That way, * 279 * the HEADPAGE doesn't get freed twice. After that is * 280 * resolved, CPUPT contains all of the CPUPAGES so that all * 281 * CPUs get their brains back during a power fail recovery. * 282 * Each CPUPAGE is mapped into another monitor virtual * 283 * page where it is used for the free storage addresses. This * 284 * occurrence of the page map value appears in the PFMAP * 285 * table. * 286 * * 287 ********************************************************************************** 288 00000360 289 CPUPT BSS NUMSLOTS page file contents for each CPU page 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 304 (IBLOCK) F 20 Initialization information block 290 291 ********************************************************************************** 292 * This table will be loaded up with the information * 293 * about each slot on the bus. Each entry is the WRU 0 * 294 * response for that slot. This table is constructed by * 295 * PROMBOOT using the information in WRUINFO (above). * 296 ********************************************************************************** 297 00000370 298 IBSLOTS BSS NUMSLOTS one for each slot on system 299 300 ********************************************************************************** 301 * * 302 * This table contains one word for each monitor virtual * 303 * page. That word contains the page map value for the * 304 * physical page corresponding (zero if none). This table * 305 * is initialized by DISKBOOT and kept up to date by the * 306 * dispatcher. It is used by the power fail routine to * 307 * recover the monitor page files. * 308 * * 309 ********************************************************************************** 310 00000380 311 PFMAP BSS NPS page map for monitor virtual address space 00000387 312 HEADPMV EQU PFMAP(PNHEADPAGE-MONPF) head page location 30 INPUT INITIAL first system executed code 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 305 (INITIAL) F 21 Initialization Routine 3 4 ORG INITPAGE 5 6 BLOCK System Initialization Routine 7 ENTRY INITIAL primary entry for CPU doing the work 8 ENTRY SUCKERS secondary entry for lazy CPUs 9 10 * Some global constants used in the initial code 02000 0F000FFF 11 PFCLNMASK VFD ONEBITS/PFSLOT*PFSLOT+ONEBITS/PFPAGENUM*PFPAGENUM clear page file mask 02001 00480312 12 PTRINTDEV PTR INTDEVICES/BIT 0 pntr to mask of slots that interrupt 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 306 (INITIAL) F 21 Initialization Routine 14 15 ********************************************************************************** 16 * * 17 * INITIAL - System Initialization * 18 * This is the primary entry point for the system * 19 * overlay. The 'master' CPU enters here from the bootstrap. * 20 * This CPU is the one that uses HEADPAGE as its CPUPAGE. We * 21 * start by loading up the page file for the CPUPAGE. * 22 * * 23 * Stack required = 19 * 24 * 1 + max ( BLDPROCESS(2), BUILDIVT (3), BUILDPPL (1), * 25 * FREEAFTER (2), FREECHECK (2), GENPPL (2), * 26 * GETIDLE (1), GETMAD (0), HAVEMEMORY(8), * 27 * HAVEPPU (19), HAVESSU (6), MAPOUTMEM (1), * 28 * MERGEPPLS (1), SETRUNNING (2), SGETMEM (0), * 29 * SPREADSYS (5), ZEROIT (1) ) * 30 * * 31 ********************************************************************************** 32 33 JB1 BLOCK INITIAL routine 34 ENTRY INITIAL 35 36 BEGFRAME2 00178800 6 BASE 37 SLOTNUM BSS 1 slot being initialized 38 ENDFRAME 39 40 00002002 41 INITIAL LABEL 02002 FE0E201C 42 JMP OVERVERSN jump over version id 43 * --- 44 45 ********************************************************************************** 46 * * 47 * This version is normally not updated when the system * 48 * is patched, only the version field labeled 'VERSION' is * 49 * patched up to the current rev. This spot allows us to know * 50 * for sure what version this system started as. The * 51 * copyright notice should protect our rights to the code. * 52 * * 53 ********************************************************************************** 54 02003 43393330 55 VFD REVNAMEH high half of name 02004 33202020 56 VFD REVNAMEL low half of name 02005 434F5059 57 TEXTZ "COPYRIGHT 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990 BTI Computer Systems, Inc." 58 0000201C 59 OVERVERSN LABEL 0201C D0001CF7 60 INC CPUCOUNT count number of CPUs 0201D D0001CFA 61 INC CPUINIT say we are on the initial page 0201E BC001CF8 0 62 INCL R0 CPUCOUNT1 ...twice since we need two counts 63 * and this gives us an index 0201F D9124000 1 REG 64 STMSR R1 pick up a copy of our MSR 02020 604A7840 1 1 CBM 65 LD R1 R1/MSRSLOT and extract the slot number of this CPU 02021 E4601CFA 1 0 66 ST R1 CPUSLOTS(R0-1) store CPU slot number into table using index 67 02022 60C40081 3 IMM 68 LD PFPTR PNCPUPAGE get CPUPAGE PF index 02023 00C00387 69 LDPF HEADPMV load our CPUPAGE 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 307 (INITIAL) F 21 Initialization Routine 02024 E4400415 1 70 ST R1 OURSLOT save CPU slot number for ourselves 02025 60002832 0 71 LD R0 STACKIDENT get stack marker and 02026 E400042D 0 72 ST R0 RESSTAKTOP identify this stack 02027 6184044D 6 IMM 73 LD SP ADR RESSTAK initialize stack pointer 02028 EC1F8001 6 STAK 74 STZ PUSH allocate stack area 02029 EC000462 75 STZ MEMERRFLAG indicate not processing memory error 76 * \ / 77 78 ********************************************************************************** 79 * * 80 * Save PM value of bootstrap so that others may use it. * 81 * This must be done before any calls to GETMEM routines that * 82 * get a new page. * 83 * * 84 ********************************************************************************** 85 86 * \ / 0202A 60C40080 3 IMM 87 LD PFPTR MONPF+0 point to bootstrap page 0202B 80801CC7 88 PFRD PAGEZERO save reloc for it 89 90 ********************************************************************************** 91 * * 92 * The first order of business is to free up the unused * 93 * space on HEADPAGE. Since this page is mapped into the same * 94 * location in every CPU, we may free it up with no addressing * 95 * problems. * 96 * * 97 ********************************************************************************** 98 99 * \ / 0202C 6044000A 1 IMM 100 LD R1 LWPP a whole page 0202D 60841FB9 2 IMM 101 LD R2 ADR HEADPAGEND load the first address available 0202E DC402328 102 CALLNP FREEAFTER call this handy routine 103 * \ / 104 105 ********************************************************************************** 106 * * 107 * Defer freeing the other CPU pages until after we have * 108 * generated the MONVM list and know the first address * 109 * available for free memory. * 110 * * 111 ********************************************************************************** 112 113 ********************************************************************************** 114 * * 115 * Generate the MONVM list, excluding those pages that * 116 * must remain resident. The physical page for the * 117 * initializer (this code!) will have a PPAGE element * 118 * generated and entered into the idle list. We'll be done * 119 * with it before it is missed (used!). * 120 * The DISKBOOT routine has left the code control block * 121 * for the SYSTEM.CODE file in window 1. * 122 * * 123 ********************************************************************************** 124 125 * \ / 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 308 (INITIAL) F 21 Initialization Routine 0202F 61040088 4 IMM 126 LD R4 PNINITPAGE start checking here 00002030 127 CRAVP LABEL 02030 60A80780 2 4 128 LD R2 WNDO1(CCBPAGE0-MONPF+R4) check the MS address 02031 FA822042 2 129 JEQZ R2 ENDLOOP jump if no page corresponding 02032 EC381CC6 4 @ 130 STZ @PAVPAGES(R4) remove page from virtual monitor address 02033 F6802042 2 131 JBT R2/CCBPROTECT ENDLOOP jump if a permanent page 132 * \ / 133 134 ********************************************************************************** 135 * * 136 * The page is not flagged as protected. During the * 137 * bootstrap operation, this means that the page was not * 138 * loaded and is not part of the resident code. * 139 * Therefore, we now create a VPAGE element for this page * 140 * and place it into the MONVM list. * 141 * * 142 ********************************************************************************** 143 144 * \ / 02034 DC002ED0 145 CALL SGETMEM get a chunk of memory 02035 40440002 IMM 146 PARVL VPLOG indicate its length 02036 61520000 5 0 REG 147 LD VPP R0 copy the pointer 02037 60001ECB 0 148 LD R0 MONVM get pointer to current list 02038 E4095F10 0 5 ZBM 149 ST R0 VPP,VPLINK hook it behind this element 02039 E5401ECB 5 150 ST VPP MONVM make this element the new head 0203A E5174004 4 5 CACH 151 ST R4 VPP,VPVPN set the page number 0203B 60040001 0 IMM 152 LD R0 VPCNTLRO get read-only marker and 0203C E4094E80 0 5 ZBM 153 ST R0 VPP,VPCNTL indicate that this page is read only 0203D 60040014 0 IMM 154 LD R0 FBITCODED get FBI type for code data page 0203E E40942E2 0 5 ZBM 155 ST R0 VPP,VPFBITYPE and set the page type expected 0203F EDC94083 5 ZBM 156 STW VPP,VPDRIVE indicate on system drive 02040 EC095F11 5 ZBM 157 STZ VPP,VPFCB say no associated lun 02041 E4895183 2 5 ZBM 158 ST R2 VPP,VPMSBLK set block address 159 00002042 160 ENDLOOP LABEL 02042 19040001 4 IMM 161 ADD R4 1 up to next address in CCB 02043 65040100 4 IMM 162 CPR R4 MONPF+NPS check for beyond usable memory 02044 FE082030 163 JLT CRAVP jump if still in allowable area 02045 60040002 0 IMM 164 LD R0 1*BIT FLCHKSUM 02046 FC001CF6 0 165 IORM R0 FLAGS say we need to recalculate checksums 166 * \ / 167 168 ********************************************************************************** 169 * * 170 * Free the remaining CPUPAGEs. * 171 * The HEADPAGE (CPUPAGE for master CPU) has already been * 172 * freed. We must be careful not to free it twice. This is * 173 * accomplished by omitting it from the CPUPT table until all * 174 * other CPUPAGEs are freed (this loop). * 175 * * 176 ********************************************************************************** 177 178 * \ / 02047 6107FFF0 4 IMM 179 LD R4 -NUMSLOTS load count 00002048 180 CCPUPLD LABEL 02048 60280370 0 4 181 LD R0 CPUPT(NUMSLOTS)(R4) see if another CPU has loaded a CPUPAGE 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 309 (INITIAL) F 21 Initialization Routine 02049 FA022051 0 182 JEQZ R0 CLPEND jump if none here 183 * MEMLOCK need not be locked since we are the only CPU 0204A DC40301D 184 CALLNP GETMAD get an available monitor address 0204B 00D20000 0 REG 185 LDPF R0 setup this address in PF 0204C E4260300 0 3 186 ST R0 PFMAP(-MONPF)(PFPTR) save in table 0204D 608AE960 2 3 CBM 187 LD R2 PFPTR/BITS 20:9 make memory address of page 0204E 1884006B 2 IMM 188 ADD R2 CPULNTH make first freeable address 0204F 6044000A 1 IMM 189 LD R1 LWPP a whole page 02050 DC402328 190 CALLNP FREEAFTER free the rest of the page 00002051 191 CLPEND LABEL 02051 FB202048 4 192 IRJ R4 CCPUPLD continue for all slots 193 * \ / 194 195 ********************************************************************************** 196 * * 197 * The HEADPAGE is also used as the 'master' CPUs * 198 * CPUPAGE. It now gets placed into the CPUPT table so that * 199 * power fail will properly restore our brains. * 200 * * 201 ********************************************************************************** 202 203 * \ / 02052 60000415 0 204 LD R0 OURSLOT get our slot number 02053 60800387 2 205 LD R2 HEADPMV load the page map value 02054 E4A00360 2 0 206 ST R2 CPUPT(R0) plug into the CPUPT table 207 * \ / 208 209 ********************************************************************************** 210 * * 211 * Clean out the VOLN table. * 212 * * 213 ********************************************************************************** 214 215 * \ / 02055 38801F22 2 216 LEA R2 VOLNTABLE pointer to start of the table 02056 60440100 1 IMM 217 LD R1 MAXVOLNUM*CPW length of table in characters 02057 FE580000 218 CFILL 0 nothing remains 219 * \ / 220 221 ********************************************************************************** 222 * * 223 * Make PPAGEs for the following special cases: * 224 * - the bootstrap code itself, * 225 * - the three windows used by the bootstrap, * 226 * - the page used by the initial routine, and * 227 * - the pages used by INITPROC. * 228 * * 229 * Note that the first call to GENPPL uses that page for * 230 * FBIs for the following pages. Thus we call GENPPL once * 231 * before calling BUILDPPL so that there will be a page * 232 * allocated for the FBIs. We then build PPLs for the initial * 233 * page and initial process pages and tuck them away in a safe * 234 * place. When INITPROC has finished running it places these * 235 * PPLs in the idle lists for mass consumption. * 236 * Also note that the first page of INITPROC gets its PPL * 237 * built first (of the initial PPLs) so that it will be on the * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 310 (INITIAL) F 21 Initialization Routine 238 * bottom of the list. This must be this way or else when * 239 * INITPROC is giving the PPLs to the idle lists it will give * 240 * the one its finishing up code is running on before it is * 241 * finished and die a horrible death. * 242 * * 243 ********************************************************************************** 244 245 * \ / 02058 60C40082 3 IMM 246 LD PFPTR PNWNDO1 points to window 1 02059 80D34000 5 REG 247 PFRC R5 read physical page number 0205A DC40235E 248 CALLNP GENPPL make a PPAGE element for this page 249 0205B 60C400AC 3 IMM 250 LD PFPTR PNINITPROC index to INITPROC page 0205C 60840000 2 IMM 251 LD R2 0 no PPLs built yet 0000205D 252 GENINITPPL LABEL 0205D 80934000 5 REG 253 PFRD R5 read page file contents 0205E DC402374 254 CALLNP BUILDPPL build a PPL for this page 0205F E4891F10 2 4 ZBM 255 ST R2 PPL,PPLINK link previous PPLs onto us 02060 60930000 2 4 REG 256 LD R2 PPL R2 -> list of initial PPLs 02061 18C40001 3 IMM 257 ADD PFPTR 1 move to next page 02062 64C400AD 3 IMM 258 CPR PFPTR ENDOFSYS/WPP+MONPF have we done the last of the system? 02063 FE0A205D 259 JLE GENINITPPL if not, then keep building PPLs 260 * \ / 261 02064 60C40088 3 IMM 262 LD PFPTR PNINITPAGE the index to this page 02065 80934000 5 REG 263 PFRD R5 read my page file contents 02066 79402000 5 264 AND R5 PFCLNMASK mask off read-only bits 02067 DC402374 265 CALLNP BUILDPPL make a PPL for the initializer page 02068 E4891F10 2 4 ZBM 266 ST R2 PPL,PPLINK link previous list onto new PPL 02069 E5001E1D 4 267 ST PPL PPLINIT save pointer to entire list 0206A EC000388 268 STZ PFMAP(PNINITPAGE-NPS) clear out of the page file map 269 0206B 60C40083 3 IMM 270 LD PFPTR PNWNDO2 points to window 2 0206C 80D34000 5 REG 271 PFRC R5 read physical page number 0206D DC40235E 272 CALLNP GENPPL make a PPAGE element for this page 273 0206E 60C40084 3 IMM 274 LD PFPTR PNWNDO3 points to bootstrap page 0206F 80D34000 5 REG 275 PFRC R5 read physical page number 02070 DC40235E 276 CALLNP GENPPL make PPAGE element for this page 277 02071 60C40085 3 IMM 278 LD PFPTR PNWNDO4 another window used by the booter 02072 80D34000 5 REG 279 PFRC R5 get where he is 02073 DC40235E 280 CALLNP GENPPL generate control element 281 * \ / 282 02074 60000313 0 283 LD R0 FPSWITCHX get the boot time FP switches passed 02075 E4001EE0 0 284 ST R0 FPSWITCHB from PROMBOOT and save on headpage 02076 EC000312 285 STZ INTDEVICES initialize mask of devices that can interrupt 286 * \ / 287 288 ********************************************************************************** 289 * * 290 * Scan the slot table looking for memory, and if found * 291 * initialize it. We do this in a separate loop from the * 292 * initializing loop for PPUs and SSUs since they require a * 293 * fair amount of memory to build their control elements. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 311 (INITIAL) F 21 Initialization Routine 294 * Also, this way when we get to the PPUs we know for sure * 295 * whether there are any old MCUs around and will (or will * 296 * not) enable the PPU to do triple word transfers * 297 * accordingly. * 298 * Note that we use R7 as a flag to indicate whether * 299 * there are any MCUs on the system. (0 means all SMUs, 1 * 300 * means at least one MCU.) * 301 * * 302 ********************************************************************************** 303 304 * \ / 02077 60C40000 3 IMM 305 LD R3 0 slot loop counter 02078 61C40000 7 IMM 306 LD R7 0 assume all SMUs 00002079 307 NEXTMEM LABEL 02079 60260370 0 3 308 LD R0 IBSLOTS(R3) get this slots data word 0207A FA022088 0 309 JEQZ R0 NEXTONE jump if nobody home there 0207B 604A0040 1 0 CBM 310 LD R1 R0/WRU0TYPE fetch the type of the device 0207C 64440001 1 IMM 311 CPR R1 SLTTMEM is this a memory device? 0207D FE022084 312 JEQ DOMEM jump if so 0207E 64440004 1 IMM 313 CPR R1 SLTTSSU is it an SSU? 0207F FE0C2088 314 JNE NEXTONE jump if not 315 * \ / 316 317 * SSU in slot R3 02080 E4D78800 3 6 BASE 318 ST R3 SP,SLOTNUM save the slot number 02081 DC402172 319 CALLNP HAVESSU initialize our SSU 02082 60D78800 3 6 BASE 320 LD R3 SP,SLOTNUM get back the slot number 02083 FE0E2088 321 JMP NEXTONE move on 322 * --- 323 324 * MCU or SMU in slot R3 00002084 325 DOMEM LABEL 02084 E4D78800 3 6 BASE 326 ST R3 SP,SLOTNUM save the slot number 02085 DC402133 327 CALLNP HAVEMEMORY initialize our memory 02086 7DD20000 7 0 REG 328 IOR R7 R0 say if we are SMU or MCU 02087 60D78800 3 6 BASE 329 LD R3 SP,SLOTNUM get back the slot number 330 * \ / 331 00002088 332 NEXTONE LABEL 02088 18C40001 3 IMM 333 ADD R3 1 advance to next slot 02089 64C40010 3 IMM 334 CPR R3 NUMSLOTS see if we're done 0208A FE082079 335 JLT NEXTMEM jump if not, on to next device 336 * \ / 337 338 ********************************************************************************** 339 * * 340 * Scan the slot table and initialize PPUs and SSUs. We * 341 * also set the corresponding bit in INTDEVICES for any PPU or * 342 * SSU found since they may interrupt us. * 343 * * 344 ********************************************************************************** 345 0208B 60C40000 3 IMM 346 LD R3 0 loop slot counter 0000208C 347 NEXTDEVICE LABEL 0208C 60260370 0 3 348 LD R0 IBSLOTS(R3) get this slots data word 0208D FA02209B 0 349 JEQZ R0 EMPTYSLOTX jump if nobody home there 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 312 (INITIAL) F 21 Initialization Routine 0208E 604A0040 1 0 CBM 350 LD R1 R0/WRU0TYPE fetch the type of the device 0208F 60840000 2 IMM 351 LD R2 0 02090 E44A8030 1 2 CBM 352 ST R1 R2/SLOTTYPE make system table format 02091 64440002 1 IMM 353 CPR R1 SLTTCPU is this one a CPU? 02092 FE0C2094 354 JNE NOTACPU jump if not 02093 E40A8DA0 0 2 CBM 355 ST R0 R2/SLOTCPUI keep extra info about CPU 00002094 356 NOTACPU LABEL 02094 E4A61ECE 2 3 357 ST R2 SLOTTABLE(R3) place as what's in this slot 02095 64440003 1 IMM 358 CPR R1 SLTTPPU is it a PPU? 02096 FE0C209B 359 JNE EMPTYSLOTX jump if not 02097 E4D78800 3 6 BASE 360 ST R3 SP,SLOTNUM save the slot number 02098 6153C000 5 7 REG 361 LD R5 R7 let callee know if there are SMUs 02099 DC4021A4 362 CALLNP HAVEPPU call the initializer 0209A 60D78800 3 6 BASE 363 LD R3 SP,SLOTNUM get back the slot number 364 * \ / 365 0000209B 366 EMPTYSLOTX LABEL 0209B 18C40001 3 IMM 367 ADD R3 1 advance to next slot 0209C 64C40010 3 IMM 368 CPR R3 NUMSLOTS see if we're done 0209D FE08208C 369 JLT NEXTDEVICE jump if not, on to next device 0209E FE0E209F 370 JMP DONESLOTS jump when all slots initialized 371 * --- 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 313 (INITIAL) F 21 Initialization Routine 373 374 ********************************************************************************** 375 * * 376 * At this point we need enough whole pages in the * 377 * wholepage list until we go virtual. If we ever run out * 378 * during this initial processes I suggest that more pages be * 379 * given to the wholepage list. Note: be sure to adjust the * 380 * FSXCOUNT word appropriately. * 381 * Until now, the PPLs that have been created were hashed * 382 * into the PPUSDIDLE table, indexed by the slot number of the * 383 * corresponding MCU. We can now merge them into PPCLNIDLE to * 384 * produce a list that is evenly ordered with respect to MCU. * 385 * This results in a more distributed usage of MCUs. We assume * 386 * that we do not have to mess with the end-pointers in * 387 * PPENDIDLE. * 388 * The call to FREECHECK ensures that we have at least * 389 * (exactly?) one page in the WHOLEPAGE list. From there we * 390 * put one more page into the wholepage list. This should be * 391 * enough until we go virtual. * 392 * * 393 ********************************************************************************** 394 0000209F 395 DONESLOTS LABEL 0209F DC402396 396 CALLNP MERGEPPLS make one idle list from many 020A0 DC4023A6 397 CALLNP SPREADSYS distribute monitor pages to other MCUs 020A1 DC402387 398 CALLNP FREECHECK ensure presence of one page 020A2 DC402D1C 399 CALLNP GETIDLE request a free PPL 020A3 00026044 400 HALT HALTB6044 no pages for initial process 401 * No locks need be held since we are alone 020A4 60001C79 0 402 LD R0 WHOLEPAGE get the current head element 020A5 E4091F10 0 4 ZBM 403 ST R0 PPL,PPLINK link this additional page into the list 020A6 E5001C79 4 404 ST PPL WHOLEPAGE and make him the head cheese 405 * \ / 406 407 ********************************************************************************** 408 * * 409 * GETMEM has been setting the flags bit for free storage * 410 * expansion and decrementing the count word. At this point * 411 * we know there are at least two pages available in the * 412 * wholepage list. Here we want to set our equilibrium value * 413 * for the number of pages on the wholepage list. Since every * 414 * CPU could request a page and this could happen before * 415 * anyone reaches the dispatcher, we need at least one page * 416 * for every CPU. Here we calculate the number of pages needed * 417 * and alert the dispatcher. Good Luck!!! * 418 * * 419 ********************************************************************************** 420 421 * \ / 020A7 70001CF7 0 422 LDN R0 CPUCOUNT number of CPUs ( - ) 020A8 5007FFFE 0 IMM 423 MIN R0 -2 two pages is the minimum allocation 020A9 18040002 0 IMM 424 ADD R0 2 adjust for pages already there 020AA E4001C7A 0 425 ST R0 FSXCOUNT set equilibrium value (-) 020AB 60040004 0 IMM 426 LD R0 1*BIT FLFSX flag to start free storage routine 020AC FC001CF6 0 427 IORM R0 FLAGS let the dispatcher know 428 * \ / 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 314 (INITIAL) F 21 Initialization Routine 429 430 ********************************************************************************** 431 * * 432 * We need to initialize the tail pointers for the idle * 433 * page list. This is done here so we don't have to do any * 434 * fancy checking when PUTIDLE is first called. * 435 * * 436 ********************************************************************************** 437 438 * \ / 020AD 6044001F 1 IMM 439 LD R1 IDLETBSZ-1 size of the idle page table 000020AE 440 INITIDLE LABEL 020AE 38221DDD 0 1 441 LEA R0 PPUSDIDLE(R1) create the tail address 020AF E4221DFD 0 1 442 ST R0 PPENDIDLE(R1) set it where it needs to be 020B0 FA6620AE 1 443 JDR R1 INITIDLE jump until zero done 444 * \ / 445 446 ********************************************************************************** 447 * * 448 * We now build a TCB for the SSU. Port 0. * 449 * * 450 ********************************************************************************** 451 452 * \ / 020B1 DC002ED0 453 CALL SGETMEM get area for a TCB 020B2 40440005 IMM 454 PARVL (TCBLNTH LOG 2) indicate size 020B3 61120000 4 0 REG 455 LD R4 R0 R4 => TCB 020B4 DC003090 456 CALL ZEROIT make it clean 020B5 41170800 4 BASE 457 PAR R4,0 pass address and 020B6 4044001D IMM 458 PARVL TCBLNTH length 020B7 60440005 1 IMM 459 LD R1 TCBLNTH LOG 2 020B8 6097101D 2 4 REG 460 LD R2 R4+TCBLNTH 020B9 DC402328 461 CALLNP FREEAFTER give back the unused area after 020BA E5001EE1 4 462 ST R4 FPTCB save pointer to SSU tcb 020BB EC090890 4 ZBM 463 STZ R4,TCTNUM terminal number zero 020BC EDC91A10 4 ZBM 464 STW R4,TCRFP this is the front panel term 020BD 60040002 0 IMM 465 LD R0 TCINTSNORM 020BE E4090249 0 4 ZBM 466 ST R0 R4,TCINTSTATE the front panel is always normal 020BF 60001F04 0 467 LD R0 TERMBASE pick up existing list 020C0 E4091F10 0 4 ZBM 468 ST R0 R4,TCLINK link it behind us and 020C1 E5001F04 4 469 ST R4 TERMBASE put onto list of TCB's 470 * \ / 471 472 ********************************************************************************** 473 * * 474 * Memory and the system is now together enough to * 475 * operate with some interrupts. We herein initialize the * 476 * vectors. * 477 * * 478 ********************************************************************************** 479 480 * \ / 020C2 DC402336 481 CALLNP BUILDIVT set up the interrupt vectors 482 * \ / 483 484 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 315 (INITIAL) F 21 Initialization Routine 485 * * 486 * Physical page zero ( the prom boot page ) is also used * 487 * by power fail restart. The power up routine must be loaded * 488 * into the physical page. The power fail routine must be * 489 * able to restore all page file locations, so pointers to all * 490 * physical pages are saved on physical page zero. * 491 * The power up routine is moved in two pieces so that a * 492 * HALT for unable to restart is always present. * 493 * * 494 ********************************************************************************** 495 496 * \ / 020C3 600420F7 0 IMM 497 LD R0 ADR PFCODE(1) 020C4 6044004C 1 IMM 498 LD R1 (PFCODELEN-1)*CPW 020C5 60840001 2 IMM 499 LD R2 ADR PWRUPADDR(1) 020C6 FE400000 500 CMOVE 020C7 600020F6 0 501 LD R0 PFCODE move over the first word 020C8 E4000000 0 502 ST R0 PWRUPADDR 503 * \ / 504 505 ********************************************************************************** 506 * * 507 * This code is most definitely temporary. * 508 * Unfortunately, the current PROMBOOT does not initialize * 509 * parts of page 0. Until PROMBOOT changes this code must * 510 * remain lest the crashdump routine die in the middle and * 511 * other anomalies occur. * 512 * The current version of PROMBOOT is B2.1 8412. * 513 * * 514 ********************************************************************************** 515 516 * \ / 020C9 60840300 2 IMM 517 LD R2 0300 zap locations 300:310 020CA 60440040 1 IMM 518 LD R1 16*CPW 16 words worth 020CB FE580000 519 CFILL 000 fill with zeros 020CC 6084031A 2 IMM 520 LD R2 031A zap locations 31A:35F 020CD 60440114 1 IMM 521 LD R1 69*CPW 46 words worth 020CE FE580000 522 CFILL 000 fill with zeros 523 * \ / 524 525 ********************************************************************************** 526 * * 527 * The dispatcher needs to map in page zero from time to * 528 * time to update the page map table, so we save the page map * 529 * value for physical page zero. * 530 * * 531 ********************************************************************************** 532 533 * \ / 020CF EC00031E 534 STZ RELESEFLAG let other processors go 020D0 60C40080 3 IMM 535 LD PFPTR MONPF+0 point to bootstrap page 020D1 80920000 0 REG 536 PFRD R0 get the page zero PF value 020D2 E4000380 0 537 ST R0 PFMAP(0) save in the power fail page map 020D3 80D20000 0 REG 538 PFRC R0 zap page zero for now 539 * \ / 540 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 316 (INITIAL) F 21 Initialization Routine 541 ********************************************************************************** 542 * * 543 * Create a user limit block (ULB) for an account that * 544 * doesn't exist in the system (!!!!!!!!!!!!.!!!!!!) but that * 545 * is used by this initial routine, by assorted overhead * 546 * routines, and by PSAs when logging on or off users. * 547 * * 548 ********************************************************************************** 549 550 * \ / 020D4 DC002ED0 551 CALL SGETMEM allocate the ULB space 020D5 40440004 IMM 552 PARVL ULLOG indicate desired size 020D6 E4001EAE 0 553 ST R0 SYSTEMULB save pointer to same 020D7 DC003090 554 CALL ZEROIT clear it out 020D8 41160800 0 BASE 555 PAR R0,0 020D9 40440010 IMM 556 PARVL 2 POWER ULLOG 020DA 61001EAE 4 557 LD ULB SYSTEMULB 020DB 620023D2 01 558 LD2 R0 SYSACTNAM set system account name 020DC E6170802 014 BASE 559 ST2 R0 ULB,ULACCNM 020DD 600023D4 0 560 LD R0 SYSACTPROJ 020DE E4170804 0 4 BASE 561 ST R0 ULB,ULACCPROJ 562 * 020DF D1570808 4 BASE 563 STMW ULB,ULTIMLIM set no limits upon us 020E0 D157080A 4 BASE 564 STMW ULB,ULWLCKLIM 020E1 D149318C 4 ZBM 565 STMW ULB,ULDSKWARN 020E2 D149018C 4 ZBM 566 STMW ULB,ULDSKSAVL 020E3 D149218D 4 ZBM 567 STMW ULB,ULDSKLIM 020E4 60040800 0 IMM 568 LD R0 0800 020E5 E4170805 0 4 BASE 569 ST R0 ULB,ULBUSYWORD set it busy enough to not go away 020E6 EDC90081 4 ZBM 570 STW ULB,ULDRIVE say system disk is home 020E7 60040765 0 IMM 571 LD R0 ULIDVAL get the marker indicating ULB 020E8 E40908B0 0 4 ZBM 572 ST R0 ULB,ULIDENT say this is really a ULB 573 * \ / 574 575 ********************************************************************************** 576 * * 577 * Create a process to do the rest of the system * 578 * initialization. There should be at least one page * 579 * available since we call GETPAGE from within BLDPROCESS. * 580 * * 581 ********************************************************************************** 582 583 * \ / 020E9 DC0035D2 584 CALL BLDPROCESS build the process 020EA 4144F1F0 IMM 585 PARV MONMSR indicate monitor relocation 020EB 43440000 IMM 586 PARV2 0 name of process 020EC 4144B01B IMM 587 PARV ADR INITPROC PC of initial process 020ED 40440001 IMM 588 PARVL 1 indicate system process 589 * \ / 590 * R3 => PSA, PCB 591 592 ********************************************************************************** 593 * * 594 * Give our process enough privileges so it can do all * 595 * sorts of useful (and dangerous) things. ( Notice that * 596 * these fields are assumed zero when we arrive here which * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 317 (INITIAL) F 21 Initialization Routine 597 * disables restrictions ) * 598 * * 599 ********************************************************************************** 600 601 * \ / 020EE 6088C116 2 3 ZBM 602 LD R2 R3,PSCURRPROC get pointer to UPC 020EF EDC8D214 3 ZBM 603 STW R3,PSCNTLMODE non virtual control mode semaphore 020F0 EDC88610 2 ZBM 604 STW R2,UPCNTLMODE in control mode 020F1 EC089210 2 ZBM 605 STZ R2,UPOPREQ operator functions OK too 020F2 EC088A20 2 ZBM 606 STZ R2,UPCPRIV/(UPMANAGRB+UPBACKUPB) manager and backup requests 607 * \ / 608 609 ********************************************************************************** 610 * * 611 * Set our process up to run and then let the other * 612 * processors in the system go. * 613 * * 614 ********************************************************************************** 615 616 * \ / 020F3 DC402B99 617 CALLNP SETRUNNING set the process runnable 020F4 DC4025FC 618 CALLNP MAPOUTMEM no one should be mapped in at this point 619 020F5 FE0E2885 620 JMP STARTUP clear page file and into the dispatcher 621 * --- 622 623 ********************************************************************************** 624 * * 625 * Power up code. This code is loaded over the PROMBOOT * 626 * code in memory page zero. It gains control in the power up * 627 * restart. * 628 * * 629 ********************************************************************************** 630 000020F6 631 PFCODE DRCT PWRUPADDR produce code that loads at 0 632 020F6 FE0E0003 633 JMP REALSTART jump over the identifier 634 * --- 635 020F7 50462043 636 TEXTZ "PF CODE" 637 638 ********************************************************************************** 639 * * 640 * The page file is full of self test results (garbage). * 641 * Make every user page (except ours) illegal to reference. * 642 * * 643 ********************************************************************************** 644 00000003 645 REALSTART LABEL 020F9 60C400FF 3 IMM 646 LD PFPTR PFSIZE-1 number of PF locations 647 00000004 648 CLEARLOOP LABEL 020FA 64C40080 3 IMM 649 CPR PFPTR PNPAGEZERO check for page that we're in 020FB FE020007 650 JEQ SKIPCLEAR skip self 020FC 80D28000 2 REG 651 PFRC R2 Read and clear PF location 00000007 652 SKIPCLEAR LABEL 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 318 (INITIAL) F 21 Initialization Routine 020FD FAE60004 3 653 JDR PFPTR CLEARLOOP repeat for all pages 654 * \ / 655 020FE 60C400FF 3 IMM 656 LD PFPTR MONPF+NPS-1 load address of last monitor page 00000009 657 LOADLOOP LABEL 020FF 64C40080 3 IMM 658 CPR PFPTR PNPAGEZERO we are done after arrival... 02100 FE0A000F 659 JLE LOADDONE ... at our own page 02101 60260300 0 3 660 LD R0 PFMAP(PFPTR-MONPF) get the map value 02102 FA02000E 0 661 JEQZ R0 LOADEND see if unloaded 02103 00D20000 0 REG 662 LDPF R0 otherwise, restore PF location 0000000E 663 LOADEND LABEL 02104 FAE60009 3 664 JDR PFPTR LOADLOOP do all monitor pages, 665 * --- stopped before fallout 666 0000000F 667 LOADDONE LABEL 668 * Now map in CPU page for this CPU 02105 D9124000 1 REG 669 STMSR R1 Fetch MSR to find who we are 02106 604A7840 1 1 CBM 670 LD R1 R1/MSRSLOT isolate our slot number 02107 60C40081 3 IMM 671 LD PFPTR PNCPUPAGE get CPU page number 02108 00E20360 1 672 LDPF CPUPT(R1) load up PF for individual CPU page 673 * \ / 674 02109 FE0E278F 675 JMP POWERUP now into the system to continue 676 * --- 677 678 DRCT don't forget to restore symbol defs 00000014 ABS 679 PFCODELEN EQU DISPW PFCODE 680 681 END JB1 INITIAL routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 319 (INITIAL) F 21 Initialization Routine 683 684 ********************************************************************************** 685 * * 686 * SUCKERS - All of the other CPUs enter here. * 687 * This is the secondary entry point for the system * 688 * overlay. Basicly, these clods twiddle their bits until * 689 * it's time to run the system. They then load up their page * 690 * files and scratch off. * 691 * * 692 * Stack required = 3. * 693 * 0 + max ( BUILDIVT (3) ) * 694 * * 695 ********************************************************************************** 696 697 BLOCK SUCKERS routine 698 ENTRY SUCKERS 699 0000210A 700 SUCKERS LABEL 0210A D0001CF7 701 INC CPUCOUNT count number of CPUs 0210B D0001CFA 702 INC CPUINIT say another CPU on initial page 0210C BC001CF8 0 703 INCL R0 CPUCOUNT1 ...twice since we need two counts 704 * and this gives us an index 0210D D9130000 4 REG 705 STMSR R4 get a copy of our MSR 0210E 610B3840 4 4 CBM 706 LD R4 R4/MSRSLOT extract our slot number 0210F E5201CFA 4 0 707 ST R4 CPUSLOTS(R0-1) store CPU slot number into table using index 708 * \ / 709 710 ********************************************************************************** 711 * * 712 * Fetch a page for the CPUPAGE for this machine. We are * 713 * racing with the primary CPU and other secondary CPUs but * 714 * the INCLs are interlocked instructions. We make an entry * 715 * in CPUPT so that all CPUs end up knowing where the pages * 716 * are. * 717 * * 718 ********************************************************************************** 719 720 * \ / 02110 60C40081 3 IMM 721 LD PFPTR PNCPUPAGE load the virtual page number 02111 BC000311 0 722 INCL R0 PHPNAV get next available physical page 02112 00D20000 0 REG 723 LDPF R0 load up the page file 02113 E4280360 0 4 724 ST R0 CPUPT(R4) save page map value for other CPUs 02114 60441000 1 IMM 725 LD R1 CPP 02115 60840400 2 IMM 726 LD R2 ADR CPUPAGE 02116 FE580000 727 CFILL 0 clear out the CPU page 02117 E5000415 4 728 ST R4 OURSLOT save this CPUs slot number 02118 EC000462 729 STZ MEMERRFLAG indicate not processing memory error 02119 60002832 0 730 LD R0 STACKIDENT 0211A E400042D 0 731 ST R0 RESSTAKTOP set stack identifier 0211B 6184044D 6 IMM 732 LD SP ADR RESSTAK initialize stack pointer 733 * \ / 734 735 ********************************************************************************** 736 * * 737 * Unmap the windows that were left mapped by DISKBOOT. * 738 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 320 (INITIAL) F 21 Initialization Routine 739 ********************************************************************************** 740 741 * \ / 0211C 60C40082 3 IMM 742 LD PFPTR PNWNDO1 unmap window1 0211D 80D20000 0 REG 743 PFRC R0 0211E 60C40083 3 IMM 744 LD PFPTR PNWNDO2 unmap window2 0211F 80D20000 0 REG 745 PFRC R0 02120 60C40084 3 IMM 746 LD PFPTR PNWNDO3 unmap window3 02121 80D20000 0 REG 747 PFRC R0 02122 60C40085 3 IMM 748 LD PFPTR PNWNDO4 unmap window4 02123 80D20000 0 REG 749 PFRC R0 750 * \ / 751 00002124 752 WAITRELESE LABEL 02124 5C00031E 753 CMZ RELESEFLAG check for OK to go 02125 FE0C2124 754 JNE WAITRELESE jump back if not 755 * \ / 756 757 ********************************************************************************** 758 * * 759 * Load up the page file with all of the permanently * 760 * resident pages. DISKBOOT has already loaded our page file * 761 * to map the pages that it loaded, however, the primary CPU * 762 * has mapped some more pages since then. So we do it all * 763 * again. * 764 * * 765 ********************************************************************************** 766 767 * \ / 02126 60C40087 3 IMM 768 LD PFPTR PNHEADPAGE load page number 00002127 769 MORELOAD LABEL 02127 64C40100 3 IMM 770 CPR PFPTR PFSIZE see if we've gone too far 02128 FE06212D 771 JGE PLOADED exit if so 02129 60A60300 2 3 772 LD R2 PFMAP(-MONPF)(PFPTR) load the map word 0212A FA82212C 2 773 JEQZ R2 NOLOAD jump if nothing here 0212B 00D28000 2 REG 774 LDPF R2 load up the page file 0000212C 775 NOLOAD LABEL 0212C FAE02127 3 776 IRJ PFPTR MORELOAD advance to next page, 777 * --- stopped by compare test 778 779 0000212D 780 PLOADED LABEL 781 * Now set up the interrupt vectors for each 782 * individual processor 783 0212D DC402336 784 CALLNP BUILDIVT set up the interrupt vectors 785 * get rid of the boot pages 0212E 60C40080 3 IMM 786 LD PFPTR MONPF+0 points to the prom boot page 0212F 80D20000 0 REG 787 PFRC R0 zap the page file entry 02130 60C40084 3 IMM 788 LD PFPTR PNBOOTLOC points to the disk boot page 02131 80D20000 0 REG 789 PFRC R0 zap the page file entry 790 791 02132 FE0E2885 792 JMP STARTUP off to see the wizard (we must be) 793 * --- 794 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 321 (INITIAL) F 21 Initialization Routine 795 END SUCKERS routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 322 (INITIAL) F 21 Initialization Routine 797 798 ********************************************************************************** 799 * * 800 * HAVEMEMORY - Generate PPAGE Elements for a Memory * 801 * We scan through the slot table. Each memory is carved * 802 * up into pages and a PPL is generated for each page. As * 803 * this is going on, we are using up free memory like mad (for * 804 * the PPLs). In order not to die a horrible death (use up * 805 * more free storage than was provided by the freeing of the * 806 * CPUPAGEs), we check every time around the loop and keep * 807 * replenishing the supply of whole pages in the free storage * 808 * list. * 809 * Several pages are taken by the boot routine to read * 810 * the resident system into. The location PHPNAV has the PF * 811 * contents for the last such allocated page. If the memory * 812 * box being configured here is the memory that was booted * 813 * into (known by comparing against the slot number in the * 814 * PHPNAV), we do not generate PPL's for those pages up to and * 815 * including PHPNAV. Call: * 816 * * 817 * LD R0 * 818 * LD R3 * 819 * CALLNP HAVEMEMORY * 820 * R0 = 0 if this is SMU * 821 * * 822 * Eats R0:R5. * 823 * Stack required = 8 * 824 * 6 + max ( FREECHECK (2), GENPPL (2), MAYBESMU (2) ) * 825 * * 826 ********************************************************************************** 827 828 BLOCK HAVEMEMORY subroutine 829 ENTRY HAVEMEMORY 830 831 BEGFRAME 00178801 6 BASE 832 MEMMASK BSS 1 number of pages described by each bit 833 * of WRUMEMHERE, less one. 00178802 6 BASE 834 MEMBITS BSS 1 bits for memory addresses present, 835 * from WRUMEMHERE. 00178803 6 BASE 836 MEMPFILE BSS 1 running page file value. 00178804 6 BASE 837 LASTSYS BSS 1 lowest page in memory used by system, or -1 if none 00178805 6 BASE 838 SMUFLAG BSS 1 0 sez this is an SMU 839 ENDFRAME 840 02133 DD5F8006 6 STAK 841 HAVEMEMORY ENTRNP PUSH 02134 DC402161 842 CALLNP MAYBESMU see if SMU and build element if so 02135 E4578805 1 6 BASE 843 ST R1 SP,SMUFLAG save indication of SMU or not 02136 EC178803 6 BASE 844 STZ SP,MEMPFILE clean out page file 02137 D1578804 6 BASE 845 STMW SP,LASTSYS assume we didn't boot from this mem 02138 E4C98843 3 6 ZBM 846 ST R3 SP,MEMPFILE/PFSLOT save slot number in page file 02139 60400311 1 847 LD R1 PHPNAV last page used by boot routine 0213A 64CA4840 3 1 CBM 848 CPR R3 R1/PFSLOT did we use this memory? 0213B FE0C213E 849 JNE NOTBOOTMEM jump if not 0213C 78402000 1 850 AND R1 PFCLNMASK clean out garbage bits in page file 0213D E4578804 1 6 BASE 851 ST R1 SP,LASTSYS last used system page 0000213E 852 NOTBOOTMEM LABEL 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 323 (INITIAL) F 21 Initialization Routine 853 0213E 600A2040 0 0 CBM 854 LD R0 R0/WRUMEMINC description of size of blocks of mem 855 * (see WRUMEMINC description) 0213F 60440010 1 IMM 856 LD R1 16 00002140 857 MEMDOUBLE LABEL 02140 18524000 1 1 REG 858 ADD R1 R1 double piece size each time around 02141 FA262140 0 859 JDR R0 MEMDOUBLE 860 * \ / 861 * Now, R1 has the number of pages that are described by 862 * each bit of the memory's WRU4 response. 863 * \ / 02142 10440001 1 IMM 864 SUB R1 1 turn into mask of lower bits 02143 E4578801 1 6 BASE 865 ST R1 MEMMASK save it 02144 6012C000 0 3 REG 866 LD R0 R3 slot number 02145 1C040010 0 IMM 867 MUL R0 WRUIMAX index for array 02146 60200204 0 0 868 LD R0 WRUIPROTO/WRU4(R0) get WRU4 response 02147 F62C215F 0 869 JBT R0/WRUMEMNONE RETURN jump if no memory connected 02148 F22E214D 0 870 JBF R0/WRUMEMBAD SETUPBLOCK jump if memory is useable 871 * \ / 872 * This memory is not useable. Let's say so. 873 * \ / 02149 18C0214C 3 874 ADD R3 STOPINST build a stop instruction 0214A 5D52C000 3 REG 875 XCT R3 do it. 0214B FE0E215F 876 JMP RETURN if he wants to RUN, skip this MCU 877 * --- 878 0214C 00826000 879 STOPINST STOP STOPB600X memory cabled wrong to MCU 880 0000214D 881 SETUPBLOCK LABEL 0214D 600A3080 0 0 CBM 882 LD R0 R0/WRUMEMHERE get bits for addresses present 883 * \ / 884 * Each time through the following loop builds the PPL's for 885 * one contiguous chunk of memory (MEMMASK+1 pages). 886 * \ / 0000214E 887 BUILDBLOCK LABEL 0214E E4178802 0 6 BASE 888 ST R0 SP,MEMBITS save the bits 0214F F63E2154 0 889 JBT R0/BIT 31 BUILDPAGE jump if the memory is really here 890 * \ / 891 * Here, the block doesn't exist. Just increment the page number. 892 * \ / 02150 60178801 0 6 BASE 893 LD R0 SP,MEMMASK 02151 60161001 0 0 REG 894 LD R0 R0+1 number of pages per chunk 02152 98178803 0 6 BASE 895 ADDM R0 SP,MEMPFILE increment counter 02153 FE0E215D 896 JMP NEXTBLOCK 897 * --- 898 00002154 899 BUILDPAGE LABEL 02154 D0001CC8 900 INC TOTALPAGES say one more page exists 02155 61578803 5 6 BASE 901 LD R5 SP,MEMPFILE page file value for first page 02156 65578804 5 6 BASE 902 CPR R5 SP,LASTSYS page used by boot? 02157 FE0A215A 903 JLE NOREGENSYS if so, no PPL wanted 02158 DC40235E 904 CALLNP GENPPL build a PPL for it 02159 DC402387 905 CALLNP FREECHECK check for free storage availability 0000215A 906 NOREGENSYS LABEL 0215A BC178803 0 6 BASE 907 INCL R0 SP,MEMPFILE increment to next page 0215B 78178801 0 6 BASE 908 AND R0 SP,MEMMASK are we done with one block? 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 324 (INITIAL) F 21 Initialization Routine 0215C FA0C2154 0 909 JNEZ R0 BUILDPAGE jump if not 910 * \ / 0000215D 911 NEXTBLOCK LABEL 0215D 600981F2 0 6 ZBM 912 LD R0 SP,MEMBITS/BITS 0:30 remove bit for work done 0215E FA0C214E 0 913 JNEZ R0 BUILDBLOCK jump if more to do 914 * \ / 915 0000215F 916 RETURN LABEL 0215F 60178805 0 6 BASE 917 LD R0 SP,SMUFLAG return 0 if SMU, 1 if not 02160 5D1F8006 6 STAK 918 LEAVE POP all done 919 * --- 920 921 END HAVEMEMORY subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 325 (INITIAL) F 21 Initialization Routine 923 924 ********************************************************************************** 925 * * 926 * Here we check to see if this memory unit is a SMU and * 927 * if so build an element for it and link it into the SMULIST. * 928 * Call: * 929 * * 930 * LD R0 * 931 * LD R3 * 932 * CALLNP MAYBESMU * 933 * R1 = 0 if SMU, 1 if not * 934 * * 935 * Eats R1. * 936 * Stack required = 2. * 937 * 2 + max (SGETMEM (0) ) * 938 * * 939 ********************************************************************************** 940 941 BLOCK MAYBESMU subroutine 942 ENTRY MAYBESMU 943 944 BEGFRAME 00178801 6 BASE 945 SAVER0 BSS 1 temp for R0 946 ENDFRAME 947 02161 DD5F8002 6 STAK 948 MAYBESMU ENTRNP PUSH 02162 604A1040 1 0 CBM 949 LD R1 R0/WRUMEMDEVT get memory device type bits 02163 64440001 1 IMM 950 CPR R1 WRU0SMUDEV is it a SMU? 02164 FE0C2170 951 JNE NOTSMU if not then leave 952 * \ / 953 02165 E4178801 0 6 BASE 954 ST R0 SP,SAVER0 save this register 02166 DC002ED0 955 CALL SGETMEM get a chunk for the element 02167 40440000 IMM 956 PARVL SMUBLKLOG how big of a piece to get 02168 EC160800 0 BASE 957 STZ R0,0 make it empty 02169 E4C80040 3 0 ZBM 958 ST R3 R0,SMUSLOT put in the slot number 0216A 60401EFE 1 959 LD R1 SMULIST get pointer to list 0216B E4481F10 1 0 ZBM 960 ST R1 R0,SMULINK link it to the new element 0216C E4001EFE 0 961 ST R0 SMULIST make ours the new list head 0216D 60178801 0 6 BASE 962 LD R0 SP,SAVER0 restore R0 0216E 60440000 1 IMM 963 LD R1 0 say we are an SMU 0216F 5D1F8002 6 STAK 964 LEAVE POP 965 * --- 966 00002170 967 NOTSMU LABEL 02170 60440001 1 IMM 968 LD R1 1 say we are an MCU 02171 5D1F8002 6 STAK 969 LEAVE POP 970 * --- 971 972 END of MAYBESMU subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 326 (INITIAL) F 21 Initialization Routine 974 975 ********************************************************************************** 976 * * 977 * HAVESSU - Initialize the SSU. * 978 * The SSU was found in slot R3. Here we initialize it by * 979 * getting the information from the real time clock and the * 980 * front panel and then setting up the basic timer interrupts. * 981 * The initial process will verify the reasonableness of * 982 * the real time clock. Until then, we will use whatever * 983 * value is in the SSU clock without verification. The * 984 * interval timing will work fine no matter what value happens * 985 * to be in the clock. Call: * 986 * * 987 * LD R0 * 988 * LD R3 * 989 * CALLNP HAVESSU * 990 * * 991 * Eats R0:R5. * 992 * Stack required = 6. * 993 * 1 + max ( SSU_RESET (5), TIMESET (2) ) * 994 * * 995 ********************************************************************************** 996 997 BLOCK HAVESSU subroutine 998 ENTRY HAVESSU 999 1000 BEGFRAME 1001 ENDFRAME 1002 02172 DD5F8001 6 STAK 1003 HAVESSU ENTRNP PUSH 02173 EDF62001 3 @ 1004 STW @PTRINTDEV(R3) say this slot interrupts 02174 604A3080 1 0 CBM 1005 LD R1 R0/WRU0MREV SSU version number 02175 6444000D 1 IMM 1006 CPR R1 MINVERSION new enough for BREAK and DWELL handling? 02176 ECC01EE4 1007 STLGE SSUVER set flag 1008 * \ / 02177 60040005 0 IMM 1009 LD R0 SSUCOFFSET/FLDABSPG get displacement part 02178 E4CA0840 3 0 CBM 1010 ST R3 R0/PFSLOT make PF to get at SSU 02179 64000310 0 1011 CPR R0 SSUPF is this the same one as used by DISKBOOT? 0217A FE0C219C 1012 JNE NOTACTIVE jump if not, must be hot spare 1013 * (later, may have special processing for it) 0217B E4001EDE 0 1014 ST R0 CLOCKPF save for later use by system 0217C E4D0219D 3 @ 1015 ST R3 @PTRSSUCONT remember the SSU place 1016 * \ / 0217D 3800219E 0 1017 LEA R0 OCLKPARAMS old NVM clock parameter values 0217E 6444000F 1 IMM 1018 CPR R1 NVMVERSION check if SSU has new NVM 0217F FE082181 1019 JLT SETCLKPARMS jump if not 02180 380021A1 0 1020 LEA R0 NCLKPARAMS new NVM clock parameter values 00002181 1021 SETCLKPARMS LABEL 02181 6044000C 1 IMM 1022 LD R1 CLKPARMLEN*CPW need to set three words 02182 38801EF6 2 1023 LEA R2 NVMCLOCKS move values to the head page 02183 FE400000 1024 CMOVE that should do it 1025 * \ / 02184 DC4044C9 1026 CALLNP SSU_RESET call to initialize the SSU 1027 * \ / 02185 0CC00000 1028 IOFF for calls to TIMESET 02186 DC0044F8 1029 CALL TIMESET set up the one second events 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 327 (INITIAL) F 21 Initialization Routine 02187 434403E8 IMM 1030 PARV2 1*MSECSS one second events 02188 41440000 IMM 1031 PARV 0 any CPU okay 02189 4100472B 1032 PAR ONCEASEC address of routine to call 0218A 40440000 IMM 1033 PARVL 0 1034 * \ / 0218B DC0044F8 1035 CALL TIMESET set up deadman I/O timer 0218C 43442710 IMM 1036 PARV2 10*MSECSS use 10 second interval 0218D 41440000 IMM 1037 PARV 0 don't care which CPU 0218E 41004E5E 1038 PAR DEADMAN who to call 0218F 40440000 IMM 1039 PARVL 0 parameter unused 02190 E5001EF3 4 1040 ST TMR DEADMANTMR save serial number for power fail 1041 * \ / 02191 DC0044F8 1042 CALL TIMESET core scheduler interrupt 02192 434407D0 IMM 1043 PARV2 2*MSECSS two seconds for now 02193 41440000 IMM 1044 PARV 0 no CPU in particular 02194 41002C91 1045 PAR TICK 02195 40440000 IMM 1046 PARVL 0 1047 * \ / 02196 DC0044F8 1048 CALL TIMESET file wait unqueuer 02197 4344EA60 IMM 1049 PARV2 60*MSECSS once per minute 02198 41440000 IMM 1050 PARV 0 no CPU in particular 02199 4100474D 1051 PAR UNFILEWAIT who to call 0219A 40440000 IMM 1052 PARVL 0 parameter 1053 * \ / 0219B 0C800000 1054 ION restore interrupts 0000219C 1055 NOTACTIVE LABEL 0219C 5D1F8001 6 STAK 1056 LEAVE POP then return 1057 * --- 1058 0219D E1080312 1059 PTRSSUCONT PTR INTDEVICES/BITS 28:31 SSU location 1060 0000219E 1061 OCLKPARAMS LABEL 0219E 00000050 1062 VFD ONVMCLOCKS base address for start of clock values 0219F 00000004 1063 VFD 04 number of clock values (must be power of two) 021A0 00000003 1064 VFD 03 mask used to wrap around clock value index 00000003 ABS 1065 CLKPARMLEN EQU DISPW OCLKPARAMS 1066 000021A1 1067 NCLKPARAMS LABEL 021A1 00000300 1068 VFD NNVMCLOCKS base address for start of clock values 021A2 00000040 1069 VFD 040 number of clock values (must be power of two) 021A3 0000003F 1070 VFD 03F mask used to wrap around clock value index 1071 1072 END HAVESSU subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 328 (INITIAL) F 21 Initialization Routine 1074 1075 ********************************************************************************** 1076 * * 1077 * HAVEPPU - Configure a PPU * 1078 * A PPU is on the bus. We create the control element * 1079 * for it that contains the PF pointer to the PPU and then * 1080 * check out and configure the devices that are on the * 1081 * channels. * 1082 * Call: * 1083 * LD R0 WRU response * 1084 * LD R3 slot number * 1085 * R5 = 0 if no MCUs on system * 1086 * CALLNP HAVEPPU * 1087 * * 1088 * Eats R0:R5. * 1089 * Stack required = 19. * 1090 * 2 + max ( COMMDEV (9), CTCDEV (17), DISKDEV (12), * 1091 * FREECHECK (2), LPCDEV (11), MTCDEV (17), * 1092 * SETPPU3WRD (1), SGETMEM (0), VTCDEV (17), * 1093 * ZEROIT (1) ) * 1094 * * 1095 ********************************************************************************** 1096 1097 BLOCK HAVEPPU subroutine 1098 ENTRY HAVEPPU 1099 1100 BEGFRAME 00178801 6 BASE 1101 TEMPWRU0 BSS 1 temp place for WRU0 00178801 6 BASE 1102 PPUELEMENT EQU TEMPWRU0 holds PPU element address 1103 ENDFRAME 1104 021A4 DD5F8002 6 STAK 1105 HAVEPPU ENTRNP PUSH 021A5 EDF62001 3 @ 1106 STW @PTRINTDEV(R3) say this slot interrupts 021A6 E4178801 0 6 BASE 1107 ST R0 SP,TEMPWRU0 save the WRU0 response for later 1108 * R3=slot number 021A7 DC002ED0 1109 CALL SGETMEM get the control block 021A8 40440003 IMM 1110 PARVL PPULOG indicate desired size 021A9 61120000 4 0 REG 1111 LD R4 R0 R4 => PPU control block 021AA DC003090 1112 CALL ZEROIT clean it out 021AB 41170800 4 BASE 1113 PAR R4,0 021AC 40440008 IMM 1114 PARVL 2 POWER PPULOG 021AD 604AF000 1 3 CBM 1115 LD R1 R3*PFSLOT produce page map value from slot # 021AE E4570800 1 4 BASE 1116 ST R1 R4,PPUPF remember addressing PF 021AF 7D02C000 4 IMM 1117 IOR R4 SLTTPPU*SLOTTYPE 021B0 E5261ECE 4 3 1118 ST R4 SLOTTABLE(R3) place block in slot table 1119 * \ / 1120 1121 ********************************************************************************** 1122 * * 1123 * Due to ever improving hardware and a certain lack of * 1124 * compatibilty between some of the new features and the old * 1125 * hardware we are forced to keep close track of what versions * 1126 * of various hardware types are on the system and enable * 1127 * certain capabilities accordingly. * 1128 * In particular, if it has been determined that all * 1129 * memory modules on the system are SMUs then we may enable * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 329 (INITIAL) F 21 Initialization Routine 1130 * new versions of PPUs to perform triple word transfers. * 1131 * Note that if we were to enable all PPUs, regardless of * 1132 * rev, old PPUs would bus error as we would be doing a store * 1133 * to a non-defined location on the PPU. Similarly if we were * 1134 * to enable all new PPUs, regardless of types of memory, the * 1135 * MCUs would bus error as they are not designed to handle * 1136 * triple word transfers. * 1137 * To add to the complexity, the microcode revisions * 1138 * leapfrog, with varying revisions being for PPU3 or PPU4, as * 1139 * needed. The test is done using a bit map for the * 1140 * revisions, so it can be patched if needed. * 1141 * * 1142 ********************************************************************************** 1143 1144 * R5 = 0 if no MCUs on system 1145 * \ / 021B1 FB4C21B8 5 1146 JNEZ R5 NOTRIPLES if not zero then there are MCUs 021B2 6009B081 0 6 ZBM 1147 LD R0 SP,TEMPWRU0/WRU0MREV get microcode revision 021B3 5C3021D4 0 @ 1148 CMZ @PPUREV3MP(R0) is it new enough for 3 word transfers? 021B4 FE0221B8 1149 JEQ NOTRIPLES no triples for this PPU 1150 * \ / 1151 021B5 7905FFFF 4 IMM 1152 AND R4 ONEBITS/FLDADRS get rid of unnecessary crap 021B6 EDD70803 4 BASE 1153 STW R4,PPU3WORD set flag saying we can do triple worders 021B7 DC404F0B 1154 CALLNP SETPPU3WRD now enable this PPU to do triplers 1155 * \ / 000021B8 1156 NOTRIPLES LABEL 021B8 61440000 5 IMM 1157 LD R5 0 start with channel zero 021B9 E5178801 4 6 BASE 1158 ST R4 SP,PPUELEMENT save address 1159 * \ / 1160 1161 ********************************************************************************** 1162 * * 1163 * Loop through all of the channels and initialize the * 1164 * devices there. * 1165 * * 1166 ********************************************************************************** 1167 1168 * \ / 000021BA 1169 CHANGETI LABEL 021BA DC402387 1170 CALLNP FREECHECK ensure enough memory available 021BB 61178801 4 6 BASE 1171 LD R4 SP,PPUELEMENT restore address 021BC 60C40086 3 IMM 1172 LD PFPTR PNCIX page file for IO 021BD 60170800 0 4 BASE 1173 LD R0 R4,PPUPF 021BE 7C0B4C00 0 5 CBM 1174 IOR R0 R5*PPUCHAN create the PF value to address the device 021BF 00D20000 0 REG 1175 LDPF R0 set addressing to the channel 021C0 EC001801 1176 STZ CIX(PPUABORT) zap any foolishness 021C1 FEC00000 1177 NOP 0 waste time for PPU 021C2 D1401803 1178 STMW CIX(PPUSCSTAT) clear any status bits we can 021C3 FEC00000 1179 NOP 0 waste time for PPU 021C4 60001800 0 1180 LD R0 CIX(PPUCABLED) get WRU of who's there (0 if none) 021C5 E41D2804 0 45 BASE 1181 ST R0 R4,PPUCNTLPTR(R5) save for later processing 021C6 604A0080 1 0 CBM 1182 LD R1 R0/DWRUTYPE get the type of device 021C7 6844000C 1 IMM 1183 UCPR R1 DEVJMPMAX within range? 021C8 FE0621CD 1184 JGE FORGETDEV jump if not 021C9 606221D5 1 1 1185 LD R1 DEVJMPTAB(R1) R1 -> device initializer 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 330 (INITIAL) F 21 Initialization Routine 021CA FA7021CD 1 1186 JZA R1 FORGETDEV jump if unknown device 021CB DC564400 1 @R 1187 CALLNP @R1 call the initializer 021CC FE0E21CF 1188 JMP AFTERDEV 1189 * --- 1190 000021CD 1191 FORGETDEV LABEL 021CD 60440000 1 IMM 1192 LD R1 0 unknown so forget about it 021CE EC1D2804 45 BASE 1193 STZ R4,PPUCNTLPTR(R5) 1194 * \ / 000021CF 1195 AFTERDEV LABEL 021CF 19440001 5 IMM 1196 ADD R5 1 advance to next channel 021D0 65440004 5 IMM 1197 CPR R5 PPUCHANS check for done 021D1 FE0821BA 1198 JLT CHANGETI jump if another channel 021D2 5D1F8002 6 STAK 1199 LEAVE POP else return 1200 * --- 1201 021D3 00000AAA 1202 PPUREV3MSK VFD 00000AAA mask of PPU revs that can handle triple word transfers 021D4 004821D3 1203 PPUREV3MP PTR PPUREV3MSK/BIT 0 pointer to mask word 1204 1205 ********************************************************************************** 1206 * * 1207 * Device initialization routines are entered with: * 1208 * R4 => PPU control element * 1209 * R5 = channel number * 1210 * R6 => stack * 1211 * These registers must be restored by the controller * 1212 * configuration routines. They should exit to CNTLCNFIG. * 1213 * * 1214 ********************************************************************************** 1215 000021D5 1216 DEVJMPTAB LABEL 021D5 00000000 1217 VFD 0 00 - empty slot 021D6 000021E1 1218 VFD ADR DISKDEV 01 - disk controller 021D7 00002282 1219 VFD ADR LPCDEV 02 - line printer controller 021D8 00000000 1220 VFD 0 03 - unknown 021D9 00000000 1221 VFD 0 04 - unknown 021DA 00000000 1222 VFD 0 05 - unknown 021DB 00000000 1223 VFD 0 06 - unknown 021DC 00000000 1224 VFD 0 07 - unknown 021DD 00002217 1225 VFD ADR COMMDEV 08 - async. comm. controller 021DE 000022B3 1226 VFD ADR MTCDEV 09 - mag tape controller 021DF 0000229D 1227 VFD ADR CTCDEV 0A - cartridge mag tape controller 021E0 000022CA 1228 VFD ADR VTCDEV 0B - video tape controller 0000000C ABS 1229 DEVJMPMAX EQU DISPW DEVJMPTAB 1230 1231 END HAVEPPU subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 331 (INITIAL) F 21 Initialization Routine 1233 1234 ********************************************************************************** 1235 * * 1236 * DISKDEV - Initialization for a Mass Storage Controller. * 1237 * First, create a controller element. Call MS_RESET to * 1238 * build drive elements, we create a VOLN entry for the system * 1239 * volume using the information passed by DISKBOOT. * 1240 * Call: * 1241 * LD R4 => PPU control element * 1242 * LD R5 channel number * 1243 * CALLNP DISKDEV * 1244 * * 1245 * Eats R0:R3. * 1246 * Stack required = 12. * 1247 * 4 + max ( LOCKWAIT (0), MS_RESET (8), SGETMEM (0), * 1248 * ZEROIT (1) ) * 1249 * * 1250 ********************************************************************************** 1251 1252 BLOCK DISKDEV subroutine 1253 ENTRY DISKDEV 1254 1255 BEGFRAME 00178801 6 BASE 1256 SAVER7 BSS 1 save area for R7 00178802 6 BASE 1257 SAVER45 BSS 2 save area for R4,R5 1258 ENDFRAME 1259 021E1 DD5F8004 6 STAK 1260 DISKDEV ENTRNP PUSH 021E2 E5D78801 7 6 BASE 1261 ST R7 SP,SAVER7 save this register 021E3 DC002ED0 1262 CALL SGETMEM fetch memory for a controller element 021E4 40440004 IMM 1263 PARVL MCTLOG indicate its length 021E5 61D20000 7 0 REG 1264 LD MCT R0 copy the pointer 021E6 7C020200 0 IMM 1265 IOR R0 DVCTBFD*DEVTYPE insert device type 021E7 E41D2804 0 45 BASE 1266 ST R0 R4,PPUCNTLPTR(R5) place type and block addr into PPU table 021E8 DC003090 1267 CALL ZEROIT clear out the element 021E9 41160800 0 BASE 1268 PAR R0,0 indicate its address 021EA 4044000D IMM 1269 PARVL MCTLNTH and the length to clear 021EB 60170800 0 4 BASE 1270 LD R0 R4,PPUPF get the PPU page map value 021EC 7C0B4C00 0 5 CBM 1271 IOR R0 R5*PPUCHAN get this channel number 021ED E417C801 0 7 BASE 1272 ST R0 MCT,MCTPMVALUE set up access address 021EE 60001F13 0 1273 LD R0 MCTLIST get ptr to current list 021EF E417C800 0 7 BASE 1274 ST R0 MCT,MCTLINK place current list after us 021F0 E5C01F13 7 1275 ST MCT MCTLIST this element is new list head 021F1 E7178802 456 BASE 1276 ST2 R4 SP,SAVER45 save these registers 1277 1278 PLOCK (MCT,MCTELOCK) lock the controller 021F2 0CC00000 1278 IOFF 021F3 D1D7C803 7 BASE 1278 SETT (MCT,MCTELOCK) 021F4 FE0C21F6 1278 JNE MA(2+DISPW MA 0) 021F5 DC40308B 1278 CALLNP LOCKWAIT 021F6 60040001 0 IMM 1279 LD R0 1 PPU is talking 021F7 6153C000 5 7 REG 1280 LD R5 MCT parm for MS_RESET 021F8 DC4039A9 1281 CALLNP MS_RESET reset the controller 021F9 FEC00000 1282 NOP 0 (ignore no skip return) 1283 PUNLOCK (MCT,MCTELOCK) unlock the controller 021FA EC17C803 7 BASE 1283 STZ (MCT,MCTELOCK) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 332 (INITIAL) F 21 Initialization Routine 021FB 0C800000 1283 ION 1284 021FC 6017C801 0 7 BASE 1285 LD R0 MCT,MCTPMVALUE 021FD 64000316 0 1286 CPR R0 BOOTDEVPF is this our boot controller? 021FE FE0C2214 1287 JNE DISKDONE jump if not 1288 1289 * set up a drive control element for the system disk 021FF 60000317 0 1290 LD R0 BOOTUNIT get unit number of sys disk 02200 615DC005 5 70 BASE 1291 LD MDV MCT,MCTDRIVE(R0) get MDV of system disk 1292 02201 60000318 0 1293 LD R0 BOOTSCPTRK get number of sectors on each track 02202 E417400B 0 5 CACH 1294 ST R0 MDV,MDVSECPTRK set sectors per track 02203 60000319 0 1295 LD R0 BOOTRKPCYL get tracks (heads) per cylinder 02204 E417400A 0 5 CACH 1296 ST R0 MDV,MDVTRKPCYL set tracks per cylinder 02205 EDC94080 5 ZBM 1297 STW MDV,MDVVOLUME fake like the system volume is here 02206 DC002ED0 1298 CALL SGETMEM get a VOLN for the system volume 02207 40440007 IMM 1299 PARVL VOLNLOG indicate desired size 02208 61120000 4 0 REG 1300 LD VLN R0 save pointer to it 02209 E5001F23 4 1301 ST VLN VOLNTABLE(1) put into table as volume 1 0220A DC003090 1302 CALL ZEROIT clean it out 0220B 41170800 4 BASE 1303 PAR VLN,0 0220C 40440080 IMM 1304 PARVL VOLNLEN 0220D EDC90A10 4 ZBM 1305 STW VLN,VOLNMOUNT say mounting in progress 0220E EDC90010 4 ZBM 1306 STW VLN,VOLNSYS say is system volume 0220F EDD7080C 4 BASE 1307 STW VLN,VOLNFBZY lock the lists 02210 EDD70811 4 BASE 1308 STW VLN,VOLNNAME impossible name 02211 EDC90086 4 ZBM 1309 STW VLN,VOLNNUM volume number 02212 EDC90087 4 ZBM 1310 STW VLN,VOLNSNUM second occurrence of number 02213 E5491F15 5 4 ZBM 1311 ST MDV VLN,VOLNHCB pointer to associated MDV 1312 * \ / 00002214 1313 DISKDONE LABEL 02214 63178802 456 BASE 1314 LD2 R4 SP,SAVER45 restore these registers 02215 61D78801 7 6 BASE 1315 LD R7 SP,SAVER7 restore this register 02216 5D1F8004 6 STAK 1316 LEAVE POP and return 1317 * --- 1318 1319 END DISKDEV subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 333 (INITIAL) F 21 Initialization Routine 1321 1322 ********************************************************************************** 1323 * * 1324 * COMMDEV - Initialization for an ACC. * 1325 * Async. Comm. Controller. This code sets up the * 1326 * resident tables for this controller and initializes the * 1327 * device. This involves setting up the controller element, * 1328 * fetching the permanent input and output buffers, and * 1329 * building a TCB for each port present on this CIA. The port * 1330 * numbers are assigned based on physical location so that * 1331 * addition or deletion of a port board does not require * 1332 * reconfiguration. * 1333 * We do the I/O initialization. * 1334 * The tables involved here are: * 1335 * 1) PPU control table. Gets a pointer to the CIA * 1336 * controller element * 1337 * 2) CIA controller element. Describes this CIA. * 1338 * Contains pointers to each block of 8 TCBs. * 1339 * 3) TCBs. TCBs are allocated in blocks of 8. There * 1340 * is one TCB for each port on the CIA. * 1341 * * 1342 * LD R4 => PPU control element * 1343 * LD R5 channel number * 1344 * CALLNP COMMDEV * 1345 * * 1346 * Eats R0:R3. * 1347 * Stack required = 9. * 1348 * 7 + max ( FREEAFTER (2), FREECHECK (2), SGETMEM (0), * 1349 * ZEROIT (1) ) * 1350 * * 1351 ********************************************************************************** 1352 1353 BLOCK COMMDEV subroutine 1354 ENTRY COMMDEV 1355 1356 BEGFRAME 00178801 6 BASE 1357 SAVER45 BSS 2 save area for R4,R5 00178803 6 BASE 1358 COMSTKBLK BSS 1 => control block 00178804 6 BASE 1359 COMSTKBITS BSS 1 bits for boards from CIA 00178805 6 BASE 1360 COMSTKTRM BSS 1 terminal number 00178806 6 BASE 1361 COMBRDBLK BSS 1 => block for boards TCBs 1362 ENDFRAME 1363 02217 DD5F8007 6 STAK 1364 COMMDEV ENTRNP PUSH 02218 E7178801 456 BASE 1365 ST2 R4 SP,SAVER45 save these registers 02219 60D20000 3 0 REG 1366 LD R3 R0 save the WRU response 0221A DC002ED0 1367 CALL SGETMEM get the comm controller block 0221B 40440005 IMM 1368 PARVL COMLOG indicate desired size 0221C E4178803 0 6 BASE 1369 ST R0 SP,COMSTKBLK remember the control block location 0221D 60920000 2 0 REG 1370 LD R2 R0 copy the pointer 0221E DC003090 1371 CALL ZEROIT clear out the element 0221F 41168800 2 BASE 1372 PAR R2,0 pass the address... 02220 40440020 IMM 1373 PARVL 2 POWER COMLOG ... and length 02221 E4D68801 3 2 BASE 1374 ST R3 R2,COMWRU save the WRU response 02222 60C40086 3 IMM 1375 LD PFPTR PNCIX get page number for PFRD 02223 80968802 2 BASE 1376 PFRD R2,COMPF place page map value into control element 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 334 (INITIAL) F 21 Initialization Routine 02224 60D28000 3 2 REG 1377 LD R3 R2 copy control block pointer 02225 7C821000 2 IMM 1378 IOR R2 DVCTCOMM*DEVTYPE combine address with type 02226 E49D2804 2 45 BASE 1379 ST R2 R4,PPUCNTLPTR(R5) type and block into PPU table 02227 60001F01 0 1380 LD R0 COMLIST get head of COM list 02228 E4168800 0 2 BASE 1381 ST R0 R2,COMLINK link existing list behind us 02229 E4801F01 2 1382 ST R2 COMLIST put us on head of list 1383 * \ / 0222A 60040000 0 IMM 1384 LD R0 CIAMODEN set the CIA to "normal" operation mode 0222B E4001A09 0 1385 ST R0 CIX(CIAMODE) 0222C EC001A02 1386 STZ CIX(CIAINTMASK) clear interrupt mask for now 0222D D1401A01 1387 STMW CIX(CIAINTACK) acknowledge any prior interrupts so we get new ones 0222E 6004002D 0 IMM 1388 LD R0 CIATICKTIME interrupt approx every 20th of sec 0222F E4001A06 0 1389 ST R0 CIX(CIASETTICK) 02230 60040000 0 IMM 1390 LD R0 COMSTIDLE get idle state value... 02231 E408F085 0 3 ZBM 1391 ST R0 R3,COMSTATE ... and set as initial state 1392 * \ / 1393 1394 ********************************************************************************** 1395 * * 1396 * Allocate buffers for this CIA * 1397 * The input and output buffers are held permanently by * 1398 * this CIA after being allocated here. We allocate 512 words * 1399 * for output and 128 words for input. * 1400 * * 1401 ********************************************************************************** 1402 1403 * \ / 02232 DC402387 1404 CALLNP FREECHECK ensure adequate free memory 02233 60D78803 3 6 BASE 1405 LD R3 SP,COMSTKBLK get pointer to CIA control block 02234 DC002ED0 1406 CALL SGETMEM get an output buffer 02235 40440009 IMM 1407 PARVL 512 LOG 2 02236 E416C808 0 3 BASE 1408 ST R0 R3,COMOUTBUF 02237 600407F8 0 IMM 1409 LD R0 512*CPW-8 size of output buffer minus fudge 02238 E416C809 0 3 BASE 1410 ST R0 R3,COMOUTBUFS 02239 DC002ED0 1411 CALL SGETMEM get an input buffer 1412 * PARVL 128 LOG 2 specify its length 0223A 40440008 IMM 1413 PARVL 256 LOG 2 (allow for CIA microcode bug) 0223B E416C806 0 3 BASE 1414 ST R0 R3,COMINBUF place addr of input buffer 1415 * LD R0 128*CPW get character size of input buffer 0223C 60040400 0 IMM 1416 LD R0 256*CPW (allow for CIA microcode bug) 0223D E416C807 0 3 BASE 1417 ST R0 R3,COMINBUFS size of input buffer in chars 0223E DC402387 1418 CALLNP FREECHECK ensure adequate free memory 1419 * \ / 1420 1421 ********************************************************************************** 1422 * * 1423 * Allocate TCBs * 1424 * The CIA can have only multiples of 8 ports, since it * 1425 * can only have whole port boards. Therefore, we scan the * 1426 * CIA and for each port board proceed to build the necessary * 1427 * TCBs. Since the TCBs are an odd size, we fetch a block of * 1428 * free storage big enough for 8, then free the excess. This * 1429 * cuts down on the amount of free storage lost to internal * 1430 * fragmentation. * 1431 * Each board causes an entry in the CIA control block. * 1432 * We later use these entries to enable a quick lookup for a * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 335 (INITIAL) F 21 Initialization Routine 1433 * given ports TCB. We also rely on all TCBs on a board being * 1434 * sequential from the base entry for that board. i.e. there * 1435 * is no searching for a given ports TCB, the address * 1436 * calculation is a lookup and multiply. * 1437 * * 1438 ********************************************************************************** 1439 1440 * \ / 0223F 60D78803 3 6 BASE 1441 LD R3 SP,COMSTKBLK get pointer to CIA control block 02240 6008E081 0 3 ZBM 1442 LD R0 R3,COMWRU/DWRUDD get the configuration info 02241 E4178804 0 6 BASE 1443 ST R0 SP,COMSTKBITS save mask of boards present 02242 61440000 5 IMM 1444 LD R5 0 root of the list is null 1445 * R5 contains the running pointer to 1446 * the already built list of TCBs. 1447 1448 * Find and configure the block for one board 00002243 1449 NEXTBOARD LABEL 02243 5C578804 6 BASE 1450 HIB SP,COMSTKBITS find next board bit 02244 F6342271 0 1451 JBT R0/BIT 26 ALLPORTSC jump if all boards done 02245 38498014 1 6 ZBM 1452 LEA R1 SP,COMSTKBITS/BIT 0 get bit pointer 02246 EC1A4400 10 @R 1453 STZ @R1(R0) clear bit just processed 02247 3004001F 0 IMM 1454 RSB R0 31 convert to board number 02248 60D78803 3 6 BASE 1455 LD R3 SP,COMSTKBLK get control block addr 02249 38DCC00C 3 30 BASE 1456 LEA R3 R3,COMTERMS(R0) => to place for these TCBs 0224A 1C040008 0 IMM 1457 MUL R0 CIABOARDS R0=first port number 0224B 18001F03 0 1458 ADD R0 TERMNUM R0 now equals real first term num 0224C E4178805 0 6 BASE 1459 ST R0 SP,COMSTKTRM save terminal number 0224D DC002ED0 1460 CALL SGETMEM get a block to hold the TCBs 0224E 40440008 IMM 1461 PARVL (TCBLNTH*CIAPPBRD) LOG 2 specify length sufficient... 1462 * ...for all ports on one board 0224F 61120000 4 0 REG 1463 LD R4 R0 make R4 point to the TCBs 02250 E5178806 4 6 BASE 1464 ST R4 SP,COMBRDBLK save addr 02251 E516C400 4 3 @R 1465 ST R4 @R3 store address in device control table 02252 DC003090 1466 CALL ZEROIT make it clean 02253 41170800 4 BASE 1467 PAR R4,0 pass address 02254 404400E8 IMM 1468 PARVL TCBLNTH*CIAPPBRD ... and amount to clear 02255 60440008 1 IMM 1469 LD R1 (TCBLNTH*CIAPPBRD) LOG 2 log size of original block for FREEAFTER 02256 389708E8 2 4 BASE 1470 LEA R2 R4,(TCBLNTH*CIABOARDS) R2=first unused address 02257 DC402328 1471 CALLNP FREEAFTER let others use unused part of block 02258 DC402387 1472 CALLNP FREECHECK check available free 1473 * \ / 1474 1475 ********************************************************************************** 1476 * * 1477 * Loop to build TCBs for each of the 8 ports on this * 1478 * board. We build these 8 TCBs in sequential locations in * 1479 * this block of memory. * 1480 * * 1481 ********************************************************************************** 1482 1483 * \ / 02259 61178806 4 6 BASE 1484 LD R4 SP,COMBRDBLK R4 => top of block 1485 * Configure one port TCB 0000225A 1486 NEXTPORT LABEL 0225A 60978805 2 6 BASE 1487 LD R2 SP,COMSTKTRM get the port number 0225B E4890890 2 4 ZBM 1488 ST R2 R4,TCTNUM set the port into the TCB 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 336 (INITIAL) F 21 Initialization Routine 0225C 6017101D 0 4 REG 1489 LD R0 R4+TCBLNTH make pointer to next TCB in this block 0225D E4091F10 0 4 ZBM 1490 ST R0 R4,TCLINK point this block at it 0225E 10801F03 2 1491 SUB R2 TERMNUM R2=port on this controller 0225F 60578803 1 6 BASE 1492 LD R1 SP,COMSTKBLK pick up control block pointer 02260 E4491F16 1 4 ZBM 1493 ST R1 R4,TCCIABLOCK save control block pointer in TCB 02261 E497000F 2 4 CACH 1494 ST R2 R4,TCCIAPORT store the port number 02262 60241A80 0 2 1495 LD R0 CIX(CIAPORT+R2) get state information 02263 5C0A3E10 0 CBM 1496 CMZ R0/CIAPMODM is this to be configured for modem control? 02264 ED890019 4 ZBM 1497 STLNE R4,TCMODEM remember if modem configuration 02265 6004012C 0 IMM 1498 LD R0 300 default baud rates 02266 E40900F1 0 4 ZBM 1499 ST R0 R4,TCIRATE set input baud rate 02267 E4091EF1 0 4 ZBM 1500 ST R0 R4,TCORATE also set output baud rate 02268 BC178805 0 6 BASE 1501 INCL R0 SP,COMSTKTRM count up the port number 02269 10001F03 0 1502 SUB R0 TERMNUM 0226A 78040007 0 IMM 1503 AND R0 CIAPPBRD-1 check for the next power of two 0226B FA02226E 0 1504 JEQZ R0 BRDDONE jump if all boards done 0226C 1904001D 4 IMM 1505 ADD R4 TCBLNTH move pointer to next TCB 0226D FE0E225A 1506 JMP NEXTPORT 1507 * --- 1508 1509 ********************************************************************************** 1510 * * 1511 * The board is configured, link in the 8 TCBs for this * 1512 * one and move to next. * 1513 * R5 points to the previous block of 8 TCBs, * 1514 * R4 points to the most recent TCB made. * 1515 * * 1516 ********************************************************************************** 1517 0000226E 1518 BRDDONE LABEL 0226E E5491F10 5 4 ZBM 1519 ST R5 R4,TCLINK link previous list behind current TCB 0226F E51750CB 4 5 REG 1520 ST R4 R5+((CIABOARDS-1)*TCBLNTH) set R5 to point to this block of 8 TCBs 02270 FE0E2243 1521 JMP NEXTBOARD do the next one 1522 * --- 1523 1524 * All ports configured for this controller. Enable the comm 1525 * to interrupt after placing the built tables in the terminal lists. 1526 * We arrive here with R5 pointing to the last block 1527 * of 8 TCBs. 1528 00002271 1529 ALLPORTSC LABEL 02271 FB70227E 5 1530 JZA R5 NOPORTSC nothing there - odd but possible 02272 60040000 0 IMM 1531 LD R0 0 02273 60534000 1 5 REG 1532 LD R1 R5 copy pointer to our list 02274 3C085F10 0 1 ZBM 1533 LSRCH R0 R1,TCLINK find the end of our list 02275 60001F04 0 1534 LD R0 TERMBASE pick up head of existing list 02276 E4085F10 0 1 ZBM 1535 ST R0 R1,TCLINK link the existing list after our end 02277 E5401F04 5 1536 ST R5 TERMBASE and make our list the new head 02278 60178803 0 6 BASE 1537 LD R0 SP,COMSTKBLK get pointer to comm block 02279 E556080B 5 0 BASE 1538 ST R5 R0,COMFRSTTRM keep pointer to the first one 1539 * \ / 0227A 60040013 0 IMM 1540 LD R0 1*CIATICK+1*CIAERR+1*CIAFULL 0227B E4001A02 0 1541 ST R0 CIX(CIAINTMASK) enable the interrupts 0227C 60040800 0 IMM 1542 LD R0 1*PPUICIA 0227D E4001802 0 1543 ST R0 CIX(PPUSSSTAT) allow the controller to interrupt 1544 * \ / 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 337 (INITIAL) F 21 Initialization Routine 0000227E 1545 NOPORTSC LABEL 0227E 60040040 0 IMM 1546 LD R0 CIABOARDS*CIAPPBRD number of ports on controller 0227F 98001F03 0 1547 ADDM R0 TERMNUM 02280 63178801 456 BASE 1548 LD2 R4 SP,SAVER45 restore R4 and R5 02281 5D1F8007 6 STAK 1549 LEAVE POP and return 1550 * --- 1551 1552 END COMMDEV subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 338 (INITIAL) F 21 Initialization Routine 1554 1555 ********************************************************************************** 1556 * * 1557 * LPCDEV - Initialization for line printer controller. * 1558 * * 1559 * LD R4 => PPU control element * 1560 * LD R5 channel number * 1561 * CALLNP LPCDEV * 1562 * * 1563 * Eats R0:R3. * 1564 * Stack required = 11. * 1565 * 1 + max ( MAKEDEVNAME (10), SGETMEM (0), ZEROIT (1) ) * 1566 * * 1567 ********************************************************************************** 1568 1569 BLOCK LPCDEV subroutine 1570 ENTRY LPCDEV 1571 1572 BEGFRAME 1573 ENDFRAME 1574 02282 DD5F8001 6 STAK 1575 LPCDEV ENTRNP PUSH 02283 DC002ED0 1576 CALL SGETMEM get an LPC element 02284 40440006 IMM 1577 PARVL LPCLOG indicate desired size 02285 60D20000 3 0 REG 1578 LD LPC R0 set pointer to it 02286 7C020400 0 IMM 1579 IOR R0 DVCTLPC*DEVTYPE merge in device type with address 02287 E41D2804 0 45 BASE 1580 ST R0 R4,PPUCNTLPTR(R5) save pointer in PPU block 02288 DC003090 1581 CALL ZEROIT clear out the block 02289 41160800 0 BASE 1582 PAR R0,0 address 0228A 40440037 IMM 1583 PARVL LPCLNTH length 0228B 60170800 0 4 BASE 1584 LD R0 R4,PPUPF get page file for PPU 0228C E54A3020 5 0 CBM 1585 ST R5 R0/PPUCHAN get page file for LPC 0228D E416C801 0 3 BASE 1586 ST R0 LPC,LPCPMVALUE save page map value 0228E 60001F21 0 1587 LD R0 LPCLIST get head of list 0228F E416C800 0 3 BASE 1588 ST R0 LPC,LPCLINK link behind us 02290 E4C01F21 3 1589 ST LPC LPCLIST save us as new head 02291 60401A20 1 1590 LD R1 CIX(LPSTATUS) get current status 02292 600A5840 0 1 CBM 1591 LD R0 R1/LPSTUNIT get unit number 02293 E408C847 0 3 ZBM 1592 ST R0 LPC,LPCUNIT save it 02294 DC002316 1593 CALL MAKEDEVNAME construct the device name 02295 4140229C 1594 PARV LPTNAME prefix 02296 4048C847 3 ZBM 1595 PARVL LPC,LPCUNIT unit number 02297 E416C804 0 3 BASE 1596 ST R0 LPC,LPCNAME save device name 02298 EC001A80 1597 STZ CIX(LPNOP+LPINT) enable interrupts 02299 60040800 0 IMM 1598 LD R0 1*PPUICIA get bit for controller interrupt enable 0229A E4001802 0 1599 ST R0 CIX(PPUSSSTAT) enable the interrupts 0229B 5D1F8001 6 STAK 1600 LEAVE POP then return 1601 * --- 1602 0229C 4C500000 1603 LPTNAME TEXTZ "LP" prototype name 1604 1605 END LPCDEV subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 339 (INITIAL) F 21 Initialization Routine 1607 1608 ********************************************************************************** 1609 * * 1610 * CTCDEV - Initialization for a Cartridge Tape Controller. * 1611 * * 1612 * LD R4 => PPU control element * 1613 * LD R5 channel number * 1614 * CALLNP CTCDEV * 1615 * * 1616 * Eats R0:R3. * 1617 * Stack required = 17. * 1618 * 2 + max ( DOMTUNIT (15), SGETMEM (0), ZEROIT (1) ) * 1619 * * 1620 ********************************************************************************** 1621 1622 BLOCK CTCDEV subroutine 1623 ENTRY CTCDEV 1624 1625 BEGFRAME 00178801 6 BASE 1626 SAVER7 BSS 1 save area for R7 1627 ENDFRAME 1628 0229D DD5F8002 6 STAK 1629 CTCDEV ENTRNP PUSH 0229E E5D78801 7 6 BASE 1630 ST R7 SP,SAVER7 save this register 0229F DC002ED0 1631 CALL SGETMEM fetch memory for a controller element 022A0 40440004 IMM 1632 PARVL MTCLOG indicate its length 022A1 61D20000 7 0 REG 1633 LD MTC R0 copy the pointer 022A2 7C021400 0 IMM 1634 IOR R0 DVCTCTC*DEVTYPE insert device type 022A3 E41D2804 0 45 BASE 1635 ST R0 R4,PPUCNTLPTR(R5) place type and block addr into PPU table 022A4 DC003090 1636 CALL ZEROIT clear out the element 022A5 41160800 0 BASE 1637 PAR R0,0 indicate its address 022A6 40440010 IMM 1638 PARVL (2 POWER MTCLOG) and the length to clear 022A7 60170800 0 4 BASE 1639 LD R0 R4,PPUPF get the PPU page map value 022A8 7C0B4C00 0 5 CBM 1640 IOR R0 R5*PPUCHAN get this channel number 022A9 E417C801 0 7 BASE 1641 ST R0 MTC,MTCPMVALUE set up access address 1642 * STZ MTC,MTCTYPE indicate that this is a CT 022AA 60001F1C 0 1643 LD R0 MTCLIST get pointer to current list 022AB E417C800 0 7 BASE 1644 ST R0 MTC,MTCLINK place current list after us 022AC E5C01F1C 7 1645 ST MTC MTCLIST and make this element new list head 1646 022AD DC0022E2 1647 CALL DOMTUNIT set up element for individual unit 022AE 41001F1E 1648 PAR CTULIST indicate which list to place element into 022AF 404022B2 1649 PARVL CTNAME and indicate device name substrate 1650 022B0 61D78801 7 6 BASE 1651 LD R7 SP,SAVER7 restore this register 022B1 5D1F8002 6 STAK 1652 LEAVE POP then all done 1653 * --- 1654 022B2 43540000 1655 CTNAME TEXTZ "CT" skeleton name for CT units 1656 1657 END CTCDEV subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 340 (INITIAL) F 21 Initialization Routine 1659 1660 ********************************************************************************** 1661 * * 1662 * MTCDEV - Initialization for a Mag Tape Controller * 1663 * * 1664 * LD R4 => PPU control element * 1665 * LD R5 channel number * 1666 * CALLNP MTCDEV * 1667 * * 1668 * Eats R0:R3. * 1669 * Stack required = 17. * 1670 * 2 + max ( DOMTUNIT (15), SGETMEM (0), ZEROIT (1) ) * 1671 * * 1672 ********************************************************************************** 1673 1674 BLOCK MTCDEV subroutine 1675 ENTRY MTCDEV 1676 1677 BEGFRAME 00178801 6 BASE 1678 SAVER7 BSS 1 save area for R7 1679 ENDFRAME 1680 022B3 DD5F8002 6 STAK 1681 MTCDEV ENTRNP PUSH 022B4 E5D78801 7 6 BASE 1682 ST R7 SP,SAVER7 save this register 022B5 DC002ED0 1683 CALL SGETMEM fetch memory for a controller element 022B6 40440004 IMM 1684 PARVL MTCLOG indicate its length 022B7 61D20000 7 0 REG 1685 LD MTC R0 copy the pointer 022B8 7C021200 0 IMM 1686 IOR R0 DVCTMTC*DEVTYPE insert device type 022B9 E41D2804 0 45 BASE 1687 ST R0 R4,PPUCNTLPTR(R5) place type and block addr into PPU table 022BA DC003090 1688 CALL ZEROIT clear out the element 022BB 41160800 0 BASE 1689 PAR R0,0 indicate its address 022BC 40440010 IMM 1690 PARVL (2 POWER MTCLOG) and the length to clear 022BD 60170800 0 4 BASE 1691 LD R0 R4,PPUPF get the PPU page map value 022BE 7C0B4C00 0 5 CBM 1692 IOR R0 R5*PPUCHAN get this channel number 022BF E417C801 0 7 BASE 1693 ST R0 MTC,MTCPMVALUE set up access address 022C0 EDC9C426 7 ZBM 1694 STW MTC,MTCTYPE indicate that this is a 9 track tape 022C1 60001F1C 0 1695 LD R0 MTCLIST get pointer to current list 022C2 E417C800 0 7 BASE 1696 ST R0 MTC,MTCLINK place current list after us 022C3 E5C01F1C 7 1697 ST MTC MTCLIST and make this element new list head 1698 022C4 DC0022E2 1699 CALL DOMTUNIT set up element for individual unit 022C5 41001F1D 1700 PAR MTULIST indicate where to place unit 022C6 404022C9 1701 PARVL MTNAME and indicate device name base 1702 022C7 61D78801 7 6 BASE 1703 LD R7 SP,SAVER7 restore this register 022C8 5D1F8002 6 STAK 1704 LEAVE POP all done 1705 * --- 1706 022C9 4D540000 1707 MTNAME TEXTZ "MT" skeleton name for MT units 1708 1709 END MTCDEV subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 341 (INITIAL) F 21 Initialization Routine 1711 1712 ********************************************************************************** 1713 * * 1714 * VTCDEV - Initialization for a Video Tape Controller * 1715 * * 1716 * LD R4 => PPU control element * 1717 * LD R5 channel number * 1718 * CALLNP VTCDEV * 1719 * * 1720 * Eats R0:R3. * 1721 * Stack required = 17. * 1722 * 2 + max ( DOMTUNIT (15), SGETMEM (0), ZEROIT (1) ) * 1723 * * 1724 ********************************************************************************** 1725 1726 BLOCK VTCDEV subroutine 1727 ENTRY VTCDEV 1728 1729 BEGFRAME 00178801 6 BASE 1730 SAVER7 BSS 1 save area for R7 1731 ENDFRAME 1732 022CA DD5F8002 6 STAK 1733 VTCDEV ENTRNP PUSH 022CB E5D78801 7 6 BASE 1734 ST R7 SP,SAVER7 save this register 022CC DC002ED0 1735 CALL SGETMEM fetch memory for a controller element 022CD 40440004 IMM 1736 PARVL MTCLOG indicate its length 022CE 61D20000 7 0 REG 1737 LD MTC R0 copy the pointer 022CF 7C021600 0 IMM 1738 IOR R0 DVCTVTC*DEVTYPE insert device type 022D0 E41D2804 0 45 BASE 1739 ST R0 R4,PPUCNTLPTR(R5) place type and block addr into PPU table 022D1 DC003090 1740 CALL ZEROIT clear out the element 022D2 41160800 0 BASE 1741 PAR R0,0 indicate its address 022D3 40440010 IMM 1742 PARVL (2 POWER MTCLOG) and the length to clear 022D4 60170800 0 4 BASE 1743 LD R0 R4,PPUPF get the PPU page map value 022D5 7C0B4C00 0 5 CBM 1744 IOR R0 R5*PPUCHAN get this channel number 022D6 E417C801 0 7 BASE 1745 ST R0 MTC,MTCPMVALUE set up access address 022D7 60040002 0 IMM 1746 LD R0 2 022D8 E409C426 0 7 ZBM 1747 ST R0 MTC,MTCTYPE indicate that this is a video tape 022D9 60001F1C 0 1748 LD R0 MTCLIST get pointer to current list 022DA E417C800 0 7 BASE 1749 ST R0 MTC,MTCLINK place current list after us 022DB E5C01F1C 7 1750 ST MTC MTCLIST and make this element new list head 1751 022DC DC0022E2 1752 CALL DOMTUNIT set up element for individual unit 022DD 41001F1F 1753 PAR VTULIST indicate where to place unit 022DE 404022E1 1754 PARVL VTNAME and indicate device name base 1755 022DF 61D78801 7 6 BASE 1756 LD R7 SP,SAVER7 restore this register 022E0 5D1F8002 6 STAK 1757 LEAVE POP all done 1758 * --- 1759 022E1 56540000 1760 VTNAME TEXTZ "VT" skeleton name for VT units 1761 1762 END VTCDEV subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 342 (INITIAL) F 21 Initialization Routine 1764 1765 ********************************************************************************** 1766 * * 1767 * Routine to do a single mag tape controller. * 1768 * Call: * 1769 * LD MTC => MTC element * 1770 * CALL DOMTUNIT * 1771 * PAR MTULIST or CTULIST * 1772 * PARL drive name prefix (TEXTZ "MT" or "CT") * 1773 * * 1774 * Eats R0:R3. * 1775 * Stack required = 15. * 1776 * 5 + max ( LOCKWAIT (0), MAKEDEVNAME (10), MT_RESET (7), * 1777 * SGETMEM (0), ZEROIT (1) ) * 1778 * * 1779 ********************************************************************************** 1780 1781 BLOCK DOMTUNIT subroutine 1782 ENTRY DOMTUNIT 1783 1784 BEGFRAME 00178801 6 BASE 1785 REGSAVE BSS2 1 to save some registers 00178803 6 BASE 1786 LISTHEAD BSS 1 pointer to the list head 00178804 6 BASE 1787 NAMEPROTO BSS 1 prototype for the device name 1788 ENDFRAME 1789 022E2 DD1F8005 6 STAK 1790 DOMTUNIT ENTR PUSH 022E3 C1178803 6 BASE 1791 STP SP,LISTHEAD save the list head address 022E4 C0578804 6 BASE 1792 STPVL SP,NAMEPROTO save the device name prototype 022E5 E7178801 456 BASE 1793 ST2 R4 SP,REGSAVE save R4 and R5 022E6 E1D78800 7 6 BASE 1794 EXCH R7 SP,0 put MTC pointer back into MTC 022E7 61040000 4 IMM 1795 LD R4 0 start with unit 0 022E8 60C01A40 3 1796 LD R3 CIX(MTLDDRVST) fetch all drive statuses 000022E9 1797 NEXTMTUNIT LABEL 022E9 60CAD000 3 3 CBM 1798 LD R3 R3/BITS 8:7 shift to next unit 022EA F2FC2306 3 1799 JBF R3/MTDSTPRS NOMTUNIT jump if no drive present 022EB DC002ED0 1800 CALL SGETMEM get memory for MTU element 022EC 40440005 IMM 1801 PARVL MTULOG indicate required size 022ED 61520000 5 0 REG 1802 LD MTU R0 copy the pointer 022EE E41DE007 0 74 BASE 1803 ST R0 MTC,MTCDRIVE(R4) make controller element point here 022EF DC003090 1804 CALL ZEROIT clear out new element 022F0 41160800 0 BASE 1805 PAR R0,0 indicate address 022F1 40440020 IMM 1806 PARVL 2 POWER MTULOG and how much to clear 022F2 60178C03 0 6 FPVR 1807 LD R0 @(SP,LISTHEAD) get pointer to current list 022F3 E4095F10 0 5 ZBM 1808 ST R0 MTU,MTULINK put list behind us 022F4 FA3022F7 0 1809 JZA R0 FIRSTMT jump if this is first unit 022F5 60080460 0 0 ZBM 1810 LD R0 R0,MTUDNUM else get previous drive number 022F6 60161001 0 0 REG 1811 LD R0 R0+1 and make us one more 000022F7 1812 FIRSTMT LABEL 022F7 E4094460 0 5 ZBM 1813 ST R0 MTU,MTUDNUM and give next number to current element 022F8 E5578C03 5 6 FPVR 1814 ST MTU @(SP,LISTHEAD) and this element new list head 022F9 E5095040 4 5 ZBM 1815 ST R4 MTU,MTUUNIT save the unit number 022FA E5C95F11 7 5 ZBM 1816 ST MTC MTU,MTUCNTL save pointer to controller element 022FB 6009C426 0 7 ZBM 1817 LD R0 MTC,MTCTYPE get indicator for 9 track tape 022FC E4094021 0 5 ZBM 1818 ST R0 MTU,MTUTYPE and copy to unit element 022FD 6004426E 0 IMM 1819 LD R0 ADR MTDRIVE 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 343 (INITIAL) F 21 Initialization Routine 022FE E4174810 0 5 BASE 1820 ST R0 MTU,MTUPC initialize the coroutine PC 022FF 60040000 0 IMM 1821 LD R0 MTUSTRUN 02300 E4094020 0 5 ZBM 1822 ST R0 MTU,MTUSTATE initialize the state 02301 60178804 0 6 BASE 1823 LD R0 SP,NAMEPROTO get name prototype 02302 DC002316 1824 CALL MAKEDEVNAME construct the device name 02303 41520000 0 REG 1825 PARV R0 name prefix 02304 40494460 5 ZBM 1826 PARVL MTU,MTUDNUM device number 02305 E4174804 0 5 BASE 1827 ST R0 MTU,MTUNAME save the name 1828 * \ / 00002306 1829 NOMTUNIT LABEL 02306 19040001 4 IMM 1830 ADD R4 1 advance to next possible unit 02307 65040004 4 IMM 1831 CPR R4 MTCUPC check against max possible on controller 02308 FE0822E9 1832 JLT NEXTMTUNIT return to do next unit 1833 * \ / 1834 PLOCK (MTC,MTCELOCK) lock the controller 02309 0CC00000 1834 IOFF 0230A D1D7C803 7 BASE 1834 SETT (MTC,MTCELOCK) 0230B FE0C230D 1834 JNE MA(2+DISPW MA 0) 0230C DC40308B 1834 CALLNP LOCKWAIT 0230D 6153C000 5 7 REG 1835 LD R5 MTC parm for MT_RESET 0230E 60040001 0 IMM 1836 LD R0 1 parm for MT_RESET 0230F DC4041CB 1837 CALLNP MT_RESET reset the controller 02310 FEC00000 1838 NOP 0 ignore skip return 1839 PUNLOCK (MTC,MTCELOCK) unlock the controller 02311 EC17C803 7 BASE 1839 STZ (MTC,MTCELOCK) 02312 0C800000 1839 ION 1840 02313 E1D78800 7 6 BASE 1841 EXCH R7 SP,0 restore R7 values 02314 63178801 456 BASE 1842 LD2 R4 SP,REGSAVE restore R4 and R5 02315 5D1F8005 6 STAK 1843 LEAVE POP return to caller 1844 * --- 1845 1846 END DOMTUNIT subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 344 (INITIAL) F 21 Initialization Routine 1848 1849 ********************************************************************************** 1850 * * 1851 * MAKEDEVNAME - Construct a device name. * 1852 * * 1853 * CALL MAKEDEVNAME * 1854 * PARV name prefix (1-3 chars, left justified, zero filled) * 1855 * PARVL unit number * 1856 * ST R0 pak6 device name * 1857 * * 1858 * Eats R0:R2. * 1859 * Stack required = 10. * 1860 * 4 + max ( CHARTOP6 (1), INTTOCHAR (6) ) * 1861 * * 1862 ********************************************************************************** 1863 1864 BLOCK MAKEDEVNAME subroutine 1865 ENTRY MAKEDEVNAME 1866 1867 BEGFRAME 00178801 6 BASE 1868 SAVER3 BSS 1 save area for this reg 00178802 6 BASE 1869 NAMEBUF BSS 2 buffer to build name in 1870 ENDFRAME 1871 02316 DD1F8004 6 STAK 1872 MAKEDEVNAME ENTR PUSH 02317 C1578802 6 BASE 1873 STPV SP,NAMEBUF save prefix of name 02318 C0520000 0 REG 1874 STPVL R0 save unit number 02319 E4D78801 3 6 BASE 1875 ST R3 SP,SAVER3 save this register 0231A 38978802 2 6 BASE 1876 LEA R2 SP,NAMEBUF R2 -> first char of name 1877 * \ / 1878 0000231B 1879 LOOP LABEL 0231B 5C168000 2 CACH 1880 CMZ CACH R2,0 at end of prefix? 0231C FE02231F 1881 JEQ GOTEND jump if so 0231D 38968001 2 2 CACH 1882 LEA R2 CACH R2,1 else point to next char 0231E FE0E231B 1883 JMP LOOP and try again 1884 * --- 1885 0000231F 1886 GOTEND LABEL 0231F DC005903 1887 CALL INTTOCHAR convert unit number to characters 02320 41520000 0 REG 1888 PARV R0 number to convert 02321 40168000 2 CACH 1889 PARL CACH R2,0 where to put it 02322 38178802 0 6 BASE 1890 LEA R0 SP,NAMEBUF R0 -> name, in characters 02323 DC005898 1891 CALL CHARTOP6 pack it up 02324 40160000 0 CACH 1892 PARL CACH R0,0 thing to pack 02325 60124000 0 1 REG 1893 LD R0 R1 R0 = packed name 02326 60D78801 3 6 BASE 1894 LD R3 SP,SAVER3 restore this register 02327 5D1F8004 6 STAK 1895 LEAVE POP and all done 1896 * --- 1897 1898 END MAKEDEVNAME subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 345 (INITIAL) F 21 Initialization Routine 1900 1901 ********************************************************************************** 1902 * * 1903 * This routine frees all of a memory block beyond a * 1904 * specified location. * 1905 * * 1906 * R1 = log size of block * 1907 * R2 => first available word * 1908 * CALLNP FREEAFTER * 1909 * * 1910 * Eats R0:R3. * 1911 * Stack required = 2 * 1912 * 2 + max ( SFREEMEM (0) ) * 1913 * * 1914 ********************************************************************************** 1915 1916 BLOCK FREEAFTER subroutine 1917 ENTRY FREEAFTER 1918 1919 BEGFRAME 00178801 6 BASE 1920 LOGMAX BSS 1 log of max block size 1921 ENDFRAME 1922 1923 * R2=current first available word, 1924 * R3=log 2 block size being considered 1925 02328 DD5F8002 6 STAK 1926 FREEAFTER ENTRNP PUSH 02329 E4578801 1 6 BASE 1927 ST R1 SP,LOGMAX save max log size 0232A 60C40000 3 IMM 1928 LD R3 0 start with block size of 1 0000232B 1929 FREENEXT LABEL 0232B 60128000 0 2 REG 1930 LD R0 R2 copy the address being considered 0232C 7826255E 0 3 1931 AND R0 BITTAB(R3) check to see if address odd here 0232D FA022332 0 1932 JEQZ R0 ENDCHECK jump if no block starting here 0232E DC002F5D 1933 CALL SFREEMEM free up a piece 0232F 4152C000 3 REG 1934 PARV R3 indicate the length (log) 02330 40528000 2 REG 1935 PARVL R2 and address 02331 18A6255E 2 3 1936 ADD R2 BITTAB(R3) skip over piece just freed 00002332 1937 ENDCHECK LABEL 02332 18C40001 3 IMM 1938 ADD R3 1 double size being checked 02333 64D78801 3 6 BASE 1939 CPR R3 SP,LOGMAX check for beyond block or page end 02334 FE08232B 1940 JLT FREENEXT not yet, continue 02335 5D1F8002 6 STAK 1941 LEAVE POP return to caller 1942 * --- 1943 1944 END FREEAFTER subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 346 (INITIAL) F 21 Initialization Routine 1946 1947 ********************************************************************************** 1948 * * 1949 * Routine to set up the interrupt vector table for the * 1950 * current CPU. Gets a console area for each actual interrupt * 1951 * level that requires one. * 1952 * Sets up pointers to the CAs in the IVT and sets up the * 1953 * new program counter information. Unused interrupts are set * 1954 * to stop the machine. * 1955 * * 1956 * Eats R0:R1. * 1957 * Stack required = 3. * 1958 * 1 + max ( BUILDCA (2) ) * 1959 * * 1960 ********************************************************************************** 1961 1962 BLOCK BUILDIVT subroutine 1963 ENTRY BUILDIVT 1964 1965 BEGFRAME 1966 ENDFRAME 1967 02336 DD5F8001 6 STAK 1968 BUILDIVT ENTRNP PUSH 02337 EC000412 1969 STZ CPPSA also indicate no process now 02338 EC000414 1970 STZ CPCUPC indicate no UPC now 02339 EC00044D 1971 STZ CPXTRACA indicate no CA/Stack present 0233A EC00044E 1972 STZ POWERFLAG initialize power fail marker 1973 0233B DC402833 1974 CALLNP BUILDCA 0233C E4000402 0 1975 ST R0 IVTPWFL set address into IVT 0233D 6004277A 0 IMM 1976 LD R0 ADR POWERFAIL load the interrupt routine address 0233E E4000403 0 1977 ST R0 IVTPWFL(1) and set into the IVT 1978 0233F DC402833 1979 CALLNP BUILDCA 02340 E4000404 0 1980 ST R0 IVTMEMPAR set address into IVT 02341 600426C6 0 IMM 1981 LD R0 ADR PARITYERR load the interrupt routine address 02342 E4000405 0 1982 ST R0 IVTMEMPAR(1) and set into the IVT 1983 02343 DC402833 1984 CALLNP BUILDCA 02344 E400040A 0 1985 ST R0 IVTIAPR set address into IVT 02345 60044E54 0 IMM 1986 LD R0 ADR OTHERTALK load the interrupt routine address 02346 E400040B 0 1987 ST R0 IVTIAPR(1) and set into the IVT 1988 02347 DC402833 1989 CALLNP BUILDCA 02348 E4000408 0 1990 ST R0 IVTIOINT set the address into the IVT 02349 60043908 0 IMM 1991 LD R0 ADR IOINTPROC load the address of the interrupt routine 0234A E4000409 0 1992 ST R0 IVTIOINT(1) and set into the IVT 1993 0234B DC402833 1994 CALLNP BUILDCA 0234C E4000406 0 1995 ST R0 IVTPAGE 0234D 60042402 0 IMM 1996 LD R0 ADR PFPROC 0234E E4000407 0 1997 ST R0 IVTPAGE(1) 1998 0234F DC402833 1999 CALLNP BUILDCA 02350 E400040C 0 2000 ST R0 IVTXREQ 02351 600438BD 0 IMM 2001 LD R0 ADR XREQTRAP 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 347 (INITIAL) F 21 Initialization Routine 02352 E400040D 0 2002 ST R0 IVTXREQ(1) 2003 02353 DC402833 2004 CALLNP BUILDCA 02354 E400040E 0 2005 ST R0 IVTUERR 02355 600438E8 0 IMM 2006 LD R0 ADR UERRTRAP 02356 E400040F 0 2007 ST R0 IVTUERR(1) 2008 02357 DC402833 2009 CALLNP BUILDCA 02358 E4000410 0 2010 ST R0 IVTXCALL 02359 600438E5 0 IMM 2011 LD R0 ADR XCALLTRAP 0235A E4000411 0 2012 ST R0 IVTXCALL(1) 2013 2014 ********************************************************************************** 2015 * * 2016 * Interrupting Devices Mask * 2017 * This word is defined by the hardware. It is read up * 2018 * by the CPU and tells that CPU what slots to poll when the * 2019 * bus interrupt line is asserted. It also contains the slot * 2020 * number of the SSU that is running the front panel. This is * 2021 * so that the CPU microcode knows where to send notice of any * 2022 * problems that it might encounter. * 2023 * * 2024 ********************************************************************************** 2025 0235B 60000312 0 2026 LD R0 INTDEVICES 0235C E4000401 0 2027 ST R0 INTABLSLOT say which devices interrupt 2028 0235D 5D1F8001 6 STAK 2029 LEAVE PUSH return to caller 2030 * --- 2031 2032 END BUILDIVT subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 348 (INITIAL) F 21 Initialization Routine 2034 2035 ********************************************************************************** 2036 * * 2037 * GENPPL - Generate a PPAGE element. * 2038 * We create the PPL for the specified page. The FBI for * 2039 * the page is kept in a virtual area that must be mapped in * 2040 * whenever access to the FBI is needed. We keep track of the * 2041 * available places for FBIs and store in the PPL the unique * 2042 * location it may use. * 2043 * The MCU slot number of the new PPL is used as an index * 2044 * into the PPUSDIDLE array and the PPL is placed as the head * 2045 * of the corresponding 'unclean' idle page list. This * 2046 * separates the PPLs by MCU. * 2047 * Since PPLs created here are never destroyed, we * 2048 * allocate FBI space in a linear fashion and without worrying * 2049 * about ever recovering the space. The array PPLPFMAP * 2050 * contains the page map values for each of the pages used to * 2051 * store the FBIs. Into any particular PPL we store an index * 2052 * (PPFBIBLK) into this array and a displacement (PPFBIDISP) * 2053 * into the associated page. The virtual page PPLWINDOW is * 2054 * used to map in the page when the FBI is to be accessed. * 2055 * We keep track of allocations with the head page * 2056 * variables PPLINDX and PPLDISP. They are the next assignable * 2057 * values for PPFBIBLK and PPFBIDISP. If PPLPFMAP(PPFBIBLK) is * 2058 * 0, no page has yet been assigned for this location and we * 2059 * use the passed page for this purpose. * 2060 * * 2061 * R5 contains the PF entry for this page * 2062 * CALLNP GENPPL * 2063 * * 2064 * Eats R0:R2,PPL * 2065 * Stack usage = 2 * 2066 * 1 + max ( BUILDPPL (1) ) * 2067 * * 2068 ********************************************************************************** 2069 2070 BLOCK GENPPL subroutine 2071 ENTRY GENPPL 2072 2073 BEGFRAME 2074 ENDFRAME 2075 0235E DD5F8001 6 STAK 2076 GENPPL ENTRNP PUSH 0235F 60001C7E 0 2077 LD R0 PPLPMINDX get current index into PPLPFMAP 02360 68040042 0 IMM 2078 UCPR R0 PPLMAPSIZE off ends of table? 02361 FE082363 2079 JLT INDEXOK jump if not 02362 00026040 2080 HALT HALTB6040 out of table space (or negative index) 2081 * \ / 2082 00002363 2083 INDEXOK LABEL 02363 5C201C80 0 2084 CMZ PPLPFMAP(R0) do we have a page allocated? 02364 FE02236C 2085 JEQ USETHISONE jump if not 02365 DC402374 2086 CALLNP BUILDPPL build the PPL 2087 2088 ********************************************************************************** 2089 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 349 (INITIAL) F 21 Initialization Routine 2090 * Place the new PPL into list in PPUSDIDLE array * 2091 * corresponding to the PPLs MCU. The end-pointer array, * 2092 * PPENDIDLE, is not changed. This is intentional, to make * 2093 * merging these lists easier. Note that GETIDLE will look in * 2094 * this array for free PPLs and does not need the end-pointers * 2095 * set (in fact, it sets them). * 2096 * * 2097 ********************************************************************************** 2098 02366 608B4840 2 5 CBM 2099 LD R2 R5/PFSLOT get slot number of mother MCU 02367 60641DDD 1 2 2100 LD R1 PPUSDIDLE(R2) use as index to get list head 02368 E4491F10 1 4 ZBM 2101 ST R1 PPL,PPLINK link list behind us 02369 E5241DDD 4 2 2102 ST PPL PPUSDIDLE(R2) make us the new list head 2103 0236A D0001DDA 2104 INC PPIDLCOUNT count each idle page available 2105 0000236B 2106 EXIT2 LABEL 0236B 5D1F8001 6 STAK 2107 LEAVE POP return 2108 * --- 2109 2110 ********************************************************************************** 2111 * * 2112 * There is no block allocated for storing the FBIs from * 2113 * the PPLs. Allocate one without creating a PPL. Note also * 2114 * that we initialize the page with all zeros, this is to * 2115 * prevent the OS from ever reading from uninitialized memory. * 2116 * * 2117 ********************************************************************************** 2118 0000236C 2119 USETHISONE LABEL 0236C E5601C80 5 0 2120 ST R5 PPLPFMAP(R0) 0236D 60C400FB 3 IMM 2121 LD R3 PNPPLWNDO page number for virtual FBIs 0236E 00D34000 5 REG 2122 LDPF R5 associate virtual page with memory page 0236F 3881EC00 2 2123 LEA R2 PPLWINDOW generate destination address 02370 60441000 1 IMM 2124 LD R1 WPP*CPW page length in characters 02371 FE580000 2125 CFILL 0 the page is now initialized 02372 80D20000 0 REG 2126 PFRC R0 undo the mapping 02373 FE0E236B 2127 JMP EXIT2 2128 * --- 2129 2130 END GENPPL subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 350 (INITIAL) F 21 Initialization Routine 2132 2133 ********************************************************************************** 2134 * * 2135 * BUILDPPL * 2136 * The PPL is built here. The FBI for the page is kept * 2137 * in a virtual area that must be mapped in whenever access to * 2138 * the FBI is needed. We keep track of the available places * 2139 * for FBIs and store in the PPL the unique location it may * 2140 * use. * 2141 * Since PPLs created here are never destroyed, we * 2142 * allocate FBI space in a linear fashion and without worrying * 2143 * about ever recovering the space. The array PPLPFMAP * 2144 * contains the page map values for each of the pages used to * 2145 * store the FBIs. Into any particular PPL we store an index * 2146 * (PPFBIBLK) into this array and a displacement (PPFBIDISP) * 2147 * into the associated page. The virtual page PPLWINDOW is * 2148 * used to map in the page when the FBI is to be accessed. * 2149 * It is assumed that some one else is checking that * 2150 * PPLPFMAP(PPFBIBLK) contains a page map value for a page of * 2151 * FBIs. Call: * 2152 * * 2153 * R5 contains PF entry for this page * 2154 * CALLNP BUILDPPL * 2155 * PPL -> PPL * 2156 * * 2157 * Eats R0. * 2158 * Stack usage = 1 * 2159 * 1 + max ( SGETMEM (0) ) * 2160 * * 2161 ********************************************************************************** 2162 2163 BLOCK BUILDPPL subroutine 2164 ENTRY BUILDPPL 2165 2166 BEGFRAME 2167 ENDFRAME 2168 02374 DD5F8001 6 STAK 2169 BUILDPPL ENTRNP PUSH 02375 DC002ED0 2170 CALL SGETMEM call for a chunk of memory 02376 40440002 IMM 2171 PARVL PPLOG indicate its length 02377 61120000 4 0 REG 2172 LD PPL R0 copy the pointer 02378 EE170800 4 BASE 2173 STZ2 PPL,0 clear out top half 02379 EE170802 4 BASE 2174 STZ2 PPL,2 clear out bottom half 2175 * \ / 2176 2177 * PPL => zeroed physical page element, fill in the details 0237A E5570803 5 4 BASE 2178 ST R5 PPL,PPPMVALUE set page map value 0237B EC091A33 4 ZBM 2179 STZ PPL,PPPMVALUE/(PFROBIT+PFALTBIT+PFREFBIT) clear this garbage 0237C 60001C7E 0 2180 LD R0 PPLPMINDX get index back 0237D E4090C62 0 4 ZBM 2181 ST R0 PPL,PPFBIBLK say where to find FBI 0237E 60001C7F 0 2182 LD R0 PPLPMDISP get loc for FBI 0237F E40904A0 0 4 ZBM 2183 ST R0 PPL,PPFBIDISP save displacement into indexed block 2184 * \ / 2185 2186 ********************************************************************************** 2187 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 351 (INITIAL) F 21 Initialization Routine 2188 * The following instruction causes all the FBIs to start * 2189 * on even word boundaries. This is required for all systems * 2190 * with pre-rev 012 PPU micro-code. It is in the source so we * 2191 * don't forget! The code file can be patched to ADD R0 * 2192 * FBILNTH to produce an odd/even mix for systems with rev 012 * 2193 * and above for tests, but the source should not be changed * 2194 * until all sites have appropriate microcode. * 2195 * * 2196 ********************************************************************************** 2197 2198 * label for patchers 00002380 2199 ODDFBI LABEL 02380 1804000C 0 IMM 2200 ADD R0 FBILNTH+1 R0:=next available displacement 02381 640403F4 0 IMM 2201 CPR R0 PPLMAXDISP is it too big? 02382 FE0A2385 2202 JLE EXIT jump if not 02383 D0001C7E 2203 INC PPLPMINDX otherwise, we must use next index 02384 60040000 0 IMM 2204 LD R0 0 from the beginning 00002385 2205 EXIT LABEL 02385 E4001C7F 0 2206 ST R0 PPLPMDISP set next disp 02386 5D1F8001 6 STAK 2207 LEAVE POP 2208 * --- 2209 2210 END of BUILDPPL subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 352 (INITIAL) F 21 Initialization Routine 2212 2213 ********************************************************************************** 2214 * * 2215 * FREECHECK - See whether more free storage is needed. * 2216 * Routine to check to see whether a whole page is * 2217 * present in the free storage lists or not. If not, the PPL * 2218 * that is now in the FSPPLIST is freed and a new whole page * 2219 * is acquired from PPCLNIDLE. The first time that this * 2220 * routine is called, there will be lots of free storage * 2221 * because all of the extra space on the CPUPAGEs will have * 2222 * been freed. However, there will be no whole pages in the * 2223 * list, so this code will proceed to acquire an idle page and * 2224 * enter it into the whole page memory list (WHOLEPAGE). Once * 2225 * that is done, we will go for quite a while before fetching * 2226 * another. * 2227 * Call: * 2228 * CALLNP FREECHECK * 2229 * * 2230 * Registers Used: R0:R3. * 2231 * Stack Required: 2. * 2232 * 1 + max ( GETIDLE (1), SFREEMEM (0) ) * 2233 * * 2234 ********************************************************************************** 2235 2236 BLOCK FREECHECK subroutine 2237 ENTRY FREECHECK 2238 2239 BEGFRAME 2240 ENDFRAME 2241 02387 DD5F8001 6 STAK 2242 FREECHECK ENTRNP PUSH 02388 5C001C79 2243 CMZ WHOLEPAGE check for whole pages in list 02389 FE0C2395 2244 JNE STILPAGS jump if still some there 2245 * \ / 2246 2247 ********************************************************************************** 2248 * * 2249 * The last PPL that was fetched caused a whole page to * 2250 * break up. Since PPLs are never freed ( except right here * 2251 * for this reason only ), this page will never be put back * 2252 * together. Therefore, its PPL (which is now in FSPPLIST) * 2253 * will never be needed and it may be returned to free * 2254 * storage. It will of course, never cause any recombination * 2255 * because its buddy was part of a prior page and is now (and * 2256 * forevermore) a PPL. * 2257 * The free storage lists are initialized to empty ( with * 2258 * FSPPLIST empty also ). The unused part of the CPUPAGES * 2259 * will have been freed ( using alias addresses ) but no whole * 2260 * pages are entered by the initializer prior to this point. * 2261 * Therefore, the first time we come here there will be no PPL * 2262 * in the list. * 2263 * * 2264 ********************************************************************************** 2265 2266 * \ / 0238A 60801C77 2 2267 LD R2 FSPPLIST get pointer to this PPL 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 353 (INITIAL) F 21 Initialization Routine 0238B FA822390 2 2268 JEQZ R2 NOFREE jump if no whole page in existing list 0238C EC001C77 2269 STZ FSPPLIST get rid of the old pointer 0238D DC002F5D 2270 CALL SFREEMEM call to free this PPL 0238E 41440002 IMM 2271 PARV PPLOG indicate length 0238F 40528000 2 REG 2272 PARVL R2 and memory address 2273 * \ / 2274 2275 ********************************************************************************** 2276 * * 2277 * We must now get an idle page from the idle page list * 2278 * and stick it into the wholepage list, so it may be used as * 2279 * free storage. Since the other CPUs are off spining their * 2280 * wheels somewhere no inlocking for the idle list is needed. * 2281 * * 2282 ********************************************************************************** 2283 2284 * \ / 00002390 2285 NOFREE LABEL 02390 DC402D1C 2286 CALLNP GETIDLE fwtxh an idle page 02391 FE0E2395 2287 JMP STILPAGS fails on very first PPL 02392 60001C79 0 2288 LD R0 WHOLEPAGE list head of available whole pages 02393 E4091F10 0 4 ZBM 2289 ST R0 PPL,PPLINK this now becomes the head of the list 02394 E5001C79 4 2290 ST PPL WHOLEPAGE that is all there is to it 2291 * \ / 00002395 2292 STILPAGS LABEL 02395 5D1F8001 6 STAK 2293 LEAVE POP return 2294 * --- 2295 2296 END FREECHECK subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 354 (INITIAL) F 21 Initialization Routine 2298 2299 ********************************************************************************** 2300 * * 2301 * MERGEPPLS * 2302 * Cycle through the PPUSDIDLE array to merge the PPLs * 2303 * from those lists (indexed by MCU slot number) into one * 2304 * master PPCLNIDLE list. This shuffled ordering gives an * 2305 * even distribution of page usage across the MCUs. The order * 2306 * of slot numbers in the resulting list is cyclic from * 2307 * highest through lowest. * 2308 * * 2309 * For a number of reasons, we create this list by adding * 2310 * at the end. Primarily, it is done so that the PPLs * 2311 * that were first created get buried deeply under the * 2312 * newer ones. See the comments regarding GENPPLing the * 2313 * INITIAL page, WNDO pages, etc. Also, this keeps the * 2314 * pages from all MCUs nicely shuffled at the beginning * 2315 * of the list (regardless of relative memory sizes or * 2316 * page availability). Finally, it fulfills the requirement * 2317 * of SPREADSYS that the first PPL not correspond to the * 2318 * first MCU. * 2319 * * 2320 * N.B. We assume that we do not have to mess with the * 2321 * end-pointer array, PPENDIDLE. * 2322 * * 2323 * We loop through the array, moving the first PPL off each * 2324 * list until all lists are empty. Each non-empty list sets * 2325 * a flag (R2) to 1. After every NUMSLOT cycles, we check this * 2326 * flag to see whether anything was moved since the last check, * 2327 * and exit if not. Note that we do not clear the flag before * 2328 * cycling the first time. This was a practical decision based * 2329 * on the fact that not finding any non-empty lists the first * 2330 * time through would imply that no MCUs exist. Hardly likely. * 2331 * We couldn't even get as far as this subroutine if there were * 2332 * no MCUs! If it is true, however, we find this out in the * 2333 * next cycle (because the JDR R2 resets the flag). * 2334 * * 2335 * Call: CALLNP MERGEPPLS * 2336 * * 2337 * Eats R0:R3, PPL * 2338 * Stack usage: 1 * 2339 * * 2340 ********************************************************************************** 2341 2342 BLOCK MERGEPPLS subroutine 2343 ENTRY MERGEPPLS 2344 2345 BEGFRAME 2346 ENDFRAME 2347 02396 DD5F8001 6 STAK 2348 MERGEPPLS ENTRNP PUSH 02397 60040000 0 IMM 2349 LD R0 0 value of null pointer 02398 38C01DDC 3 2350 LEA R3 PPCLNIDLE get address of 'clean' unused PPLS list 02399 3C08DF10 0 3 ZBM 2351 LSRCH R0 R3,PPLINK find list end 0000239A 2352 NOTDONEYET LABEL 0239A 6044000F 1 IMM 2353 LD R1 NUMSLOTS-1 counter for done check 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 355 (INITIAL) F 21 Initialization Routine 0000239B 2354 MPLOOP LABEL 0239B 61221DDD 4 1 2355 LD PPL PPUSDIDLE(R1) get PPL from slot 0239C FB3023A3 4 2356 JZA PPL GOROUND jump if list is empty 2357 * \ / 2358 2359 * PPL points to an element, move it to PPCLNIDLE 0239D 60840001 2 IMM 2360 LD R2 1 say a non-empty slot was found 0239E 60091F10 0 4 ZBM 2361 LD R0 PPL,PPLINK get forward pointer 0239F E4221DDD 0 1 2362 ST R0 PPUSDIDLE(R1) shrink the list 023A0 EC091F10 4 ZBM 2363 STZ PPL,PPLINK make suitable null pointer 023A1 E508DF10 4 3 ZBM 2364 ST PPL R3,PPLINK give transient a home 023A2 60D30000 3 4 REG 2365 LD R3 PPL save as new end 2366 * \ / 2367 000023A3 2368 GOROUND LABEL 023A3 FA66239B 1 2369 JDR R1 MPLOOP try next slot, or do done check 2370 * \ / 2371 2372 * Test our flag to see whether the lists are empty 023A4 FAA6239A 2 2373 JDR R2 NOTDONEYET jump if non-empty list was found 2374 * \ / 2375 023A5 5D1F8001 6 STAK 2376 LEAVE POP 2377 * --- 2378 2379 END MERGEPPLS subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 356 (INITIAL) F 21 Initialization Routine 2381 2382 ********************************************************************************** 2383 * * 2384 * SPREADSYS * 2385 * This routine moves the first few pages of the resident * 2386 * operating system into MCUs other than the one we've been * 2387 * using up to now. This is intended to further distribute * 2388 * the workload of the MCUs. * 2389 * We assume that this subroutine is called immediately * 2390 * after perfectly shuffling the PPLs from all the MCUs, and * 2391 * that, if there is more than one MCU, that the first PPL * 2392 * does not correspond to the first MCU. The second assumption * 2393 * is made because we wish to place the first monitor page * 2394 * (which is very heavily used) on another MCU, and a check * 2395 * for this is awkward. * 2396 * * 2397 * Call: CALLNP SPREADSYS * 2398 * * 2399 * Eats R0:R3, PPL * 2400 * Stack usage: 5 * 2401 * 3 + SWAPPMVS (2) * 2402 * * 2403 ********************************************************************************** 2404 2405 BLOCK SPREADSYS subroutine 2406 ENTRY SPREADSYS 2407 2408 BEGFRAME 00178801 6 BASE 2409 PRIMESLOT BSS 1 slot number of primary MCU 00178802 6 BASE 2410 CURRPAGE BSS 1 current page in loop 2411 ENDFRAME 2412 023A6 DD5F8003 6 STAK 2413 SPREADSYS ENTRNP PUSH 023A7 60C40088 3 IMM 2414 LD PFPTR PNINITPAGE get our own page's number 023A8 80920000 0 REG 2415 PFRD R0 get the relocation 023A9 600A0840 0 0 CBM 2416 LD R0 R0/PFSLOT get the primary MCU's slot # 023AA E4178801 0 6 BASE 2417 ST R0 SP,PRIMESLOT save on stack 2418 2419 * Do the work. 2420 023AB 61001DDC 4 2421 LD PPL PPCLNIDLE get first available PPL 023AC FB3023B7 4 2422 JZA PPL ALLDONE jump if list is empty 2423 * \ / 2424 2425 ********************************************************************************** 2426 * * 2427 * Loop around until we run out of monitor pages to swap, * 2428 * or until there's only one MCU supplying us with PPLs, or * 2429 * until we run out of PPLs. * 2430 * * 2431 ********************************************************************************** 2432 * \ / 2433 023AD D1578802 6 BASE 2434 STMW SP,CURRPAGE initialize loop counter 000023AE 2435 SPREADLOOP LABEL 023AE BC578802 1 6 BASE 2436 INCL R1 SP,CURRPAGE increment loop counter 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 357 (INITIAL) F 21 Initialization Routine 023AF 6440253E 1 2437 CPR R1 MONSPREAD have we done enough? 023B0 FE0623B7 2438 JGE ALLDONE jump, finished our job 023B1 60090843 0 4 ZBM 2439 LD R0 PPL,PPPMVALUE/PFSLOT get current PPLs PMV 023B2 64178801 0 6 BASE 2440 CPR R0 SP,PRIMESLOT PPL from original MCU? 023B3 FE0223B6 2441 JEQ CYCLE jump if swizzle would be NOP 023B4 DC0023B8 2442 CALL SWAPPMVS swizzle this page 023B5 40565009 1 REG 2443 PARVL R1+RESIDENT/FLDPAGE pass page number 000023B6 2444 CYCLE LABEL 023B6 FB3623AE 4 2445 LJNA PPL SPREADLOOP fall through if no more PPLs 2446 * \ / 2447 000023B7 2448 ALLDONE LABEL 023B7 5D1F8003 6 STAK 2449 LEAVE POP return 2450 * --- 2451 2452 END SPREADSYS subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 358 (INITIAL) F 21 Initialization Routine 2454 2455 ********************************************************************************** 2456 * * 2457 * SWAPPMVS * 2458 * Copies a monitor resident page to the page in PPL, and * 2459 * swaps page map values between same. Preserves the PF * 2460 * control bits in the monitor page and zeroes them in the PPL * 2461 * page. Since the has-been monitor page is now free for * 2462 * general consumption, we also zero its contents to preserve * 2463 * propriety. Updates the PFMAP. * 2464 * * 2465 * Call: PPL => physical page element * 2466 * CALL SWAPPMVS * 2467 * PARVL * 2468 * * 2469 * Eats R0:R3 * 2470 * Window usage: WNDO1, virtual page of parm * 2471 * Stack usage: 2 * 2472 * * 2473 ********************************************************************************** 2474 2475 BLOCK SWAPPMVS subroutine 2476 ENTRY SWAPPMVS 2477 2478 BEGFRAME 00178801 6 BASE 2479 HASBEEN BSS 1 number of page being replaced 2480 ENDFRAME 2481 023B8 DD1F8002 6 STAK 2482 SWAPPMVS ENTR PUSH 023B9 C0578801 6 BASE 2483 STPVL SP,HASBEEN save monitor page number 2484 2485 * Copy monitor page into PPLs page 023BA 60C40082 3 IMM 2486 LD PFPTR PNWNDO1 grab on to WNDO1 023BB 00D70803 4 BASE 2487 LDPF PPL,PPPMVALUE map in page from PPL 023BC 600A1400 0 0 CBM 2488 LD R0 R0*FLDPAGE make address out of parameter 023BD 60441000 1 IMM 2489 LD R1 CPW*WPP size of page in chars 023BE 60840800 2 IMM 2490 LD R2 ADR WNDO1 address of new guy 023BF FE400000 2491 CMOVE copy monitor page into PPLs page 2492 * \ / 2493 2494 * Swap pagemap values cleanly 023C0 60D78801 3 6 BASE 2495 LD PFPTR SP,HASBEEN get monitor page 023C1 7CC40080 3 IMM 2496 IOR PFPTR MONPF find monitor half of PF 023C2 80924000 1 REG 2497 PFRD R1 get page's relocation 023C3 600A5A30 0 1 CBM 2498 LD R0 R1/PFCNTL get the control bits 023C4 EC0A5A30 1 CBM 2499 STZ R1/PFCNTL now clear them 023C5 E0570803 1 4 BASE 2500 EXCH R1 PPL,PPPMVALUE get/set PPL's PMV 023C6 E40A5A30 0 1 CBM 2501 ST R0 R1/PFCNTL restore mon pages control 023C7 28450000 1 IMM 2502 BSUB R1 1*PFREFBIT clear "referenced" flag 023C8 60978801 2 6 BASE 2503 LD R2 SP,HASBEEN retrieve relative page in monitor space 023C9 E4640380 1 2 2504 ST R1 PFMAP(R2) save new PMV in PFMAP 023CA 00D24000 1 REG 2505 LDPF R1 and put in this CPUs PF 2506 * \ / 2507 2508 * PMVs are switched, finish by zeroing old page 023CB 60C40082 3 IMM 2509 LD PFPTR PNWNDO1 map-over WNDO1 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 359 (INITIAL) F 21 Initialization Routine 023CC 00D70803 4 BASE 2510 LDPF PPL,PPPMVALUE with has-beens PMV 023CD 60441000 1 IMM 2511 LD R1 CPW*WPP get char size of page 023CE 60840800 2 IMM 2512 LD R2 ADR WNDO1 make destination addr 023CF FE580000 2513 CFILL 00 clear the page 023D0 80D20000 0 REG 2514 PFRC R0 must unmap get window faults later 2515 023D1 5D1F8002 6 STAK 2516 LEAVE POP return 2517 * --- 2518 2519 END SWAPPMVS subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 360 (INITIAL) F 21 Initialization Routine 2521 2522 ********************************************************************************** 2523 * * 2524 * Constants * 2525 * * 2526 ********************************************************************************** 2527 2528 023D2 E79EDF2D 2529 SYSACTNAM PAK12 !!!!!!!!!!!! 023D4 E79EDF2D 2530 SYSACTPROJ PAK6 !!!!!! account and project for dummy ULB 2531 2532 ********************************************************************************** 2533 * * 2534 * These goodies are put in here so that system * 2535 * programmers can see the PAK6 representions of the commonly * 2536 * needed stuff without going very far. They serve no other * 2537 * purpose. * 2538 * * 2539 ********************************************************************************** 2540 023D5 B674BFEF 2541 PAK6 SYSTEM 023D6 E79DF200 2542 PAK6 !!! 023D7 60D7BED5 2543 PAK6 EXPSYS 023D8 B97B6600 2544 PAK6 TEM 023D9 533719C0 2545 PAK6 CODE 023DA 9B17AC90 2546 PAK6 OFFLINE 023DB 8A28910E 2547 PAK6 LOGFIL 023DC 52DAF000 2548 PAK6 CM 023DD 60D758D8 2549 PAK6 EXPCM 023DE 9BFFE0D8 2550 PAK6 OLDCM 023DF 9C0046D5 2551 PAK6 OLDSYS 023E0 9CA39C00 2552 PAK6 OPL 2553 2554 END SYSINIT System Initialization Routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 361 F 0 Initialization Routine 32 33 ********************************************************************************** 34 * * 35 * Place to break the listing. * 36 * This is the beginning of the resident operating system. * 37 * * 38 ********************************************************************************** 39 40 ORG ((DISPW MA 0)+WPP-1) AND (-WPP) get off initializer page 00002400 ABS 41 RESIDENT EQU DISPW MA 0 beginning of resident nucleus 42 00002400 43 VERSION LABEL 02400 43393330 44 VFD REVNAMEH insert the system version (in ascii) 02401 33202020 45 VFD REVNAMEL and low half 46 47 INPUT PFPROC page fault processor 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 362 (PFPROC) F 22 Page Fault Processor - Overview 3 4 PFPROCESS BLOCK Page Fault Processor - Main Block 5 ENTRY PFPROC only job of this routine 6 7 ********************************************************************************** 8 * * 9 * PAGE FAULT PROCESSING * 10 * The page fault processor is the man on the spot who * 11 * implements the schedulers desires. See the scheduling * 12 * routines and the list element prototypes for further * 13 * information concerning their operation. * 14 * * 15 * HARDWARE * 16 * The access privilege to each virtual page belonging to * 17 * a process is controlled by an entry in the page file. The * 18 * page file hardware recognizes the following privileges: * 19 * * 20 * 1) Read/Write. The process is allowed complete * 21 * access to the page. * 22 * 2) Read Only. The process is allowed only read * 23 * operations on this page. Any attempt to alter * 24 * the page causes a page fault interrupt. * 25 * 3) Excluded. Any attempt to access this page causes * 26 * a page fault interrupt. * 27 * * 28 * A process may have privileges that don't correspond * 29 * exactly to these hardware supplied protections. These * 30 * privileges are controlled by the page fault processor based * 31 * on control information set up by the scheduling or memory * 32 * management code. * 33 * * 34 * OPERATION * 35 * The functions of the page fault processor is, for each * 36 * page fault interrupt, to determine what actions to take to * 37 * make the requested page available to the process. If the * 38 * user has requested an operation that he is not allowed, an * 39 * appropriate error entry to his overprocess is initiated. * 40 * Otherwise, the necessary table changes are made and the * 41 * user restarted, or the necessary mass storage transfers are * 42 * requested and the user is shutdown to wait for them. * 43 * * 44 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 363 (PFPROC) F 22 Page Fault Processor - PFPROC routine 47 48 ********************************************************************************** 49 * * 50 * HERE ABIDE MONSTERS * 51 * * 52 * PFPROC - Enter here on a page fault. * 53 * The page fault interrupt sets up the registers as follows: * 54 * R2 = 1 if excluded, * 55 * 2 if protect violation, * 56 * 3 if write attempted on excluded page * 57 * R3 = page number where violation occurred * 58 * R4 => previous console area * 59 * * 60 * We do a bunch of messy logic to sort out the * 61 * following cases: * 62 * * 63 * The normal case. A process is attempting to access an * 64 * existing page that is not in its working set. * 65 * The zeropage case. A process is attempting to access * 66 * an unmapped page. He must be supplied with a new page of * 67 * zeros. * 68 * The own copy case. A process is attempting to write to * 69 * a page that is already in its working set read only, and he * 70 * should be given his own copy of the page to dirty. * 71 * The protection violation case. A process is * 72 * attempting to reference a page which has been explicitly * 73 * excluded from his working set, or is attempting to write a * 74 * page which has been explicitly marked read only. The * 75 * process will suffer an error. * 76 * * 77 * Error conditions. * 78 * The page fault processor also recognizes a number of * 79 * error conditions. Usually, somebody in the monitor screwed * 80 * up and attempted to reference a page that he shouldn't * 81 * have. These are recognizable because, while the user can * 82 * reference unmapped memory (and just gets a zero page) this * 83 * is not allowed for the monitor. * 84 * This category of HALTS represents problems elsewhere in * 85 * the monitor. They can sometimes be restarted by using the * 86 * "LDCA R4" conveniently supplied to restore the interrupted * 87 * process registers, then fixing whatever is wrong before * 88 * resuming execution. * 89 * * 90 * Exits to ZEROPAGE, OWNCOPY, NORMALPAGE, or PROTECTED. * 91 * * 92 * Stack required = 15. * 93 * 0 + max ( FINDVP (4), NOREADPAGE (15), NORMALPAGE (15), * 94 * PROTECTED (1), ZEROPAGE (15) ) * 95 * * 96 ********************************************************************************** 97 98 BLOCK PFPROC routine 99 ENTRY PFPROC 100 00002402 101 PFPROC LABEL 02402 5C000412 102 CMZ CPPSA check pointer for current user 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 364 (PFPROC) F 22 Page Fault Processor - PFPROC routine 02403 FE0C2406 103 JNE PFHVPSA jump if a valid PSA pointer 104 * \ / 105 106 ********************************************************************************** 107 * * 108 * A page fault has occurred while no session is running. * 109 * This is a definite no-no. It means that we were executing a * 110 * piece of the kernal that MUST run without suspension. * 111 * If you wish to attempt a repair, execute the "LDCA R4" * 112 * (R4 points to the console area of the interrupted routine). * 113 * You are then back at the instruction that caused the trap and * 114 * may take whatever actions are required to repair the system. * 115 * * 116 ********************************************************************************** 117 118 * \ / 02404 00130000 119 HALT HALTS0000 page fault with no user session running 120 * --- 02405 01130000 4 REG 121 LDCA R4 for system debuggers, P.T. Barnum was right! 122 * --- 123 00002406 124 PFHVPSA LABEL 02406 6001F00E 0 125 LD R0 UMEMPSA do the mapped in virtual tables 02407 64000413 0 126 CPR R0 CMAPPSA ... match the current process? 02408 FE02240A 127 JEQ PFMAPOK jump if we've got the right guy mapped in 128 * \ / 129 130 ********************************************************************************** 131 * * 132 * The virtual free storage we have mapped in is not for * 133 * the guy who page faulted. All I can say is to back track * 134 * through the subroutine calls in an attempt to find the mix * 135 * up. * 136 * * 137 ********************************************************************************** 138 139 * \ / 02409 00130008 140 HALT HALTS0008 wrong memory lists mapped in 141 * --- 142 0000240A 143 PFMAPOK LABEL 144 * get stack associated with the new CA 145 SETSP 0240A 81538000 6 REG 145 STCAR SP 0240B 6197880D 6 6 BASE 145 LD SP SP,CASTACKPTR 0240C 61979020 6 6 REG 145 LD SP SP+(2 POWER STAKLOG) 0240D 61D2C000 7 3 REG 146 LD R7 R3 copy page number where violation occurred 0240E F6BE2419 2 147 JBT R2/BIT 31 PFEXCLUDED excluded memory, different treatment 148 * \ / 149 150 ********************************************************************************** 151 * * 152 * PROTECT VIOLATION * 153 * This code is entered when a page already exists, but is * 154 * read only. The normal treatment of this condition is to give * 155 * the user a protect violation. However, if the VPCNTLOCB bit * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 365 (PFPROC) F 22 Page Fault Processor - PFPROC routine 156 * is set, we give the user a copy of the page to dabble with. * 157 * * 158 ********************************************************************************** 159 160 * R2=REASON, R3=fault page number, R4 => old CA, SP, R7=VPN 161 162 * \ / 0240F 65C40085 7 IMM 163 CPR R7 HIUSERPAGE above highest in user VM list? 02410 FE0A2412 164 JLE USERVI jump if in user memory 165 * \ / 166 167 ********************************************************************************** 168 * * 169 * A store reference has been made to a monitor page. * 170 * This is definitely a no-no. This probably means that some * 171 * free storage points off into the night (monitor). If the * 172 * problem can be repaired (lists fixed or whatever), the * 173 * system may be restarted by doing a LDCA R4. R4 points to * 174 * the console area of the program that attempted the store. * 175 * Good luck. * 176 * * 177 ********************************************************************************** 178 179 * \ / 02411 00130001 180 HALT HALTS0001 monitor memory protect violation 181 * --- 182 00002412 183 USERVI LABEL 02412 6013C000 0 7 REG 184 LD R0 R7 copy the virtual page number 02413 60400412 1 185 LD R1 CPPSA and the PSA pointer 02414 DC40265F 186 CALLNP FINDVP look for the virtual page element 02415 00130002 187 HALT HALTS0002 VPAGE element not found 188 * (this was a store reference to a RO page. 189 * It MUST already exist!) 190 191 * R3=fault page number, R4 => old CA, VPP=>VPAGE, SP, R7=VPN 192 02416 5C095810 5 ZBM 193 CMZ VPP,VPCNTL/VPCNTLOCB is the user allowed a copy? 02417 FE0224BD 194 JEQ PROTECTED jump if not, protect violation 02418 FE0E246A 195 JMP OWNCOPY else it's an own-copy page 196 * --- 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 366 (PFPROC) F 22 Page Fault Processor - PFPROC routine 198 199 ********************************************************************************** 200 * * 201 * EXCLUDED PAGE * 202 * The user has referenced a page that is not mapped at all. * 203 * There are three possibilities: * 204 * 1) The page has never been referenced or specified. * 205 * We will supply a zeropage. * 206 * 2) The page has been specified as 'excluded'. We * 207 * give the user a protect violation. * 208 * 3) Otherwise, it is a normal page request. * 209 * * 210 ********************************************************************************** 211 00002419 212 PFEXCLUDED LABEL 213 214 * R2=REASON, R3=fault page number, R4 => old CA, SP, R7=VPN 215 02419 65C40085 7 IMM 216 CPR R7 HIUSERPAGE above highest in user VM list? 0241A FE0A2422 217 JLE PFUPAGE jump if a user page 218 * \ / 219 220 ********************************************************************************** 221 * * 222 * The page was a monitor page. Ensure that the * 223 * reference was not for a store, and search the MONVM list * 224 * for its VP element. * 225 * * 226 ********************************************************************************** 227 228 * \ / 0241B F2BC241D 2 229 JBF R2/BIT 30 MONREAD jump if read operation 230 231 ********************************************************************************** 232 * * 233 * A store reference has been make to a monitor page not * 234 * presently mapped. Look for bad monitor free storage. * 235 * If the problem can be fixed, the system may be restarted * 236 * with a LDCA R4. R4 points to the bad guys console area. * 237 * * 238 ********************************************************************************** 239 0241C 00130004 240 HALT HALTS0004 write into monitor memory 241 * --- 242 0000241D 243 MONREAD LABEL 0241D E4C0045E 3 244 ST R3 FNDVPFPN save this users page number 0241E 61401ECB 5 245 LD VPP MONVM get pointer to monitor VM list 0241F 3DD74004 7 5 CACH 246 LSRCH R7 VPP,VPVPN look for the proper page 02420 FE022426 247 JEQ PFUVIRT process a known monitor page 248 * \ / 249 250 ********************************************************************************** 251 * * 252 * A reference has been made to a monitor page that does * 253 * not exist. The most likely cause is a zero base register * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 367 (PFPROC) F 22 Page Fault Processor - PFPROC routine 254 * (i.e. screwed up list pointers or, even worse, mangled free * 255 * storage). If the problem can be fixed (lists repaired or * 256 * whatever) the process may be restarted by a LDCA R4. R4 * 257 * points to the console area of he who tried the reference. * 258 * Good luck. * 259 * * 260 ********************************************************************************** 261 262 * \ / 02421 00130005 263 HALT HALTS0005 stop for unknown monitor page 264 * --- 265 266 ********************************************************************************** 267 * * 268 * USER PAGE * 269 * The page is a user page. Look for it in his VMLIST. * 270 * If not present, supply a zeropage. * 271 * * 272 ********************************************************************************** 273 00002422 274 PFUPAGE LABEL 02422 6013C000 0 7 REG 275 LD R0 R7 copy the virtual page number 02423 60400412 1 276 LD R1 CPPSA and the PSA pointer 02424 DC40265F 277 CALLNP FINDVP find the VP element 02425 FE0E242C 278 JMP PFMAKENEW jump if not mapped 279 * \ / 280 281 ********************************************************************************** 282 * * 283 * The VP element was found. We examine it and decode the * 284 * VPCNTL field which indicates one of the following items.. * 285 * 1) A normal page. The MS address is present in the * 286 * VP element and we use that. * 287 * 2) A zero page. We call the ADT manager to get us * 288 * an available page of mass storage. * 289 * 3) A protected page. We give back the error to the user. * 290 * 4) A no-read page. If we can find the page resident, * 291 * we give it to the requesting process. If it is no * 292 * longer resident, we treat this request as a zero * 293 * page request. * 294 * After that decode, if the requested page was not found * 295 * resident, we call the MS driver to make the indicated page * 296 * available. In the case of zero page, we still call the MS * 297 * driver, since it must also manage the acquisition of * 298 * available resident pages of memory. * 299 * After the call to the MS driver, we suspend this * 300 * process in the MSWAIT scheduler queue. * 301 * * 302 ********************************************************************************** 303 304 * \ / 00002426 305 PFUVIRT LABEL the virtual page is known 306 307 * R4 => old CA, VPP=VPAGE, SP, R7=VPN 308 02426 60095420 0 5 ZBM 309 LD R0 VPP,VPCNTL/VPCNTLSRF get zeropage, excluded, no read field 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 368 (PFPROC) F 22 Page Fault Processor - PFPROC routine 02427 5CA02428 0 310 LDPC VPUVITAB(R0) 311 * --- 312 00002428 313 VPUVITAB LABEL 02428 000024C1 314 ADR NORMALPAGE 02429 0000242E 315 ADR ZEROPAGE 0242A 000024BD 316 ADR PROTECTED 0242B 000024CF 317 ADR NOREADPAGE 318 319 ********************************************************************************** 320 * * 321 * The corresponding virtual page is unknown to this * 322 * user. We will make a VM list entry for a zeropage and put * 323 * a request for a zeropage into the MSQ. * 324 * * 325 ********************************************************************************** 326 327 * SP, R7=VPN 328 0000242C 329 PFMAKENEW LABEL 0242C F3F0242E 7 330 JBF R7/MONBIT ZEROPAGE jump if not a user window ref 331 * \ / 332 333 ********************************************************************************** 334 * * 335 * The page referenced by the process is in the range * 336 * from 80 to HIUSERPAGE. Of these pages, page faults are only * 337 * allowed on the windows, which must be mapped prior to any * 338 * reference. * 339 * If the problem can be fixed, the process may be restarted * 340 * with a LDCA R4. * 341 * R4 => CA of the offending process * 342 * * 343 ********************************************************************************** 344 345 * \ / 0242D 00130007 346 HALT HALTS0007 reference to an unmapped window, die 347 * --- 348 349 END PFPROC routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 369 (PFPROC) F 22 Page Fault Processor - ZEROPAGE Routine 352 353 ********************************************************************************** 354 * * 355 * Routine to handle zero-page requests. We: * 356 * 1. Check for trouble-maker and shut this guy down if necessary. * 357 * 2. Create a VPP if we don't already have one. * 358 * 3. Allocate a disk block for the new page. * 359 * 4. Shut down the user and ask the disk driver to supply * 360 * the page of zeros. * 361 * * 362 * R5 => VPP, or zero if none * 363 * FNDVPFPN = original page number * 364 * FNDVPPN = page number after equivalencing * 365 * FNDVPLPSA = ptr to PSA owning page after equivalencing * 366 * FNDVPVMR = ptr to root of VM list after equivalencing * 367 * JMP ZEROPAGE * 368 * * 369 * Exits to DISPATCH. * 370 * * 371 * Stack required = 15 * 372 * 0 + max ( ADDSWAP (1), DROPCA (3), FCGETMEM (0), * 373 * GETFREEBLK (15), GRABCA (4), LOCKWAIT (0), * 374 * MSREADREQ (1), MSSHUTDOWN (14), TESTTRUBL (13), * 375 * UERRSET (1) ) * 376 * * 377 ********************************************************************************** 378 379 BLOCK ZEROPAGE routine 380 ENTRY ZEROPAGE 381 0000242E 382 ZEROPAGE LABEL 0242E DC402BF3 383 CALLNP TESTTRUBL check for this user a trouble maker 0242F FB722442 5 384 JNZA VPP HAVEVPP jump if we already have a VP element 385 02430 DC002F0A 386 CALL VGETMEM get a piece of storage 02431 40440002 IMM 387 PARVL VPLOG indicate its length 388 02432 61520000 5 0 REG 389 LD VPP R0 make the index point at the new block 02433 EE174800 5 BASE 390 STZ2 VPP,0 clear the element 02434 EE174802 5 BASE 391 STZ2 VPP,2 02435 6000045F 0 392 LD R0 FNDVPPN load the virtual page number 02436 E4174004 0 5 CACH 393 ST R0 VPP,VPVPN set the virtual page number 02437 60040008 0 IMM 394 LD R0 VPZEROPG get the value for zero page request 02438 E4094E80 0 5 ZBM 395 ST R0 VPP,VPCNTL set control field to indicate zero page 02439 6000045D 0 396 LD R0 FNDVPLPSA get the PSA containing the VPP 0243A 60081F13 0 0 ZBM 397 LD R0 R0,PSUSERLIMP get the user limit block 0243B 60080081 0 0 ZBM 398 LD R0 R0,ULDRIVE get the volume number 0243C E4094083 0 5 ZBM 399 ST R0 VPP,VPDRIVE indicate where the page is 0243D 60043F8B 0 IMM 400 LD R0 FBITSYS*VPFBINEWB+FBITFREE*VPFBIOLDB 0243E E40942E2 0 5 ZBM 401 ST R0 VPP,VPFBITYPE indicate swapping memory 0243F 60100460 0 @ 402 LD R0 @FNDVPVMR get pointer to VM list 02440 E4095F10 0 5 ZBM 403 ST R0 VPP,VPLINK set forward link 02441 E5500460 5 @ 404 ST VPP @FNDVPVMR place new entry at list head 00002442 405 HAVEVPP LABEL 406 * \ / 407 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 370 (PFPROC) F 22 Page Fault Processor - ZEROPAGE Routine 02442 60095072 0 5 ZBM 408 LD R0 VPP,VPFBITYPE/VPFBINEWB 02443 6404000B 0 IMM 409 CPR R0 FBITSYS is this to be a swapping page? 02444 FE0C2447 410 JNE NOTSWAP jump if not 02445 DC40257E 411 CALLNP ADDSWAP check for excessive disk space used 02446 FE0E2467 412 JMP LIMEXCEED give error if too much space in use 413 * \ / 00002447 414 NOTSWAP LABEL 415 416 ********************************************************************************** 417 * * 418 * Request a free MS block ( from the ADT ) * 419 * * 420 ********************************************************************************** 421 422 * \ / 02447 DC00284A 423 CALL GRABCA get a new console area 02448 40000406 424 PARL IVTPAGE for the IVT 425 02449 61C0045E 7 426 LD R7 FNDVPFPN get the page number that we were looking for 0244A DC003654 427 CALL GETFREEBLK call for a MS block 0244B 41495072 5 ZBM 428 PARV VPP,VPFBINEW pass the type it will become 0244C 40494083 5 ZBM 429 PARVL VPP,VPDRIVE specify volume to be used 0244D E5C0045E 7 430 ST R7 FNDVPFPN save original page number 0244E FE042461 431 JGT NODISKSPC out of storage 0244F E4174803 0 5 BASE 432 ST R0 VPP,VPBLOCK save the newly acquired block 433 * \ / 02450 DC40285A 434 CALLNP DROPCA remove extra console area 435 * \ / 02451 EC095420 5 ZBM 436 STZ VPP,VPCNTL/VPCNTLSRF clear the zero page request 02452 60974803 2 5 BASE 437 LD R2 VPP,VPBLOCK get the new MS address 02453 61C94E30 7 5 ZBM 438 LD R7 VPP,VPCNTL/VPMAIFLD save maintenance field 02454 DC402533 439 CALLNP MSSHUTDOWN shut down user to wait for page 440 * \ / 441 442 ********************************************************************************** 443 * * 444 * The user may be inserted into the MSWAIT queue with * 445 * the MSQIN having been unlocked because no other CPU may * 446 * have a existing request for this block. * 447 * * 448 ********************************************************************************** 449 450 * \ / 451 PLOCK MSQINLOCK call to lock the mass storage input queue 02455 0CC00000 451 IOFF 02456 D1C01F16 451 SETT MSQINLOCK 02457 FE0C2459 451 JNE MA(2+DISPW MA 0) 02458 DC40308B 451 CALLNP LOCKWAIT 02459 61128000 4 2 REG 452 LD R4 R2 and the 'actual' ms address (same) 0245A 61440003 5 IMM 453 LD R5 1*MSQZPAGE+1*MSQSNEWAD request type 0245B E5CB7430 7 5 CBM 454 ST R7 R5/MSQMAIFLD and combine the two 0245C DC003936 455 CALL MSREADREQ call for a MS transfer 0245D 40534000 5 REG 456 PARVL R5 indicate nature of request 457 PUNLOCK MSQINLOCK call to release the mass storage input queue 0245E EC001F16 457 STZ MSQINLOCK 0245F 0C800000 457 ION 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 371 (PFPROC) F 22 Page Fault Processor - ZEROPAGE Routine 02460 FE0E28B7 458 JMP DISPATCH look for a new user 459 * --- 460 461 ********************************************************************************** 462 * * 463 * Here, we ran out of disk space. The poor user will * 464 * get an error. * 465 * * 466 ********************************************************************************** 467 00002461 468 NODISKSPC LABEL 02461 DC402596 469 CALLNP DELSWAP restore space used totals 02462 DC40285A 470 CALLNP DROPCA remove the extra console area 02463 60840872 2 IMM 471 LD R2 UINTVMFIDS+VERYBAD error code 00002464 472 PUTERROR LABEL 02464 60C0045E 3 473 LD R3 FNDVPFPN block number 02465 DC403589 474 CALLNP UERRSET place the error 02466 FE0E28B7 475 JMP DISPATCH and all done 476 * --- 477 00002467 478 LIMEXCEED LABEL 02467 60920000 2 0 REG 479 LD R2 R0 put error code into R2 02468 7C840800 2 IMM 480 IOR R2 VERYBAD error must not be put off 02469 FE0E2464 481 JMP PUTERROR share code 482 * --- 483 484 END ZEROPAGE routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 372 (PFPROC) F 22 Page Fault Processor - OWNCOPY Routine 487 488 ********************************************************************************** 489 * * 490 * Routine to give a user his own copy of a page that he * 491 * already has read/only. * 492 * * 493 * R5 => VPP for page (after equivalencing) * 494 * FNDVPFPN = page number of original fault * 495 * FNDVPLPSA = ptr to PSA of process owning page * 496 * JMP OWNCOPY * 497 * * 498 * Exit to DISPATCH. * 499 * * 500 * Actions: * 501 * 1. Check for trouble-makers. * 502 * 2. Get new disk block number to give as own copy. * 503 * 3. Remove PAL for read-only page, if any. * 504 * 4. Remove PAL from original owner of page, if any. * 505 * 5. Shut down the user and tell MSPROC to perform an address switch. * 506 * * 507 * Stack required = 19 * 508 * 4 + max ( ADDSWAP (1), DISCARDPAL (4), DMOTINDPAL (2), * 509 * DROPCA (3), GETFREEBLK (15), GRABCA (4), * 510 * LOCKWAIT (0), MSREADREQ (1), MSSHUTDOWN (14), * 511 * TESTTRUBL (13), UERRSET (1), UNLOPAL (0) ) * 512 * * 513 ********************************************************************************** 514 515 BLOCK OWNCOPY routine 516 ENTRY OWNCOPY 517 518 BEGFRAME2 00178800 6 BASE 519 SAVEAREA BSS 2 save area for FNDVPFPN and FNDVPLPSA 00178802 6 BASE 520 SAVEUPC BSS 1 save area for UPC pointer 00178803 6 BASE 521 SAVEOBLK BSS 1 save area for old block number 522 ENDFRAME 523 0000246A 524 OWNCOPY LABEL 0246A EC1F8004 6 STAK 525 STZ PUSH allocate a stack frame 526 527 ********************************************************************************** 528 * * 529 * We must check for system overload before we have * 530 * altered the lists controlling memory. If the user is a * 531 * troublemaker and is put in jail, we must be able to restart * 532 * him and have him reappear at this point in the page fault * 533 * processor with exactly the same situation reflected by his * 534 * PSA and lists. This way, we need not store all sorts of * 535 * bizarre information to ensure a correct restart. * 536 * Note that this call to TESTTRUBL may take pages away * 537 * from us (either VASP or WSX), including possibly the page * 538 * that we faulted on. * 539 * * 540 ********************************************************************************** 541 0246B DC402BF3 542 CALLNP TESTTRUBL check for system overload 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 373 (PFPROC) F 22 Page Fault Processor - OWNCOPY Routine 0246C 60174803 0 5 BASE 543 LD R0 VPP,VPBLOCK find corresponding MS address 0246D E4178803 0 6 BASE 544 ST R0 SP,SAVEOBLK save for later use 545 * \ / 546 547 ********************************************************************************** 548 * * 549 * Request a free MS block ( from the ADT ) We fetch a * 550 * free console area and swap it with the current one so that * 551 * we can get another page fault. * 552 * * 553 ********************************************************************************** 554 0246E DC40257E 555 CALLNP ADDSWAP do accounting for the MS space 0246F FE0E24BA 556 JMP LIMEXCEED return for limit error 557 * \ / 02470 DC00284A 558 CALL GRABCA 02471 40000406 559 PARL IVTPAGE 560 * \ / 02472 6000045E 0 561 LD R0 FNDVPFPN get the page number that we were looking for 02473 6040045D 1 562 LD R1 FNDVPLPSA and the PSA where we found it 02474 E6178800 016 BASE 563 ST2 R0 SP,SAVEAREA save info required to find page owner 02475 60000461 0 564 LD R0 FNDVPUPC get pointer to owners UPC 02476 E4178802 0 6 BASE 565 ST R0 SP,SAVEUPC save this also 02477 60085F13 0 1 ZBM 566 LD R0 R1,PSUSERLIMP get the users ULB 02478 60480081 1 0 ZBM 567 LD R1 R0,ULDRIVE get this users volume for swapping pages 02479 DC003654 568 CALL GETFREEBLK call for a MS block 0247A 4144000B IMM 569 PARV FBITSYS indicate the new block type 0247B 40524000 1 REG 570 PARVL R1 specify volume to be used 0247C 62978800 236 BASE 571 LD2 R2 SP,SAVEAREA retrieve FINDVP info from the stack 0247D E480045E 2 572 ST R2 FNDVPFPN save back the page number 0247E E4C0045D 3 573 ST R3 FNDVPLPSA and PSA pointer 0247F FE0424B5 574 JGT NODISKSPC out of storage 02480 E4174803 0 5 BASE 575 ST R0 VPP,VPBLOCK save the newly acquired block 02481 60978802 2 6 BASE 576 LD R2 SP,SAVEUPC recover pointer to owners UPC 02482 E4800461 2 577 ST R2 FNDVPUPC save back in correct location 02483 EC095F12 5 ZBM 578 STZ VPP,VPERAD user default error address for swapping pages 02484 6004000B 0 IMM 579 LD R0 FBITSYS load code that sez system use 02485 E0095072 0 5 ZBM 580 EXCH R0 VPP,VPFBINEW change type and retrieve old type 02486 E4094272 0 5 ZBM 581 ST R0 VPP,VPFBIOLD save expected old type for error check 02487 EC095F11 5 ZBM 582 STZ VPP,VPFCB indicate not part of lun 02488 6047FFFA 1 IMM 583 LD R1 NOT (VPCNTLRO+VPCNTLOC) read only and own copy bits 02489 F8494E80 1 5 ZBM 584 ANDM R1 VPP,VPCNTL remove bits from VPAGE element 585 0248A DC40285A 586 CALLNP DROPCA give back the console area in use 587 * \ / 588 589 ********************************************************************************** 590 * * 591 * We will take away the access that this user currently * 592 * has and put in a mass storage request for the desired page * 593 * with the right kind of access. * 594 * Note that if the page should happen to be locked, the * 595 * new one will be also, and the old PAL will be unlocked by * 596 * virtue of being destroyed. * 597 * Find the PAL, unload the page file, and discard the * 598 * PAL. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 374 (PFPROC) F 22 Page Fault Processor - OWNCOPY Routine 599 * * 600 ********************************************************************************** 601 0248B 60C00414 3 602 LD R3 CPCUPC get the current pointer 0248C 6000045E 0 603 LD R0 FNDVPFPN get the virtual page number 0248D 6056C80F 1 3 BASE 604 LD R1 R3,UPCVASP R1 => first element 0248E 3896C80F 2 3 BASE 605 LEA R2 R3,UPCVASP R2 => root of the list 0248F 48164000 0 1 CACH 606 RLSRCH R0 R1,PAVPN find the element for this 02490 FE0C24A5 607 JNE PFWTTX not found means it has aged out 02491 60085F10 0 1 ZBM 608 LD R0 R1,PALINK get pointer to what's after found 02492 E4089F10 0 2 ZBM 609 ST R0 R2,PALINK remove this element 02493 61124000 4 1 REG 610 LD PAL R1 PAL => found element 02494 DC402623 611 CALLNP UNLOPAL call to unload the page file location 02495 DC402E15 612 CALLNP DISCARDPAL get rid of the PAL 02496 60C00412 3 613 LD R3 CPPSA get the current PSA pointer 02497 D048C0F2 3 ZBM 614 DEC R3,PSWSSIZE indicate working set just shrunk 615 * \ / 616 617 ********************************************************************************** 618 * * 619 * See if this page is an indirect VP reference and, if * 620 * so, we must remove the old block from the working set of * 621 * the real pages owner over/under process. * 622 * * 623 ********************************************************************************** 624 625 * R3 => PSA, VPP => VPAGE, SP 626 627 * \ / 02498 60C00461 3 628 LD R3 FNDVPUPC copy the owners UPC pointer 02499 FAC224A6 3 629 JEQZ R3 NOTINDIRCT jump if not indirect page 0249A 60174004 0 5 CACH 630 LD R0 VPP,VPVPN get the virtual page number 0249B 6056C80F 1 3 BASE 631 LD R1 R3,UPCVASP R1 => first element 0249C 3896C80F 2 3 BASE 632 LEA R2 R3,UPCVASP R2 => root of the list 0249D 48164000 0 1 CACH 633 RLSRCH R0 R1,PAVPN find the element for this 0249E FE0C24A5 634 JNE PFWTTX not found means it has aged out 0249F 60085F10 0 1 ZBM 635 LD R0 R1,PALINK get pointer to what's after found 024A0 E4089F10 0 2 ZBM 636 ST R0 R2,PALINK remove this element 024A1 61124000 4 1 REG 637 LD PAL R1 PAL => found element 024A2 DC402E15 638 CALLNP DISCARDPAL remove it from the working set 024A3 60C00412 3 639 LD R3 CPPSA get the current PSA pointer 024A4 D048C0F2 3 ZBM 640 DEC R3,PSWSSIZE indicate working set just shrunk 000024A5 641 PFWTTX LABEL 024A5 DC403165 642 CALLNP DMOTINDPAL move all PAL's for indirect pages to WSX 000024A6 643 NOTINDIRCT LABEL 644 * \ / 645 646 * VPP=>VPAGE, SP 647 648 * \ / 649 ********************************************************************************** 650 * * 651 * Note that we have already ensured that this user is * 652 * not a troublemaker. We must not call TESTTRUBL here, since * 653 * it would not be possible to restart the user correctly if * 654 * he were put in jail. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 375 (PFPROC) F 22 Page Fault Processor - OWNCOPY Routine 655 * The user may be shut down with MSQIN unlocked. The * 656 * mass storage queuer can not find a duplicate because a free * 657 * block is being requested. * 658 * * 659 ********************************************************************************** 660 661 * \ / 024A6 60974803 2 5 BASE 662 LD R2 VPP,VPBLOCK fetch new MS address 024A7 61C94E30 7 5 ZBM 663 LD R7 VPP,VPCNTL/VPMAIFLD maintenance field 024A8 DC402533 664 CALLNP MSSHUTDOWN shut down user to wait for page 665 666 * SP, R7=maintenance bits 667 668 PLOCK MSQINLOCK call to lock the mass storage input queue 024A9 0CC00000 668 IOFF 024AA D1C01F16 668 SETT MSQINLOCK 024AB FE0C24AD 668 JNE MA(2+DISPW MA 0) 024AC DC40308B 668 CALLNP LOCKWAIT 024AD 61178803 4 6 BASE 669 LD R4 SP,SAVEOBLK copy parameter (actual (or old) MS address) 024AE 61440001 5 IMM 670 LD R5 1*MSQSNEWAD request type 024AF E5CB7430 7 5 CBM 671 ST R7 R5/MSQMAIFLD and combine the two 024B0 DC003936 672 CALL MSREADREQ call for a MS transfer 024B1 40534000 5 REG 673 PARVL R5 indicate nature of request 674 PUNLOCK MSQINLOCK call to release the mass storage input queue 024B2 EC001F16 674 STZ MSQINLOCK 024B3 0C800000 674 ION 024B4 FE0E28B7 675 JMP DISPATCH look for someone to run 676 * --- 677 000024B5 678 NODISKSPC LABEL 024B5 DC40285A 679 CALLNP DROPCA remove the extra console area 024B6 60840872 2 IMM 680 LD R2 UINTVMFIDS+VERYBAD error code: insufficient disk space 000024B7 681 PUTERROR LABEL 024B7 60C0045E 3 682 LD R3 FNDVPFPN error parm: page number 024B8 DC403589 683 CALLNP UERRSET set the error 024B9 FE0E28B7 684 JMP DISPATCH and all done 685 * --- 000024BA 686 LIMEXCEED LABEL 024BA 60920000 2 0 REG 687 LD R2 R0 put error code into R2 024BB 7C840800 2 IMM 688 IOR R2 VERYBAD error must not be put off 024BC FE0E24B7 689 JMP PUTERROR share code 690 * --- 691 692 END OWNCOPY routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 376 (PFPROC) F 22 Page Fault Processor - PROTECTED Routine 695 696 ********************************************************************************** 697 * * 698 * Routine to handle access to a user excluded page. * 699 * It's easy: We just give the poor slob an error. * 700 * * 701 * FNDVPFPN = page number of original fault * 702 * JMP PROTECTED * 703 * * 704 * Exits to DISPATCH. * 705 * Stack required = 1. * 706 * 0 + max ( UERRSET (1) ) * 707 * * 708 ********************************************************************************** 709 710 BLOCK PROTECTED routine 711 ENTRY PROTECTED 712 000024BD 713 PROTECTED LABEL 024BD 60840874 2 IMM 714 LD R2 UINTMPV+VERYBAD memory protect violation 024BE 60C0045E 3 715 LD R3 FNDVPFPN param is the page number 024BF DC403589 716 CALLNP UERRSET give the guy the error 024C0 FE0E28B7 717 JMP DISPATCH return to user to process error 718 * --- 719 720 END PROTECTED routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 377 (PFPROC) F 22 Page Fault Processor - NORMALPAGE Routine 723 724 ********************************************************************************** 725 * * 726 * Routine to handle a normal page request (i.e., not * 727 * zero page or own copy). We proceed as follows: * 728 * * 729 * 1. Try to find the page resident. * 730 * 2. Otherwise, shut the user down and tell MSPROC that * 731 * we need the page. * 732 * * 733 * R5 => VPP element (after equivalencing) * 734 * FNDVPFPN = original page number * 735 * JMP NORMALPAGE * 736 * * 737 * Exits to DISPATCH. * 738 * * 739 * Stack required = 15. * 740 * 0 + max ( FINDRESPAG (15), MSREADREQ (1), MSSHUTDOWN (14), * 741 * TESTTRUBL (13) ) * 742 * * 743 ********************************************************************************** 744 745 BLOCK NORMALPAGE routine 746 ENTRY NORMALPAGE 747 000024C1 748 NORMALPAGE LABEL 024C1 DC402BF3 749 CALLNP TESTTRUBL check for any troublemakers 024C2 DC4024ED 750 CALLNP FINDRESPAG check if the page is still resident 024C3 FE0E28B7 751 JMP DISPATCH yes, we found it 752 * \ / 753 754 ********************************************************************************** 755 * * 756 * The desired page is unavailable. We put in a request * 757 * for this page and move this user into the MSWAIT queue. * 758 * * 759 ********************************************************************************** 760 761 * VPP =>VPAGE, SP 762 * lists locked: MSQIN 763 024C4 60974803 2 5 BASE 764 LD R2 VPP,VPBLOCK fetch the old MS address 024C5 61C94E30 7 5 ZBM 765 LD R7 VPP,VPCNTL/VPMAIFLD maintenance field 024C6 DC402533 766 CALLNP MSSHUTDOWN shut down user to wait for page 024C7 61128000 4 2 REG 767 LD R4 R2 re-fetch MS address 024C8 61440000 5 IMM 768 LD R5 0 request type, normal 024C9 E5CB7430 7 5 CBM 769 ST R7 R5/MSQMAIFLD and combine the two 024CA DC003936 770 CALL MSREADREQ call for a MS transfer 024CB 40534000 5 REG 771 PARVL R5 indicate nature of request 772 PUNLOCK MSQINLOCK release MS input queue 024CC EC001F16 772 STZ MSQINLOCK 024CD 0C800000 772 ION 024CE FE0E28B7 773 JMP DISPATCH go to pick up a new user 774 * --- 775 776 END NORMALPAGE routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 378 (PFPROC) F 22 Page Fault Processor - NOREADPAGE routine 779 780 ********************************************************************************** 781 * * 782 * Routine to handle a no read page request (i.e., if * 783 * resident, give to user, otherwise, supply zeropage). We * 784 * proceed as follows: * 785 * * 786 * 1. Try to find the page resident. * 787 * 2. Otherwise, shut the user down and tell MSPROC that * 788 * we need a zero page. * 789 * * 790 * R5 => VPP element (after equivalencing) * 791 * FNDVPFPN = original page number * 792 * JMP NOREADPAGE * 793 * * 794 * Exits to DISPATCH. * 795 * * 796 * Stack required = 15. * 797 * 0 + max ( FINDRESPAGE (15), MSREADREQ (1), MSSHUTDOWN (14), * 798 * TESTTRUBL (13) ) * 799 * * 800 ********************************************************************************** 801 802 BLOCK NOREADPAGE 803 ENTRY NOREADPAGE 804 000024CF 805 NOREADPAGE LABEL 024CF DC402BF3 806 CALLNP TESTTRUBL check for troublemakers 024D0 EC095420 5 ZBM 807 STZ VPP,VPCNTL/VPCNTLSRF clear the request field 024D1 DC4024ED 808 CALLNP FINDRESPAG check if page is still resident 024D2 FE0E28B7 809 JMP DISPATCH yes, it was resident 810 * \ / 811 812 ********************************************************************************** 813 * * 814 * The desired page seems to be unavailable. We put in a * 815 * request for this page and move this user into the MSWAIT * 816 * queue. * 817 * * 818 ********************************************************************************** 819 820 * VPP =>VPAGE, SP 821 * lists locked: MSQIN 822 024D3 60974803 2 5 BASE 823 LD R2 VPP,VPBLOCK get the new MS address 024D4 61C94E30 7 5 ZBM 824 LD R7 VPP,VPCNTL/VPMAIFLD maintenance field 024D5 DC402533 825 CALLNP MSSHUTDOWN shut down user to wait for page 024D6 61128000 4 2 REG 826 LD R4 R2 and the 'actual' ms address (same) 024D7 61440003 5 IMM 827 LD R5 1*MSQZPAGE+1*MSQSNEWAD indicate nature of request 024D8 E5CB7430 7 5 CBM 828 ST R7 R5/MSQMAIFLD and combine the two 024D9 DC003936 829 CALL MSREADREQ call for a MS transfer 024DA 40534000 5 REG 830 PARVL R5 indicate nature of request 831 PUNLOCK MSQINLOCK call to release the MS input queue 024DB EC001F16 831 STZ MSQINLOCK 024DC 0C800000 831 ION 024DD FE0E28B7 832 JMP DISPATCH look for a new user 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 379 (PFPROC) F 22 Page Fault Processor - NOREADPAGE routine 833 * --- 834 835 END NOREADPAGE routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 380 (PFPROC) F 22 Page Fault Processor - SRCHWSX routine 838 839 ********************************************************************************** 840 * * 841 * This routine only searches the working set extension * 842 * list to see if the page is resident. If so we reuse the * 843 * PAL, otherwise we must look elsewhere for the page, in the * 844 * hopes that the page may still be resident. Call: * 845 * * 846 * PPL * 847 * R5 => VPP * 848 * FNDVPFPN = original page # * 849 * FNDVPUPC = indirect VP UPC, if any * 850 * CALLNP SRCHWSX * 851 * JMP * 852 * * 853 * * 854 * Eats R0:R3. PAL ptr returned in R3. * 855 * Stack required = 9 * 856 * 1 + max ( REUSEPAL (8) ) * 857 * * 858 ********************************************************************************** 859 860 BLOCK SRCHWSX routine 861 ENTRY SRCHWSX 862 863 BEGFRAME 864 ENDFRAME 865 024DE DD5F8001 6 STAK 866 SRCHWSX ENTRNP PUSH 024DF 60800414 2 867 LD R2 CPCUPC get the current UPC pointer 024E0 38D68810 3 2 BASE 868 LEA R3 R2,UPCWSX point to the root of WSX list 024E1 60968810 2 2 BASE 869 LD R2 R2,UPCWSX point to first element of WSX 024E2 49168803 4 2 BASE 870 RLSRCH PPL R2,PAPPLPTR look for a matching PAL 024E3 FE0C24EC 871 JNE PFNOTWSX jump if not found in WSX 872 * \ / 873 874 * The page is in the working-set extension list. Use it. 875 876 * \ / 024E4 60089F10 0 2 ZBM 877 LD R0 R2,PALINK get pointer to stuff after 024E5 E408DF10 0 3 ZBM 878 ST R0 R3,PALINK remove found element from list 024E6 60D28000 3 2 REG 879 LD R3 R2 R3 => unlinked PAL 880 * \ / 881 882 * R3 => PAL, PPL, VPP, SP 883 884 * \ / 024E7 DC002643 885 CALL REUSEPAL set up to reuse this PAL 024E8 41400461 886 PARV FNDVPUPC pass indirect VP UPC 024E9 4140045E 887 PARV FNDVPFPN actual page number 024EA 40400412 888 PARVL CPPSA pointer to PSA 889 * \ / 890 000024EB 891 TAKEOFF LABEL 024EB 5D1F8001 6 STAK 892 LEAVE POP and go run this guy 893 * --- 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 381 (PFPROC) F 22 Page Fault Processor - SRCHWSX routine 894 000024EC 895 PFNOTWSX LABEL 024EC FBE024EB 7 896 IRJ R7 TAKEOFF the page is not in the WSX list 897 * --- 898 899 END SRCHWSX routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 382 (PFPROC) F 22 Page Fault Processor - FINDRESPAG routine 902 903 ********************************************************************************** 904 * * 905 * This routine will look to see if the block is resident * 906 * at this time. We will lock all lists where the page might * 907 * be in order to prevent another processor from moving a page * 908 * around our search. These locks always take place in the * 909 * same order to prevent deadlock. This order is: * 910 * * 911 * MSQIN * 912 * any SQ * 913 * PPAGE * 914 * PPIDLE * 915 * MSQOUT * 916 * * 917 * If the page is found we will make a PAL for the page * 918 * and allow the user to continue on his way. However if the * 919 * page is not found, or is being force written, then we must * 920 * shut the user down and request the page from the disk * 921 * driver. (This subroutine should really call BLKREADIN). * 922 * Call: * 923 * R5 => VPP * 924 * CALLNP FINDRESPAG * 925 * JMP * 926 * * 927 * * 928 * Eats R0:R4. * 929 * Stack required = 15 * 930 * 1 + max ( LOCKWAIT (0), LOPFPAL (0), MAKEPAL (8), * 931 * MSSHUTDOWN (14), SRCHWSX (9) ) * 932 * * 933 ********************************************************************************** 934 935 BLOCK FINDRESPAG routine 936 ENTRY FINDRESPAG 937 938 BEGFRAME 939 ENDFRAME 940 941 024ED DD5F8001 6 STAK 942 FINDRESPAG ENTRNP PUSH 024EE 60D74803 3 5 BASE 943 LD R3 VPP,VPBLOCK retrieve the block number 024EF 608AF460 2 3 CBM 944 LD R2 R3/PPHASHFLD leave lower bits for hash code 945 946 * R2 = hash code, R3 = block number, VPP, SP 947 948 PLOCK MSQINLOCK call to lock the mass storage input queue 024F0 0CC00000 948 IOFF 024F1 D1C01F16 948 SETT MSQINLOCK 024F2 FE0C24F4 948 JNE MA(2+DISPW MA 0) 024F3 DC40308B 948 CALLNP LOCKWAIT 949 PLOCK PPAGELOCK(R2) call to lock the appropriate PPAGELIST head 024F4 0CC00000 949 IOFF 024F5 D1E41E21 2 949 SETT PPAGELOCK(R2) 024F6 FE0C24F8 949 JNE MA(2+DISPW MA 0) 024F7 DC40308B 949 CALLNP LOCKWAIT 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 383 (PFPROC) F 22 Page Fault Processor - FINDRESPAG routine 950 PLOCK PPIDLOCK call to lock the idle list 024F8 0CC00000 950 IOFF 024F9 D1C01DD9 950 SETT PPIDLOCK 024FA FE0C24FC 950 JNE MA(2+DISPW MA 0) 024FB DC40308B 950 CALLNP LOCKWAIT 024FC 61241E61 4 2 951 LD PPL PPAGELIST(R2) make pointer to first element 024FD 3CD70801 3 4 BASE 952 LSRCH R3 PPL,PPBLOCK look for the proper block 024FE FE0C250F 953 JNE PFNISHARD jump if not present in page list 954 PUNLOCK PPIDLOCK call to release the idle list 024FF EC001DD9 954 STZ PPIDLOCK 02500 0C800000 954 ION 955 * \ / 956 957 ********************************************************************************** 958 * * 959 * The desired page was found in the PPAGE list. Check * 960 * the PPL to see if this is a page being forcewritten. If it * 961 * is, we shut the user down to await completion of the force * 962 * write operation. This is done so that we may ensure that a * 963 * write is actually done before continuing a process. We * 964 * also check whether the physical page in memory is bad * 965 * (memory error). If so, we shut down the user until * 966 * recovery is complete. * 967 * * 968 ********************************************************************************** 969 970 * \ / 971 * R2 = hash code, R3 = block number, PPL, VPP, SP 972 * lists locked: MSQIN, PPAGE 973 02501 60090612 0 4 ZBM 974 LD R0 PPL,PPFWIP check the forcewrite flag 02502 7C090812 0 4 ZBM 975 IOR R0 PPL,PPMEMERR check the memory error flag 02503 FA02250A 0 976 JEQZ R0 PFNFW jump if no difficulty 977 PUNLOCK PPAGELOCK(R2) release the appropriate PPAGELIST head 02504 EC241E21 2 977 STZ PPAGELOCK(R2) 02505 0C800000 977 ION 02506 DC402533 978 CALLNP MSSHUTDOWN shut down this user 979 PUNLOCK MSQINLOCK release the mass storage input queue 02507 EC001F16 979 STZ MSQINLOCK 02508 0C800000 979 ION 02509 FE0E252C 980 JMP HAPPYEXIT go run a different user 981 * --- 982 0000250A 983 PFNFW LABEL 984 PUNLOCK MSQINLOCK call to release the mass storage input queue 0250A EC001F16 984 STZ MSQINLOCK 0250B 0C800000 984 ION 0250C DC4024DE 985 CALLNP SRCHWSX see if a PAL already exists 0250D FE0E2527 986 JMP FOUNDWSX jump if found 0250E FE0E2523 987 JMP HAVEPAGE otherwise, go build a PAL 988 * --- 989 990 ********************************************************************************** 991 * * 992 * The page was not in the page list. Check the list of * 993 * idle pages before we give up. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 384 (PFPROC) F 22 Page Fault Processor - FINDRESPAG routine 994 * * 995 ********************************************************************************** 996 997 * R2 = hash value, R3 = block number, VPP, SP 998 * lists locked: PPAGE, PPIDLE, MSQIN 999 0000250F 1000 PFNISHARD LABEL 0250F 608AF650 2 3 CBM 1001 LD R2 R3/IDLHASHFLD make index to proper list 02510 60241DDD 0 2 1002 LD R0 PPUSDIDLE(R2) get head element of idle list 02511 38641DDD 1 2 1003 LEA R1 PPUSDIDLE(R2) the root of the list 02512 48D60801 3 0 BASE 1004 RLSRCH R3 R0,PPBLOCK look for our block 02513 FE0C252D 1005 JNE PFNIDLE jump if not in idle list 1006 1007 * entry found in the idle page list 1008 1009 PUNLOCK MSQINLOCK call to release the mass storage input queue 02514 EC001F16 1009 STZ MSQINLOCK 02515 0C800000 1009 ION 02516 61081F10 4 0 ZBM 1010 LD PPL R0,PPLINK get pointer to what follows 02517 E5085F10 4 1 ZBM 1011 ST PPL R1,PPLINK remove this element from the queue 02518 FB32251A 4 1012 JNZA PPL PFIDJE check for removing end element from list 02519 E4641DFD 1 2 1013 ST R1 PPENDIDLE(R2) yes, we did, fix up the end pointer 1014 * \ / 1015 0000251A 1016 PFIDJE LABEL 0251A 61120000 4 0 REG 1017 LD PPL R0 PPL => found element 0251B D0401DDA 1018 DEC PPIDLCOUNT one less idle page 1019 PUNLOCK PPIDLOCK call to release the idle list 0251C EC001DD9 1019 STZ PPIDLOCK 0251D 0C800000 1019 ION 0251E 608AF460 2 3 CBM 1020 LD R2 R3/PPHASHFLD restore the proper index value 0251F 38641E61 1 2 1021 LEA R1 PPAGELIST(R2) => proper list head 02520 60085F10 0 1 ZBM 1022 LD R0 R1,PPLINK get forward pointer 02521 E4091F10 0 4 ZBM 1023 ST R0 PPL,PPLINK make this element point to list 02522 E5085F10 4 1 ZBM 1024 ST PPL R1,PPLINK set new forward pointer 1025 * \ / 1026 1027 * R3 = block number, PPL, VPP, SP 1028 * lists locked: PPAGE 1029 00002523 1030 HAVEPAGE LABEL 02523 DC002631 1031 CALL MAKEPAL make a PAL for the user 02524 41400461 1032 PARV FNDVPUPC pass indirect VP UPC 02525 4140045E 1033 PARV FNDVPFPN his page number 02526 40400412 1034 PARVL CPPSA his PSA pointer 00002527 1035 FOUNDWSX LABEL 02527 60893461 2 4 ZBM 1036 LD R2 PPL,PPBLOCK/PPHASHFLD recover the hash code 1037 PUNLOCK PPAGELOCK(R2) unlock the PPAGE list 02528 EC241E21 2 1037 STZ PPAGELOCK(R2) 02529 0C800000 1037 ION 0252A 6112C000 4 3 REG 1038 LD PAL R3 move PAL pointer to right register 0252B DC40262D 1039 CALLNP LOPFPAL load it into the page file 1040 * \ / 1041 0000252C 1042 HAPPYEXIT LABEL 0252C 5D1F8001 6 STAK 1043 LEAVE POP and go run this guy 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 385 (PFPROC) F 22 Page Fault Processor - FINDRESPAG routine 1044 * --- 1045 1046 * R3 = block number, VPP, SP 1047 * lists locked: PPAGE, PPIDLE, MSQIN 1048 0000252D 1049 PFNIDLE LABEL 0252D 608AF460 2 3 CBM 1050 LD R2 R3/PPHASHFLD restore the proper index 1051 PUNLOCK PPAGELOCK(R2) call to release the appropriate PPAGELIST head 0252E EC241E21 2 1051 STZ PPAGELOCK(R2) 0252F 0C800000 1051 ION 1052 PUNLOCK PPIDLOCK call to release the idle list 02530 EC001DD9 1052 STZ PPIDLOCK 02531 0C800000 1052 ION 02532 FBE0252C 7 1053 IRJ R7 HAPPYEXIT advance to skip return 1054 * --- 1055 1056 END FINDRESPAG routine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 386 (PFPROC) F 22 Page Fault Processor - MSSHUTDOWN routine 1059 1060 ********************************************************************************** 1061 * * 1062 * Routine to shut down a user into the MSWAIT queue. We * 1063 * will also add a little bit to his counter of CPU time used, * 1064 * so that people who do lots of disk requests and use no CPU * 1065 * time won't drive the system wild. (The CPU time used * 1066 * counter is used only for CPU scheduling.) * 1067 * * 1068 * R5 => VPP element * 1069 * FNDVPFPN = original page number * 1070 * CALLNP MSSHUTDOWN * 1071 * * 1072 * Eats R0:R1, R3:R4. * 1073 * Stack required = 14. * 1074 * 2 + max ( SHUTDOWN (12) ) * 1075 * * 1076 ********************************************************************************** 1077 1078 BLOCK MSSHUTDOWN subroutine 1079 ENTRY MSSHUTDOWN 1080 1081 BEGFRAME 00178801 6 BASE 1082 SAVER2 BSS 1 place to save Register 2 1083 ENDFRAME 1084 02533 DD5F8002 6 STAK 1085 MSSHUTDOWN ENTRNP PUSH 02534 E4978801 2 6 BASE 1086 ST R2 SP,SAVER2 into safe hiding 02535 60400412 1 1087 LD R1 CPPSA R1 -> PSA of user 02536 6000254D 0 1088 LD R0 TSMSEQUIV CPU time charged per disk xfer 02537 9808410A 0 1 ZBM 1089 ADDM R0 R1,PSSUMCPU add it in 1090 02538 60C41DAB 3 IMM 1091 LD R3 ADR SQMSWAIT R3 -> scheduler queue 02539 6040045E 1 1092 LD R1 FNDVPFPN R1 = parm2 (page number) 0253A DC002B58 1093 CALL SHUTDOWN shut him down 0253B 40574803 5 BASE 1094 PARVL VPP,VPBLOCK parm1 (disk block number) 0253C 60978801 2 6 BASE 1095 LD R2 SP,SAVER2 back to normal 0253D 5D1F8002 6 STAK 1096 LEAVE POP return to caller 1097 * --- 1098 1099 END MSSHUTDOWN subroutine 1100 1101 1102 END PFPROCESS Page Fault Processor - Main Block 48 INPUT CONSTANTS system constants 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 387 (CONSTANTS) F 23 Resident Operating System Constants 3 4 ********************************************************************************** 5 * * 6 * CONSTANTS DEFINITIONS * 7 * * 8 ********************************************************************************** 9 10 11 ********************************************************************************** 12 * DISKBOOT allocates resident pages for the operating system off * 13 * of a single MCU. This would cause undo burden on this MCU if there * 14 * were others to share the load. The INITIAL code, after creating * 15 * PPLs for all the MCUs, redistributes a few of the more heavily used * 16 * OS pages to the other MCUs. Beginning with the RESIDENT page, the * 17 * number of pages that are redistributed is set by MONSPREAD. * 18 ********************************************************************************** 19 0253E 00000008 20 MONSPREAD VFD 8 number of monitor pages to distribute 21 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 388 (CONSTANTS) F 23 Resident Operating System Constants 23 24 ********************************************************************************** 25 * * 26 * MEMORY SCHEDULING CONSTANTS * 27 * These constants determine the characteristics of the * 28 * memory scheduling system. If the algorithms work anything * 29 * like expected, the system performance will be relatively * 30 * insensitive to variations in these parameters. * 31 * See the scheduler for more discussion of the algorithms. * 32 * * 33 ********************************************************************************** 34 35 ********************************************************************************** 36 * * 37 * MMAGE * 38 * Pages younger than this will not be removed from the * 39 * users working set. They may only be removed by TESTTRUBL * 40 * (usually only when making a user a troublemaker). * 41 * In pragmatic terms, we are ensuring that no program * 42 * is ever forced to run with a working set below the * 43 * threshold where useful work is accomplished. Of course, * 44 * not every program is the same, but this number was picked * 45 * to represent a typical job (P. Dennings graphs were used * 46 * as an aid). * 47 * If this number is decreased, a process will more * 48 * readily lose pages. Thrashing may set in more easily * 49 * because pages will be removed from a working set before * 50 * enough 'evidence' has accumulated to indicate that they * 51 * have truly left the working set. We will be able to * 52 * pack in more processes, but not without a heightened * 53 * possibility of thrashing. * 54 * If this number is increased, a process will hold * 55 * more tightly onto pages. The possibility of thrashing * 56 * will be reduced, but pages will stay in a users working * 57 * set much longer after they are no longer being used, and * 58 * users will more readily be made troublemakers (in order * 59 * to acquire enough free pages). * 60 * * 61 ********************************************************************************** 62 0253F 00000007 63 MMAGE VFD 7 no page younger than this will be 64 * removed from a users working set 65 * by the normal scheduling code 66 67 ********************************************************************************** 68 * * 69 * MMAGEINC/MMAGEINCD * 70 * If the system has more memory than is being actively * 71 * used, we shouldn't need to remove pages from users working * 72 * sets so readily (although we still keep track of just how * 73 * old these pages are). * 74 * This constant is used to determine the additional time * 75 * that a page is allowed to spend in a users working set given * 76 * that there exist unused pages. * 77 * If this number is decreased, the equilibrium will be * 78 * toward more idle pages and a shorter lifetime in a users * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 389 (CONSTANTS) F 23 Resident Operating System Constants 79 * working set. This may cause a users working set to be smaller * 80 * than it needs to be, with a consequent increase in the number * 81 * of pages faults (though not necessarily swaps, because the * 82 * idle pages are recovered from main memory when needed). * 83 * If this number is increased, there will be fewer * 84 * idle pages and pages will remain in a users working set * 85 * longer. This will allow more pages to remain in users * 86 * working sets thereby decreasing the number of page * 87 * faults. However, this causes the pool of idle pages to * 88 * shrink. If it becomes too small, pages that are not * 89 * normally placed into the working set extension list * 90 * (the system uses simplifying assumptions about pages * 91 * unlikely to be used again soon) will pass through the * 92 * idle list too quickly and be needlessly swapped. Also, if * 93 * this number is increased too much, an increase in page * 94 * demand, such as a process activation will deplete the * 95 * pool of idle pages with the effects that 1) the pages can * 96 * not be gotten away from processes holding them fast * 97 * enough to prevent the new process from running out, and * 98 * 2) the processes checked first will be harshly depleted * 99 * to fill the idle list, whereas subsequently scheduled * 100 * processes won't be under the same urgency. * 101 * * 102 ********************************************************************************** 103 02540 0000001E 104 MMAGEINC VFD 30 numerator 02541 00000010 105 MMAGEINCD VFD 16 and denominator 106 * of multiplier for amount added to 107 * MMAGE for each available idle 108 * page or 4 dirty idle pages. 02542 0000015E 109 MMAXWSX VFD 350 maximum working set size 110 111 ********************************************************************************** 112 * * 113 * MMIDLETTMIN * 114 * This parameter controls the troublemaker algorithm * 115 * invocation. If the number of idle pages is above this * 116 * number (plus users priority) trouble maker checking is * 117 * skipped. A higher number makes the system keep a * 118 * higher number of idle pages. * 119 * Note that "idle" pages are not necessarily an unused * 120 * resource. They provide a holding buffer for pages that don't * 121 * otherwise stay in users working sets due to the systems * 122 * simplifying assumptions. * 123 * * 124 ********************************************************************************** 125 02543 00000008 126 MMIDLETTMIN VFD 8 cutoff for test-trouble processing 127 128 ********************************************************************************** 129 * * 130 * MMIDLABSMIN * 131 * This parameter is the minimum number of idle pages * 132 * that the scheduler will allow. If there are fewer idle * 133 * pages than this, any user calling TESTTROUBLE (i.e. adding * 134 * to his working set) will be shutdown as a troublemaker * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 390 (CONSTANTS) F 23 Resident Operating System Constants 135 * (in the SIZEWAIT queue). * 136 * This minimum number of pages serves two purposes.. * 137 * 1) certain system functions require an available idle * 138 * page. Currently, such known system functions are * 139 * power up recovery processing and calls from the * 140 * GETMEM routines. * 141 * 2) a minimum size holding buffer for recently used, but * 142 * not held in WSX lists, pages. * 143 * * 144 ********************************************************************************** 145 02544 00000004 146 MMIDLABSMIN VFD 4 minimum allowed idle list size 147 148 ********************************************************************************** 149 * * 150 * MMIDLSPEED * 151 * This parameter is used to control the aging rate of * 152 * pages in the working sets of suspended users. * 153 * Note that the values from the SDPARM array are used * 154 * to pre-age all pages in the working set of a user being * 155 * suspended. That removes pages as early as possible * 156 * when a user is going to wait for a while. We don't * 157 * take all of the pages because of the possibility that * 158 * the suspension is for a short wait, such as for terminal * 159 * I/O. This parameter (MMIDLSPEED) is used to cause * 160 * additional aging so that any remaining pages will age * 161 * out if the user fails to leave the suspended queue * 162 * in a timely manner. * 163 * If this parameter is made smaller, pages will age * 164 * more slowly. When the user leaves suspension, he will * 165 * get better response and cause fewer swaps because of the * 166 * greater likelihood of finding his pages. However, these * 167 * pages FOR SURE are not being used by this user, so we * 168 * strongly desire to make them available to reduce page * 169 * contention elsewhere. * 170 * If this parameter is made larger, pages will age * 171 * more rapidly and leave the working set of a suspended * 172 * user sooner. As the parameter gets larger, an interactive * 173 * user will lose his working set unless he responds * 174 * correspondingly faster. * 175 * A special note concerning the MSWAIT queue... it * 176 * must be aged for the following reasons: * 177 * 1) To prevent deadlocking with no idle pages for * 178 * the reads, but everyone suspended in MSWAIT * 179 * waiting for a read. (This is extremely unlikely * 180 * in the current system). * 181 * 2) To ensure that a user waiting for a disk that * 182 * is no longer ready will not hold other pages * 183 * forever. * 184 * However, it must not be aged nearly so often as the * 185 * other queues. If it were, a user could have essentially * 186 * all of his pages removed while waiting for one more. * 187 * This is likely only when the read queue gets excessively * 188 * long, but it causes an unpleasant phenomonon known as * 189 * convoying. * 190 * * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 391 (CONSTANTS) F 23 Resident Operating System Constants 191 * * 192 ********************************************************************************** 193 02545 00000004 194 MMIDLSPEED VFD 4 number of units added to page 195 * ages each tick by WHICHHUNT 196 197 ********************************************************************************** 198 * * 199 * PRRATIO * 200 * This parameter is used to control the magnitude of the * 201 * help given to higher priority users. * 202 * Priorities are not completely implemented!! * 203 * * 204 ********************************************************************************** 205 00000014 ABS 206 PRRATIO EQU 20 priority ratio constant 02546 00000014 207 MMPRRATIO VFD PRRATIO each increment in user priority 208 * is equivalent to this many 'points' 209 210 ********************************************************************************** 211 * * 212 * MMLOCKPARM * 213 * Each time that a process locks a resource such as * 214 * a directory or an ADT, PSLOCKCNTR is incremented. We * 215 * try to avoid setting those guys troublemaker by using * 216 * this multiplier to remove a little badness from the * 217 * troublemaker calculation. * 218 * * 219 ********************************************************************************** 220 02547 FFFFFFFD 221 MMLOCKPARM VFD -60/PRRATIO we allow this many points for 222 * each critical region that this user 223 * has locked (later multiplied by MMPRRATIO) 224 02548 0000000C 225 MMHYSPARM VFD 12 the current running user looks 226 * this much worse than any other 227 * to avoid repeated finger pointing 228 229 ********************************************************************************** 230 * * 231 * CPU Time Scheduling Variables * 232 * The CPU time management involves a single queue of * 233 * runnable processes. This queue is formed in numerical * 234 * order by a "queue insertion value". The basic idea is * 235 * that the more CPU time that a user has been receiving, * 236 * the longer he waits in the runnable queue. This means * 237 * that heavily I/O bound jobs aren't required to go * 238 * through the whole queue for each I/O operation. * 239 * The "queue insertion values" range from 256 to * 240 * 1024. * 241 * * 242 ********************************************************************************** 243 244 ********************************************************************************** 245 * * 246 * TSAGEVAL * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 392 (CONSTANTS) F 23 Resident Operating System Constants 247 * The clock scheduling interrupt (TICK) causes this * 248 * much to be subtracted from the SQPARM word of everybody * 249 * in the runnable queue. This prevents starvation of any * 250 * process by a series of other processes always jumping * 251 * in ahead of it. * 252 * A larger value here causes more of a disturbing * 253 * influence on every tick interrupt, whereas too small * 254 * a value means that a process may have to wait inordinate * 255 * amounts of time to get a single quantum. * 256 * * 257 ********************************************************************************** 258 02549 00000014 259 TSAGEVAL VFD 20 SQPARM ages this much on each TICK interrupt 260 261 ********************************************************************************** 262 * * 263 * TSHISTLOSS * 264 * This factor is used on every TICK interrupt to reduce * 265 * the PSSUMCPU and PSSUMSDT values by a factor so that, 1) * 266 * They may be contained within reasonable sized fields, and * 267 * 2) So that older history fades away. * 268 * This value is in terms of 1/256 so that it can be an * 269 * integer. The theoretical range is from 0 to 255. However, * 270 * values that are too small cause the history to be forgotten * 271 * rather suddenly at the tick interrupt. Therefore, any value * 272 * under about 64 (really 1/4) is probably too small. * 273 * Values that are too large cause the past history to * 274 * remain to plague a new pattern of activity. Additionally, * 275 * for any value greater than or equal to 256 (really 1), the * 276 * numbers in PSSUMCPU and PSSUMSDT can grow without bound. * 277 * For PSSUMSDT, it might be possible for it to grow even larger * 278 * (like when someone comes out of a four-hour terminal wait). * 279 * Therefore, PSSUMSDT is explicitly checked for overflow and * 280 * set to the maximum possible value. * 281 * For values less than 256, the upper bound of PSSUMCPU * 282 * is 256 / (256-n) * TickTime. Since PSSUMCPU occupies * 283 * a 16-bit field, we must have 256 / (256-n) * 2000 < 2^16. * 284 * This implies that n < 250. * 285 * The allowable range of values, then, is * 286 * 64 <= TSHISTLOSS <= 249. * 287 * * 288 ********************************************************************************** 289 0254A 000000C8 290 TSHISTLOSS VFD 200 controls ratio of history to current data 291 * in the PSSUMCPU and PSSUMSDT variables. 292 293 ********************************************************************************** 294 * * 295 * TSPRIORVAL * 296 * This factor controls how much weight the priority * 297 * field has in runnable queue insertion point calculations. * 298 * This number must be upper bounded to control the maximum * 299 * possible queue insertion values. * 300 * * 301 ********************************************************************************** 302 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 393 (CONSTANTS) F 23 Resident Operating System Constants 0254B 00000040 303 TSPRIORVAL VFD 64 value of each priority level 304 * in runnable queue insertion value calculations 305 306 ********************************************************************************** 307 * * 308 * TSBASEVAL * 309 * This minimum queue insertion value is provided to * 310 * aid in starvation prevention. * 311 * * 312 ********************************************************************************** 313 0254C 00000100 314 TSBASEVAL VFD 256 minimum value for queue insert 315 316 ********************************************************************************** 317 * * 318 * TSMSEQUIV * 319 * Each time a process requests a MS transfer, we make * 320 * that equivalent to TSMSEQUIV msec of CPU time in PSSUMCPU. * 321 * This allows us to give heavy MS users a little lower * 322 * priority than we give to heavy users of direct I/O devices. * 323 * * 324 ********************************************************************************** 325 0254D 00000014 326 TSMSEQUIV VFD 20 each MS transfer equiv to this many MSEC 327 328 ********************************************************************************** 329 * * 330 * TSQUANMIN * 331 * The quantum calculation starts from this base. * 332 * * 333 ********************************************************************************** 334 0254E 00000064 335 TSQUANMIN VFD 100 smallest quantum 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 394 (CONSTANTS) F 23 Resident Operating System Constants 337 338 ********************************************************************************** 339 * * 340 * Useful constants reside here * 341 * * 342 ********************************************************************************** 343 0254F 00FFFFFF 344 MSBLKMASK VFD ONEBITS/MSBLKFIELD mask for a disk address 02550 003E8000 345 MAXSRAF VFD CCBMAXPAGE*CPP last char +1 allowable in small RAF 346 * values for the extensions and account names of 347 * the privileged accounts on the system 02551 E79DF200 348 DOTBTI PAK6 !!! ".!!!" our division 02552 EDE07C00 349 DOTAMPER PAK6 &&& proprietary account 02553 6FA664B3 350 HARDSYS PAK12 HARDWARE HARDWARE.SYS account name 02555 B6740200 351 DOTSYS PAK6 SYS ".SYS" owners division 02556 8E26E777 352 RADMANAGER PAK12 MANAGER the project/division/system top dog 02558 46954340 353 ALLVOLUMES PAK12 ALL! wildcard for all volume names 0255B 0036EE80 354 ONEHOUR2 VFD 0,MSECSH milliseconds in an hour 0000255B 355 ONEHOUR EQU ONEHOUR2(1) same for single word 0255C 05265C00 356 ONEDAY VFD MSECSD length of a day, in milliseconds 0255D 00000080 357 MAXRESRCE VFD 128 maximum number of RCEs per file 358 0000255E 359 BITTAB LABEL 0255E 00000001 360 BIT31 VFD 000000001 0255F 00000002 361 BIT30 VFD 000000002 02560 00000004 362 BIT29 VFD 000000004 02561 00000008 363 BIT28 VFD 000000008 02562 00000010 364 BIT27 VFD 000000010 02563 00000020 365 BIT26 VFD 000000020 02564 00000040 366 BIT25 VFD 000000040 02565 00000080 367 BIT24 VFD 000000080 02566 00000100 368 BIT23 VFD 000000100 02567 00000200 369 BIT22 VFD 000000200 02568 00000400 370 BIT21 VFD 000000400 02569 00000800 371 BIT20 VFD 000000800 0256A 00001000 372 BIT19 VFD 000001000 0256B 00002000 373 BIT18 VFD 000002000 0256C 00004000 374 BIT17 VFD 000004000 0256D 00008000 375 BIT16 VFD 000008000 0256E 00010000 376 BIT15 VFD 000010000 0256F 00020000 377 BIT14 VFD 000020000 02570 00040000 378 BIT13 VFD 000040000 02571 00080000 379 BIT12 VFD 000080000 02572 00100000 380 BIT11 VFD 000100000 02573 00200000 381 BIT10 VFD 000200000 02574 00400000 382 BIT09 VFD 000400000 02575 00800000 383 BIT08 VFD 000800000 02576 01000000 384 BIT07 VFD 001000000 02577 02000000 385 BIT06 VFD 002000000 02578 04000000 386 BIT05 VFD 004000000 02579 08000000 387 BIT04 VFD 008000000 0257A 10000000 388 BIT03 VFD 010000000 0257B 20000000 389 BIT02 VFD 020000000 0257C 40000000 390 BIT01 VFD 040000000 0257D 80000000 391 BIT00 VFD 080000000 49 INPUT PFPUTIL utilities for page fault processor 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 395 (PFPUTIL) F 24 Page Fault Processor - Utility routines 3 ********************************************************************************** 4 * * 5 * This routine is to be called whenever a swapping page * 6 * is being added to the users control. It checks to ensure * 7 * that the session disk limit and disk limit totals will not * 8 * be exceeded. However, control mode will get his requests. * 9 * Call: * 10 * * 11 * CALLNP ADDSWAP * 12 * * 13 * * 14 * * 15 * Eats R0:R2. * 16 * Stack required = 1 * 17 * * 18 ********************************************************************************** 19 20 BLOCK ADDSWAP subroutine 21 ENTRY ADDSWAP 22 23 BEGFRAME 24 ENDFRAME 25 0257E DD5F8001 6 STAK 26 ADDSWAP ENTRNP PUSH 0257F 60800412 2 27 LD R2 CPPSA current user PSA ptr 02580 60000414 0 28 LD R0 CPCUPC get current UPC pointer 02581 5C080610 0 ZBM 29 CMZ R0,UPCNTLMODE is he running control mode? 02582 FE0C258B 30 JNE DOADD jump if control mode, he gets his swaps 02583 60168812 0 2 BASE 31 LD R0 R2,PSSESUSD get current session used 02584 68168813 0 2 BASE 32 UCPR R0 R2,PSSESLIM compare against limit 02585 FE062592 33 JGE SESSOVER (if its = now, it will be over) 02586 60489F13 1 2 ZBM 34 LD R1 R2,PSUSERLIMP get pointer to ULB 02587 6008518E 0 1 ZBM 35 LD R0 R1,ULDSKUSD get current disk space total 02588 1816480F 0 1 BASE 36 ADD R0 R1,ULSCRDSK add in the scratch total 02589 6808618D 0 1 ZBM 37 UCPR R0 R1,ULDSKLIM compare against limit 0258A FE062594 38 JGE ACCTOVER (if it's = now, it will be over) 39 * \ / 40 0000258B 41 DOADD LABEL 0258B BC168812 0 2 BASE 42 INCL R0 R2,PSSESUSD update session used 0258C 54168814 0 2 BASE 43 MAX R0 R2,PSSESMAX set the high water mark 0258D E4168814 0 2 BASE 44 ST R0 R2,PSSESMAX 0258E 60489F13 1 2 ZBM 45 LD R1 R2,PSUSERLIMP get ULB ptr 0258F D016480F 1 BASE 46 INC R1,ULSCRDSK and update the scratch total 02590 19C40001 7 IMM 47 ADD R7 1 skip error return 48 * \ / 49 00002591 50 XITSWAP LABEL 02591 5D1F8001 6 STAK 51 LEAVE POP 52 * --- 53 00002592 54 SESSOVER LABEL 02592 600400C5 0 IMM 55 LD R0 XREQERESDL exceeded session disk limit 02593 FE0E2591 56 JMP XITSWAP return error 57 * --- 58 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 396 (PFPUTIL) F 24 Page Fault Processor - Utility routines 00002594 59 ACCTOVER LABEL 02594 60040087 0 IMM 60 LD R0 XREQERDSKL exceeded account disk limit 02595 FE0E2591 61 JMP XITSWAP return error 62 * --- 63 64 END ADDSWAP subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 397 (PFPUTIL) F 24 Page Fault Processor - Utility routines 66 67 ********************************************************************************** 68 * * 69 * Routine to return space to user when a swapping page * 70 * is freed. Call: * 71 * * 72 * CALLNP DELSWAP * 73 * * 74 * Eats R0. * 75 * Stack required = 1 * 76 * * 77 ********************************************************************************** 78 79 BLOCK DELSWAP subroutine 80 ENTRY DELSWAP 81 82 BEGFRAME 83 ENDFRAME 84 02596 DD5F8001 6 STAK 85 DELSWAP ENTRNP PUSH 02597 60000412 0 86 LD R0 CPPSA 02598 D0560812 0 BASE 87 DEC R0,PSSESUSD count down total session space 02599 FE06259B 88 JGE NOTNEG jump if still positive 0259A D0160812 0 BASE 89 INC R0,PSSESUSD put back to zero or positive 0000259B 90 NOTNEG LABEL 0259B 60081F13 0 0 ZBM 91 LD R0 R0,PSUSERLIMP get pointer to ULB 0259C D056080F 0 BASE 92 DEC R0,ULSCRDSK count down scratch used 0259D FE06259F 93 JGE NOTNEGA jump if still positive 0259E EC16080F 0 BASE 94 STZ R0,ULSCRDSK put back to zero or positive 0000259F 95 NOTNEGA LABEL 0259F 5D1F8001 6 STAK 96 LEAVE POP 97 * --- 98 99 END DELSWAP subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 398 (PFPUTIL) F 24 Page File Manipulation Routines 102 103 BLOCK Page File Manipulation Routines 104 ENTRY LOPFPAL to load a single page file element 105 ENTRY MAKEPAL make a PAL for a page 106 ENTRY MAPINFBI map in FBI block for PPL 107 ENTRY MAPINMEM mapin user free storage lists 108 ENTRY MAPOUTFBI map out FBI block for PPL 109 ENTRY MAPOUTMEM mapout user free storage lists 110 ENTRY PFAGEWSX distribute age to WSX list 111 ENTRY PFEMPTY unload page file without aging 112 ENTRY PFLOAD to load the entire page file 113 ENTRY PFUNLOAD to unload entire page file 114 ENTRY PFUPCAGE apply aging values to all UPCs 115 ENTRY REUSEPAL reuse PAL from working set extension 116 ENTRY UNLOPAL to unload a single page file element 117 118 ********************************************************************************** 119 * * 120 * This block contains several routines to manipulate * 121 * PALs and page file entries. These routines are called by * 122 * both the page-fault handler and the scheduler. * 123 * * 124 ********************************************************************************** 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 399 (PFPUTIL) F 24 Page File Manipulation Routines 126 127 ********************************************************************************** 128 * * 129 * Unload the Page File * 130 * Routine to unload the page file and window pages. * 131 * Updates all page ages. * 132 * * 133 * * 134 * CALLNP PFUNLOAD * 135 * * 136 * Eats:R0:R1, R3:R4. * 137 * Stack required = 2 * 138 * 1 + max ( PFUPCAGE (1) ) * 139 * * 140 ********************************************************************************** 141 142 BLOCK PFEMPTY & PFUNLOAD subroutine 143 ENTRY PFEMPTY 144 ENTRY PFUNLOAD 145 146 BEGFRAME 147 ENDFRAME 148 025A0 DD5F8001 6 STAK 149 PFUNLOAD ENTRNP PUSH 025A1 60040001 0 IMM 150 LD R0 1 get aging value to apply 025A2 DC4025B6 151 CALLNP PFUPCAGE and apply it to all UPCs 025A3 60000414 0 152 LD R0 CPCUPC get current UPC pointer 025A4 D04800F6 0 ZBM 153 DEC R0,UPXAGEVASP and remove aging value from current VASP 025A5 FE0E25A8 154 JMP PFUNLOSHR now, go unload current PF 155 * --- 156 157 ********************************************************************************** 158 * * 159 * Empty the Page File * 160 * Routine to unload the page file while changing between * 161 * under processes. Updates only the age of referenced pages. * 162 * The UNLOPAL code is duplicated here to save time and temps. * 163 * Call: * 164 * interrupts must be off! * 165 * CALLNP PFEMPTY * 166 * * 167 * Eats R0, R3:R4. * 168 * Stack required = 1 * 169 * * 170 ********************************************************************************** 171 025A6 DD5F8001 6 STAK 172 PFEMPTY ENTRNP PUSH 025A7 60000414 0 173 LD R0 CPCUPC get pointer to current UPC 000025A8 174 PFUNLOSHR LABEL entry for PFUNLOAD 025A8 D00800F4 0 ZBM 175 INC R0,UPCMAGEV increment maximum PAL age in VASP list 025A9 D00800F5 0 ZBM 176 INC R0,UPCMAGEW increment maximum PAL age in WSX list 025AA 6116080F 4 0 BASE 177 LD PAL R0,UPCVASP get pointer to current VASP list 025AB 81C10000 4 178 LUPF PAL scan the VASP list unloading the page file 179 ********************** 180 * Temporarily leave this code in case we have to go back to it. 10/29/84 025AC FE0E25B5 181 JMP PFEMNOPA jump around old code 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 400 (PFPUTIL) F 24 Page File Manipulation Routines 182 * --- 183 025AD FB3025B5 4 184 JZA PAL PFEMNOPA jump if VASP list empty 000025AE 185 PFEMNXTP LABEL 025AE 60D70000 3 4 CACH 186 LD PFPTR PAL,PAVPN get page number 025AF 80D2C000 3 REG 187 PFRC PFPTR unload page file 025B0 F2DE25B4 3 188 JBF PFPTR/PFREFBIT PFEMNOREF jump if page not referenced 025B1 F2DC25B3 3 189 JBF PFPTR/PFALTBIT PFEMNOALT jump if page not altered 025B2 EDC91C12 4 ZBM 190 STW PAL,PAMODIFIED set page modified flag 000025B3 191 PFEMNOALT LABEL 025B3 EC0900E2 4 ZBM 192 STZ PAL,PAGEAGE set page age to zero 000025B4 193 PFEMNOREF LABEL 025B4 FB3625AE 4 194 LJNA PAL PFEMNXTP loop through VASP list 195 * \ / 000025B5 196 PFEMNOPA LABEL 197 ********************** 198 025B5 5D1F8001 6 STAK 199 LEAVE POP 200 * --- 201 202 END PFEMPTY & PFUNLOAD subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 401 (PFPUTIL) F 24 Page File Manipulation Routines 204 205 ********************************************************************************** 206 * * 207 * PFUPCAGE * 208 * This routine takes a given aging value and distributes * 209 * it to all of the UPCs. This is as good as distributing it * 210 * to each PAL, and a whole lot faster. Call: * 211 * * 212 * R0 = aging value * 213 * R5 => PSA * 214 * CALLNP PFUPCAGE * 215 * * 216 * Eats R1, PAL * 217 * Stack required = 1 * 218 * * 219 ********************************************************************************** 220 221 BLOCK Age distributer 222 ENTRY PFUPCAGE age distributer 223 224 BEGFRAME 225 ENDFRAME 226 025B6 DD5F8001 6 STAK 227 PFUPCAGE ENTRNP PUSH 025B7 61095F15 4 5 ZBM 228 LD R4 R5,PSPROCLIST get pointer to list of UPCs 229 * \ / 230 000025B8 231 PFUPCABIGL LABEL 025B8 60530000 1 4 REG 232 LD R1 R4 place UPC pointer in save place 025B9 980840F6 0 1 ZBM 233 ADDM R0 R1,UPXAGEVASP add to this vasp list age 025BA 980840F7 0 1 ZBM 234 ADDM R0 R1,UPXAGEWSX and to WSX list age 025BB 61085F10 4 1 ZBM 235 LD R4 R1,UPCSONPTR any children to take care of? 025BC FB3225B8 4 236 JNZA R4 PFUPCABIGL jump if there are 237 * \ / 238 000025BD 239 PFUPCABRO LABEL 025BD 61085F16 4 1 ZBM 240 LD R4 R1,UPCBROPTR get any brother we might have 025BE FB3225B8 4 241 JNZA R4 PFUPCABIGL do a number on them also 025BF 60485F17 1 1 ZBM 242 LD R1 R1,UPCDADPTR move up to the immediate overprocess 025C0 FA7225BD 1 243 JNZA R1 PFUPCABRO jump if more UPCs to update 244 * \ / 245 025C1 5D1F8001 6 STAK 246 LEAVE POP done here, return 247 * --- 248 249 END of age distributer 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 402 (PFPUTIL) F 24 Page File Manipulation Routines 251 252 ********************************************************************************** 253 * * 254 * Load the Page File * 255 * Routine to load the page file. Enter with the PSA * 256 * pointer in register R5. * 257 * * 258 * * 259 * R5 => PSA * 260 * CALLNP PFLOAD * 261 * * 262 * Eats R0:R1, R3:R4. * 263 * Stack required = 3 * 264 * 0 + max ( MAPINMEM (3), PFAGEVASP (0) ) * 265 * * 266 ********************************************************************************** 267 268 BLOCK PFLOAD subroutine 269 ENTRY PFLOAD 270 025C2 DD400451 271 PFLOAD ENTRNP VMTSSLA 025C3 DC0025EB 272 CALL MAPINMEM map in user's free storage lists 025C4 40534000 5 REG 273 PARVL R5 pointer to the PSA 025C5 DC4025CF 274 CALLNP PFAGEVASP apply any saved aging to PALs 025C6 61094116 4 5 ZBM 275 LD R4 R5,PSCURRPROC get pointer to current UPC 025C7 6117080F 4 4 BASE 276 LD PAL R4,UPCVASP get pointer to memory chain 277 025C8 81810000 4 278 LLPF PAL scan the VASP list loading the page file 279 ********************** 280 * Temporarily leave this code in case we have to go back to it. 10/29/84 025C9 FE0E25CE 281 JMP LOPFNOPA jump around old code 282 * --- 283 025CA FB3025CE 4 284 JZA PAL LOPFNOPA jump if no pages 000025CB 285 LOPFLP LABEL 025CB 60D70000 3 4 CACH 286 LD PFPTR PAL,PAVPN set up page file index 025CC 00D70801 4 BASE 287 LDPF PAL,PAPMVALUE load up this PF location 025CD FB3625CB 4 288 LJNA PAL LOPFLP follow the entire chain 000025CE 289 LOPFNOPA LABEL all pages loaded 290 ********************** 291 025CE 5D000451 292 LEAVE VMTSSLA return 293 * --- 294 295 END PFLOAD subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 403 (PFPUTIL) F 24 Page File Manipulation Routines 297 298 ********************************************************************************** 299 * * 300 * Age VASP list * 301 * This routine takes the page aging value saved in the * 302 * current UPC and applies it to the individual PALs. This must * 303 * be done so that the new ages in the PALs are kept up to date. * 304 * We normally do this when we load the page file, because there * 305 * is more than one unloader routine. Call: * 306 * * 307 * (interrupts should be off!) * 308 * CALLNP PFAGEVASP * 309 * * 310 * Eats R0:R1, R3. * 311 * Stack required = 0 * 312 * * 313 ********************************************************************************** 314 315 BLOCK PFAGEVASP subroutine 316 ENTRY PFAGEVASP 317 025CF DD400452 318 PFAGEVASP ENTRNP VMTSSLB 025D0 60400414 1 319 LD R1 CPCUPC get current UPC pointer 025D1 600840F6 0 1 ZBM 320 LD R0 R1,UPXAGEVASP pick up the saved aging 025D2 FA0225DC 0 321 JEQZ R0 PFLAGE test for trivial update 025D3 60D6480F 3 1 BASE 322 LD R3 R1,UPCVASP get pointer to VASP list 025D4 EC124000 1 REG 323 STZ R1 initial max age value 025D5 FAF025D9 3 324 JZA R3 PFANVP jump if empty VASP 000025D6 325 PFAVLP LABEL 025D6 9808C0E2 0 3 ZBM 326 ADDM R0 R3,PAGEAGE increase the page age 025D7 5448C0E2 1 3 ZBM 327 MAX R1 R3,PAGEAGE looking for the maximum age 025D8 FAF625D6 3 328 LJNA R3 PFAVLP scan the entire list 329 * \ / 000025D9 330 PFANVP LABEL 025D9 60000414 0 331 LD R0 CPCUPC get back the UPC pointer 025DA E44800F4 1 0 ZBM 332 ST R1 R0,UPCMAGEV this is the maximum PAL age 025DB EC0800F6 0 ZBM 333 STZ R0,UPXAGEVASP now clear out the already used value 000025DC 334 PFLAGE LABEL 025DC 5D000452 335 LEAVE VMTSSLB return to caller 336 * --- 337 338 END PFAGEVASP subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 404 (PFPUTIL) F 24 Page File Manipulation Routines 340 341 ********************************************************************************** 342 * * 343 * Age Working Set List * 344 * This routine takes the page aging value saved in the * 345 * current UPC and applies it to the individual PALs in the WSX * 346 * list. This is done each time a new entry is added to the * 347 * WSX list, so that the page ages are kept properly up to date. * 348 * Call: * 349 * (interrupts must be off!) * 350 * CALLNP PFAGEWSX * 351 * * 352 * Eats R0:R1. * 353 * Stack required = 0 * 354 * * 355 ********************************************************************************** 356 357 BLOCK PFAGEWSX subroutine 358 ENTRY PFAGEWSX 359 025DD DD400452 360 PFAGEWSX ENTRNP VMTSSLB 025DE 60400414 1 361 LD R1 CPCUPC get current UPC pointer 025DF 600840F7 0 1 ZBM 362 LD R0 R1,UPXAGEWSX pick up the saved aging 025E0 FA0225EA 0 363 JEQZ R0 PFWSXIT test for trivial update 025E1 60D64810 3 1 BASE 364 LD R3 R1,UPCWSX get pointer to PAL in WSX list 025E2 EC124000 1 REG 365 STZ R1 initial maximum age value 025E3 FAF025E7 3 366 JZA R3 PFWSXNOPAL jump if empty WSX 367 * \ / 368 000025E4 369 PFWSXLP LABEL 025E4 9808C0E2 0 3 ZBM 370 ADDM R0 R3,PAGEAGE increase the page age 025E5 5448C0E2 1 3 ZBM 371 MAX R1 R3,PAGEAGE look for the maximum page age 025E6 FAF625E4 3 372 LJNA R3 PFWSXLP scan the entire list 373 * \ / 374 000025E7 375 PFWSXNOPAL LABEL 025E7 60000414 0 376 LD R0 CPCUPC get pointer to current UPC 025E8 E44800F5 1 0 ZBM 377 ST R1 R0,UPCMAGEW max PAL age in WSX list 025E9 EC0800F7 0 ZBM 378 STZ R0,UPXAGEWSX now clear out the already used value 379 * \ / 380 000025EA 381 PFWSXIT LABEL 025EA 5D000452 382 LEAVE VMTSSLB return to caller 383 * --- 384 385 END PFAGEWSX subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 405 (PFPUTIL) F 24 Page File Manipulation Routines 387 388 ********************************************************************************** 389 * * 390 * Routine to map in the memory containing the users free * 391 * storage lists. The page map values are kept in the PSA, so * 392 * the PSA pointer is passed as a parameter. Note if the PSA * 393 * pointer is bogus we zap CMAPPSA to indicate that there was * 394 * no one to map in. Call: * 395 * * 396 * * 397 * CALL MAPINMEM * 398 * PARVL * 399 * * 400 * Eats R0:R1. * 401 * Stack required = 3 * 402 * * 403 ********************************************************************************** 404 405 BLOCK MAPINMEM subroutine 406 ENTRY MAPINMEM 407 408 BEGFRAME 00178801 6 BASE 409 SAVEREGS BSS 2 save area for R2 and R3 410 ENDFRAME 411 025EB DD1F8003 6 STAK 412 MAPINMEM ENTR PUSH 025EC C0520000 0 REG 413 STPVL R0 current user process status area 025ED E4000413 0 414 ST R0 CMAPPSA set this PSA as the one being mapped 025EE FA0225FB 0 415 JEQZ R0 RETURN if null, get out now! 025EF E6978801 236 BASE 416 ST2 R2 SP,SAVEREGS stuff some registers here temporarily 417 418 * loop to LDPF each value from PSMAPVALS 025F0 60440003 1 IMM 419 LD R1 MAXMAPVALS-1 initialize our counter 000025F1 420 MAPINLOOP LABEL 025F1 5C1C081B 01 BASE 421 CMZ R0,PSMAPVALS(R1) anything here to map in? 025F2 FE0225F5 422 JEQ SKIPMAPIN jump if no value to map 025F3 60D650FC 3 1 REG 423 LD PFPTR PNUSERMEM+R1 corresponding user page number 025F4 00DC081B 01 BASE 424 LDPF R0,PSMAPVALS(R1) page is now available to the CPU 000025F5 425 SKIPMAPIN LABEL 025F5 FA6625F1 1 426 JDR R1 MAPINLOOP back for more 427 * \ / 428 429 * save copies elsewhere, too 025F6 3816081B 0 0 BASE 430 LEA R0 R0,PSMAPVALS generate pointer to page map values 025F7 3880041A 2 431 LEA R2 UMAPVALS save these on the CPU page 025F8 60440010 1 IMM 432 LD R1 MAXMAPVALS*CPW convert the length to characters 025F9 FE400000 433 CMOVE save them for crashdump (in diskboot) 025FA 62978801 236 BASE 434 LD2 R2 SP,SAVEREGS restore values of the registers 435 * \ / 436 000025FB 437 RETURN LABEL 025FB 5D1F8003 6 STAK 438 LEAVE POP back to the caller 439 * --- 440 441 END MAPINMEM subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 406 (PFPUTIL) F 24 Page File Manipulation Routines 443 444 ********************************************************************************** 445 * * 446 * This routine unloads the page file where the user free * 447 * storage list is mapped. This routine ensures that the page * 448 * file is illegal to reference for bug catching. It's not * 449 * strictly needed, because a MAPINMEM will overlay the values * 450 * in the page map. If this routine is ever trashed be sure * 451 * that the MAPINMEM routine stores illegal to reference in * 452 * page file locations that are unused. * 453 * Call: * 454 * CALLNP MAPOUTMEM * 455 * * 456 * Eats R0:R1, R3. * 457 * Stack required = 1 * 458 * * 459 ********************************************************************************** 460 461 BLOCK MAPOUTMEM subroutine 462 ENTRY MAPOUTMEM 463 464 BEGFRAME 465 ENDFRAME 466 025FC DD5F8001 6 STAK 467 MAPOUTMEM ENTRNP PUSH 025FD 0CC00000 468 IOFF we can not be interrupted! 025FE 60040003 0 IMM 469 LD R0 MAXMAPVALS-1 initialize our counter 025FF 60C400FC 3 IMM 470 LD PFPTR PNUSERMEM start at the bottom and work up 471 * \ / 472 00002600 473 MAPOUTLOOP LABEL 02600 80D24000 1 REG 474 PFRC R1 zap that page file location 02601 18C40001 3 IMM 475 ADD PFPTR 1 move up one page file location 02602 FA262600 0 476 JDR R0 MAPOUTLOOP jump if more to do 477 * \ / 478 02603 EC000413 479 STZ CMAPPSA zap the mapped PSA pointer 02604 0C800000 480 ION restore interrupts 02605 5D1F8001 6 STAK 481 LEAVE POP return 482 * --- 483 484 END MAPOUTMEM subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 407 (PFPUTIL) F 24 Page File Manipulation Routines 486 487 ********************************************************************************** 488 * * 489 * MAPINFBI. This routine maps into PPLWINDOW the * 490 * resident page containing the FBI for the specified PPL. It * 491 * turns off and leaves the interrupts off because they must * 492 * be off when using PPLWINDOW. We halt if the PPLWINDOW is * 493 * already (still) mapped when we get here. Each user is * 494 * responsible for calling MAPOUTFBI to unmap the window after * 495 * use. There is a special case concerning dualwrite. Because * 496 * the secondary PPLs FBI is in system storage MAPINFBI and is * 497 * placed right after the FBI, we just hand back the address. * 498 * * 499 * Call: CALL MAPINFBI * 500 * PARVL * 501 * FBI, IOFF> * 502 * * 503 * Eats R0, Sets R1. * 504 * Stack required = 2 * 505 * * 506 ********************************************************************************** 507 508 BLOCK MAPINFBI subroutine 509 ENTRY MAPINFBI 510 511 BEGFRAME 00178801 6 BASE 512 SAVEPFPTR BSS 1 a must-use register 513 ENDFRAME 514 02606 DD1F8002 6 STAK 515 MAPINFBI ENTR PUSH 02607 C0520000 0 REG 516 STPVL R0 get PPL address 02608 E4D78801 3 6 BASE 517 ST PFPTR SP,SAVEPFPTR save this reg 02609 60C400FB 3 IMM 518 LD PFPTR PNPPLWNDO get virtual page number for PPL FBIs 0260A 80924000 1 REG 519 PFRD R1 read the page file contents 0260B 6440261A 1 520 CPR R1 ILLTOREF this must be illegal to reference! 0260C FE02260E 521 JEQ FBINOTMAP jump if nothing currently mapped here 0260D 0093001A 522 STOP STOPS001A check MFBILAST to see where last called 523 * --- 524 0000260E 525 FBINOTMAP LABEL 0260E 0CC00000 526 IOFF interrupts off! 0260F 5C081810 0 ZBM 527 CMZ R0,DUALWPPL is this a dualwrite PPL 02610 FE0C2618 528 JNE FAKEMAPIN if so, fake the mapping process 02611 604804A0 1 0 ZBM 529 LD R1 R0,PPFBIDISP get disp for later 02612 60080C62 0 0 ZBM 530 LD R0 R0,PPFBIBLK get our index into PPLPFMAP 531 * LD PFPTR PNPPLWNDO get virtual page number for PPL FBIs 02613 00E01C80 0 532 LDPF PPLPFMAP(R0) get reloc for our block 02614 3863EC00 1 1 533 LEA R1 PPLWINDOW(R1) get address of FBI 534 * \ / 535 00002615 536 SHAREMFBI LABEL 02615 60D78801 3 6 BASE 537 LD PFPTR SP,SAVEPFPTR restore this reg 02616 E5C00465 7 538 ST R7 MFBILAST save our return address 02617 5D1F8002 6 STAK 539 LEAVE POP return with interrupts off 540 * --- 541 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 408 (PFPUTIL) F 24 Page File Manipulation Routines 00002618 542 FAKEMAPIN LABEL 02618 38560804 1 0 BASE 543 LEA R1 R0,PPFBFBI generate FBI address 02619 FE0E2615 544 JMP SHAREMFBI jump to share code 545 * --- 546 0261A 00060000 547 ILLTOREF VFD PFNOREFVAL PF contents for illegal to reference 548 549 END MAPINFBI subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 409 (PFPUTIL) F 24 Page File Manipulation Routines 551 552 ********************************************************************************** 553 * * 554 * MAPOUTFBI. Unmap the virtual page we use to access * 555 * FBIs from PPLs. Turn interrupts back on. * 556 * * 557 * Call: * 558 * CALLNP MAPOUTFBI * 559 * * 560 * * 561 * Registers Used: None * 562 * Stack Required: 2 * 563 * * 564 ********************************************************************************** 565 566 BLOCK MAPOUTFBI subroutine 567 ENTRY MAPOUTFBI 568 569 BEGFRAME 00178801 6 BASE 570 KEEPPFPTR BSS 1 store for needed register 571 ENDFRAME 572 0261B DD5F8002 6 STAK 573 MAPOUTFBI ENTRNP PUSH 0261C E4D78801 3 6 BASE 574 ST PFPTR SP,KEEPPFPTR save a register 0261D 60C400FB 3 IMM 575 LD PFPTR PNPPLWNDO virtual page number to clear 0261E 80D2C000 3 REG 576 PFRC PFPTR clear it out 0261F E5C00466 7 577 ST R7 MOFBILAST save address where called from 02620 0C800000 578 ION bump counter up one 02621 60D78801 3 6 BASE 579 LD PFPTR SP,KEEPPFPTR restore register 02622 5D1F8002 6 STAK 580 LEAVE POP return, interrupts up one 581 * --- 582 583 END MAPOUTFBI subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 410 (PFPUTIL) F 24 Page File Manipulation Routines 585 586 ********************************************************************************** 587 * * 588 * Unload the Page File for a Given PAL * 589 * This code is entered with register PAL pointing to a * 590 * page access element (PAL). * 591 * The page file location for this element is unloaded. * 592 * The page age is either incremented if the page was not * 593 * referenced, or cleared if the page was referenced. The * 594 * modified bit is set if the page was modified. Both read * 595 * only and modified means that the page is actually excluded * 596 * and that it could not have been modified or successfully * 597 * referenced. * 598 * Illegal access pages should not come here (there * 599 * should not be a PAL). * 600 * * 601 * (interrupts off!) * 602 * PAL => PAL for page to unload * 603 * CALLNP UNLOPAL * 604 * * 605 * Eats PFPTR. * 606 * Stack required = 0 * 607 * * 608 ********************************************************************************** 609 610 BLOCK UNLOPAL subroutine 611 ENTRY UNLOPAL 612 02623 DD400451 613 UNLOPAL ENTRNP VMTSSLA 02624 60D70000 3 4 CACH 614 LD PFPTR PAL,PAVPN set up page file pointer 02625 80D2C000 3 REG 615 PFRC PFPTR read out the location, destroy index 02626 F2DE262B 3 616 JBF PFPTR/PFREFBIT UNLONOREF jump if not even referenced 02627 F2DC2629 3 617 JBF PFPTR/PFALTBIT UNLONOALT page not altered, skip setting bit 02628 EDC91C12 4 ZBM 618 STW PAL,PAMODIFIED indicate dirty page 00002629 619 UNLONOALT LABEL 02629 EC0900E2 4 ZBM 620 STZ PAL,PAGEAGE accessed, set age to zero 0262A 5D000451 621 LEAVE VMTSSLA return 622 * --- 623 0000262B 624 UNLONOREF LABEL 0262B D00900E2 4 ZBM 625 INC PAL,PAGEAGE age page by one unit 0262C 5D000451 626 LEAVE VMTSSLA return 627 * --- 628 629 END UNLOPAL subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 411 (PFPUTIL) F 24 Page File Manipulation Routines 631 632 ********************************************************************************** 633 * * 634 * Load the Page File for a Given PAL * 635 * This code is entered with register PAL pointing to a * 636 * page access element. The page file for this element is * 637 * loaded. * 638 * * 639 * (interrupts off!) * 640 * PAL => PAL for page * 641 * CALLNP LOPFPAL * 642 * * 643 * Eats PFPTR. * 644 * Stack required = 0 * 645 * * 646 ********************************************************************************** 647 648 BLOCK LOPFPAL subroutine 649 ENTRY LOPFPAL 650 0262D DD400451 651 LOPFPAL ENTRNP VMTSSLA 0262E 60D70000 3 4 CACH 652 LD PFPTR PAL,PAVPN set up page file index 0262F 00D70801 4 BASE 653 LDPF PAL,PAPMVALUE load up this PF location 02630 5D000451 654 LEAVE VMTSSLA return 655 * --- 656 657 END LOPFPAL subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 412 (PFPUTIL) F 24 Page File Manipulation Routines 659 660 ********************************************************************************** 661 * * 662 * Routine to make a PAL and link it into a user's * 663 * working set. This routine will do all necessary error * 664 * checking and logging. There are two different calls: * 665 * * 666 * To create a new PAL: * 667 * R5 => VPP element * 668 * R4 => PPL element * 669 * interrupts off! * 670 * CALL MAKEPAL * 671 * PARV indirect VP UPC * 672 * PARV virtual page number * 673 * PARVL address of PSA * 674 * * 675 * To reuse a PAL from the working-set extension: * 676 * R5 => VPP element * 677 * R4 => PPL element * 678 * R3 => already unlinked PAL element * 679 * interrupts off! * 680 * CALL REUSEPAL * 681 * PARV indirect VP UPC * 682 * PARV virtual page number * 683 * PARVL address of PSA * 684 * * 685 * Eats R0:R2, Sets R3 <= PAL. * 686 * Stack required = 8 * 687 * 3 + max ( FBICHECK (5), PGETMEM (0), UERRSETY (1) ) * 688 * * 689 ********************************************************************************** 690 691 BLOCK MAKEPAL and REUSEPAL subroutines 692 ENTRY MAKEPAL 693 ENTRY REUSEPAL 694 695 BEGFRAME 00178801 6 BASE 696 PSAPTR BSS 1 address of PSA to receive page 00178008 6 CACH 697 PAGENUM BSSB 8 virtual page number for page 00099112 6 ZBM 698 PAGEUPC BSSB ADDRESS indirect VP UPC 699 ENDFRAME 700 02631 DD1F8003 6 STAK 701 MAKEPAL ENTR PUSH 02632 C1499112 6 ZBM 702 STPV SP,PAGEUPC 02633 C1578008 6 CACH 703 STPV SP,PAGENUM 02634 C0578801 6 BASE 704 STPVL SP,PSAPTR 705 02635 60578801 1 6 BASE 706 LD R1 SP,PSAPTR R1 -> PSA 02636 D00840F2 1 ZBM 707 INC R1,PSWSSIZE say working set is getting bigger 02637 D0170802 4 BASE 708 INC PPL,PPBUSYWORD say PPL is being used once more 709 02638 DC002F0A 710 CALL PGETMEM get space for a new PAL 02639 40440002 IMM 711 PARVL PALOG 0263A 60D20000 3 0 REG 712 LD R3 R0 R3 -> new PAL 0263B EC16C800 3 BASE 713 STZ R3,PAWORDA clean it up 0263C EC16C802 3 BASE 714 STZ R3,PAWORDC 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 413 (PFPUTIL) F 24 Page File Manipulation Routines 0263D E516C803 4 3 BASE 715 ST PPL R3,PAPPLPTR set PPL pointer 0263E 60170803 0 4 BASE 716 LD R0 PPL,PPPMVALUE and the page map value 0263F E416C801 0 3 BASE 717 ST R0 R3,PAPMVALUE 02640 60178008 0 6 CACH 718 LD R0 SP,PAGENUM 02641 E416C000 0 3 CACH 719 ST R0 R3,PAVPN set page number for PAL 02642 FE0E2647 720 JMP COMMON 721 * --- 722 02643 DD1F8003 6 STAK 723 REUSEPAL ENTR PUSH 02644 C1499112 6 ZBM 724 STPV SP,PAGEUPC 02645 C156C000 3 CACH 725 STPV R3,PAVPN 02646 C0578801 6 BASE 726 STPVL SP,PSAPTR 727 * \ / 728 00002647 729 COMMON LABEL 02647 60095F11 0 5 ZBM 730 LD R0 VPP,VPFCB pickup FCB of responsible file 02648 E408DF12 0 3 ZBM 731 ST R0 R3,PAFCB set FCB address, if any 02649 5C099112 6 ZBM 732 CMZ SP,PAGEUPC check if indirect VP reference 0264A ED88D010 3 ZBM 733 STLNE R3,PAINDVP store indirect VP flag 0264B 60095A10 0 5 ZBM 734 LD R0 VPP,VPCNTL/VPCNTLLKB 0264C E408D210 0 3 ZBM 735 ST R0 R3,PALOCK set lock bit 0264D 60095C10 0 5 ZBM 736 LD R0 VPP,VPCNTL/VPCNTLROB 0264E E408DA11 0 3 ZBM 737 ST R0 R3,PAPMVALUE/PFROBIT set read/only bit 0264F 60094E30 0 5 ZBM 738 LD R0 VPP,VPCNTL/VPMAIFLD get maintenance bits 02650 E408D430 0 3 ZBM 739 ST R0 R3,PAMAIFLD 02651 60578801 1 6 BASE 740 LD R1 SP,PSAPTR 02652 60884116 2 1 ZBM 741 LD R2 R1,PSCURRPROC get current UPC pointer 02653 6016880F 0 2 BASE 742 LD R0 R2,UPCVASP 02654 E408DF10 0 3 ZBM 743 ST R0 R3,PALINK 02655 E4D6880F 3 2 BASE 744 ST R3 R2,UPCVASP put new element on front of VASP list 745 02656 DC40413F 746 CALLNP FBICHECK check (and possibly convert) FBI 02657 FA82265E 2 747 JEQZ R2 NOERROR jump if guy doesn't get a memory error 748 * \ / 749 02658 E4C99112 3 6 ZBM 750 ST R3 SP,PAGEUPC save PAL 02659 60D6C000 3 3 CACH 751 LD R3 R3,PAVPN get the page number 0265A E1578801 5 6 BASE 752 EXCH R5 SP,PSAPTR get PSA pointer, save R5 0265B DC4035B5 753 CALLNP UERRSETY give error to process 0265C E1578801 5 6 BASE 754 EXCH R5 SP,PSAPTR restore R5, PSAPTR 0265D 60C99112 3 6 ZBM 755 LD R3 SP,PAGEUPC restore PAL pointer 756 0000265E 757 NOERROR LABEL 0265E 5D1F8003 6 STAK 758 LEAVE POP 759 * --- 760 761 END MAKEPAL and REUSEPAL subroutines 762 763 764 END Page File Manipulation Routines 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 414 (PFPUTIL) F 24 Find Virtual Page Element 767 768 ********************************************************************************** 769 * * 770 * FINDVP. This routine searches the virtual memory list * 771 * of the current UPC of the selected PSA for the specified * 772 * page. If the element found is an indirect page element * 773 * (refers to a different page in a different process) then * 774 * the indicated page is searched for. Pointed to processes * 775 * are looked for in the tree of under processes because we * 776 * may not look at another session. * 777 * The page pointed to may again point off somewhere so * 778 * this routine may search for a while to find the final * 779 * virtual page element that refers to a real page. If a * 780 * pointed to process does not exist or is execute-only, then * 781 * the indirect virtual page element is taken out of the * 782 * original UPC's VM list and we return saying that the VM * 783 * element was not found. * 784 * Also, for now, we can't point to process zero * 785 * (ourself). If this is ever fixed, a loop problem will * 786 * exist. * 787 * This routine is called with the interrupts off and * 788 * without the chance of a page fault. It uses variables on * 789 * the CPUPAGE and they contain the original PSA looked at, * 790 * the PSA that finally contained the VM element, the root of * 791 * the VM list that the VM element was finally found in, and * 792 * other interesting results. Call: * 793 * * 794 * IOFF interrupts off!!! * 795 * LD R0 page number * 796 * LD R1 * 797 * CALLNP FINDVP * 798 * JMP not found (VPP = 0) * 799 * ST VPP => final VP element * 800 * * 801 * Sets the following global variables: * 802 * FNDVPLPSA (last PSA) => PSA where VP element was eventually found * 803 * FNDVPFPN (first page num) page num originally looked for * 804 * FNDVPPN (page num) page number searched for most recently * 805 * FNDVPVMR (virtual mem root) => root of VP list containing found element * 806 * FNDVPUPC (last UPC ) => UPC where VP element was found, 0 if direct * 807 * * 808 * Eats R0:R2, Sets R5 <= VPP. * 809 * Stack required = 4 * 810 * 4 + max ( FCFREEMEM (0), UNLOPAL (0) ) * 811 * * 812 ********************************************************************************** 813 814 BLOCK FINDVP subroutine 815 ENTRY FINDVP find a virtual page element 816 817 BEGFRAME 00178801 6 BASE 818 FINDVPPSA BSS 1 pointer to original PSA 00178802 6 BASE 819 HIDEOUT BSS 2 place to stuff R3 and R4 820 ENDFRAME 821 0265F DD5F8004 6 STAK 822 FINDVP ENTRNP PUSH 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 415 (PFPUTIL) F 24 Find Virtual Page Element 02660 E440045D 1 823 ST R1 FNDVPLPSA set "last" PSA (owner of final VP element) 02661 E4578801 1 6 BASE 824 ST R1 SP,FINDVPPSA set original PSA address 02662 E400045E 0 825 ST R0 FNDVPFPN set original page number 02663 E400045F 0 826 ST R0 FNDVPPN and page number currently looking for 02664 EC000461 827 STZ FNDVPUPC clear UPC pointer 02665 60484116 1 1 ZBM 828 LD R1 R1,PSCURRPROC get pointer to current UPC 829 * \ / 830 831 ********************************************************************************** 832 * * 833 * Search the VP list of the current UPC. * 834 * * 835 ********************************************************************************** 836 837 * \ / 00002666 838 FNDVPSRCH LABEL 02666 3956480E 5 1 BASE 839 LEA VPP R1,UPCWVMLIST generate root of the window list 02667 F6302669 0 840 JBT R0/MONBIT FNDSWL jump if we are to search window list 02668 3956480D 5 1 BASE 841 LEA VPP R1,UPCVMLIST generate root of the list 00002669 842 FNDSWL LABEL 02669 E5400460 5 843 ST VPP FNDVPVMR save same for the caller 0266A 61574800 5 5 BASE 844 LD VPP VPP,0 advance to the first actual element 0266B 3C174004 0 5 CACH 845 LSRCH R0 VPP,VPVPN search for the element 0266C FE0C269E 846 JNE NOTFNDRTN if not there, return the error 0266D 5C095011 5 ZBM 847 CMZ VPP,VPINDRCT is this an indirect element? 0266E FE0226A0 848 JEQ ENTRYFND jump if not -- the end is here 849 * \ / 850 851 ********************************************************************************** 852 * * 853 * The search has resulted in finding an indirect * 854 * element. We check the underprocess serial number in order * 855 * to find the correct underprogram that this element points * 856 * to. Because each underprogram has a unique serial number * 857 * there is no way that indirect VP elements can point to * 858 * underprograms that they were not intended to point to. * 859 * If a user does a URMAPINAS to process 0 (that is, * 860 * pointing one of his pages to another of his pages) it * 861 * doesn't work, because the URMAPINAS request forbids this. * 862 * * 863 ********************************************************************************** 864 865 * \ / 0266F 60094083 0 5 ZBM 866 LD R0 VPP,VPINDPN get the pointed to page number 02670 E400045F 0 867 ST R0 FNDVPPN save as the page number to look for next 02671 6000045D 0 868 LD R0 FNDVPLPSA pointer to the PSA 02672 60081F15 0 0 ZBM 869 LD R0 R0,PSPROCLIST pointer to the whole underprocess list 02673 60895373 2 5 ZBM 870 LD R2 VPP,VPUPCSERL get the UPC serial number 871 * \ / 872 00002674 873 FNDVPLOOP LABEL 02674 60520000 1 0 REG 874 LD R1 R0 move pointer to a safe register 02675 64885371 2 1 ZBM 875 CPR R2 R1,UPCSERNM found the UPC we were looking for 02676 FE0226A1 876 JEQ FNDINDPROC found the next UPC to search 02677 60085F10 0 1 ZBM 877 LD R0 R1,UPCSONPTR check if any processes below us 02678 FA322674 0 878 JNZA R0 FNDVPLOOP see if this one matches 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 416 (PFPUTIL) F 24 Find Virtual Page Element 879 * \ / 880 00002679 881 FNDVPBRO LABEL 02679 60085F16 0 1 ZBM 882 LD R0 R1,UPCBROPTR get our brother if he exists 0267A FA322674 0 883 JNZA R0 FNDVPLOOP see if our brother matches 0267B 60485F17 1 1 ZBM 884 LD R1 R1,UPCDADPTR move up in the process tree 0267C FA722679 1 885 JNZA R1 FNDVPBRO if zero then we are done 886 * \ / 887 888 ********************************************************************************** 889 * * 890 * No such process. We remove the indirect pointer from * 891 * the caller's memory list and return a not found status. * 892 * This will clean up mappings left if for some reason the * 893 * pointed to process goes away ( actually, most often under * 894 * programs that get zapped ). * 895 * * 896 ********************************************************************************** 897 898 * \ / 0267D 6000045E 0 899 LD R0 FNDVPFPN set the original page number searched for 0267E E400045F 0 900 ST R0 FNDVPPN set up as if no searching was done 0267F 60578801 1 6 BASE 901 LD R1 SP,FINDVPPSA get the original PSA searched 02680 E440045D 1 902 ST R1 FNDVPLPSA 02681 EC000461 903 STZ FNDVPUPC clear => UPC for indirect reference 904 * \ / 905 02682 60484116 1 1 ZBM 906 LD R1 R1,PSCURRPROC get pointer to current UPC 02683 3896480E 2 1 BASE 907 LEA R2 R1,UPCWVMLIST => root of the window list 02684 F6302686 0 908 JBT R0/MONBIT FNDRMSWL jump if looking in window list 02685 3896480D 2 1 BASE 909 LEA R2 R1,UPCVMLIST => root of the list 00002686 910 FNDRMSWL LABEL 02686 60568400 1 2 @R 911 LD R1 @R2 => first element of the list 02687 48164004 0 1 CACH 912 RLSRCH R0 R1,VPVPN find the offending element 02688 FE0C26A4 913 JNE LOSTVPP it was there on the last search 914 * R2 => element before, R1 => indirect element 02689 60085F10 0 1 ZBM 915 LD R0 R1,VPLINK unlink the element that... 0268A E4089F10 0 2 ZBM 916 ST R0 R2,VPLINK ...points to nothing 0268B DC002F8F 917 CALL VFREEMEM free the offending element 0268C 41440002 IMM 918 PARV VPLOG indicate its length 0268D 40524000 1 REG 919 PARVL R1 920 * Remove the PAL if the thing is mapped in. 0268E E6D78802 346 BASE 921 ST2 R3 SP,HIDEOUT save these register values 0268F 60978801 2 6 BASE 922 LD R2 SP,FINDVPPSA get pointer to users PSA 02690 60888116 2 2 ZBM 923 LD R2 R2,PSCURRPROC get current UPC pointer 02691 6116880F 4 2 BASE 924 LD PAL R2,UPCVASP make PAL point to users VASP list 02692 6000045F 0 925 LD R0 FNDVPPN get the page number specified 02693 48170000 0 4 CACH 926 RLSRCH R0 PAL,PAVPN see if the page is in the PAL list 02694 FE0C269D 927 JNE NOTMAPPED if not we don't work 928 * R0 <= page number, R2 <= UPC, PAL <= PA element, R5 <= previous PA element 02695 DC402623 929 CALLNP UNLOPAL unmap the page from page file 02696 60091F10 0 4 ZBM 930 LD R0 PAL,PALINK get forward link to rest of list 02697 E4095F10 0 5 ZBM 931 ST R0 R5,PALINK remove element from the PA list 02698 EC091F10 4 ZBM 932 STZ PAL,PALINK clear the forward pointer in our element 933 * Now place the PAL into the working set extension list 02699 38168810 0 2 BASE 934 LEA R0 R2,UPCWSX get ptr to WSX 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 417 (PFPUTIL) F 24 Find Virtual Page Element 0269A 60440000 1 IMM 935 LD R1 0 get a null forward pointer 0269B 3C481F10 1 0 ZBM 936 LSRCH R1 R0,PALINK look for the end of the list 0269C E5081F10 4 0 ZBM 937 ST PAL R0,PALINK hook new element onto the list 938 * \ / 939 0000269D 940 NOTMAPPED LABEL 0269D 62D78802 346 BASE 941 LD2 R3 SP,HIDEOUT restore registers 942 * \ / 943 944 ********************************************************************************** 945 * * 946 * The VP element could not be found for one reason or * 947 * another. Store zero in the VPP register pointer and do not * 948 * advance the return address. * 949 * * 950 ********************************************************************************** 951 952 * \ / 0000269E 953 NOTFNDRTN LABEL 0269E 61440000 5 IMM 954 LD VPP 0 no VPP found 0000269F 955 FNDEXIT LABEL 0269F 5D1F8004 6 STAK 956 LEAVE POP return 957 * --- 958 959 ********************************************************************************** 960 * * 961 * Good entry has been found, VPP points to it. Make good return. * 962 * * 963 ********************************************************************************** 964 000026A0 965 ENTRYFND LABEL 026A0 FBE0269F 7 966 IRJ R7 FNDEXIT advance the return address 967 * --- 968 969 ********************************************************************************** 970 * * 971 * After encountering an indirect VP element we attempted * 972 * and succeeded in finding the next UPC to search for another * 973 * VP element. First we initialize some local CPU variables * 974 * and then back to the search. * 975 * * 976 ********************************************************************************** 977 000026A1 978 FNDINDPROC LABEL 026A1 E4400461 1 979 ST R1 FNDVPUPC store the UPC pointer 026A2 6000045F 0 980 LD R0 FNDVPPN get the page number to look for 026A3 FE0E2666 981 JMP FNDVPSRCH see if we can find this VP element 982 * --- 983 984 ********************************************************************************** 985 * * 986 * This error occurs when the page that we originally * 987 * looked for has disappeared. Possible causes are temp * 988 * sharing (if this routine is getting interrupted out of and * 989 * the FNDVPxxx locations are getting used by someone else * 990 * [power fail???]), or there is a way for another processor * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 418 (PFPUTIL) F 24 Find Virtual Page Element 991 * to mangle the VM list of a process that is running. Good * 992 * luck finding the problem. * 993 * * 994 ********************************************************************************** 995 000026A4 996 LOSTVPP LABEL 026A4 00130010 997 HALT HALTS0010 VM list changed out from under us 998 * --- 999 1000 END FINDVP subroutine 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 419 (PFPUTIL) F 24 Find out whether MS block is resident 1003 1004 ********************************************************************************** 1005 * * 1006 * BLKREADIN. Function to say whether copy of specified * 1007 * MS block already exists in physical memory. Leaves * 1008 * MSQINLOCK locked if the block was not spotted in either the * 1009 * list of active pages or in the list of unused, dirty, * 1010 * pages. * 1011 * * 1012 * Call: * 1013 * LD R4 * 1014 * CALLNP BLKREADIN * 1015 * JMP * 1016 * * 1017 * * 1018 * Eats R0:R1 * 1019 * Stack required = 1 * 1020 * 0 + max ( LOCKWAIT (0) ) * 1021 * * 1022 ********************************************************************************** 1023 1024 BLOCK BLKREADIN subroutine 1025 ENTRY BLKREADIN 1026 1027 BEGFRAME 1028 ENDFRAME 1029 026A5 DD5F8001 6 STAK 1030 BLKREADIN ENTRNP PUSH 026A6 604B3460 1 4 CBM 1031 LD R1 R4/PPHASHFLD get index part 1032 PLOCK MSQINLOCK 026A7 0CC00000 1032 IOFF 026A8 D1C01F16 1032 SETT MSQINLOCK 026A9 FE0C26AB 1032 JNE MA(2+DISPW MA 0) 026AA DC40308B 1032 CALLNP LOCKWAIT 1033 PLOCK PPAGELOCK(R1) 026AB 0CC00000 1033 IOFF 026AC D1E21E21 1 1033 SETT PPAGELOCK(R1) 026AD FE0C26AF 1033 JNE MA(2+DISPW MA 0) 026AE DC40308B 1033 CALLNP LOCKWAIT 1034 PLOCK PPIDLOCK 026AF 0CC00000 1034 IOFF 026B0 D1C01DD9 1034 SETT PPIDLOCK 026B1 FE0C26B3 1034 JNE MA(2+DISPW MA 0) 026B2 DC40308B 1034 CALLNP LOCKWAIT 026B3 60221E61 0 1 1035 LD R0 PPAGELIST(R1) 026B4 3D160801 4 0 BASE 1036 LSRCH R4 R0,PPBLOCK scan down in-use pages 026B5 FE0C26BD 1037 JNE NOTDONEYET keep looking 1038 * \ / 1039 1040 * found the page, clean up and leave 1041 * R1 has hash field 000026B6 1042 FOUNDRES LABEL 1043 PUNLOCK PPIDLOCK 026B6 EC001DD9 1043 STZ PPIDLOCK 026B7 0C800000 1043 ION 1044 PUNLOCK PPAGELOCK(R1) 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 420 (PFPUTIL) F 24 Find out whether MS block is resident 026B8 EC221E21 1 1044 STZ PPAGELOCK(R1) 026B9 0C800000 1044 ION 1045 PUNLOCK MSQINLOCK 026BA EC001F16 1045 STZ MSQINLOCK 026BB 0C800000 1045 ION 000026BC 1046 NOWHERE LABEL 026BC 5D1F8001 6 STAK 1047 LEAVE POP return to caller 1048 * --- 1049 1050 * not found in use, try idle list 000026BD 1051 NOTDONEYET LABEL 026BD 600B3650 0 4 CBM 1052 LD R0 R4/IDLHASHFLD make index to proper list 026BE 60201DDD 0 0 1053 LD R0 PPUSDIDLE(R0) try unused, but read, pages 026BF 3D160801 4 0 BASE 1054 LSRCH R4 R0,PPBLOCK scan them 026C0 FE0226B6 1055 JEQ FOUNDRES jump if success 1056 PUNLOCK PPIDLOCK 026C1 EC001DD9 1056 STZ PPIDLOCK 026C2 0C800000 1056 ION 1057 PUNLOCK PPAGELOCK(R1) 026C3 EC221E21 1 1057 STZ PPAGELOCK(R1) 026C4 0C800000 1057 ION 026C5 FBE026BC 7 1058 IRJ R7 NOWHERE do skip, leave MSQINLOCK locked, IOFF 1059 * --- 1060 1061 END BLKREADIN subroutine 50 INPUT PARITYERROR parity error interrupt handler 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 421 (PARITYERROR) F 25 Memory Parity Error Interrupt Handler 3 4 BLOCK Memory Error Interrupt Routine 5 6 ENTRY PARITYERR 7 8 ********************************************************************************** 9 * * 10 * This routine is the memory parity error interrupt handler. * 11 * On entry the hardware has set up the registers as follows: * 12 * R2 = reason * 13 * 0 = no response, instruction fetch * 14 * 1 = abnormal data, instruction fetch * 15 * 2 = no response, operand fetch * 16 * 3 = abnormal data, operand fetch * 17 * 4 = no response, interrupt poll * 18 * 5 = abnormal data, interrupt poll * 19 * R3 = 18-bit virtual address (if R2 is 0, 1, 2, or 3) * 20 * offending slot number (if R2 is 4 or 5) * 21 * R4 = console area of offending routine * 22 * * 23 * The following actions are possible: * 24 * * 25 * If the error is a memory failure in read-only resident operating * 26 * system code, the bad word is re-constructed using checksums generated * 27 * at boot time. The system continues operation normally. * 28 * * 29 * If the error is a memory failure in pageable memory, then the * 30 * page is marked as unusable and then removed from the working sets * 31 * of all processes using that page. If the page is clean, the system * 32 * will continue normally. If the page is dirty, then the system will * 33 * continue, but any process that attempts to reference that page will * 34 * receive a virtual memory failure interrupt. Note that we cannot remove * 35 * any PAL's that are locked. If the process that suffered the parity * 36 * error has the page locked, we will give him a virtual memory failure * 37 * error. If any other user has the page locked, we will not disturb the * 38 * PAL, and hope that he finishes using the page without tripping over * 39 * the bad word (if he does trip over it, he will get an error, too). * 40 * * 41 * If the error is a memory failure elsewhere (such as in read/write * 42 * operating system tables), the system will halt. * 43 * * 44 * If the error is an abnormal data response from a device other * 45 * than memory, the system will halt. In the future, we may want to * 46 * add code to the device drivers to recover from this situation. * 47 * This halt is coded with the slot and channel number in the right * 48 * two digits displayed. The channel number will be meaningless if * 49 * the device is not a PPU. * 50 * * 51 * If the error is a "no response" error, then we will do a WRU * 52 * to determine whether the device is still alive. If it is dead, the * 53 * system will halt. If it is still alive, the error will be deemed * 54 * to be a fluke, and the system will attempt to continue. However, * 55 * if we get a second such flakey error within one second of the first, * 56 * the system will halt. This halt is coded with the slot and channel * 57 * number in the right two digits displayed. The channel number will * 58 * be meaningless if the device is not a PPU. * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 422 (PARITYERROR) F 25 Memory Parity Error Interrupt Handler 59 * * 60 * The following halts are possible: * 61 * * 62 * M00C0 - another parity error occurred while processing a parity error * 63 * H00C1 - meaningless code in R2 on parity error interrupt * 64 * H0Dsc - a bus device has died (will not answer "who are you") * 65 * H00C3 - a bus device is very flakey (two errors within one second) * 66 * H0Csc - abnormal data from a device other than memory * 67 * M00C5 - parity error in operating system tables * 68 * M00C6 - uncorrectable parity error in resident system. * 69 * M00C7 - parity error in resident system before checksums were generated * 70 * S00Cx - various system errors that should never happen * 71 * * 72 * Stack required = 20 * 73 * 6 + max ( ERRORLOG (3), FREEZE (14), LOCKWAIT (0), * 74 * MAPINMEM (3), MAPOUTMEM (1), REMOVEALL (8), * 75 * UERRSET (1), UNFREEZE (1), * 76 * * 77 ********************************************************************************** 78 79 BLOCK PARITYERR routine 80 ENTRY PARITYERR 81 82 * Highest stack frame in interrupt handler 83 84 BEGFRAME2 00178800 6 BASE 85 MERRWORDA BSS 1 first word of error log info 00098040 6 ZBM 86 MERRCODE EQU MERRWORDA/BITS 0:3 reason code (from R2) 00000000 ABS 87 MERRNRIF EQU 0 no response, instruction fetch 00000001 ABS 88 MERRABIF EQU 1 abnormal data, instruction fetch 00000002 ABS 89 MERRNROF EQU 2 no response, operand fetch 00000003 ABS 90 MERRABOF EQU 3 abnormal data, operand fetch 00000004 ABS 91 MERRNRIP EQU 4 no response, interrupt poll 00000005 ABS 92 MERRABIP EQU 5 abnormal data, interrupt poll 00000005 ABS 93 MERRCODEMAX EQU 5 max value for this field 00098610 6 ZBM 94 MERRABDATA EQU MERRCODE/BIT 31 1 => abnormal data, 0 => no response 00098840 6 ZBM 95 MERRACTION EQU MERRWORDA/BITS 4:7 action taken for error: 00000000 ABS 96 MERRFLUKE EQU 0 fluke: interrupt ignored 00000001 ABS 97 MERRFIX EQU 1 data reconstructed from cksum 00000002 ABS 98 MERRPAGE EQU 2 page marked bad 00099180 6 ZBM 99 MERRVADR EQU MERRWORDA/BITS 8:31 18-bit virtual address 00178801 6 BASE 100 MERRPFILE BSS 1 page file for error location 00178802 6 BASE 101 MERRBLOCK BSS 1 block number for this page 00178803 6 BASE 102 MERRPPL BSS 1 PPL pointer for bad page 00178804 6 BASE 103 MERRCAR BSS 1 console area register of interrupted rtn 00178805 6 BASE 104 TEMP BSS 1 105 ENDFRAME 106 107 * R2=reason (see box), R3=where (see box), R4= old console area 108 000026C6 109 PARITYERR LABEL 110 SETSP set stack pointer 026C6 81538000 6 REG 110 STCAR SP 026C7 6197880D 6 6 BASE 110 LD SP SP,CASTACKPTR 026C8 61979020 6 6 REG 110 LD SP SP+(2 POWER STAKLOG) 026C9 EC1F8006 6 STAK 111 STZ PUSH allocate stack frame 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 423 (PARITYERROR) F 25 Memory Parity Error Interrupt Handler 026CA D1C00462 112 SETT MEMERRFLAG say we are processing error 026CB FE0C26CD 113 JNE FLAGOK jump if not already set 026CC 000D00C0 114 HALT HALTM00C0 memory error in memory error routine 115 * --- 116 000026CD 117 FLAGOK LABEL 026CD 68840005 2 IMM 118 UCPR R2 MERRCODEMAX see if code is reasonable 026CE FE0A26D0 119 JLE CODEOK jump if so 026CF 000800C1 120 HALT HALTH00C1 meaningless interrupt code on mem error 121 * --- 122 000026D0 123 CODEOK LABEL 026D0 E4898040 2 6 ZBM 124 ST R2 SP,MERRCODE save the error code 026D1 E4C99180 3 6 ZBM 125 ST R3 SP,MERRVADR save virtual address 026D2 EC178802 6 BASE 126 STZ SP,MERRBLOCK say no block number known 026D3 E5178804 4 6 BASE 127 ST R4 SP,MERRCAR save old CAR 026D4 64840004 2 IMM 128 CPR R2 MERRNRIP is this error on interrupt poll? 026D5 FE06274E 129 JGE INTPOLL jump if interrupt poll problem 026D6 60CADC80 3 3 CBM 130 LD PFPTR R3/PAGEFIELD get 8-bit virtual page number 026D7 80978801 6 BASE 131 PFRD SP,MERRPFILE get the page file value 026D8 60498841 1 6 ZBM 132 LD R1 SP,MERRPFILE/PFSLOT get slot number of device 133 * \ / 134 135 ********************************************************************************** 136 * * 137 * MCUs will respond with bad data in the second word of * 138 * a double word transfer after receiving a WRU(0). This problem * 139 * turns up in systems that have CPU4s and MCUs. The work around * 140 * is to instead of doing a WRU(0) to do a read to location 0, then * 141 * pick up the slot type from SLOTTABLE. This can be done by * 142 * replacing the LDFB BUSCWRU with LDFB BUSCREAD, then picking * 143 * the slottype out of the SLOTTABLE. The original instructions * 144 * are preceded by 2 stars (**). The replaced instructions have * 145 * 2 stars in their comment field. * 146 * * 147 ********************************************************************************** 148 149 * \ / 150 ** LDFB BUSCWRU get WRU response 026D9 0C024000 IMM 151 LDFB BUSCREAD ** perform a data read 026DA FE1226E8 152 JCS SLOTDEAD jump if no response to WRU 026DB FE1626E8 153 JOS SLOTDEAD jump if abnormal response to WRU 154 * \ / normal response in R0 155 156 ********************************************************************************** 157 * * 158 * Now, we know that the bus device is alive. * 159 * R0 = normal response * 160 *** R0 = WRU response. * 161 * * 162 ********************************************************************************** 163 164 * \ / 026DC 5C098610 6 ZBM 165 CMZ SP,MERRABDATA is this problem abnormal data? 026DD FE02274F 166 JEQ FLUKE jump if problem was no response 167 ** LD R0 R0/WRU0TYPE get slot device type 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 424 (PARITYERROR) F 25 Memory Parity Error Interrupt Handler 026DE 60221ECE 0 1 168 LD R0 SLOTTABLE(R1) ** pick up the slot info 026DF 600A0030 0 0 CBM 169 LD R0 R0/BITS 0:2 ** extract the type 026E0 64040001 0 IMM 170 CPR R0 SLTTMEM is it a memory? 026E1 FE0226EE 171 JEQ MEMSLOT jump if it is 172 * \ / 173 174 ********************************************************************************** 175 * * 176 * We arrive at this halt when we have an abnormal data * 177 * interrupt and the VRA device denies being an MCU when we * 178 * poll it. This means one of several things: * 179 * 1) An I/O driver has attempted to talk to a * 180 * controller that will not respond. * 181 * 2) The offending process did a load to a * 182 * PPU or SSU that is outside of the range * 183 * where such an operation is legal. * 184 * 3) We got an abnormal data from an SSU or PPU * 185 * in error (hardware problem). * 186 * 4) A memory failed to properly answer the WRU * 187 * that we just tried. * 188 * * 189 * When we arrive here: * 190 * R0 = type code extracted from the WRU response. * 191 * R1 = the slot number that we blame. * 192 * ... the reason, where, and CA are on the stack at * 193 * SP,MERRCODE, SP,MERRVADR, and SP,MERRCAR, respectively. * 194 * R4 => CA for offending process. * 195 * * 196 ********************************************************************************** 197 198 * \ / 026E2 614A7880 5 1 CBM 199 LD R5 R1/BITS 28:3 get slot number into next up hex digit 026E3 1949B021 5 6 ZBM 200 ADD R5 SP,MERRPFILE/PPUCHAN pick up the channel number 026E4 194026E7 5 201 ADD R5 CHALTPROTO turn info into a halt command 026E5 5D534000 5 REG 202 XCT R5 stop and display error 203 * HALT HALTS0Csc abnormal data from non-memory device 026E6 FE0E274F 204 JMP FLUKE where to go to retry operation 205 * --- 206 026E7 00080C00 207 CHALTPROTO HALT HALTH0CSC abnormal data from non-memory device 208 * SC is offending slot/channel if PPU 209 * note that the PC at halt time is 210 * actually at the XCT instruction. 211 212 ********************************************************************************** 213 * * 214 * Dead Slot * 215 * We come here when our LDFB failed to get any response. * 216 * This is serious stuff. * 217 * R1 = slot number (slot number also in HALT code) * 218 * ... the reason, where, and CA are on the stack at * 219 * SP,MERRCODE, SP,MERRVADR, and SP,MERRCAR, respectively. * 220 * R4 => CA for offending process * 221 * * 222 ********************************************************************************** 223 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 425 (PARITYERROR) F 25 Memory Parity Error Interrupt Handler 000026E8 224 SLOTDEAD LABEL bus device has died 026E8 614A7880 5 1 CBM 225 LD R5 R1/BITS 28:3 get slot number into next up hex digit 026E9 1949B021 5 6 ZBM 226 ADD R5 SP,MERRPFILE/PPUCHAN pick up the channel number 026EA 194026ED 5 227 ADD R5 DHALTPROTO turn info into a halt command 026EB 5D534000 5 REG 228 XCT R5 stop and display error 229 * HALT HALTH0DSC no response from bus device 026EC FE0E274F 230 JMP FLUKE where to go to retry 231 * --- 232 026ED 00080D00 233 DHALTPROTO HALT HALTH0DSC no response from bus device 234 * SC is offending slot/channel if PPU 235 * note that the PC at halt time is 236 * actually at the XCT instruction. 237 238 ********************************************************************************** 239 * * 240 * Now, we have an abnormal data response from a memory. * 241 * (This means a parity error.) We will fetch the word and see * 242 * if this is for real. * 243 * * 244 ********************************************************************************** 245 000026EE 246 MEMSLOT LABEL 026EE 60824000 2 IMM 247 LD R2 BUSCREAD build read command in R2 026EF 6009A8C1 0 6 ZBM 248 LD R0 SP,MERRPFILE/PFPAGENUM 026F0 E40A94C0 0 2 CBM 249 ST R0 R2/FLDABSPG save page number 026F1 6009ACA0 0 6 ZBM 250 LD R0 SP,MERRVADR/DISPFIELD 026F2 E40AACA0 0 2 CBM 251 ST R0 R2/DISPFIELD save offset in page 026F3 0C128000 2 REG 252 LDFB R2 issue a read command 026F4 FE1226E8 253 JCS SLOTDEAD jump if no response 026F5 FE14274F 254 JOC FLUKE jump if good data 255 * \ / abnormal response (parity error is repeatable) 256 257 ********************************************************************************** 258 * * 259 * Now, we know that the error is for real. Decide what * 260 * to do about it. * 261 * * 262 ********************************************************************************** 263 264 * \ / 026F6 64C40080 3 IMM 265 CPR PFPTR MONPF 026F7 FE082721 266 JLT BADPAGE jump if a user page 026F8 64C40082 3 IMM 267 CPR PFPTR PNWNDO1 026F9 FE082700 268 JLT NOHOPE jump if below window 1 026FA 64C40085 3 IMM 269 CPR PFPTR PNWNDO4 026FB FE082721 270 JLT BADPAGE jump if a window 026FC 64C40089 3 IMM 271 CPR PFPTR MONPF+(RESIDENT/FLDPAGE) 026FD FE082700 272 JLT NOHOPE jump if below resident 026FE 64C400AB 3 IMM 273 CPR PFPTR MONPF+(ENDOFRES/FLDPAGE) 026FF FE0A2701 274 JLE FIXRES jump if read/only resident 275 * \ / 276 277 ********************************************************************************** 278 * * 279 * In the original system design, provision was made for * 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 426 (PARITYERROR) F 25 Memory Parity Error Interrupt Handler 280 * parts of the operating system to be virtual. This feature * 281 * was never implemented due to certain difficulties with * 282 * subroutine calls, locks, and the like. At the present time, * 283 * all system (except for the abandoned start-up code) is * 284 * considered to be resident, and all addresses beyond ENDOFRES * 285 * are now table space. * 286 * Here are the two instructions that were provided to * 287 * properly classify the virtual parts of the system. * 288 * * 289 * CPR PFPTR MONPF+(ENDOFSYS/FLDPAGE) * 290 * JLE BADPAGE jump if virtual system * 291 * * 292 ********************************************************************************** 293 294 * \ / 02700 000D00C5 295 NOHOPE HALT HALTM00C5 parity error in OS tables 296 * --- 297 298 ********************************************************************************** 299 * * 300 * Here, we have an error in the resident nucleus. We will * 301 * correct it using checksums that were generated at boot time. * 302 * The only tricky thing is that we will map the page into address * 303 * zero, since the mapping at its usual address is read/only. * 304 * * 305 ********************************************************************************** 306 00002701 307 FIXRES LABEL 02701 5C001C6B 308 CMZ BOOTFLAG check for still in bootstrap 02702 FE022704 309 JEQ FIXRES1 jump if checksums exist 00002703 310 NOFIXRES LABEL 02703 000D00C7 311 HALT HALTM00C7 error while boot in progress 312 * --- 313 00002704 314 FIXRES1 LABEL 02704 60001CF6 0 315 LD R0 FLAGS get the dispatcher flags word 02705 F63C2703 0 316 JBT R0/BIT FLCHKSUM NOFIXRES jump if checksum words are bad 317 PLOCK MEMCHKLOCK exclude other CPU's 02706 0CC00000 317 IOFF 02707 D1C01CC9 317 SETT MEMCHKLOCK 02708 FE0C270A 317 JNE MA(2+DISPW MA 0) 02709 DC40308B 317 CALLNP LOCKWAIT 0270A 60C40080 3 IMM 318 LD PFPTR MONPF 0270B 80D78805 6 BASE 319 PFRC SP,TEMP save old page file value 0270C 60178801 0 6 BASE 320 LD R0 SP,MERRPFILE get page map value of page in error 0270D 28020008 0 IMM 321 BSUB R0 1*PFROBIT remove the read-only bit 0270E 00D20000 0 REG 322 LDPF R0 map the page into address zero 0270F 6089ACA0 2 6 ZBM 323 LD R2 SP,MERRVADR/DISPFIELD R2 = failing address location 02710 D1568800 2 BASE 324 STMW R2,0 set all bits of bad word to one 02711 D0168800 2 BASE 325 INC R2,0 verify, then set all bits to zero 02712 5C168800 2 BASE 326 CMZ R2,0 see if it worked 02713 FE022715 327 JEQ FIXRES2 jump if all is ok 02714 000D00C6 328 HALT HALTM00C6 uncorrectable error in resident system 329 * --- 330 00002715 331 FIXRES2 LABEL 1 Assembler C9208 VRM, System C9303 (18 Mar 93) 12-May-93 12:30 PAGE 427 (PARITYERROR) F 25 Memory Parity Error Interrupt Handler 02715 60499E70 1 6 ZBM 332 LD R1 SP,MERRVADR/FLDPAGE page number, without high bit 02716 60621CC1 1 1 333 LD R1 MEMCKSUM(R1-RESIDENT/FLDPAGE) checksum value 02717 600403FF 0 IMM 334 LD R0 WPP-1 loop index 00002718 335 CKSUMLOOP LABEL 02718 74560800 1 0 BASE 336 XOR R1 R0,0 calculate XOR of all words 02719 FA262718 0 337 JDR R0 CKSUMLOOP do all words in page 0271A E4568800 1 2 BASE 338 ST R1 R2,0 save correct value in word 0271B 00D78805 6 BASE 339 LDPF SP,TEMP restore page file location 340 PUNLOCK MEMCHKLOCK allow other CPU's 0271C EC001CC9 340 STZ MEMCHKLOCK 0271D 0C800000 340 ION 0271E 60040001 0 IMM 341 LD R0 MERRFIX 0271F E4098840 0 6 ZBM 342 ST R0 SP,MERRACTION say we fixed it 02720 FE0E2751 343 JMP FLUKE1 but treat like fluke 344 * --- 345 346 ********************************************************************************** 347 * * 348 * Here, we have a parity error on a pageable page. We will * 349 * remove that page from everybody's working set. But first, scan * 350 * the current process's VASP list to find the block number, then * 351 * find the PPL and mark the page as bad. When we call DISCARDPAL * 352 * for the last PAL, the DONEPPL routine will notice that the page * 353 * is bad and quarantine it. *