1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 1 (PROP) F 2 2 INPUT SOURCE.OPSYS:PROP 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 3 4 5 6 * DDDD III SSS K K BBBB OOO OOO TTTTT 7 * D D I S S K K B B O O O O T 8 * D D I S K K B B O O O O T 9 * D D I SSS KK BBBB O O O O T 10 * D D I S K K B B O O O O T 11 * D D I S S K K B B O O O O T 12 * DDDD III SSS K K BBBB OOO OOO T 13 14 15 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 2 F 0 17 18 BLOCK 19 20 NOLIST CREF 21 INPUT .SYS:MACROS 1 * Including MACROS.ASSEM Version A8607. 22 INPUT SOURCE.OPSYS:MACHDEFS 23 INPUT SOURCE.OPSYS:IODEFS 24 INPUT SOURCE.OPSYS:DISKDEFS 25 INPUT SOURCE.OPSYS:VIRTDEFS 26 INPUT SOURCE.OPSYS:OPRQINFOMACS 27 INPUT SOURCE.OPSYS:HALTDEFS 28 INPUT SOURCE.OPSYS:PAGEDEFS 29 INPUT SOURCE.OPSYS:IBLOCK 30 LIST CREF 31 INPUT BOOT.OPSYS:ERRLOGBLK 32 INPUT BOOT.OPSYS:DISKCB 33 34 VOLINFORD LIST 34 ********************************************************************************** 34 * * 34 * Information returned on volumes by the volume * 34 * information request. * 34 * * 34 ********************************************************************************** 34 00000400 34 VIPROTO BASE R0 000800F0 0 ZBM 34 VIWORDZ BSSB 32-17 00081C10 0 ZBM 34 VIINHIB EQU VIWORDZ/BIT 31 on if access inhibited 00081A10 0 ZBM 34 VINOTMNT EQU VIWORDZ/BIT 30 on if not completely mounted 00081810 0 ZBM 34 VISYSVOL EQU VIWORDZ/BIT 29 on if the system volume 00081410 0 ZBM 34 VIQDW EQU VIWORDZ/BIT 27 on if writes queued 00081210 0 ZBM 34 VIQDR EQU VIWORDZ/BIT 26 on if reads queued 00081010 0 ZBM 34 VIADTBZY EQU VIWORDZ/BIT 25 on if ADT access busy 00080E10 0 ZBM 34 VIMAIM EQU VIWORDZ/BIT 24 on if maintenance mounted only 00081F10 0 ZBM 34 VIENTLEN BSSB 17 length of this entry in words 00160801 0 BASE 34 VIDNAME BSS 1 "name" of the drive (PAK6) 00160802 0 BASE 34 VIVNAME BSS 2 volume name (PAK12) 00160010 0 CACH 34 VIVNUM BSSB 8 system volume index number 00081184 0 ZBM 34 VIBUSY BSSB 32-8 volume busy counter 00160805 0 BASE 34 VIFREEBLK BSS 1 free blocks on the volume 00160806 0 BASE 34 VITOTBLK BSS 1 total blocks on volume 00160807 0 BASE 34 VIACCTNUM BSS 1 number of accounts on the volume 00160808 0 BASE 34 VIREALNAME BSS 2 real name on volume label 34 DRCT 0000000A ABS 34 VILENGTH EQU DISPW VIPROTO 00000004 ABS 34 VILOG EQU VILENGTH LOG 2 34 ORG VIPROTO reclaim space 35 36 START WRITEOUT to write the boot block to disk 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 3 F 0 38 39 ********************************************************************************** 40 * * 41 * Revision Date * 42 * -------- ---- * 43 * B1.4 30 Jun 83 * 44 * Changes in disk driver clear fault and re-zero * 45 * logic. * 46 * B1.5 26 Aug 84 * 47 * Changes in OPENDISK to copy pack size to DCB. * 48 * These changes also went out in a version that * 49 * did not have its version updated from B1.4. * 50 * B1.6 08 Sep 84 * 51 * Changes to save space. * 52 * B2.0 10 Sep 84 * 53 * Changes to the crashdump section of this * 54 * code. In addition to dumping the resident * 55 * system, the virtual FBIs and virtual user * 56 * pages for each CPU are also dumped (see * 57 * notes with the crashdump section). * 58 * B2.1 04 Dec 84 * 59 * Changes to IBLOCK and SRCHDIR to read * 60 * and save time zone. * 61 * B2.2 07 Jul 86 * 62 * Reassembled to incorporate altered * 63 * disk driver. Has fix to prevent CPU * 64 * errors on uninitialized memory. RC * 65 * B2.3 13 Aug 86 * 66 * Reassembled to incorporate another disk * 67 * driver modification. RC * 68 * B2.4 10 Dec 86 * 69 * Added bit in Disk Control Block that indicates * 70 * to ignore the substitution list. JB. * 71 * B2.5 19 Dec 86 * 72 * Reassembled to include new OPENDISK that * 73 * properly initializes the above flag. RC * 74 * B2.6 07 Jun 88 * 75 * Special check for RFP doing BOOT 4 thru * 76 * BOOT 7 removed. Now just goes to OPL. * 77 * Reassembled to include new SALON with * 78 * TSELECT modified to work with SMD-ESDI * 79 * interface equipped drives. DH, RC * 80 * B2.7 26 Oct 88 * 81 * Reassembled to use new SALON with bug * 82 * fix in TSELECT. RC, DH * 83 * B2.8 01 Nov 88 * 84 * Minor changes. RC * 85 * B2.9 22 Mar 89 * 86 * Reassembled to use new SALON with bug * 87 * fix in SEGCORRECT. RC * 88 * B3.0 15 Mar 90 * 89 * Reassemble to use new SALON with no * 90 * retry on error option. CG * 91 * B3.1 01 Aug 91 * 92 * Reassemble to get new version of OPENDISK. * 93 * * 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 4 F 0 94 ********************************************************************************** 95 3BDB4E00 ABS 96 ASSYTIME EQU 03BDB4E00 time of assembly 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 5 F 0 99 100 BLOCK beginning of bootstrap routine 101 102 ENTRY BOOT official starting location 103 104 ORG BOOTLOC loaded at this location 105 106 ********************************************************************************** 107 * * 108 * BOOTSTRAP ROUTINE * 109 * This program resides on block BOOTDA of each MS * 110 * device on the system. A copy of it is loaded by the * 111 * prom resident bootstrap (PROMBOOT) provided by the SSU. * 112 * The PROMBOOT routine starts all CPUs at BOOTLOC in this * 113 * code. We, in turn, find and load the system software * 114 * or do a crashdump. * 115 * * 116 * We look at the four front panel switches to determine * 117 * what to load. PROMBOOT has already looked and we only get * 118 * here for 0:7 and 0F (8:0E are reserved for tape boot). We * 119 * decode these switches using the SYSNAMES table as follows: * 120 * switches RFP FP * 121 * -------- --- -- * 122 * 0 SYSTEM SYSTEM * 123 * 1 OLDSYSTEM OLDSYSTEM * 124 * 2 EXPSYSTEM EXPSYSTEM * 125 * 3 OPL OPL (DISKCOPY) * 126 * 4 OPL OPL (DISKINIT) * 127 * 5 OPL OPL (DISKTOTAPE) * 128 * 6:7 OPL OPL (halts) * 129 * 0F * 130 * * 131 ********************************************************************************** 132 133 ********************************************************************************** 134 * * 135 * Note: This code may be run in a memory without proper * 136 * parity on the existing contents. We must not store * 137 * partial words into an area we haven't initialized * 138 * because if we do we might die on parity errors. * 139 * * 140 ********************************************************************************** 141 142 ********************************************************************************** 143 * * 144 * This map describes the contents of the page file * 145 * for each CPU as it is set up by BOOTSTRAP and INITIAL. * 146 * The first CPU through the locks runs the code that loads * 147 * the system code file from mass storage. Each protected * 148 * page in the system code file is loaded into the next * 149 * available physical page. This table is roughly in the * 150 * order that this loading takes place. Note that the * 151 * system initial routine may move various of its pages * 152 * into other memories to distribute the load. * 153 * The windows are only temporarily assigned for the * 154 * boot operation. The physical pages used are freed by * 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 6 F 0 155 * the initial routine. They bear the same names as the * 156 * windows used by the system because they have a similar * 157 * purpose. They are, however, handled by quite different * 158 * mechanisms. * 159 * * 160 * VPN MA VIRTUAL PAGE PHYSICAL LOCATION * 161 * --- -- ------- ---- -------- -------- * 162 * 0 00000 PROM BOOT PAGE 0 * 163 * 4 01000 BOOTSTRAP PAGE 1 * 164 * 2 00800 WINDOW 1 PAGE 2 * 165 * 3 00C00 WINDOW 2 PAGE 3 * 166 * 6 01800 CIX - - - * 167 * 7 01C00 HEADPAGE next available page * 168 * 8 02000 SYSTEM INITIAL next available page * 169 * 9 02400 first page for system next available page * 170 * . . . * 171 * X XXXXX final resident page next available page * 172 * 1 00400 (CPUPAGEs except first CPU) next available page(s) * 173 * 5 01400 unused by bootstrap --- * 174 * 1 00400 CPUPAGE #1 same page as HEADPAGE * 175 * X XXXXX (non-resident pages) (no physical page assigned) * 176 * X XXXXX (other CPUPAGEs) for MEMLIST (as earlier assigned) * 177 * * 178 ********************************************************************************** 179 180 181 ********************************************************************************** 182 * Good afternoon ladies, gentlemen, and CPUs. Welcome * 183 * to the Nth annual running of the interlock races. * 184 * On your mark . . . Get set . . . Proceed. * 185 * The SSU has built a configuration table before we * 186 * arrive here. PROMBOOT leaves a valid stack pointer * 187 * in R6 which we use. PROMBOOT sends all of the CPUs * 188 * here and we must sort them out. * 189 ********************************************************************************** 190 00001000 191 BOOT LABEL 01000 FE0E1004 192 JMP OVERVERSN jump over the version name 193 * --- 194 01001 42332E31 195 VERSION TEXTZ "B3.1 9108" 196 * note that the backup routines (both 197 * online and offline) and the mount 198 * code sort by UCPR2 on version to 199 * find the newest version of DISKBOOT. 200 00001004 201 OVERVERSN LABEL 202 * \ / arrive here with SP loaded by PROMBOOT 01004 D00013D9 203 INC NUMCPUS how many entrants in this rat race? 204 * \ / 205 206 ********************************************************************************** 207 * If room existed in the bootstrap code, we would place * 208 * an instruction test here that would check all of the instructions * 209 * and address modes that the bootstrap requires. This code would * 210 * be surrounded by an interlock so that the CPUs would not * 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 7 F 0 211 * interfere with each other as they ran the tests. * 212 ********************************************************************************** 213 214 ********************************************************************************** 215 * CPU INTERLOCK * 216 * This SETT checks the interlock to determine what CPU will * 217 * actually run the DiskBoot code. LOCKWORD (and the above * 218 * counter) is initialized to zero by being assembled that way, * 219 * since no practical initialization method exists in the * 220 * bootstrap environment. The first CPU will fall through the * 221 * SETT/JEQ pair and start executing the major boot strap code. * 222 * All other CPUs will see that LOCKWORD is already set and go * 223 * to a holding loop where they will wait for the hard working * 224 * CPU to clear LOCKWORD, indicating that the boot is now * 225 * complete and they can load their tables. * 226 ********************************************************************************** 227 228 * \ / 01005 D1C013D8 229 SETT LOCKWORD see if we're first 01006 FE02103F 230 JEQ OTHERWAY jump if someone else made it through 231 * \ / 232 233 ********************************************************************************** 234 * * 235 * The first CPU is nominated to load up the resident * 236 * part of the system and the initializer. * 237 * All other CPUs must acquire a CPUPAGE and wait for us. * 238 * * 239 ********************************************************************************** 240 241 * \ / 01007 DC4011C8 242 CALLNP DISPLAY flash the lights to indicate progress 01008 53515545 243 ASCII 2,SQUEAK "SQUEAK " 0100A 20200000 244 VFD " " AND 03F3F0000 245 0100B 60000313 0 246 LD R0 FPSWITCHX get boot switch register 0100C 604A3840 1 0 CBM 247 LD R1 R0/SSUSWITCH R1 = boot option switches 0100D 6444000F 1 IMM 248 CPR R1 0F is this a crash dump? 0100E FE02104A 249 JEQ CRASHDUMP jump if so 250 * \ / 251 252 ********************************************************************************** 253 * * 254 * Boot from front panel. If switch setting > max, call OPL * 255 * * 256 ********************************************************************************** 257 258 * \ / 0100F 50440003 1 IMM 259 MIN R1 MAXFPSYS Ensure values too large go to OPL 01010 622213CC 01 1 260 LD2 R0 SYSNAMES(R1) choose the file to load 01011 E6000314 01 261 ST2 R0 CALLNAME set desired name 01012 DC40108A 262 CALLNP READCCB find the file and read the CCB 01013 FE0E103E 263 JMP FILEBAD disk error during read of CCB 264 * \ / 265 266 ********************************************************************************** 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 8 F 0 267 * * 268 * We have found a code file that we will try to load and * 269 * run. We start by cleaning out the tables in IBLOCK that * 270 * will pass to the system the page file information (and will * 271 * be used by power fail restart to restore our brains). * 272 * * 273 ********************************************************************************** 274 275 * \ / 01014 60440200 1 IMM 276 LD R1 NPS*CPW 01015 60840380 2 IMM 277 LD R2 ADR PFMAP 01016 FE580000 278 CFILL 0 zero out monitor page table 279 01017 60440040 1 IMM 280 LD R1 NUMSLOTS*CPW 01018 60840360 2 IMM 281 LD R2 ADR CPUPT 01019 FE580000 282 CFILL 0 zero out CPUPAGE table 283 * \ / 284 285 ********************************************************************************** 286 * * 287 * Scan the CCB. * 288 * For each page that exists and is "protected", acquire * 289 * the next physical page, load the page file, load PFMAP, * 290 * and read the MS block into memory. * 291 * The protected pages of the code file are loaded, * 292 * each page going into the next available physical page. * 293 * Each time that a physical page is used, we advance the * 294 * pointer to the next available physical page. Note that * 295 * the physical page pointer is used by the system to see * 296 * where we left off using pages. * 297 * * 298 ********************************************************************************** 299 300 * \ / 0101A 60C40087 3 IMM 301 LD PFPTR PNHEADPAGE start with first loadable page 0000101B 302 BLSCANEXT LABEL 0101B 64C40100 3 IMM 303 CPR PFPTR PFSIZE check for beyond PF end 0101C FE061030 304 JGE BLDUNLODN jump if done 0101D 60A60780 2 3 305 LD R2 WNDO1(CCBPAGE0)(-MONPF)(PFPTR) fetch the block number 0101E FA82102F 2 306 JEQZ R2 BLNOPC jump if no page corresponding 0101F F280102F 2 307 JBF R2/CCBPROTECT BLNOPC jump if not a protected page 01020 EC0A8080 2 CBM 308 STZ R2/VOLFIELD clear the volume number field 01021 BD400311 5 309 INCL R5 PHPNAV get page map value for next avail page 01022 64C40087 3 IMM 310 CPR PFPTR PNHEADPAGE check page being loaded 01023 FE0A1025 311 JLE NOPROTECT these low guys are read-write 01024 7D420008 5 IMM 312 IOR R5 PFROBIT*1 make resident monitor bullet proof 00001025 313 NOPROTECT LABEL 01025 00D34000 5 REG 314 LDPF R5 load page file for this page 01026 E5660300 5 3 315 ST R5 PFMAP(-MONPF)(PFPTR) save page file data 01027 E4DF8001 3 6 STAK 316 ST PFPTR STAK SP,1 save R3 because READ gets it 01028 DC0011D4 317 CALL READ now read in the page 01029 41528000 2 REG 318 PARV R2 MS block number 0102A 41534000 5 REG 319 PARV R5 page number 0102B 4100031F 320 PAR BOOTFBIBF location for FBI 0102C 41440014 IMM 321 PARV FBITCODED type of block expected 0102D 4000103E 322 PARL FILEBAD error address 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 9 F 0 323 0102E 60DF8001 3 6 STAK 324 LD PFPTR STAK SP,1 restore R3 325 * \ / 326 0000102F 327 BLNOPC LABEL 0102F FAE0101B 3 328 IRJ PFPTR BLSCANEXT advance the pointer 329 * --- 330 331 332 ********************************************************************************** 333 * * 334 * Release the other CPUs from their wait loop, then go * 335 * off to the code file that we just loaded. * 336 * * 337 ********************************************************************************** 338 00001030 339 BLDUNLODN LABEL 01030 DC4011C8 340 CALLNP DISPLAY show operator our progress through boot 01031 494E4954 341 ASCII 2,INITIALI "INITIALIZE" 01033 1A050000 342 VFD "ZE " AND 03F3F0000 01034 60040BE8 0 IMM 343 LD R0 ADR WNDO1(CCBINFO) get pointer to the info block 01035 6056080A 1 0 BASE 344 LD R1 R0,CCB2TRANS fetch secondary transfer address 01036 E44013DA 1 345 ST R1 OTHERSTART save starting point for other cpu's 01037 60481F18 1 0 ZBM 346 LD R1 R0,CCBPTRANS load our starting point 01038 EDC0031E 347 STW RELESEFLAG prevent escape from initial code 01039 EC0013D8 348 STZ LOCKWORD let other CPUs use the tables 0103A D04013D9 349 DEC NUMCPUS count ourselves 0000103B 350 WAIT2ZERO LABEL wait for other CPUs to load page files 0103B 5C0013D9 351 CMZ NUMCPUS check count of CPUs not yet done 0103C FE04103B 352 JGT WAIT2ZERO loop until all others done 0103D 5C924000 1 REG 353 LDPC R1 go off to the primary entry point 354 * --- 355 356 ********************************************************************************** 357 * * 358 * The data file is bad. Display the error on the SSU * 359 * front panel. * 360 * * 361 ********************************************************************************** 362 0000103E 363 FILEBAD LABEL 0103E 00024018 364 HALT HALTB4018 MS error reading system code file 365 * --- 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 10 F 0 367 368 ********************************************************************************** 369 * * 370 * This is the path taken by all CPUs except the first. * 371 * * 372 ********************************************************************************** 373 0000103F 374 OTHERWAY LABEL 0000103F 375 OTHERWAIT LABEL 0103F 5C0013D8 376 CMZ LOCKWORD are tables ready? 01040 FE0C103F 377 JNE OTHERWAIT jump if not - wait 378 * \ / 379 380 ********************************************************************************** 381 * * 382 * The primary CPU has finished its table building. We * 383 * now load up the necessary page file contents then go to the * 384 * secondary entry point of the file that was just loaded. * 385 * * 386 ********************************************************************************** 387 388 * \ / 01041 60C40080 3 IMM 389 LD PFPTR MONPF start with monitor page zero 00001042 390 LOADOTHER LABEL 01042 64C40100 3 IMM 391 CPR PFPTR PFSIZE all loaded? 01043 FE061048 392 JGE ENDLOAD jump if yes 01044 60260300 0 3 393 LD R0 PFMAP(-MONPF)(PFPTR) get page file value for this page 01045 FA021047 0 394 JEQZ R0 NOLOADPF jump if no page here 01046 00D20000 0 REG 395 LDPF R0 else load the page file 00001047 396 NOLOADPF LABEL 01047 FAE01042 3 397 IRJ PFPTR LOADOTHER and do it again 398 * --- 399 00001048 400 ENDLOAD LABEL 01048 D04013D9 401 DEC NUMCPUS say we got through here 01049 5C8013DA 402 LDPC OTHERSTART and go jump into the system 403 * --- 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 11 F 0 405 406 ********************************************************************************** 407 * * 408 * The front panel switches indicate that a crashdump is * 409 * requested. The crashdump consists of the following: the * 410 * resident OS found by way of the PFMAP array, the physical * 411 * pages that contain the FBIs for each page of memory and, last * 412 * but not least, the virtual free storage for each running user * 413 * for each CPU. So upon completion, the crashdump file looks * 414 * like this: * 415 * * 416 * Pages 0:7F - These pages contain the resident image of * 417 * the operating system. Note that the * 418 * CPUPAGES are recorded in this area. Each * 419 * CPUPAGE has been mapped in at another * 420 * memory address (other than 0400) so that * 421 * the space not required for the CPUPAGE * 422 * variables can be freed. One is mapped in * 423 * at HEADPAGE. A comparison between CPUPT * 424 * and PFMAP will show where the others are * 425 * to be found. * 426 * Pages 80:BF - These pages are used to hold the four * 427 * pages of virtual free storage assigned * 428 * to each user. These locations are * 429 * indexed by slot number of each CPU and * 430 * may be empty depending whether a user * 431 * had his variables mapped into this CPU. * 432 * Note that slot 0 can never be a CPU * 433 * therefore pages 80:83 will always be * 434 * blank. * 435 * Pages C0:FF - Unused and reserved for future expansion. * 436 * Pages 100:141 - These pages will contain the images of the * 437 * FBIs for every resident page. The PPLs * 438 * determine the mapping of FBIs. * 439 * * 440 ********************************************************************************** 441 0000104A 442 CRASHDUMP LABEL 0104A DC4011C8 443 CALLNP DISPLAY tell operator what's happening 0104B 43524153 444 ASCII 2,CRASH DU "CRASH DUMP" 0104D 0D100000 445 VFD "MP " AND 03F3F0000 0104E 620013D4 01 446 LD2 R0 CDNAME name of crashdump file 0104F DC40108A 447 CALLNP READCCB find file and read CCB 01050 FE0E1088 448 JMP CDFILEBAD disk error reading CCB 449 * \ / 450 451 ********************************************************************************** 452 * * 453 * Scan the saved page map of the monitor address space * 454 * (PFMAP) and write anything there onto the corresponding data * 455 * page of the crashdump file, if the page exists. * 456 * * 457 ********************************************************************************** 458 459 * \ / 01051 DC00106F 460 CALL DUMPBLKS write out the resident OS 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 12 F 0 01052 41000380 461 PAR PFMAP address of the page map values array 01053 41440000 IMM 462 PARV OSINDX index into the CCB to place pages 01054 40440080 IMM 463 PARVL NPS maximum number of pages to write 464 * \ / 465 466 ********************************************************************************** 467 * * 468 * Here it is necessary to write out all the FBI blocks. * 469 * Note that the DUMPBLKS routine will write nothing if the page * 470 * is non-existent (not in use). * 471 * * 472 ********************************************************************************** 473 474 * \ / 01055 60C40087 3 IMM 475 LD R3 PNHEADPAGE get page number for headpage 01056 00C00387 476 LDPF HEADPMV load the page file for headpage 01057 DC00106F 477 CALL DUMPBLKS write out the FBIs 01058 41001C80 478 PAR FBIPOINTRS address of the page map values array 01059 41440100 IMM 479 PARV FBIINDX index into the CCB to place pages 0105A 40440040 IMM 480 PARVL PPLMAPSIZE maximum number of pages 0105B 61C4000F 7 IMM 481 LD R7 NUMSLOTS-1 set up out slot counter 482 * \ / 483 484 ********************************************************************************** 485 * * 486 * Here we need to scan all the slots and determine if a * 487 * particular slot contains a CPU or not. If not, we ignore * 488 * it. If so, we must do the following: map CPUWNDO to the * 489 * local variables for that CPU, from there we can dump the * 490 * user pages. Only pages actually assigned to a particular * 491 * process will get dumped. * 492 * * 493 ********************************************************************************** 494 495 * \ / 496 0000105C 497 SLOTLOOP LABEL 0105C 602E0370 0 7 498 LD R0 IBSLOTS(R7) get the WRU 0 response 0105D 600A0040 0 0 CBM 499 LD R0 R0/WRU0TYPE isolate the board type 0105E 64040002 0 IMM 500 CPR R0 SLTTCPU is this a CPU ? 0105F FE0C1069 501 JNE NOTACPU if not, then just ignore it 01060 60C40088 3 IMM 502 LD R3 PNCPUWNDO page number for mapping CPU pages 01061 00EE0360 7 503 LDPF CPUPT(R7) window now contains the local variables 01062 6093C000 2 7 REG 504 LD R2 R7 use the value of R7 before the call 01063 DC00106F 505 CALL DUMPBLKS write out the user pages 01064 4100201A 506 PAR CPUWNDO(CMAPDISP) address of the page map values array 01065 1C840004 2 IMM 507 MUL R2 MAXMAPVALS we now have a displacement 01066 18840080 2 IMM 508 ADD R2 CPUINDX add in a base value 01067 41528000 2 REG 509 PARV R2 CCB locations to start writing to 01068 40440004 IMM 510 PARVL MAXMAPVALS maximum pages we will write out 511 * \ / 512 00001069 513 NOTACPU LABEL 01069 FBE6105C 7 514 JDR R7 SLOTLOOP cover all the slots on the machine 515 * \ / 516 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 13 F 0 0106A DC4011C8 517 CALLNP DISPLAY tell the world we're done 0106B 44554D50 518 ASCII 2,DUMP DON "DUMP DONE " 0106D 05200000 519 VFD "E " AND 03F3F0000 0106E 003FFFFF 520 HALT NOHALTCODE halt, leave message in lights 521 * --- 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 14 F 0 523 524 ********************************************************************************** 525 * * 526 * This is the DUMPBLKS routine. This routine will * 527 * write individual resident pages into a crashdump file so * 528 * that they may be analyzed at a later date. If either * 529 * the page map value is zero or no page exists in the dump * 530 * file to write to, the write is not performed. Note that * 531 * the read is done only to get the FBI. By doing this, we * 532 * can use normal on-line code to read the dump file. * 533 * Call: * 534 * R4 => DCB * 535 * * 536 * CALL DUMPBLKS * 537 * PAR * 538 * PARV * 539 * PARVL * 540 * * 541 * Eats R0:R3, R5 * 542 * Stack required = 12 * 543 * 2 + max ( READ (10), WRITE(10) ). * 544 * * 545 ********************************************************************************** 546 547 BLOCK DUMPBLKS subroutine 548 ENTRY DUMPBLKS 549 ENTRY CDFILEBAD 550 551 BEGFRAME 00178801 6 BASE 552 CCBINDX BSS 1 index into the CCB 553 ENDFRAME 554 0106F DD1F8002 6 STAK 555 DUMPBLKS ENTR PUSH 01070 C10013D7 556 STP PMARRAY address of the page map values 01071 C1578801 6 BASE 557 STPV SP,CCBINDX save index into the CCB 01072 C0575001 5 REG 558 STPVL R5+1 maximum pages to dump (adjust for loop) 559 * \ / 560 00001073 561 DUMPMORE LABEL 01073 5C3A13D7 5 @ 562 CMZ @PMARRAY(R5) is there a page map value? 01074 FE021086 563 JEQ NOCDWRITE jump if none exists 01075 60978801 2 6 BASE 564 LD R2 SP,CCBINDX starting index 01076 18934000 2 5 REG 565 ADD R2 R5 starting at the tail 01077 60A40800 2 2 566 LD R2 WNDO1(R2) get the CCB value 01078 FA821086 2 567 JEQZ R2 NOCDWRITE jump if no corresponding code page 01079 608A9180 2 2 CBM 568 LD R2 R2/MSBLKFIELD mask off all but block number 0107A E48013C0 2 569 ST R2 DATEMP save this value away 0107B DC0011D4 570 CALL READ call read to get the FBI 0107C 414013C0 571 PARV DATEMP pass disk address 0107D 414013BF 572 PARV PFWNDO2 indicate read data into window 2 0107E 4100031F 573 PAR BOOTFBIBF where to save the FBI 0107F 41440014 IMM 574 PARV FBITCODED expecting code data block 01080 40001088 575 PARL CDFILEBAD where to go on an error 576 01081 DC001201 577 CALL WRITE write out the memory page 01082 414013C0 578 PARV DATEMP indicate disk address 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 15 F 0 01083 417A13D7 5 @ 579 PARV @PMARRAY(R5) pass PMV for resident page 01084 4100031F 580 PAR BOOTFBIBF and use the same FBI we read in 01085 40001089 581 PARL CDNOWRITE where to go on an error 582 * \ / 583 00001086 584 NOCDWRITE LABEL 01086 FB661073 5 585 JDR R5 DUMPMORE jump if more blocks to write out 01087 5D1F8002 6 STAK 586 LEAVE POP leave this mess 587 * --- 588 589 ********************************************************************************** 590 * * 591 * We could not read the CCB for the crash dump file. The * 592 * error code from the disk driver is in R0. This is likely to * 593 * mean a very serious problem, so you probably won't need the * 594 * crash dump to figure it out! * 595 * * 596 ********************************************************************************** 597 00001088 598 CDFILEBAD LABEL 01088 00024021 599 HALT HALTB4021 600 * --- 601 602 ********************************************************************************** 603 * * 604 * We encountered some type of error while trying to write * 605 * out the crashdump. The error code that was returned by the * 606 * disk driver is in R0. See the error code definitions at the * 607 * beginning of the disk driver (SALON). Examples of possible * 608 * causes are disk errors, disk write protected, and memory * 609 * parity errors. * 610 * * 611 ********************************************************************************** 612 00001089 613 CDNOWRITE LABEL 01089 00024022 614 HALT HALTB4022 615 * --- 616 617 END DUMPBLKS subroutine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 16 F 0 619 620 ********************************************************************************** 621 * * 622 * Routine to search the directory for the indicated * 623 * file and read the CCB into window 1. * 624 * Call: * 625 * R4 => DCB * 626 * LD2 R0 * 627 * CALLNP READCCB * 628 * * 629 * * 630 * Eats R0:R3 * 631 * stack required = 11 * 632 * 1 + max( (READ (10), WRITE (10) ) * 633 * * 634 ********************************************************************************** 635 636 BLOCK read CCB routine 637 ENTRY READCCB 638 639 BEGFRAME 640 ENDFRAME 641 0108A DD5F8001 6 STAK 642 READCCB ENTRNP PUSH 0108B E60013C7 01 643 ST2 R0 THENAME(NAME) place into name block 644 645 * Call the directory searcher to find where the file is. 646 0108C 610013C1 4 647 LD R4 DISKCB R4 => disk control block 0108D 614413C2 5 IMM 648 LD R5 ADR THENAME get pointer to name block 0108E DC401123 649 CALLNP SRCHDIR look over the directory 0108F FAF21093 3 650 JNZA R3 FOUNDIT jump if entry found 651 * \ / 652 653 ********************************************************************************** 654 * * 655 * In the event of an error in the booting process we will * 656 * halt. The halts due to disk structure errors and disk errors * 657 * are listed here. In this table, the error halts marked with * 658 * an "*" are generated by the ADD at NOGO from the SRCHDIR * 659 * error code. The others are listed for convenience. * 660 * The error codes are: * 661 * code meaning * 662 * ---------- ------------------------------------ * 663 * HALT B4011 * disk error: volume label * 664 * HALT B4012 * disk error: security block * 665 * HALT B4013 * disk error: IDX * 666 * HALT B4014 * disk error: directory * 667 * HALT B4015 * system account not found * 668 * HALT B4016 * system code file not found * 669 * * 670 * HALT B4018 disk error: system file's CCB or data * 671 * HALT B4019 system file not a CODE file * 672 * * 673 ********************************************************************************** 674 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 17 F 0 675 * \ / 01090 18001092 0 676 ADD R0 NOGOHALT R0 = HALT instruction 01091 5D520000 0 REG 677 XCT R0 halt 678 * --- 01092 00024010 679 NOGOHALT HALT HALTB4011-1 prototype of HALT instruction 680 681 ********************************************************************************** 682 * * 683 * The file has been found -- check to see that it's a * 684 * program image file and if so, load the CCB. * 685 * * 686 ********************************************************************************** 687 688 * R3 => file directory entry 689 00001093 690 FOUNDIT LABEL 01093 6008EA60 0 3 ZBM 691 LD R0 R3,FDET get the type of entry 01094 64040003 0 IMM 692 CPR R0 HTYPECODE ensure that it's a code file 01095 FE021097 693 JEQ FOUNDCODE jump if so 01096 00024019 694 HALT HALTB4019 file found was not a code file 695 * --- 696 697 ********************************************************************************** 698 * * 699 * Read the CCB into window 1. Verify that the FBI is * 700 * reasonable. * 701 * * 702 ********************************************************************************** 703 00001097 704 FOUNDCODE LABEL 01097 DC0011D4 705 CALL READ request mass storage read 01098 4108D185 3 ZBM 706 PAR R3,FDDA code control block MS pointer 01099 414013BE 707 PARV PFWNDO1 page number for data block 0109A 4100031F 708 PAR BOOTFBIBF put the FBI here 0109B 41440013 IMM 709 PARV FBITCCB indicate type requested 0109C 4000109E 710 PARL CCBRDERR error address 711 * \ / 0109D 19C40001 7 IMM 712 ADD R7 1 advance to happy return 0000109E 713 CCBRDERR LABEL error reading CCB 0109E 5D1F8001 6 STAK 714 LEAVE POP return to caller 715 * --- 716 717 END of read CCB routine 718 INPUT BOOT.OPSYS:OPENDISK.ASSEM 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 18 (OPENDISK.ASSEM) F 14 open disk routine 3 4 ********************************************************************************** 5 * * 6 * Revision Date * 7 * -------- ---- * 8 * 1.0 01 Apr 82 * 9 * First release as separate file. * 10 * * 11 * 1.1 26 Oct 82 * 12 * References to PFWNDOx made via OPLVECTORS * 13 * * 14 * 1.2 27 Jun 83 * 15 * WRUTYPE now WRU0TYPE. (no change in code) * 16 * * 17 * 1.3 27 Oct 83 * 18 * DCB now gets physical pack size (from pack label) * 19 * * 20 * 1.4 17 Dec 86 * 21 * Flags words in DCB now cleared. RC * 22 * * 23 * A8912 14 Dec 89 * 24 * Clear LUN and MAIMNT fields in DCB, which are defined by ONPL. CG * 25 * * 26 * A9003 14 Mar 90 * 27 * Clear NORETRY flag in DCB. CG * 28 * A9108 01 Aug 91 * 29 * Added code to clear DCBSCSIbit to indicate NOT aSCSI disk drive. * 30 * A9206 10 Jun 92 * 31 * Added code to clear the entire DCB block, fixes problem of storing * 32 * into uninitialized memory. * 33 * * 34 ********************************************************************************** 35 36 ********************************************************************************** 37 * * 38 * OPENDISK. * 39 * This routine will initialize a disk control block. * 40 * It will parse a disk name, read the pack label to set the * 41 * number of sectors per track and tracks per cylinder, and * 42 * will build the substitution list. * 43 * Call: * 44 * LD R4 pointer to disk control block * 45 * LD R0 pak6 disk name (DSKscu), or zero if DCBPFILE * 46 * and DCBUNIT are already set. * 47 * LD R1 pointer to area to use for substitution list, * 48 * or zero to use system's area. * 49 * LD R2 size of area for substitution list (only if * 50 * R1 is non-zero). * 51 * CALLNP OPENDISK * 52 * JNEZ R0 * 53 * * 54 * Return codes (in R0): * 55 * * 56 * 0 - Everything went well. * 57 * 1 - Invalid format of disk name. * 58 * 2 - Requested device is not a disk. * 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 19 (OPENDISK.ASSEM) F 14 open disk routine 59 * 3 - Disk is offline. * 60 * 4 - Error reading pack label. * 61 * 5 - Error reading volume label. * 62 * 6 - Error reading substitution block. * 63 * 7 - Not enough space for substitution list. * 64 * * 65 * Eats R0-R3. * 66 * stack required = 13 * 67 * 3 + READ(10) * 68 * * 69 ********************************************************************************** 70 71 BLOCK open disk routine 72 73 ENTRY OPENDISK 74 75 BEGFRAME 00178801 6 BASE 76 SUBSAREA BSS 2 saves subs list pointer and size 77 ENDFRAME 78 0109F DD5F8003 6 STAK 79 OPENDISK ENTRNP PUSH 010A0 E6578801 126 BASE 80 ST2 R1 SP,SUBSAREA remember subs list area pointer and size 81 82 * Clear out all fields in the DCB (initialize memory) 010A1 38970802 2 4 BASE 83 LEA R2 R4,DCBFILLADR address to start the fill 010A2 60440018 1 IMM 84 LD R1 DCBFILLLEN*CPW DCB fill length in bytes 010A3 DA800800 2 1 85 FILLI R2 R1 00 fill with zeroes 86 87 * Set DCBPFILE and DCBUNIT. 010A4 FA0210B6 0 88 JEQZ R0 HAVEDISK jump if already set 010A5 EC170800 4 BASE 89 STZ R4,DCBPFILE clean out the page file word 010A6 1000110D 0 90 SUB R0 DSK000 R0 = (slot * 40 + chan) * 40 + unit 010A7 58C40010 IMM 91 IORPSR PSRMODIF set funky arithmetic 010A8 62120000 010 REG 92 LD2 R0 R0 position in registers, R0 = 0 010A9 14040028 0 IMM 93 DIV R0 40 R0 = slot * 40 + chan, R1 = unit 010AA 68440008 1 IMM 94 UCPR R1 BFDUNITS test for illegal unit number 010AB FE061102 95 JGE BADNAME jump if unit out of range 010AC E4570801 1 4 BASE 96 ST R1 R4,DCBUNIT save unit in control block 010AD 62120000 010 REG 97 LD2 R0 R0 position in registers, R0 = 0 010AE 14040028 0 IMM 98 DIV R0 40 R0 = slot, R1 = channel 010AF 68440004 1 IMM 99 UCPR R1 PPUCHANS test for illegal channel number 010B0 FE061102 100 JGE BADNAME jump if channel out of range 010B1 E4493020 1 4 ZBM 101 ST R1 R4,DCBPFILE/PPUCHAN save channel in PF value 010B2 68040010 0 IMM 102 UCPR R0 NUMSLOTS test for illegal slot 010B3 FE061102 103 JGE BADNAME jump if slot out of range 010B4 E4090840 0 4 ZBM 104 ST R0 R4,DCBPFILE/PFSLOT save slot number in PF value 010B5 58840010 IMM 105 CLBPSR PSRMODIF restore normalcy to arithmetic 106 * \ / 000010B6 107 HAVEDISK LABEL 108 109 * See if we really have a disk. 010B6 60090840 0 4 ZBM 110 LD R0 R4,DCBPFILE/PFSLOT R0 = slot number 010B7 60200370 0 0 111 LD R0 IBSLOTS(R0) R0 = WRU response from slot 010B8 600A0040 0 0 CBM 112 LD R0 R0/WRU0TYPE R0 = type field of WRU0 response 010B9 64040003 0 IMM 113 CPR R0 SLTTPPU is it a PPU? 010BA FE0C1103 114 JNE BADDISK jump if not 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 20 (OPENDISK.ASSEM) F 14 open disk routine 010BB 60C40086 3 IMM 115 LD PFPTR PNCIX get dedicated PF address 010BC 00D70800 4 BASE 116 LDPF R4,DCBPFILE map in the controller 010BD 60001800 0 117 LD R0 CIX(PPUCABLED) get the device WRU response 010BE 600A0080 0 0 CBM 118 LD R0 R0/DWRUTYPE R0 = device type field 010BF 64040001 0 IMM 119 CPR R0 DVCTBFD is it a disk controller? 010C0 FE0C1103 120 JNE BADDISK jump if not 010C1 60570801 1 4 BASE 121 LD R1 R4,DCBUNIT pick up unit number for use as index 010C2 60040020 0 IMM 122 LD R0 BFDFNSAFE code to clear 'not ready' latch 010C3 E4221A28 0 1 123 ST R0 CIX(BFDFUNC+BFDSELECTB+R1) reset drive not safe status 010C4 60001A20 0 124 LD R0 CIX(BFDSS) get the device status 010C5 F62E1104 0 125 JBT R0/BFDSSRSPER OFFLINE jump if response error 010C6 F2081104 0 126 JBF R0/BFDSSRDY OFFLINE jump if not ready 127 128 * Initialize fields to read pack label. 010C7 EDD70802 4 BASE 129 STW R4,DCBSECPTRK set sectors per track 010C8 EDD70803 4 BASE 130 STW R4,DCBTRKPCYL set tracks per cylinder 010C9 EC170804 4 BASE 131 STZ R4,DCBSUBLIST indicate no subs list 010CA EDD70805 4 BASE 132 STW R4,DCBVOLSIZE set physical pack size 010CB EE170806 4 BASE 133 STZ2 R4,DCBWORD clear flags words 010CC EC090816 4 ZBM 134 STZ R4,DCBSCSI sez NOT a SCSI drive 135 136 * Read the pack label and set dimensions of the disk. 010CD DC0011D4 137 CALL READ 010CE 41440000 IMM 138 PARV PLDA block number 010CF 415013E8 @ 139 PARV @VPFWNDO1 where to put block 010D0 4100031F 140 PAR BOOTFBIBF where to put FBI 010D1 41440001 IMM 141 PARV FBITPL expected FBI type 010D2 40001105 142 PARL BADPACKLBL where to go if error 143 010D3 60000810 0 144 LD R0 WNDO1/PLSECPTRK 010D4 E4170802 0 4 BASE 145 ST R0 R4,DCBSECPTRK set sectors per track 010D5 60000811 0 146 LD R0 WNDO1/PLTRKPCYL 010D6 E4170803 0 4 BASE 147 ST R0 R4,DCBTRKPCYL set tracks per cylinder 010D7 60000813 0 148 LD R0 WNDO1/PLSIZE 010D8 E4170805 0 4 BASE 149 ST R0 R4,DCBVOLSIZE set physical pack size 150 151 * Read the volume label. 010D9 DC0011D4 152 CALL READ 010DA 41440001 IMM 153 PARV VOLLABELDA block number 010DB 415013E8 @ 154 PARV @VPFWNDO1 where to put it 010DC 4100031F 155 PAR BOOTFBIBF where to put FBI 010DD 41440004 IMM 156 PARV FBITVL expected FBI type 010DE 40001106 157 PARL BADVOLLBL where to go if error 158 010DF 5C000810 159 CMZ WNDO1/VLSUBSDA is there a substitution block? 010E0 FE021100 160 JEQ RETURN jump if not 161 162 * Read the substitution block 010E1 DC0011D4 163 CALL READ 010E2 41400810 164 PARV WNDO1/VLSUBSDA block number 010E3 415013E8 @ 165 PARV @VPFWNDO1 where to put block 010E4 4100031F 166 PAR BOOTFBIBF where to put FBI 010E5 41440005 IMM 167 PARV FBITSUBS expected FBI type 010E6 40001107 168 PARL BADSUBBLK where to go if error 169 * \ / 170 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 21 (OPENDISK.ASSEM) F 14 open disk routine 171 ********************************************************************************** 172 * * 173 * Build the substitution list. * 174 * Register usage: * 175 * R0 - pointer to entry in substitution block (WNDO1) * 176 * R1 - pointer to next available word of free space * 177 * R2 - amount of free space left * 178 * R3 - pointer to previous substitution list element * 179 * * 180 ********************************************************************************** 181 182 * \ / 010E7 60040800 0 IMM 183 LD R0 ADR WNDO1 => substitution list image 010E8 62578801 126 BASE 184 LD2 R1 SP,SUBSAREA restore user's parms. 010E9 FA4C10ED 1 185 JNEZ R1 HAVEAREA jump if user supplied area 010EA 604013D6 1 186 LD R1 VMEMSPACE else load address of our area 010EB 6084178C 2 IMM 187 LD R2 ADR SUBLISTEND 010EC 10924000 2 1 REG 188 SUB R2 R1 R2 = size left in our area 000010ED 189 HAVEAREA LABEL 010ED 38D70804 3 4 BASE 190 LEA R3 R4,DCBSUBLIST initialize current list pointer 191 * \ / 192 000010EE 193 SUBSLOOP LABEL 010EE 5C160800 0 BASE 194 CMZ R0,SUBSBADDY beyond end of block? 010EF FE0210FC 195 JEQ SUBSDONE jump if yes 010F0 10840003 2 IMM 196 SUB R2 3 make room for our entry 010F1 FA881108 2 197 JLTZ R2 NOSUBSPACE jump if out of space 010F2 E456C800 1 3 BASE 198 ST R1 R3,0 link new element onto chain 010F3 60D60800 3 0 BASE 199 LD R3 R0,SUBSBADDY 010F4 E4D64801 3 1 BASE 200 ST R3 R1,1 save bad block number 010F5 60D60801 3 0 BASE 201 LD R3 R0,SUBSSUB 010F6 E4D64802 3 1 BASE 202 ST R3 R1,2 save substitute block number 010F7 60D24000 3 1 REG 203 LD R3 R1 R3 -> new entry 010F8 60565003 1 1 REG 204 LD R1 R1+3 R1 -> next word of free space 010F9 60161002 0 0 REG 205 LD R0 R0+SUBSLNTH R0 -> next entry in block 010FA 64040C00 0 IMM 206 CPR R0 ADR WNDO1(WPP) beyond end of block? 010FB FE0810EE 207 JLT SUBSLOOP jump if not 208 * \ / 000010FC 209 SUBSDONE LABEL 010FC EC16C800 3 BASE 210 STZ R3,0 terminate linked list 010FD 5C178801 6 BASE 211 CMZ SP,SUBSAREA did we use our area? 010FE FE0C1100 212 JNE NOTOURS jump if used user's area 010FF E44013D6 1 213 ST R1 VMEMSPACE else update our free space pointer 00001100 214 NOTOURS LABEL 215 * \ / 00001100 216 RETURN LABEL 01100 60040000 0 IMM 217 LD R0 0 good return code 218 * \ / 00001101 219 GOBACK LABEL 01101 5D1F8003 6 STAK 220 LEAVE POP return to user 221 * --- 222 223 * Error returns 00001102 224 ERRORRET LABEL 01102 FA281109 0 225 BADNAME JSR R0 CALCRETC 1 - invalid disk name 01103 FA281109 0 226 BADDISK JSR R0 CALCRETC 2 - device is not a disk 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 22 (OPENDISK.ASSEM) F 14 open disk routine 01104 FA281109 0 227 OFFLINE JSR R0 CALCRETC 3 - disk is not online 01105 FA281109 0 228 BADPACKLBL JSR R0 CALCRETC 4 - pack label is bad 01106 FA281109 0 229 BADVOLLBL JSR R0 CALCRETC 5 - volume label is bad 01107 FA281109 0 230 BADSUBBLK JSR R0 CALCRETC 6 - substitution block is bad 01108 FA281109 0 231 NOSUBSPACE JSR R0 CALCRETC 7 - insufficient space for subs list 232 * --- 233 00001109 234 CALCRETC LABEL 01109 58840010 IMM 235 CLBPSR PSRMODIF clear funny arithmetic, if in use 0110A 10041102 0 IMM 236 SUB R0 ADR ERRORRET R0 = return code 0110B EC170804 4 BASE 237 STZ R4,DCBSUBLIST make sure substitution list is empty 0110C FE0E1101 238 JMP GOBACK and return 239 * --- 240 0110D 59F45869 241 DSK000 PAK6 DSK000 base for disk name unpacker 242 243 END of open disk routine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 23 (OPENDISK.ASSEM) F 14 close disk routine 246 247 ********************************************************************************** 248 * * 249 * CLOSEDISK. * 250 * Routine to clean up a disk control block. Here, we * 251 * free up the space used by the substitution list if: * 252 * 1) It was allocated from our area, and * 253 * 2) Nothing has been allocated from our area since it was. * 254 * Call: * 255 * LD R4 pointer to disk control block * 256 * CALLNP CLOSEDISK * 257 * * 258 * Eats R0-R3. * 259 * stack required = 1 * 260 * * 261 ********************************************************************************** 262 263 BLOCK close disk routine 264 265 ENTRY CLOSEDISK 266 267 BEGFRAME 268 ENDFRAME 269 0110E DD5F8001 6 STAK 270 CLOSEDISK ENTRNP PUSH 0110F 60040000 0 IMM 271 LD R0 0 01110 38570804 1 4 BASE 272 LEA R1 R4,DCBSUBLIST pick up existing sub list pointer 01111 3C164800 0 1 BASE 273 LSRCH R0 R1,0 R1 -> last element on subs list 01112 60565003 1 1 REG 274 LD R1 R1+3 R1 -> after last element 01113 644013D6 1 275 CPR R1 VMEMSPACE does free memory start here? 01114 FE0C1117 276 JNE DONTFREE jump if not 01115 60570804 1 4 BASE 277 LD R1 R4,DCBSUBLIST use this sub list pointer as now free 01116 E44013D6 1 278 ST R1 VMEMSPACE free up the substitution list 279 * \ / 00001117 280 DONTFREE LABEL 01117 5D1F8001 6 STAK 281 LEAVE POP 282 * --- 283 284 END of close disk routine 719 INPUT BOOT.OPSYS:SRCHDIR.ASSEM 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 24 (SRCHDIR.ASSEM) F 15 directory searcher 3 4 ********************************************************************************** 5 * * 6 * Revision Date * 7 * -------- ---- * 8 * 1.0 1 April 82 * 9 * First release as separate file. * 10 * 1.1 11 Aug 82 * 11 * Addition of SRCHDIRSN for file serial number search. * 12 * 1.2 26 Oct 82 * 13 * references to PFWNDOx made via OPLVECTORS. * 14 * 1.3 08 Sep 84 * 15 * changes to reduce code size. * 16 * 1.4 04 Dec 84 * 17 * get time zone out of security block and save it * 18 * on IBLOCK (IZONEWORD) whenever security block is read. * 19 * * 20 ********************************************************************************** 21 22 ********************************************************************************** 23 * * 24 * SRCHDIR. Routine that searches the specified directory * 25 * for the specified file. It reads the volume label to find * 26 * the security block which is read to find the IDX which is * 27 * read to find the accounts directory which is read to find * 28 * the file. R3 is returned either zero, saying not found, or * 29 * a pointer to the directory entry. * 30 * Call: * 31 * * 32 * LD R4 => disk control block * 33 * LD R5 => file descriptor (see below) * 34 * CALLNP SRCHDIR * 35 * JZA R3 not found * 36 * * 37 * The block pointed to by R5 has the following format: * 38 * * 39 *BLOCK LABEL * 40 * PAK12 account name * 41 * PAK6 project name * 42 * VFD 0,0 (room for password) * 43 * PAK12 filename * 44 * PAK6 file extension * 45 * VFD 0,0 (room for password) * 46 * * 47 * If R3 returns zero saying not found, then R0 returns a code * 48 * saying why it wasn't. Codes are: * 49 * 1 - disk error: volume label * 50 * 2 - " " : security block * 51 * 3 - " " : IDX * 52 * 4 - " " : directory * 53 * 5 - account does not exist * 54 * 6 - file does not exist * 55 * * 56 * On return, R1 contains the address of a block describing * 57 * where the various tables that were searched are located. See * 58 * label SRCHRESULT below for the format of this block. * 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 25 (SRCHDIR.ASSEM) F 15 directory searcher 59 * * 60 * SRCHDIRSN. This call has the same form as for SRCHDIR but in * 61 * place of the file name in the descriptor, the file serial number * 62 * is given by the caller. Returns are the same as for SRCHDIR. * 63 * * 64 * The routine destroys R0-R3, WNDO1, WNDO2. * 65 * Stack required: 11 * 66 * 1 + max(READ(10)) * 67 * * 68 ********************************************************************************** 69 70 BLOCK directory searcher 71 72 ENTRY SRCHDIR 73 ENTRY SRCHDIRSN 74 00001118 75 SRCHRESULT LABEL info placed here by SRCHDIR 00001118 76 SRCHSECBLK BSS 1 security block number 00001119 77 SRCHIDXBKT BSS 1 IDX bucket number 0000111A 78 SRCHIDXBLK BSS 1 IDX block address 0000111B 79 SRCHIDXOFF BSS 1 offset to entry in IDX block 0000111C 80 SRCHUD1BLK BSS 1 UDIR1 block address 0000111D 81 SRCHUD1OFF BSS 1 offset to entry in UDIR1 block 0000111E 82 SRCHUD2BLK BSS 1 UDIR2 block address 0000111F 83 SRCHUD2OFF BSS 1 offset to entry in UDIR2 block 00000008 ABS 84 SRCHBLKLEN EQU DISPW SRCHRESULT size of block in words 85 * NOTE: All fields are initialized to -1. 86 * All inapplicable fields stay that way. 87 88 BEGFRAME 89 ENDFRAME 90 000BC010 7 CBM 91 SRCHTYPE EQU R7/BIT 0 flag for search type (0=name, 1=serial number) 000BC210 7 CBM 92 ENDFLAG EQU R7/BIT 1 marker for two full passes of the UDIR end 93 01120 DD5F8001 6 STAK 94 SRCHDIRSN ENTRNP PUSH 01121 EDCBC010 7 CBM 95 STW SRCHTYPE say this is serial number srch 01122 FE0E1125 96 JMP SD10 then merge right in 97 * --- 98 99 01123 DD5F8001 6 STAK 100 SRCHDIR ENTRNP PUSH 01124 EC0BC010 7 CBM 101 STZ SRCHTYPE say this is normal search 00001125 102 SD10 LABEL 01125 60440020 1 IMM 103 LD R1 SRCHBLKLEN*CPW 01126 60841118 2 IMM 104 LD R2 ADR SRCHRESULT get result block address 01127 FE5800FF 105 CFILL 0FF clear out the result block 106 * \ / 107 108 ********************************************************************************** 109 * Read the volume label. It contains the pointers that * 110 * we need to find the security block. * 111 ********************************************************************************** 112 113 * \ / 01128 DC0011D4 114 CALL READ get the volume label in 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 26 (SRCHDIR.ASSEM) F 15 directory searcher 01129 41440001 IMM 115 PARV VOLLABELDA pass address of label 0112A 415013E8 @ 116 PARV @VPFWNDO1 pass PF value for window 1 0112B 4100031F 117 PAR BOOTFBIBF pass FBI buffer address 0112C 41440004 IMM 118 PARV FBITVL indicate expected FBI type 0112D 400011BE 119 PARL VOLLBAD error addr for bad volume label 120 * \ / 121 122 ********************************************************************************** 123 * Read the security block from the system volume that * 124 * is being used. * 125 ****** should try for secondary SEC block on error ***** * 126 ********************************************************************************** 127 128 * \ / 0112E 60000812 0 129 LD R0 WNDO1(VLSECBDA) get the addr of the security block 0112F E4001118 0 130 ST R0 SRCHSECBLK save security block address 01130 DC0011D4 131 CALL READ get the security block in 01131 41520000 0 REG 132 PARV R0 pass its address 01132 415013E8 @ 133 PARV @VPFWNDO1 pass PF value for window 1 01133 4100031F 134 PAR BOOTFBIBF pass FBI buffer address 01134 41440006 IMM 135 PARV FBITSEC indicate expected FBI type 01135 400011BF 136 PARL SECBAD error addr for bad security block 01136 60000A26 0 137 LD R0 WNDO1(SECTZONE) get the time zone out of here 01137 E400032F 0 138 ST R0 IZONEWORD put it in the IBLOCK 139 * \ / 140 141 ********************************************************************************** 142 * Read the IDX on this volume. Search for the requested * 143 * account. Note that the hash function takes us right to the * 144 * correct IDX block. We need to move to the next IDX block only * 145 * if the one where we started is completely full (either good * 146 * entries or 'deleted' entries, indicated by -1s) indicating * 147 * that the desired entry might have been put in a subsequent * 148 * block. * 149 ********************************************************************************** 150 151 * \ / 152 * Use the macro to make the hash code 153 IDXHASH R0,R1,(R5,SYSACCT),(R5,SYSPROJ),WNDO1(SECIDXSIZ) 01138 62174800 015 BASE 153 LD2 R0 (R5,SYSACCT) get the account name into R0 and R1 01139 744A1000 1 0 CBM 153 XOR R1 R0/BITS 8:7 mix up the account number 0113A 60174802 0 5 BASE 153 LD R0 (R5,SYSPROJ) fetch up the project 0113B 744A2000 1 0 CBM 153 XOR R1 R0/BITS 16:15 mix in the project shifted 0113C 60040000 0 IMM 153 LD R0 0 initialize register for marth 0113D 58C40010 IMM 153 IORPSR PSRMODIF say that we want the remainder 0113E 14000828 0 153 DIV R0 WNDO1(SECIDXSIZ) divide by number of buckets 0113F 58840010 IMM 153 CLBPSR PSRMODIF restore normalcy 01140 EC0BC210 7 CBM 154 STZ ENDFLAG clear loop end indicator 00001141 155 INTONEXT LABEL 01141 E4401119 1 156 ST R1 SRCHIDXBKT remember bucket being searched 01142 6022082C 0 1 157 LD R0 WNDO1/SECIDXPTR(R1) get pointer to bucket 01143 FA0211C2 0 158 JEQZ R0 NOACCT jump if none here 01144 E400111A 0 159 ST R0 SRCHIDXBLK remember IDX block number 01145 DC0011D4 160 CALL READ read the bucket in 01146 41520000 0 REG 161 PARV R0 pass its address 01147 415013E9 @ 162 PARV @VPFWNDO2 pass PMV for window 2 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 27 (SRCHDIR.ASSEM) F 15 directory searcher 01148 4100031F 163 PAR BOOTFBIBF pass FBI buffer address 01149 41440008 IMM 164 PARV FBITIDX indicate expected FBI type 0114A 400011C0 165 PARL IDXBAD error address for bad IDX 166 0114B 60C40C00 3 IMM 167 LD R3 ADR WNDO2 0114C 62174800 015 BASE 168 LD2 R0 R5,SYSACCT pick up the name ... 0114D 60974802 2 5 BASE 169 LD R2 R5,SYSPROJ ... and project that we are searching for 170 * \ / 0000114E 171 TRYNEXT LABEL 0114E 5E16C800 3 BASE 172 CMZ2 R3,IDXACNO end of this block? 0114F FE0C1152 173 JNE NOTEMPTY jump if not 01150 5C16C802 3 BASE 174 CMZ R3,IDXACNOP 01151 FE0211C2 175 JEQ NOACCT if yes, account does not exist 176 * \ / 00001152 177 NOTEMPTY LABEL 01152 6616C800 013 BASE 178 CPR2 R0 R3,IDXACNO is this a matching account? 01153 FE0C1156 179 JNE MOVETONEXT jump if not 01154 6496C802 2 3 BASE 180 CPR R2 R3,IDXACNOP 01155 FE021160 181 JEQ FOUNDACCT jump if yes 182 * \ / 00001156 183 MOVETONEXT LABEL 01156 18C40005 3 IMM 184 ADD R3 IDXLNTH move pointer to next bucket 01157 64C40FFC 3 IMM 185 CPR R3 ADR WNDO2(IDXECNT*IDXLNTH) past the end? 01158 FE08114E 186 JLT TRYNEXT jump back if entries remain 187 * \ / 188 189 * The block seems full so we move onto the next one 01159 BC401119 1 190 INCL R1 SRCHIDXBKT increment buffer pointer 0115A 64400828 1 191 CPR R1 WNDO1(SECIDXSIZ) check for wrap around 0115B FE081141 192 JLT INTONEXT jump if more buckets ahead 0115C F7C211C2 7 193 JBT ENDFLAG NOACCT jump if second time around 0115D 60440000 1 IMM 194 LD R1 0 wrap around to first bucket 0115E EDCBC210 7 CBM 195 STW ENDFLAG remember that we have passed the end once 0115F FE0E1141 196 JMP INTONEXT 197 * --- 198 199 ********************************************************************************** 200 * * 201 * We have found the MS address of the indicated * 202 * account. Search the directory for the file whose name * 203 * is in NAME and NAMEEXT. * 204 * * 205 ********************************************************************************** 206 00001160 207 FOUNDACCT LABEL 01160 6016C803 0 3 BASE 208 LD R0 R3,IDXDIRDA get block number of directory 01161 E400111C 0 209 ST R0 SRCHUD1BLK remember it 01162 10C40C00 3 IMM 210 SUB R3 ADR WNDO2 R3 = offset in IDX block 01163 E4C0111B 3 211 ST R3 SRCHIDXOFF remember that, too 01164 DC0011D4 212 CALL READ request the mass storage block 01165 41520000 0 REG 213 PARV R0 indicate directory address 01166 415013E8 @ 214 PARV @VPFWNDO1 indicate the page map value 01167 4100031F 215 PAR BOOTFBIBF and buffer for the FBI 01168 41440009 IMM 216 PARV FBITUDIR1 indicate expected FBI type 01169 400011C1 217 PARL DIRBAD error address for bad directory 218 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 28 (SRCHDIR.ASSEM) F 15 directory searcher 0116A 60040800 0 IMM 219 LD R0 ADR WNDO1 get a pointer to the beginning 0116B 5C08001A 0 ZBM 220 CMZ R0,UDTYPE check whether small or large DIR 0116C FE0C118D 221 JNE SRCDIRRAF jump on RAF type directory 222 0116D 60C40860 3 IMM 223 LD R3 ADR (WNDO1(UDFDLIST)) 0116E 62174805 015 BASE 224 LD2 R0 R5,NAME get name to search for 0116F F7C01185 7 225 JBT SRCHTYPE SRCDIRSERN jump if serial number search 00001170 226 SRCDIRENLP LABEL 01170 5C16C800 3 BASE 227 CMZ R3,0 is this the end? 01171 FE0211C3 228 JEQ NOFILE jump if not found 01172 6A16C802 013 BASE 229 UCPR2 R0 R3,FDNAME is this the file 01173 FE021179 230 JEQ SRCDIRFND jump if found 01174 FE0811C3 231 JLT NOFILE not found if past sort point 00001175 232 SRCDIRGO LABEL 01175 18C40018 3 IMM 233 ADD R3 FDLNTH increment pointer 01176 64C40BE8 3 IMM 234 CPR R3 ADR (WNDO1(UDLFDE)) beyond the end? 01177 FE0A1170 235 JLE SRCDIRENLP jump if more to continue with 01178 FE0E11C3 236 JMP NOFILE else give up 237 * --- 238 239 * File found - is this one usable? 00001179 240 SRCDIRFND LABEL 01179 60174807 0 5 BASE 241 LD R0 R5,NAMEEXT get this files extension 0117A 6416C804 0 3 BASE 242 CPR R0 R3,FDEXTEN does the extension match? 0117B FE0C117E 243 JNE SRCDIRRESN jump if not, keep looking 0117C 5C08DE10 3 ZBM 244 CMZ R3,FDFBD is this file being closed? 0117D FE021180 245 JEQ FILEFOUND1 jump if a living file 246 * \ / 247 248 * Restore the file name in the registers and continue searching 249 * \ / 0000117E 250 SRCDIRRESN LABEL 0117E 62174805 015 BASE 251 LD2 R0 R5,NAME reload the name 0117F FE0E1175 252 JMP SRCDIRGO ...and continue on 253 * --- 254 00001180 255 FILEFOUND1 LABEL 01180 6012C000 0 3 REG 256 LD R0 R3 R0 -> directory entry 01181 10040800 0 IMM 257 SUB R0 ADR WNDO1 R0 = offset in UDIR1 block 01182 E400111D 0 258 ST R0 SRCHUD1OFF remember it 01183 60040000 0 IMM 259 LD R0 0 zero error code 01184 FE0E11C6 260 JMP RETURN and go home 261 * --- 262 00001185 263 SRCDIRSERN LABEL (search for serial number) 01185 5C16C800 3 BASE 264 CMZ R3,0 does this entry exist? 01186 FE0211C3 265 JEQ NOFILE jump if not found 01187 6A16C80A 013 BASE 266 UCPR2 R0 R3,FDSERNO is this the one we want? 01188 FE021180 267 JEQ FILEFOUND1 jump if we hit pay dirt 01189 18C40018 3 IMM 268 ADD R3 FDLNTH advance to next entry 0118A 64C40BE8 3 IMM 269 CPR R3 ADR(WNDO1(UDLFDE)) beyond the end? 0118B FE0A1185 270 JLE SRCDIRSERN if not go check another 0118C FE0E11C3 271 JMP NOFILE else return sad news 272 * --- 273 274 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 29 (SRCHDIR.ASSEM) F 15 directory searcher 275 ********************************************************************************** 276 * * 277 * Directory is in a RAF type format. In the interest of * 278 * minimum space in the bootstrap, we examine each UDIR2 block * 279 * in turn until we come to ( or pass ) the entry we need. * 280 * * 281 ********************************************************************************** 282 0000118D 283 SRCDIRRAF LABEL 0118D 60040060 0 IMM 284 LD R0 UDFDLIST load offset to the dir index 0000118E 285 SRCDIRRGA LABEL 0118E E400111D 0 286 ST R0 SRCHUD1OFF save the current index position 0118F 38A00800 2 0 287 LEA R2 WNDO1(R0) R2 -> index entry 01190 60089183 0 2 ZBM 288 LD R0 R2,UDINDXADR R0 = block number of UDIR2 block 01191 E400111E 0 289 ST R0 SRCHUD2BLK remember it 290 01192 DC0011D4 291 CALL READ request the mass storage block 01193 41520000 0 REG 292 PARV R0 indicate the MS address 01194 415013E9 @ 293 PARV @VPFWNDO2 indicate the page map value 01195 4100031F 294 PAR BOOTFBIBF and the address of the FBI buffer 01196 4144000A IMM 295 PARV FBITUDIR2 indicate expected FBI type 01197 400011C1 296 PARL DIRBAD error address for bad directory 297 01198 60C40C00 3 IMM 298 LD R3 ADR WNDO2 get the first addr to search 01199 62174805 015 BASE 299 LD2 R0 R5,NAME pick up file name (or SERNO) 0119A F7C011AA 7 300 JBT SRCHTYPE SRCLKSERN jump if serial number search 0000119B 301 SRCDISENLP LABEL 0119B 5C16C800 3 BASE 302 CMZ R3,0 is this the end? 0119C FE0211A3 303 JEQ SRCDIRRFNF jump if not found 0119D 6A16C802 013 BASE 304 UCPR2 R0 R3,FDNAME is this the file? 0119E FE0211B2 305 JEQ SRCDISFND jump if found 0119F FE0811C3 306 JLT NOFILE not found if past sort point 000011A0 307 SRCDISGO LABEL 011A0 18C40018 3 IMM 308 ADD R3 FDLNTH increment pointer 011A1 64C40FE8 3 IMM 309 CPR R3 ADR (WNDO2(UDLFDE)) beyond the end? 011A2 FE0A119B 310 JLE SRCDISENLP jump if more to continue with 311 * \ / 312 313 * Entry was not found in the last block - try next one 314 * \ / 000011A3 315 SRCDIRRFNF LABEL 011A3 6000111D 0 316 LD R0 SRCHUD1OFF get our previous position 011A4 18040005 0 IMM 317 ADD R0 UDINDXLEN advance to the next index entry 011A5 640403F8 0 IMM 318 CPR R0 UD1LINDX are we past the last index entry? 011A6 FE0411C3 319 JGT NOFILE jump if directory exhausted 011A7 5C200800 0 320 CMZ WNDO1(R0) check for non-existant entry 011A8 FE0C118E 321 JNE SRCDIRRGA continue through the UDIR1 index 011A9 FE0E11C3 322 JMP NOFILE jump at end of index 323 * --- 324 000011AA 325 SRCLKSERN LABEL (search by serial number) 011AA 5C16C800 3 BASE 326 CMZ R3,0 does entry exist? 011AB FE0211A3 327 JEQ SRCDIRRFNF jump if not found in this block 011AC 6A16C80A 013 BASE 328 UCPR2 R0 R3,FDSERNO else check this entry 011AD FE0211B9 329 JEQ FILEFOUND2 jump if we found it 011AE 18C40018 3 IMM 330 ADD R3 FDLNTH advance to next extry 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 30 (SRCHDIR.ASSEM) F 15 directory searcher 011AF 64C40FE8 3 IMM 331 CPR R3 ADR(WNDO2(UDLFDE)) beyond the end? 011B0 FE0A11AA 332 JLE SRCLKSERN if not go try another entry 011B1 FE0E11A3 333 JMP SRCDIRRFNF else see if another block 334 * --- 335 336 ********************************************************************************** 337 * We think that we have found the entry. Check the extension * 338 * to see if it matches, then check to see if we have a file * 339 * being closed. * 340 ********************************************************************************** 341 000011B2 342 SRCDISFND LABEL 011B2 60174807 0 5 BASE 343 LD R0 R5,NAMEEXT get this files extension 011B3 6416C804 0 3 BASE 344 CPR R0 R3,FDEXTEN does the extension match? 011B4 FE0C11B7 345 JNE SRCDISRESN jump if not, keep looking 011B5 5C08DE10 3 ZBM 346 CMZ R3,FDFBD is this file being closed? 011B6 FE0211B9 347 JEQ FILEFOUND2 jump if not being closed, good entry 348 * \ / 349 000011B7 350 SRCDISRESN LABEL 011B7 62174805 015 BASE 351 LD2 R0 R5,NAME reload the name 011B8 FE0E11A0 352 JMP SRCDISGO ... and continue 353 * --- 354 000011B9 355 FILEFOUND2 LABEL 011B9 6012C000 0 3 REG 356 LD R0 R3 R0 -> FDE 011BA 10040C00 0 IMM 357 SUB R0 ADR WNDO2 R0 = offset in UDIR2 011BB E400111F 0 358 ST R0 SRCHUD2OFF remember it 011BC 60040000 0 IMM 359 LD R0 0 no error code 011BD FE0E11C6 360 JMP RETURN and return 361 * --- 362 363 364 ********************************************************************************** 365 * * 366 * Never trust a disk. Return error code. * 367 * * 368 ********************************************************************************** 369 000011BE 370 SDERRTAB LABEL 011BE FA2811C4 0 371 VOLLBAD JSR R0 CALCERRC volume label bad 011BF FA2811C4 0 372 SECBAD JSR R0 CALCERRC security block bad 011C0 FA2811C4 0 373 IDXBAD JSR R0 CALCERRC account index bad 011C1 FA2811C4 0 374 DIRBAD JSR R0 CALCERRC directory bad 011C2 FA2811C4 0 375 NOACCT JSR R0 CALCERRC account not found 011C3 FA2811C4 0 376 NOFILE JSR R0 CALCERRC file not found 377 000011C4 378 CALCERRC LABEL 011C4 100411BE 0 IMM 379 SUB R0 ADR SDERRTAB R0=error ordinal 011C5 60C40000 3 IMM 380 LD R3 0 set file not found indicator 381 * \ / 000011C6 382 RETURN LABEL 011C6 60441118 1 IMM 383 LD R1 ADR SRCHRESULT get pointer to result area 011C7 5D1F8001 6 STAK 384 LEAVE POP return to caller 385 * --- 386 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 31 (SRCHDIR.ASSEM) F 15 directory searcher 387 END of directory searcher 720 INPUT BOOT.OPSYS:DISPLAY.ASSEM 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 32 (DISPLAY.ASSEM) F 16 display routine 3 4 ********************************************************************************** 5 * * 6 * Revisions Date * 7 * --------- ---- * 8 * 1.0 6 Nov 81 * 9 * Initial release. * 10 * * 11 * * 12 * Routine to display the 10 characters specified on * 13 * the front panel. SSUPF was put into IBLOCK by PROMBOOT. * 14 * * 15 * CALLNP DISPLAY * 16 * ASCII 3,text * 17 * * 18 * Gets R0, R1, and R3 and zaps window CIX. * 19 * Stack required: 1 * 20 * * 21 ********************************************************************************** 22 23 BLOCK display routine 24 25 ENTRY DISPLAY 26 27 BEGFRAME 28 ENDFRAME 29 011C8 DD5F8001 6 STAK 30 DISPLAY ENTRNP PUSH 011C9 60C40086 3 IMM 31 LD PFPTR PNCIX 011CA 00C00310 32 LDPF SSUPF point window 3 to the SSU 011CB 6047FFFD 1 IMM 33 LD R1 -3 move 3 words 000011CC 34 DISPLOOP LABEL 011CC 601DC803 0 71 BASE 35 LD R0 R7,3(R1) get a display word 011CD 780011D3 0 36 AND R0 ASCII6MASK remove extra bits 011CE E422180D 0 1 37 ST R0 CIX(SSUDISP03+3+R1) place chars in SSU 011CF FA6011CC 1 38 IRJ R1 DISPLOOP 011D0 80D2C000 3 REG 39 PFRC PFPTR undo window 011D1 19C40003 7 IMM 40 ADD R7 3 move over the params 011D2 5D1F8001 6 STAK 41 LEAVE POP 42 * --- 43 011D3 3F3F3F3F 44 ASCII6MASK VFD 03F3F3F3F 45 46 END display routine 721 INPUT BOOT.OPSYS:SALON.ASSEM 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 33 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 3 4 ********************************************************************************** 5 * * 6 * Revisions Date * 7 * --------- ---- * 8 * 1.0 14 May 82 * 9 * Stack implemented. * 10 * 1.1 30 Sep 82 * 11 * Separate error code for memory parity error * 12 * during write. Minor left over removed. * 13 * 1.2 30 Jun 83 * 14 * Moved subs checking into SETUPNMAP routine (old * 15 * MAPCIX routine). * 16 * Added CLEARFAULT routine and modified logic * 17 * dealing with faults and re-zeros. * 18 * 1.3 27 Oct 83 * 19 * New field added to DISKCB, DCBVOLSIZE * 20 * 1.4 08 Sep 84 * 21 * changes to reduce code size. * 22 * new WAIT instruction used for I/O waits. * 23 * 1.5 07 Jul 86 * 24 * Where the FBI is being clobbered to ensure * 25 * that a read failure is noticed, * 26 * changed STMW R2,FBIDA to STMW R2,FBIWORDB * 27 * to prevent halts on uninitialized memory. * 28 * The corresponding change was made in the * 29 * on-line driver earlier. * 30 * 1.6 13 Aug 86 * 31 * Moved STATCHK variables onto stack. * 32 * 1.7 09 Dec 86 * 33 * Added bit to ignore substitution list, this * 34 * is so ONPL and OPL use the same mechanism to * 35 * read and write substituted blocks. * 36 * A8805 17 May 88 * 37 * Installed new TSELECT routine that will handle * 38 * controllers/drives that are slow to respond to * 39 * setting changes. * 40 * A8809 20 Sep 88 * 41 * Corrected table size symbol (TERRORLIM) in TSELECT. * 42 * A8810 01 Nov 88 * 43 * Minor space savers. RC * 44 * A8903 22 Mar 89 * 45 * Bug fix in seg correct routine to clear RO bit * 46 * from page map value. RC * 47 * A9003 14 Mar 90 * 48 * Change error retry limits from constants to variables. * 49 * Set them to 1 if NORETRY bit set in the DCB, otherwise * 50 * to their values from before. CG * 51 * * 52 ********************************************************************************** 53 54 BLOCK Off line mass storage driver 55 56 ENTRY READ do read on MS 57 ENTRY WRITE do write on MS 58 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 34 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 59 ********************************************************************************** 60 * * 61 * This code is set up to do reads and writes in a * 62 * non-interrupt environment. * 63 * * 64 ********************************************************************************** 65 66 DKERRLIM EQU 2*TERRORLIM limit for disk error retries 0000000A ABS 67 CHERRLIM EQU 10 limit for channel error retries 00000004 ABS 68 SKERRLIM EQU 4 limit for seek error retries 69 70 ********************************************************************************** 71 * * 72 * These are error codes returned in R0 on error address return. * 73 * They are defined in BOOT.OPSYS:DISKCB.ASSEM. * 74 * * 75 *ECDATA EQU 1 data error (checksum, etc) * 76 *ECFBI EQU 2 FBI error * 77 *ECCHAN EQU 3 channel error * 78 *ECSEEK EQU 4 error seeking * 79 *ECNOTRDY EQU 5 not ready * 80 *ECWRPROT EQU 6 write protected * 81 *ECMPE EQU 7 memory parity error on write * 82 * * 83 ********************************************************************************** 84 85 BLOCK READ, WRITE and return control 86 87 BEGFRAME 00178801 6 BASE 88 DKFBITYPE BSS 1 type of FBI expected on read 00178802 6 BASE 89 ERRAD BSS 1 callers error return address 90 ENDFRAME 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 35 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 92 93 ********************************************************************************** 94 * * 95 * Call for a read data transfer. The specified page is * 96 * read in as indicated. The driver attempts retries up to a * 97 * reasonable limit. If the block can not be read, control * 98 * is passed to the error address with an error code in R0. * 99 * Call: * 100 * R4 => control block (see DISKCB defn) * 101 * CALL READ call for MS read * 102 * PARV * 103 * PARV * 104 * PAR * 105 * PARV (0=no type check,-1=no check at all) * 106 * PARL * 107 * Eats R0:R3 * 108 * Stack required: 10 * 109 * 3 + max(SETUPNMAP(1), SEEK (6), TSELECT(7), * 110 * PADBILD (2), WAITSTAT(1), STATCHK(6), * 111 * LOGERROR (2), UNMAP (1) ) * 112 * * 113 ********************************************************************************** 114 115 BLOCK read section 116 117 ENTRY READ 118 011D4 DD1F8003 6 STAK 119 READ ENTR PUSH 011D5 C14013B9 120 STPV DKBLOCKNO save block number 011D6 C14013BC 121 STPV DKPAGENO save the page number (page map value) 011D7 C10013BD 122 STP FBILOC save the FBI location 011D8 C1578801 6 BASE 123 STPV SP,DKFBITYPE save the expected FBI type 011D9 C0178802 6 BASE 124 STPL SP,ERRAD save callers error address 011DA DC40125B 125 CALLNP SETUPNMAP check subs and do PF mapping 126 000011DB 127 SEEKOVER LABEL 011DB DC401284 128 CALLNP SEEK put the drive on cylinder 011DC FE0E121D 129 JMP NOTREADY jump if drive not ready 011DD FE0E121F 130 JMP SEEKERR jump if unrecoverable seek error 000011DE 131 READOVER LABEL 011DE 608013BD 2 132 LD R2 FBILOC R2 -> fbi 011DF D1568801 2 BASE 133 STMW R2,FBIWORDB destroy block identifier 011E0 DC40134F 134 CALLNP TSELECT tweak for error recovery 011E1 FE0E121D 135 JMP NOTREADY quit if drive went off line 011E2 FE0E11DB 136 JMP SEEKOVER jump if seek error 011E3 60040001 0 IMM 137 LD R0 PPUIDMAD*1 get DMA direction bit 011E4 E4001803 0 138 ST R0 CIX(PPUSCSTAT) set DMA direction to input 011E5 DC401370 139 CALLNP PADBILD get the hardware addresses 011E6 EC001AB0 140 STZ CIX(BFDREAD+1*BFDINTBIT) start read and select interrupt 011E7 DC4012D8 141 CALLNP WAITSTAT wait for operation and fetch statuses 011E8 DC0012E5 142 CALL STATCHK check for an acceptable status 011E9 40440002 IMM 143 PARVL ERROPREAD type of operation 011EA FE0E1220 144 JMP GIVEERROR jump if unrecoverable error (R0 = code) 011EB FE0E11DB 145 JMP SEEKOVER jump if we need to re-seek 011EC FE0E11DE 146 JMP READOVER jump if we need to try again 011ED FE0E11EF 147 JMP FIXSEG jump if we need to correct a segment 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 36 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 011EE FE0E11F3 148 JMP READOK jump if all went well 149 * --- 150 000011EF 151 FIXSEG LABEL 011EF DC40122B 152 CALLNP SEGCORRECT correct a single segment error 011F0 FE0E11DE 153 JMP READOVER could not read check segment 011F1 FE0E11DB 154 JMP SEEKOVER status sez reseek 011F2 FE0E1220 155 JMP GIVEERROR error not recoverable 156 * \ / correction done 157 000011F3 158 READOK LABEL read was OK, now check FBI 011F3 60578801 1 6 BASE 159 LD R1 SP,DKFBITYPE get the expected FBI type 011F4 FA6C1228 1 160 JEQMW R1 GOODRETURN jump if no checking at all 011F5 6003FFC0 0 IMM 161 LD R0 FBICSMASK mask for all FBI words 011F6 F01013BD 0 @ 162 PRMUT R0 @FBILOC do XOR in one swell foop 011F7 FA2E11FF 0 163 JNEMW R0 CKSUMBAD jump for bad checksum 011F8 608013BD 2 164 LD R2 FBILOC get ptr to buffer 011F9 60089181 0 2 ZBM 165 LD R0 R2,FBIDA get the MS address from FBI 011FA 640013B9 0 166 CPR R0 DKBLOCKNO compare to our expectations 011FB FE0C11FF 167 JNE BADFBI even if subbed this should match 168 * \ / 011FC FA421228 1 169 JEQZ R1 GOODRETURN jump if type not to be checked 011FD 64488080 1 2 ZBM 170 CPR R1 R2,FBITYPE check what we actually got 011FE FE021228 171 JEQ GOODRETURN return if matching type 172 * \ / 000011FF 173 BADFBI LABEL 000011FF 174 CKSUMBAD LABEL 011FF 60040002 0 IMM 175 LD R0 ECFBI get code for 'FBI' error 01200 FE0E1220 176 JMP GIVEERROR and go to error return 177 * --- 178 179 END of read section 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 37 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 181 182 ********************************************************************************** 183 * * 184 * Do a write to the disk. The specified page is written to * 185 * the indicated location on the disk. A reasonable number of * 186 * error retries are made. If the page cannot be written, control * 187 * passes to the error address with the error code in R0. * 188 * Call: * 189 * LD R4 => disk control block (see R4 defn above) * 190 * CALL WRITE call for MS write * 191 * PAR * 192 * PAR * 193 * PAR * 194 * PARL * 195 * Eats R0:R3 * 196 * Stack required: 10 * 197 * 3 + max(SETUPNMAP(1), SEEK (6), PADBILD(2), * 198 * WAITSTAT (1), STATCHECK(6), UNMAP (1), * 199 * LOGERROR (2) ) * 200 * * 201 ********************************************************************************** 202 203 BLOCK write section 204 205 ENTRY WRITE 206 01201 DD1F8003 6 STAK 207 WRITE ENTR PUSH 01202 C14013B9 208 STPV DKBLOCKNO save block number 01203 C14013BC 209 STPV DKPAGENO save the page number (page map value) 01204 C10013BD 210 STP FBILOC save the FBI location 01205 C0178802 6 BASE 211 STPL SP,ERRAD save callers error address 212 213 * Calculate the FBI checksum. 01206 608013BD 2 214 LD R2 FBILOC get pointer to FBI buffer 01207 6003FF80 0 IMM 215 LD R0 FBIGMASK mask for words included in checksum 01208 F0168800 0 2 BASE 216 PRMUT R0 R2,FBIWORDA calculate checksum for the table 01209 7407FFFF 0 IMM 217 XOR R0 0FFFFFFFF change sense 0120A E416880A 0 2 BASE 218 ST R0 R2,FBICKSUM set the new checksum 219 0120B DC40125B 220 CALLNP SETUPNMAP check subs and do PF mapping 221 * \ / 0000120C 222 DOSEEK LABEL 0120C DC401284 223 CALLNP SEEK position on cylinder 0120D FE0E121D 224 JMP NOTREADY jump if drive not ready 0120E FE0E121F 225 JMP SEEKERR jump if seek error 0000120F 226 REWRITE LABEL 0120F 60040001 0 IMM 227 LD R0 PPUIDMAD*1 get DMA direction bit 01210 E4001802 0 228 ST R0 CIX(PPUSSSTAT) set DMA direction to output 01211 DC401370 229 CALLNP PADBILD get the hardware addresses 01212 600013B2 0 230 LD R0 CLOCKTIME(1) get time code (right side of clock) 01213 60570801 1 4 BASE 231 LD R1 R4,DCBUNIT R1=unit number 01214 E4221AC8 0 1 232 ST R0 CIX(BFDWRITE+1*BFDINTBIT+BFDSELECTB)(R1) start write 01215 DC4012D8 233 CALLNP WAITSTAT wait for operation and fetch statuses 01216 DC0012E5 234 CALL STATCHK check for an acceptable status 01217 40440003 IMM 235 PARVL ERROPWRITE operation type 01218 FE0E1220 236 JMP GIVEERROR jump if unrecoverable error 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 38 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 01219 FE0E120C 237 JMP DOSEEK jump if need to re-do seek 0121A FE0E120F 238 JMP REWRITE jump if need to re-do write 0121B 00024024 239 HALT HALTB4024 segment error while writing 0121C FE0E1228 240 JMP GOODRETURN jump if all went well 241 * --- 242 243 END of write section 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 39 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 245 246 ********************************************************************************** 247 * * 248 * Labels to jump to when you want to return * 249 * to the user. * 250 * * 251 ********************************************************************************** 252 253 BLOCK returns for offline MS driver 254 255 ENTRY GOODRETURN Normal return 256 ENTRY GIVEERROR Error return, R0 = error code 257 ENTRY NOTREADY Drive not ready 258 ENTRY SEEKERR Uncorrectable seek error 259 0000121D 260 NOTREADY LABEL 0121D 60040005 0 IMM 261 LD R0 ECNOTRDY 0121E FE0E1220 262 JMP GIVEERROR 263 * --- 264 0000121F 265 SEEKERR LABEL 0121F 60040004 0 IMM 266 LD R0 ECSEEK 267 * \ / 268 00001220 269 GIVEERROR LABEL 01220 61D78802 7 6 BASE 270 LD R7 SP,ERRAD set error return address 271 * \ / 272 01221 60D20000 3 0 REG 273 LD R3 R0 make copy of error code 01222 DC001384 274 CALL LOGERROR log the error 01223 41440007 IMM 275 PARV ERROPRTN operation: error return 01224 41440000 IMM 276 PARV 0 PPU status: irrelevant 01225 4052C000 3 REG 277 PARVL R3 BFD status: really error code 01226 6012C000 0 3 REG 278 LD R0 R3 restore the return code 01227 FE0E1229 279 JMP UMAPRTN unmap PF and return 280 * --- 281 00001228 282 GOODRETURN LABEL 01228 60040000 0 IMM 283 LD R0 0 good return code 00001229 284 UMAPRTN LABEL 01229 DC401280 285 CALLNP UNMAP release the page file location 0122A 5D1F8003 6 STAK 286 LEAVE POP return to caller 287 * --- 288 289 END of returns for offline MS driver 290 END READ, WRITE and return control 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 40 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 292 293 ********************************************************************************** 294 * * 295 * This routine will correct a single segment error. * 296 * The bad segment number is in R3. * 297 * Call: * 298 * R3 = bad segment number * 299 * CALLNP SEGCORRECT call to do segment correction * 300 * * 301 * * 302 * * 303 * * 304 * * 305 * Eats R0:R3 destroys CIX mapping * 306 * Stack required = 8 * 307 * 2 + max(LOGERROR(2), WAITSTAT(1), STATCHK(6) ) * 308 * * 309 ********************************************************************************** 310 311 BLOCK segment correction 312 313 ENTRY SEGCORRECT 314 ENTRY SUBLISTEND 315 0000178C 316 SUBLISTEND EQU WNDO4(WPP-BFDSEGSIZE-1) end of substitution list 0000178C 317 CHKSEGBUF EQU SUBLISTEND buffer for segment correction 318 319 BEGFRAME 00178801 6 BASE 320 BADSEGPTR BSS 1 offset to end of bad segment 321 ENDFRAME 322 0122B DD5F8002 6 STAK 323 SEGCORRECT ENTRNP PUSH 0122C DC001384 324 CALL LOGERROR log reconstruction 0122D 41440004 IMM 325 PARV ERROPSEG operation = reconstruct segment 0122E 41440000 IMM 326 PARV 0 PPU status (irrelevant) 0122F 4052C000 3 REG 327 PARVL R3 segment number 328 01230 64C4000A 3 IMM 329 CPR R3 0A is it the check segment? 01231 FE02125A 330 JEQ RETURN3 if so, all done 331 * \ / 01232 1CC40073 3 IMM 332 MUL R3 BFDSEGSIZE calculate offset to end of segment 01233 E4D78801 3 6 BASE 333 ST R3 SP,BADSEGPTR remember it 01234 60C40085 3 IMM 334 LD PFPTR PNWNDO4 page containing buffer for check seg 01235 80928000 2 REG 335 PFRD R2 page file for check segment 01236 6004178C 0 IMM 336 LD R0 ADR CHKSEGBUF 01237 E48A14C0 2 0 CBM 337 ST R2 R0/FLDABSPG 01238 E40A9560 0 2 CBM 338 ST R0 R2/PAGEANDISP R2 = absolute address of buffer 01239 E4801805 2 339 ST R2 CIX(PPUADDR1) store address into PPU 0123A 600481D0 0 IMM 340 LD R0 (BFDSEGSIZE+1)*CPW+1*PPUCLAST 0123B E4001804 0 341 ST R0 CIX(PPUCNT1) set size of transfer 0123C EDC01AB0 342 STW CIX(BFDREAD+1*BFDINTBIT) start transfer of check seg 0123D DC4012D8 343 CALLNP WAITSTAT wait for it to complete 0123E DC0012E5 344 CALL STATCHK see if all went well 0123F 40440005 IMM 345 PARVL ERROPCKSEG operation type 01240 FBE01241 7 346 RETURN2 IRJ R7 RETURN1 error return, not recoverable 01241 FBE01242 7 347 RETURN1 IRJ R7 RETURN0 error return, try seek again 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 41 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 01242 5D1F8002 6 STAK 348 RETURN0 LEAVE POP error return, try read again 01243 00024023 349 HALT HALTB4023 segment error reading check segment 350 * \ / 351 * normal return - we got the segment 01244 60C40086 3 IMM 352 LD PFPTR PNCIX use I/O window (CIX) 01245 600013BC 0 353 LD R0 DKPAGENO fetch the page map value 01246 EC0A1A30 0 CBM 354 STZ R0/PFCNTL clear the RO bit, others for fun 01247 00D20000 0 REG 355 LDPF R0 map the data in as CIX 01248 6087FF8D 2 IMM 356 LD R2 -BFDSEGSIZE 00001249 357 NEXTWORD LABEL 01249 60569073 1 2 REG 358 LD R1 R2+BFDSEGSIZE copy the 'within segment' index 0124A 6022178C 0 1 359 LD R0 CHKSEGBUF(R1) get word from the correction segment 0124B 10440400 1 IMM 360 SUB R1 WPP make data/FBI split at zero (!) 0000124C 361 DOREGWORD LABEL 0124C 74221C00 0 1 362 XOR R0 CIX(WPP)(R1) get word from data area 0124D 18440073 1 IMM 363 ADD R1 BFDSEGSIZE move to corresponding word in next seg 0124E FA48124C 1 364 JLTZ R1 DOREGWORD jump if still in data area 0124F 6444000B 1 IMM 365 CPR R1 9*BFDSEGSIZE-WPP still in FBI? 01250 FE061252 366 JGE GOTWORD jump if not 367 * \ / 01251 743213BD 0 1 @ 368 XOR R0 @FBILOC(R1) get word from FBI 00001252 369 GOTWORD LABEL 01252 60578801 1 6 BASE 370 LD R1 SP,BADSEGPTR get offset to end of bad segment 01253 18528000 1 2 REG 371 ADD R1 R2 make it point to current word 01254 10440400 1 IMM 372 SUB R1 WPP make data/FBI split at zero 01255 FA481258 1 373 JLTZ R1 COREGWORD jump if word is in data 374 * \ / 01256 F43213BD 0 1 @ 375 XORM R0 @FBILOC(R1) else fix word in FBI 01257 FE0E1259 376 JMP THISDONE done with this word 377 * --- 378 00001258 379 COREGWORD LABEL 01258 F4221C00 0 1 380 XORM R0 CIX(WPP)(R1) fix a data word 00001259 381 THISDONE LABEL 01259 FAA01249 2 382 IRJ R2 NEXTWORD do all words 383 * \ / 0125A FBE01240 7 384 RETURN3 IRJ R7 RETURN2 give normal return 385 * --- 386 387 END segment correction routine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 42 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 389 390 ********************************************************************************** 391 * * 392 * Routine to do various setup operations. We mask off the * 393 * disk address, check for substitutions, load up the page file * 394 * to point to the appropriate mass storage controller, and * 395 * select any necessary conditions there in. Before loading the * 396 * page file to point to the disk controller, we fetch the * 397 * current clock from the SSU. We accept the slight risk of * 398 * acquiring the wrong time at rollover. It is used in error * 399 * logging and for a disk write time code. * 400 * Call: * 401 * LD R4 => control block * 402 * CALLNP SETUPNMAP * 403 * * 404 * Eats R0-R3. * 405 * Stack required: 1 * 406 * * 407 ********************************************************************************** 408 409 BLOCK 410 411 ENTRY SETUPNMAP 412 413 BEGFRAME 414 ENDFRAME 415 0125B DD5F8001 6 STAK 416 SETUPNMAP ENTRNP PUSH 0125C 600013B9 0 417 LD R0 DKBLOCKNO pick up the requested block number 0125D 600A1180 0 0 CBM 418 LD R0 R0/MSBLKFIELD remove any extra bits 0125E E40013B9 0 419 ST R0 DKBLOCKNO save requested block number 0125F 5C090016 4 ZBM 420 CMZ R4,DCBNOSUBS ignore substitution list? 01260 FE0C1265 421 JNE NOTSUBD if set, then yes 01261 60570804 1 4 BASE 422 LD R1 R4,DCBSUBLIST R4 -> substitution list 01262 3C164801 0 1 BASE 423 LSRCH R0 R1,1 see if block is substituted 01263 FE0C1265 424 JNE NOTSUBD jump if not substituted 01264 60164802 0 1 BASE 425 LD R0 R1,2 R0 = substitute block number 00001265 426 NOTSUBD LABEL 01265 E40013BA 0 427 ST R0 DKREALBLK save real block number 428 01266 60C40086 3 IMM 429 LD PFPTR PNCIX get channel index page number 01267 00C00310 430 LDPF SSUPF load the page file for the SSU 01268 60401802 1 431 LD R1 CIX(SSUCLOCKL) fetch low half clock 01269 60001801 0 432 LD R0 CIX(SSUCLOCKU) fetch high half clock 0126A E60013B1 01 433 ST2 R0 CLOCKTIME save the current time for later 0126B 00D70800 4 BASE 434 LDPF R4,DCBPFILE make page file point to this controller 0126C EC001801 435 STZ CIX(PPUABORT) clean out channel 0126D D1401803 436 STMW CIX(PPUSCSTAT) clear as much status as possible 0126E EE0013B3 437 STZ2 DISKERRS initialize the error counters 0126F EC0013B5 438 STZ CHANERRS 01270 60040020 0 IMM 439 LD R0 BFDFNSAFE 01271 60570801 1 4 BASE 440 LD R1 R4,DCBUNIT 01272 E4221A28 0 1 441 ST R0 CIX(BFDFUNC+BFDSELECTB+R1) reset drive not safe status 01273 5C090416 4 ZBM 442 CMZ R4,DCBNORETRY 01274 FE0C1279 443 JNE NORETRY 01275 60040014 0 IMM 444 LD R0 DKERRLIM 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 43 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 01276 6044000A 1 IMM 445 LD R1 CHERRLIM 01277 60840004 2 IMM 446 LD R2 SKERRLIM 01278 FE0E127C 447 JMP SETLIMITS 448 * --- 00001279 449 NORETRY LABEL 01279 60040001 0 IMM 450 LD R0 1 0127A 60440001 1 IMM 451 LD R1 1 0127B 60840001 2 IMM 452 LD R2 1 453 * \ / 0000127C 454 SETLIMITS LABEL 0127C E40013B6 0 455 ST R0 DISKERRLIM 0127D E44013B7 1 456 ST R1 CHANERRLIM 0127E E48013B8 2 457 ST R2 SEEKERRLIM 0127F 5D1F8001 6 STAK 458 LEAVE POP 459 * --- 460 461 END 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 44 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 463 464 ********************************************************************************** 465 * * 466 * Routine to unload the page file. * 467 * Call: * 468 * CALLNP UNMAP * 469 * Eats PFPTR * 470 * Stack required: 1 * 471 * * 472 ********************************************************************************** 473 474 BLOCK 475 476 ENTRY UNMAP 477 478 BEGFRAME 479 ENDFRAME 480 01280 DD5F8001 6 STAK 481 UNMAP ENTRNP PUSH 01281 60C40086 3 IMM 482 LD PFPTR PNCIX get the I/O window page number 01282 80D2C000 3 REG 483 PFRC PFPTR unmap this controller 01283 5D1F8001 6 STAK 484 LEAVE POP return with clean PF 485 * --- 486 487 END 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 45 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 489 490 ********************************************************************************** 491 * * 492 * Issue a seek to this drive. Enter here with the seek * 493 * address in DKREALBLK. Unpack the seek address and output * 494 * it to the drive. Save the unpacked seek address in DKSEEKADDR. * 495 * Call: * 496 * CALLNP SEEK * 497 * * 498 * * 499 * * 500 * Eats R0-R3 * 501 * Stack required: 6 * 502 * 1 + max(SEEKNDWAIT(5), DOZERO(2)) * 503 * * 504 ********************************************************************************** 505 506 BLOCK seek section 507 508 ENTRY SEEK 509 510 BEGFRAME 511 ENDFRAME 512 01284 DD5F8001 6 STAK 513 SEEK ENTRNP PUSH 00001285 514 AGAIN LABEL 01285 62040000 01 IMM 515 LD2 R0 0 setup prototype hardware address 01286 608013BA 2 516 LD R2 DKREALBLK fetch the block number 01287 58C40010 IMM 517 IORPSR PSRMODIF use fancy arithmetic 01288 14570802 1 4 BASE 518 DIV R1 R4,DCBSECPTRK separate sector from track 01289 E48A3080 2 0 CBM 519 ST R2 R0/BFDSASEC plop sector number into prototype 0128A 62524000 121 REG 520 LD2 R1 R1 swell up for DIV 0128B 14570803 1 4 BASE 521 DIV R1 R4,DCBTRKPCYL separate track from cylinder 0128C 58840010 IMM 522 CLBPSR PSRMODIF restore normal arithmetic 0128D E48A2080 2 0 CBM 523 ST R2 R0/BFDSAHEAD put track # (head) into prototype 0128E E44A0100 1 0 CBM 524 ST R1 R0/BFDSACYL and cylinder number 0128F E40013BB 0 525 ST R0 DKSEEKADDR save seek address (for error report) 01290 60570801 1 4 BASE 526 LD R1 R4,DCBUNIT R1=unit number 01291 E4221A18 0 1 527 ST R0 CIX(BFDSEEK+BFDSELECTB)(R1) do the seek 01292 DC0012AF 528 CALL SEEKNDWAIT wait for the seek to finish 01293 40440000 IMM 529 PARVL ERROPSEEK operation in progress 01294 5D1F8001 6 STAK 530 RETURN0 LEAVE POP offline, give return 0 01295 FE0E1297 531 JMP ERROR1 jump if seek error occurred 532 * \ / normal return (skip 2) 01296 FBE0129A 7 533 IRJ R7 RETURN1 advance return address 534 * --- 535 00001297 536 ERROR1 LABEL seek error has occurred 01297 BC0013B4 0 537 INCL R0 SEEKERRS check and advance the error counter 01298 640013B8 0 538 CPR R0 SEEKERRLIM are we over the limit yet? 01299 FE081285 539 JLT AGAIN jump if not, try again 0129A FBE01294 7 540 RETURN1 IRJ R7 RETURN0 permanent seek error return 541 * --- 542 543 END of seek section 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 46 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 545 546 ********************************************************************************** 547 * * 548 * Do a rezero operation. This should resuscitate a * 549 * drive after a seek error. This code will execute a stop * 550 * if we get a timeout or another seek error on the rezero. * 551 * Call: * 552 * CALLNP DOZERO * 553 * * 554 * * 555 * * 556 * Eats R0-R3. * 557 * Stack required: 2 * 558 * 1 + max(CLEARFAULT(1)) * 559 * * 560 ********************************************************************************** 561 562 BLOCK drive re-zero code 563 564 ENTRY DOZERO 565 566 BEGFRAME 567 ENDFRAME 568 0129B DD5F8001 6 STAK 569 DOZERO ENTRNP PUSH 0129C 60040012 0 IMM 570 LD R0 BFDFNZERO get the function code for re-zero 0129D 60570801 1 4 BASE 571 LD R1 R4,DCBUNIT R1=unit 0129E E4221A28 0 1 572 ST R0 CIX(BFDFUNC+BFDSELECTB)(R1) send to the drive 573 0129F 60843A98 2 IMM 574 LD R2 DEADMAN time out counter 012A0 604013B0 1 575 LD R1 STATMASK mask for relevant status bits 000012A1 576 SEEKWLOOP LABEL 012A1 60001A20 0 577 LD R0 CIX(BFDSS) get current status 012A2 6C021000 01 IMM 578 MCPR R0 SEEKINGSTAT see if we are still seeking 012A3 FE0C12A6 579 JNE SEEKDONE jump if not still seeking 012A4 FAA212A1 2 580 DRJ R2 SEEKWLOOP continue waiting for seek to finish 581 * \ / 582 012A5 00824025 583 STOP STOPB4025 error rezeroing drive 584 * \ / 585 000012A6 586 SEEKDONE LABEL 012A6 6C021800 01 IMM 587 MCPR R0 SEEKOKSTAT compare against good status 012A7 FE0212AE 588 JEQ RETURN jump if re-zero worked 012A8 F62E12AD 0 589 JBT R0/BFDSSRSPER RETURN0 response error => offline 012A9 F60E12AC 0 590 JBT R0/BFDSSFAULT SDFAULT jump if we have a fault 012AA F20812AD 0 591 JBF R0/BFDSSRDY RETURN0 drive not ready, give error 012AB 00824025 592 STOP STOPB4025 seek error on rezero operation 593 * \ / 594 000012AC 595 SDFAULT LABEL 012AC DC4012CC 596 CALLNP CLEARFAULT clear the drive fault 012AD 5D1F8001 6 STAK 597 RETURN0 LEAVE POP return 598 * \ / 000012AE 599 RETURN LABEL 012AE FBE012AD 7 600 IRJ R7 RETURN0 advance to normal return 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 47 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 601 * --- 602 603 END of drive re-zero code 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 48 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 605 606 ********************************************************************************** 607 * * 608 * SEEKNDWAIT * 609 * Wait for the drive to say that a seek is done. We * 610 * read the current status and determine whether it was * 611 * successful. If not, we log the error. * 612 * CALL SEEKNDWAIT * 613 * PARVL operation * 614 * * 615 * * 616 * * 617 * Eats R0:R3. * 618 * Stack required: 5 * 619 * 3 + max(LOGERROR(2), DOZERO(2)) * 620 * * 621 ********************************************************************************** 622 623 BLOCK seek end wait routine 624 625 ENTRY SEEKNDWAIT 626 627 BEGFRAME 00178801 6 BASE 628 STATUS BSS 1 disk status 00178802 6 BASE 629 OPERATION BSS 1 operation that just finished 630 ENDFRAME 631 012AF DD1F8003 6 STAK 632 SEEKNDWAIT ENTR PUSH 012B0 C0578802 6 BASE 633 STPVL SP,OPERATION save operation code 012B1 60843A98 2 IMM 634 LD R2 DEADMAN time out counter 012B2 604013B0 1 635 LD R1 STATMASK mask for relevant status bits 000012B3 636 LOOP LABEL 012B3 60001A20 0 637 LD R0 CIX(BFDSS) get current status 012B4 6C021000 01 IMM 638 MCPR R0 SEEKINGSTAT see if we are still seeking 012B5 FE0C12B8 639 JNE DONE jump if not still seeking 012B6 FAA212B3 2 640 DRJ R2 LOOP continue waiting for seek to finish 641 * \ / 642 012B7 00824031 643 STOP STOPB4031 seek timed out. GO will make seek error 644 * \ / 645 000012B8 646 DONE LABEL 012B8 6C021800 01 IMM 647 MCPR R0 SEEKOKSTAT compare against good status 012B9 FE0212CB 648 JEQ GOODRETURN jump if all is well 012BA E4178801 0 6 BASE 649 ST R0 SP,STATUS save the status 012BB 60D38000 3 6 REG 650 LD R3 SP make copy of stack pointer 012BC DC001384 651 CALL LOGERROR log the error 012BD 4156C802 3 BASE 652 PARV R3,OPERATION operation in progress 012BE 41440000 IMM 653 PARV 0 PPU status 012BF 4056C801 3 BASE 654 PARVL R3,STATUS BFD status 012C0 60178801 0 6 BASE 655 LD R0 SP,STATUS restore status 012C1 F62E12C5 0 656 JBT R0/BFDSSRSPER OFFLINE response error => offline 012C2 F60E12C6 0 657 JBT R0/BFDSSFAULT DRVFAULT go to clear fault 012C3 F60C12C8 0 658 JBT R0/BFDSSSKERR SERROR go fix seek error 012C4 F60812C8 0 659 JBT R0/BFDSSRDY SERROR drive ready => seek error 000012C5 660 OFFLINE LABEL drive not ready (or response error) 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 49 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 012C5 5D1F8003 6 STAK 661 RETURN0 LEAVE POP 662 * --- 663 000012C6 664 DRVFAULT LABEL 012C6 DC4012CC 665 CALLNP CLEARFAULT clear the drive fault 012C7 FE0E12C5 666 JMP OFFLINE clear fault routine couldn't 667 * \ / otherwise, seek error 668 000012C8 669 SERROR LABEL seek error - do rezero 012C8 DC40129B 670 CALLNP DOZERO call for the rezero operation 012C9 FE0E12C5 671 JMP OFFLINE jump if no good 672 * \ / 673 * seek error (or other misc bad status) 000012CA 674 RETURN1 LABEL 012CA FBE012C5 7 675 IRJ R7 RETURN0 advance return address 676 * --- 677 000012CB 678 GOODRETURN LABEL seek completed normally 012CB FBE012CA 7 679 IRJ R7 RETURN1 advance return address 680 * --- 681 682 END of seek end wait routine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 50 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 684 685 ********************************************************************************** 686 * * 687 * CLEARFAULT - Clear a drive fault and reset unsafe * 688 * Call: * 689 * CALLNP CLEARFAULT * 690 * * 691 * * 692 * Eats R0:R1 * 693 * * 694 ********************************************************************************** 695 696 BLOCK 697 ENTRY CLEARFAULT 698 699 BEGFRAME 700 ENDFRAME 701 012CC DD5F8001 6 STAK 702 CLEARFAULT ENTRNP PUSH 012CD 60040011 0 IMM 703 LD R0 BFDFNCLFLT get command code for clear fault 012CE 60570801 1 4 BASE 704 LD R1 R4,DCBUNIT get the unit number 012CF E4221AA8 0 1 705 ST R0 CIX(BFDFUNC+1*BFDINTBIT+BFDSELECTB)(R1) 012D0 60443A98 1 IMM 706 LD R1 DEADMAN time out counter 000012D1 707 LOOP LABEL 012D1 60001A20 0 708 LD R0 CIX(BFDSS) get current status 012D2 F60812D5 0 709 JBT R0/BFDSSRDY DONE status looks good, exit 012D3 FA6212D1 1 710 DRJ R1 LOOP continue waiting for drive to become ready 711 * \ / 012D4 5D1F8001 6 STAK 712 RETURN0 LEAVE POP return 713 * --- 714 000012D5 715 DONE LABEL 012D5 60040020 0 IMM 716 LD R0 BFDFNSAFE get command code for make drive safe 012D6 E4001A20 0 717 ST R0 CIX(BFDFUNC) 012D7 FBE012D4 7 718 IRJ R7 RETURN0 advance return address and leave 719 * --- 720 721 END 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 51 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 723 724 ********************************************************************************** 725 * * 726 * Wait for completion of data transfer then * 727 * get status after data transfer operation. * 728 * Call: * 729 * CALLNP WAITSTAT * 730 * * 731 * * 732 * Eats R0. Sets R1,R2. * 733 * Stack required: 1 * 734 * * 735 ********************************************************************************** 736 737 BLOCK wait for data xfer completion 738 739 ENTRY WAITSTAT 740 741 BEGFRAME 742 ENDFRAME 743 012D8 DD5F8001 6 STAK 744 WAITSTAT ENTRNP PUSH 012D9 60441388 1 IMM 745 LD R1 DEADMANL get time out value 012DA 60840000 2 IMM 746 LD R2 0 IOR status into here 000012DB 747 LOOP LABEL 012DB 7C801801 2 748 IOR R2 CIX(PPUINTSTAT) get the PPU internal status 012DC F6B812E2 2 749 JBT R2/PPUIINTC DONE jump if interrupt being requested 012DD 00440014 IMM 750 WAIT 20 wait here for 200 microseconds 012DE FA6612DB 1 751 JDR R1 LOOP check dead man timer 012DF EC001801 752 STZ CIX(PPUABORT) clear out everything 012E0 6087FFFF 2 IMM 753 LD R2 -1 get status indicating PPU status bad 754 * R1 = 0 012E1 FE0E12E4 755 JMP RETURN 756 * --- 757 000012E2 758 DONE LABEL 012E2 7884FFFF 2 IMM 759 AND R2 0FFFF mask off strange part of channel status 012E3 60401802 1 760 LD R1 CIX(PPUCHANS1) get the device status 761 * \ / 000012E4 762 RETURN LABEL 012E4 5D1F8001 6 STAK 763 LEAVE POP return 764 * --- 765 00001388 ABS 766 DEADMANL EQU 5000 timeout counter (about 2.5 seconds) 767 768 END of wait for data xfer completion 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 52 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 770 771 ********************************************************************************** 772 * * 773 * STATCHK * 774 * Check status after data transfer operation to see * 775 * if it is acceptable to our aesthete. We check statuses * 776 * for both read and write. If anything is wrong, we log * 777 * the error. * 778 * Call: * 779 * R1 = device status * 780 * R2 = PPU status * 781 * CALL STATCHK * 782 * PARVL operation * 783 * * 784 * * 785 * * 786 * * 787 * * 788 * Eats R0-R3. * 789 * Stack required: 10 * 790 * 4 + max(LOGERROR(2), DOZERO(6)) * 791 * * 792 ********************************************************************************** 793 794 BLOCK status check routine 795 796 ENTRY STATCHK 797 798 BEGFRAME 00178801 6 BASE 799 OPERATION BSS 1 operation that was done 00178802 6 BASE 800 ERRLOGFILE BSS 2 disk error file values 00178802 6 BASE 801 DISKSTAT EQU ERRLOGFILE(0) BFD status (used as double too) 00178803 6 BASE 802 PPUSTAT EQU ERRLOGFILE(1) PPU status 803 ENDFRAME 804 012E5 DD1F8004 6 STAK 805 STATCHK ENTR PUSH 012E6 C0578801 6 BASE 806 STPVL SP,OPERATION save operation type 012E7 E6578802 126 BASE 807 ST2 R1 SP,DISKSTAT save disk and ppu status 012E8 7840134C 1 808 AND R1 BFDMASK mask off non-error bits 012E9 64421800 1 IMM 809 CPR R1 BFDOKSTAT is it good status? 012EA FE0C12ED 810 JNE HARDWAY jump if not, we have a long job to do 012EB 78846540 2 IMM 811 AND R2 PPUMASK mask off non-error bits 012EC FA821349 2 812 JEQZ R2 RETURN jump if good status, all done 813 * \ / 814 000012ED 815 HARDWAY LABEL 012ED 60D38000 3 6 REG 816 LD R3 SP copy the stack pointer 012EE DC001384 817 CALL LOGERROR log the error 012EF 4156C801 3 BASE 818 PARV R3,OPERATION operation in progress 012F0 4156C803 3 BASE 819 PARV R3,PPUSTAT PPU status 012F1 4056C802 3 BASE 820 PARVL R3,DISKSTAT BFD status 012F2 62578802 126 BASE 821 LD2 R1 SP,DISKSTAT restore statuses 822 012F3 F6AA133A 2 823 JBT R2/PPUICONF CHANERROR jump if PPU is confused 012F4 F6AE1340 2 824 JBT R2/PPUIMPE MPEERROR jump if memory parity error 012F5 F66E1338 1 825 JBT R1/BFDSSRSPER OFFLINE jump if no disk responding 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 53 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 012F6 F24E12FA 1 826 JBF R1/BFDSSFAULT NOFAULT jump if NOT fault 012F7 DC4012CC 827 CALLNP CLEARFAULT call to clear the fault 012F8 FE0E1338 828 JMP OFFLINE jump if can't do it 012F9 FE0E132E 829 JMP SEEKERROR1 and go check seek try counter 830 * --- 831 000012FA 832 NOFAULT LABEL 012FA F2481338 1 833 JBF R1/BFDSSRDY OFFLINE jump if not ready 012FB F64C132C 1 834 JBT R1/BFDSSSKERR SEEKERROR jump if seek error 012FC F24A132C 1 835 JBF R1/BFDSSONCYL SEEKERROR jump if not on cylinder 012FD 600A7840 0 1 CBM 836 LD R0 R1/BFDSSERRCD get error code 012FE 5C30134D 0 @ 837 CMZ @PTRBDE(R0) is it B, D or E? 012FF FE0C133A 838 JNE CHANERROR jump if yes 839 01300 60178801 0 6 BASE 840 LD R0 SP,OPERATION get operation type 01301 64040003 0 IMM 841 CPR R0 ERROPWRITE is it a write? 01302 FE021326 842 JEQ STATWRITE jump if yes 843 * \ / 844 845 * Here, we do status checking for read (and read check segment). 846 01303 F6A4133A 2 847 JBT R2/PPUIDPPE CHANERROR jump if data path parity error 01304 F6B2133A 2 848 JBT R2/PPUIBCNR CHANERROR jump if byte count not ready 01305 F6A2133A 2 849 JBT R2/PPUIXTRA CHANERROR jump if extra chars after rollover 850 01306 F668133A 1 851 JBT R1/BFDSSWCERR CHANERROR jump if word-count error 01307 F66A133A 1 852 JBT R1/BFDSSLOSTD CHANERROR jump if overrun/underrun 01308 F66C133A 1 853 JBT R1/BFDSSIFPE CHANERROR jump if interface parity error 854 01309 5C0A7030 1 CBM 855 CMZ R1/BFDSSHDECD any header errors? 0130A FE021314 856 JEQ NOHEADERR1 jump if none 0130B 5C0013B4 857 CMZ SEEKERRS have we already redone the seek? 0130C FE02132C 858 JEQ SEEKERROR jump if not 0130D 608013BD 2 859 LD R2 FBILOC R2 -> file block identifier 0130E 6003FFC0 0 IMM 860 LD R0 FBICSMASK mask for generating checksum 0130F F0168800 0 2 BASE 861 PRMUT R0 R2,0 generate the checksum 01310 FA2E1342 0 862 JNEMW R0 DISKERROR jump if checksum is not good 01311 60089181 0 2 ZBM 863 LD R0 R2,FBIDA get id of block read 01312 640013B9 0 864 CPR R0 DKBLOCKNO is it the right one? 01313 FE0C1342 865 JNE DISKERROR jump if wrong, else accept the block 866 * \ / 867 00001314 868 NOHEADERR1 LABEL 01314 60CA7840 3 1 CBM 869 LD R3 R1/BFDSSERRCD get the error code 01315 64C4000A 3 IMM 870 CPR R3 0A is it a single segment error? 01316 FE041342 871 JGT DISKERROR jump if not 01317 FAC4131A 3 872 JGTZ R3 SEGERROR jump if yes 01318 F2761349 1 873 JBF R1/BFDSSCEOV RETURN jump if no time-code error 01319 60C4000A 3 IMM 874 LD R3 0A else claim error in check segment 875 * \ / time code in check segment ONLY is correctable 876 0000131A 877 SEGERROR LABEL R3 = number of bad segment 0131A 5C0013B3 878 CMZ DISKERRS any disk errors so far? 0131B FE021342 879 JEQ DISKERROR if not, retry 0131C 60401A30 1 880 LD R1 CIX(BFDEF18) get first part of error file 0131D 60801A40 2 881 LD R2 CIX(BFDEF9A) get last part of error file 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 54 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 0131E 7883FE00 2 IMM 882 AND R2 0FF000000 mask off irrelevant part 0131F E6578802 126 BASE 883 ST2 R1 SP,ERRLOGFILE save it 01320 3809B841 0 6 ZBM 884 LEA R0 SP,ERRLOGFILE/BITS 0:3(-1) make pointer 01321 6044000C 1 IMM 885 LD R1 0C mask to remove crc and timecode bits 01322 F85A1C00 1 03 @R 886 ANDM R1 @R0(R3) remove bits from bad segment 01323 5E178802 6 BASE 887 CMZ2 SP,ERRLOGFILE any other errors? 01324 FE0C1342 888 JNE DISKERROR jump if yes, can't reconstruct block 889 * error return - correctable segment error 01325 FBE0134A 7 890 RETURN3 IRJ R7 RETURN2 advance return address 891 * --- 892 893 * Status checking for write operations. 894 00001326 895 STATWRITE LABEL 01326 F6461347 1 896 JBT R1/BFDSSWPROT WRITEPROT jump if write-protected 01327 F6AE133A 2 897 JBT R2/PPUIMPE CHANERROR jump if memory parity error 01328 5C0A7030 1 CBM 898 CMZ R1/BFDSSHDECD any header errors? 01329 FE021333 899 JEQ NOHEADERR2 jump if not 0132A 5C0013B4 900 CMZ SEEKERRS have we redone the seek yet? 0132B FE0C1345 901 JNE FATALDISK if so, it's a fatal error 902 * \ / 903 904 ********************************************************************************** 905 * * 906 * Here we have a problem that requires a re-seek. * 907 * First rezero the disk, then decide whether to retry. * 908 * * 909 ********************************************************************************** 910 911 * \ / 0000132C 912 SEEKERROR LABEL 0132C DC40129B 913 CALLNP DOZERO 0132D FE0E1338 914 JMP OFFLINE jump if drive now offline 0000132E 915 SEEKERROR1 LABEL 0132E BC0013B4 0 916 INCL R0 SEEKERRS increment error count 0132F 640013B8 0 917 CPR R0 SEEKERRLIM see if too many 01330 FE08134B 918 JLT RETRYSEEK jump if not - retry seek 01331 60040004 0 IMM 919 LD R0 ECSEEK else explain the error 01332 FE0E1339 920 JMP GIVEUP and give up 921 * --- 922 00001333 923 NOHEADERR2 LABEL 01333 5C0A7650 1 CBM 924 CMZ R1/(BFDSSCEOV+BFDSSERRCD) any misc errors? 01334 FE02133A 925 JEQ CHANERROR if not, must be electronic problem 01335 600013B3 0 926 LD R0 DISKERRS get count of errors so far 01336 64040005 0 IMM 927 CPR R0 5 too many? 01337 FE081342 928 JLT DISKERROR jump if not 929 * \ / treat drive as if offline 930 931 ********************************************************************************** 932 * * 933 * Here, a drive went offline. Tell the poor user. * 934 * * 935 ********************************************************************************** 936 937 * \ / 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 55 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 00001338 938 OFFLINE LABEL 01338 60040005 0 IMM 939 LD R0 ECNOTRDY error code 00001339 940 GIVEUP LABEL error return - abandon hope 01339 5D1F8004 6 STAK 941 RETURN0 LEAVE POP return 942 * --- 943 944 945 946 ********************************************************************************** 947 * * 948 * Here we have a channel problem. Decide whether to retry. * 949 * * 950 ********************************************************************************** 951 0000133A 952 CHANERROR LABEL 0133A EC001801 953 STZ CIX(PPUABORT) try to make channel happier 0133B BC0013B5 0 954 INCL R0 CHANERRS increment error counter 0133C 640013B7 0 955 CPR R0 CHANERRLIM see if too many 0133D FE08134A 956 JLT RETRYDATA jump if not - retry transfer 0133E 60040003 0 IMM 957 LD R0 ECCHAN else load error code 0133F FE0E1339 958 JMP GIVEUP and give up 959 * --- 960 961 962 ********************************************************************************** 963 * * 964 * We arrive here if the PPU encountered a memory parity error * 965 * while accessing memory. We just return an appropriate error. * 966 * * 967 ********************************************************************************** 968 00001340 969 MPEERROR LABEL 01340 60040007 0 IMM 970 LD R0 ECMPE get the appropriate error code 01341 FE0E1339 971 JMP GIVEUP and give up fatal 972 * --- 973 974 975 ********************************************************************************** 976 * * 977 * Here, we have a disk data error. Decide whether to retry. * 978 * * 979 ********************************************************************************** 980 00001342 981 DISKERROR LABEL 01342 BC0013B3 0 982 INCL R0 DISKERRS increment error count 01343 640013B6 0 983 CPR R0 DISKERRLIM see if too many 01344 FE08134A 984 JLT RETRYDATA jump if not - retry transfer 985 * \ / 986 00001345 987 FATALDISK LABEL 01345 60040001 0 IMM 988 LD R0 ECDATA else load error code 01346 FE0E1339 989 JMP GIVEUP and give up 990 * --- 991 992 ********************************************************************************** 993 * * 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 56 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 994 * Here, some turkey tried to write on a write-protected * 995 * disk. Throw the book at him. * 996 * * 997 ********************************************************************************** 998 00001347 999 WRITEPROT LABEL 01347 60040006 0 IMM 1000 LD R0 ECWRPROT error code 01348 FE0E1339 1001 JMP GIVEUP and return 1002 * --- 1003 1004 ********************************************************************************** 1005 * * 1006 * This is where we return to the caller. * 1007 * * 1008 ********************************************************************************** 1009 00001349 1010 RETURN LABEL normal return - transfer successful 01349 FBE01325 7 1011 IRJ R7 RETURN3 advance return address 1012 * --- 0000134A 1013 RETRYDATA LABEL error return - retry transfer 0134A FBE0134B 7 1014 RETURN2 IRJ R7 RETURN1 advance return address 1015 * --- 0000134B 1016 RETRYSEEK LABEL error return - retry seek 0134B FBE01339 7 1017 RETURN1 IRJ R7 RETURN0 advance return address 1018 * --- 1019 1020 00006540 ABS 1021 PPUMASK EQU 1*PPUIXTRA+1*PPUIDPPE+1*PPUICONF+1*PPUIMPE+1*PPUIBCNR 1022 0F000000 ABS 1023 MASK1 EQU 1*BFDSSRDY+1*BFDSSONCYL+1*BFDSSSKERR+1*BFDSSFAULT 00000F00 ABS 1024 MASK2 EQU 1*BFDSSWCERR+1*BFDSSLOSTD+1*BFDSSIFPE+1*BFDSSRSPER 000000FF ABS 1025 MASK3 EQU 7*BFDSSHDECD+1*BFDSSCEOV+0F*BFDSSERRCD 1026 0134C 0F000FFF 1027 BFDMASK VFD MASK1+MASK2+MASK3 relevant bits in bfd status 1028 0C000000 ABS 1029 BFDOKSTAT EQU 1*BFDSSRDY+1*BFDSSONCYL good disk status 1030 0134D 0048134E 1031 PTRBDE PTR SETBDE pointer to bit vector of 11, 13, 14 0134D 00000000 1032 SETBDE VFDB 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0 1033 1034 END of status check routine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 57 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 1036 1037 ********************************************************************************** 1038 * * 1039 * TSELECT * 1040 * This routine should be called as part of the * 1041 * setup for a read. It will do any offsets if they * 1042 * are needed for error recovery. * 1043 * Call: * 1044 * CALLNP TSELECT * 1045 * * 1046 * * 1047 * * 1048 * Eats R0:R3. * 1049 * Stack required: 7 * 1050 * 2 + max(SEEKNDWAIT(5)) * 1051 * * 1052 ********************************************************************************** 1053 1054 BLOCK TSELECT routine 1055 1056 ENTRY TSELECT 1057 ENTRY TERRORLIM 1058 1059 BEGFRAME 00178801 6 BASE 1060 ACTION BSS 1 entry of choice 1061 ENDFRAME 1062 0134F DD5F8002 6 STAK 1063 TSELECT ENTRNP PUSH 01350 60570801 1 4 BASE 1064 LD R1 R4,DCBUNIT get the unit number 01351 E4401A00 1 1065 ST R1 CIX(BFDSELECT) select the drive just this once 1066 * \ / 1067 1068 * pick a trick 01352 604013B3 1 1069 LD R1 DISKERRS get the error counter 01353 FA421364 1 1070 JEQZ R1 GOODRET leave if this is the first try 01354 60040000 0 IMM 1071 LD R0 0 clear for divide 01355 58C40010 IMM 1072 IORPSR PSRMODIF turn on mod arithmetic 01356 1404000A 0 IMM 1073 DIV R0 TERRORLIM R1 = which trick to use 01357 58840010 IMM 1074 CLBPSR PSRMODIF back to normal math 01358 60621365 1 1 1075 LD R1 OFSETA(R1) select a trick from our grab bag 01359 FE0E135C 1076 JMP TSWAIT wait for any un-operations to happen 1077 * --- 1078 1079 * control for function 0000135A 1080 TALOOP LABEL 0135A 600A7080 0 1 CBM 1081 LD R0 R1/CH3 extract current operation 0135B E4001A20 0 1082 ST R0 CIX(BFDFUNC) do the function 0000135C 1083 TSWAIT LABEL 0135C E4578801 1 6 BASE 1084 ST R1 SP,ACTION save remaining codes 0135D 00440019 IMM 1085 WAIT 25 pause to let interface work 1086 * \ / 1087 1088 * now loop until the mechanical motion is done. 0135E DC0012AF 1089 CALL SEEKNDWAIT wait ... 0135F 40440006 IMM 1090 PARVL ERROPOFSET doing offset operation 01360 5D1F8002 6 STAK 1091 OFFLINE LEAVE POP exit (SEEKNDWAIT sez offline) 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 58 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 01361 FBE01360 7 1092 ERROR IRJ R7 OFFLINE advance exit (SEEKNDWAIT sez seekerror) 1093 * \ / 1094 1095 * look for next action 01362 60499101 1 6 ZBM 1096 LD R1 SP,ACTION/(CH1+CH2) rotate! 01363 FA4C135A 1 1097 JNEZ R1 TALOOP jump if something to do 00001364 1098 GOODRET LABEL 01364 FBE01361 7 1099 IRJ R7 ERROR make for third exit 1100 * --- 1101 00001365 1102 OFSETA LABEL 01365 00000000 1103 VFD 8:0,0,0,0 index of zero -- not used on first try 01366 00000000 1104 VFD 8:0,0,0,0 index of one -- simply a retry, nothing fancy 01367 00000000 1105 VFD 8:0,0,BFDFNDSE,0 try early data strobe 01368 00000000 1106 VFD 8:0,0,BFDFNDSL,0 try late data strobe 01369 00000000 1107 VFD 8:0,BFDFNRDS,BFDFNOFSF,0 normal strobe, offset forward 0136A 00000000 1108 VFD 8:0,BFDFNDSE,BFDFNOFSF,0 early, forward 0136B 00000000 1109 VFD 8:0,BFDFNDSL,BFDFNOFSF,0 late, forward 0136C 00000000 1110 VFD 8:0,BFDFNRDS,BFDFNOFSB,0 normal strobe, offset backward 0136D 00000000 1111 VFD 8:0,BFDFNDSE,BFDFNOFSB,0 early, backward 0136E 00000000 1112 VFD 8:0,BFDFNDSL,BFDFNOFSB,0 late, backward 0000000A DISP 1113 TERRORLIM EQU DISP OFSETA number of elements in above table 0136F 00000000 1114 VFD 8:0,0,0,0 extra do nothing element 1115 1116 END TSELECT routine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 59 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 1118 1119 ********************************************************************************** 1120 * * 1121 * Routine to construct the "system addresses" * 1122 * ( slot number and relative address ) for the FBI and * 1123 * the physical page and load up the PPU address and * 1124 * word count registers. We create the FBI address by fetching * 1125 * the page file contents for its page. Call: * 1126 * * 1127 * CALLNP PADBILD * 1128 * * 1129 * Gets R0:R2 * 1130 * Stack required: 2 * 1131 * * 1132 ********************************************************************************** 1133 1134 BLOCK PPU register load routine 1135 1136 ENTRY PADBILD 1137 1138 BEGFRAME 00178801 6 BASE 1139 R3SAVE BSS 1 save area for R3 1140 ENDFRAME 1141 01370 DD5F8002 6 STAK 1142 PADBILD ENTRNP PUSH 01371 E4D78801 3 6 BASE 1143 ST R3 SP,R3SAVE save this register 01372 604013BD 1 1144 LD R1 FBILOC get address of FBI 01373 60CA5E70 3 1 CBM 1145 LD PFPTR R1/FLDPAGE load the virtual page number 01374 7CC40080 3 IMM 1146 IOR PFPTR MONPF we're in the monitor memory 01375 80920000 0 REG 1147 PFRD R0 get the page file contents for the page 01376 60D78801 3 6 BASE 1148 LD R3 SP,R3SAVE restore this register 01377 E40A54C0 0 1 CBM 1149 ST R0 R1/FLDABSPG make relative physical page 01378 E44A1560 1 0 CBM 1150 ST R1 R0/PAGEANDISP combine with slot number 01379 E4001807 0 1151 ST R0 CIX(PPUADDR2) store memory address for FBI 0137A 6004802C 0 IMM 1152 LD R0 FBILNTH*CPW+PPUCLAST*1 size of FBI, also end 0137B E4001806 0 1153 ST R0 CIX(PPUCNT2) set into PPU 1154 0137C 600013BC 0 1155 LD R0 DKPAGENO get the page location 0137D 60440000 1 IMM 1156 LD R1 0 page displacement (beginning of page) 0137E E40A54C0 0 1 CBM 1157 ST R0 R1/FLDABSPG build the relative address 0137F E44A1560 1 0 CBM 1158 ST R1 R0/PAGEANDISP combine with slot number 01380 E4001805 0 1159 ST R0 CIX(PPUADDR1) store mem address for data block 01381 60041000 0 IMM 1160 LD R0 CPP load size of page 01382 E4001804 0 1161 ST R0 CIX(PPUCNT1) store data block byte count 1162 01383 5D1F8002 6 STAK 1163 LEAVE POP return 1164 * --- 1165 1166 END of PPU register load routine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 60 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 1168 1169 ********************************************************************************** 1170 * * 1171 * LOGERROR - Log a disk I/O error. * 1172 * See ERRLOGBLK for the format of the entries. * 1173 * Call: * 1174 * R4 = address of disk control block * 1175 * DKBLOCKNO = block number * 1176 * DKSEEKADR = seek address * 1177 * CALL LOGERROR eats R0,R2 before passing parameters * 1178 * PARV * 1179 * PARV * 1180 * PARVL * 1181 * * 1182 * Eats R0:R2 * 1183 * Stack required: 1 * 1184 * * 1185 ********************************************************************************** 1186 1187 BLOCK error log routine 1188 1189 ENTRY LOGERROR 1190 1191 BEGFRAME 1192 ENDFRAME 1193 01384 DD9F8001 6 STAK 1194 LOGERROR ENTRS PUSH 01385 608013EA 2 1195 LD R2 VERRLOGPTR R2 -> error log buffer 01386 FA8213AB 2 1196 JEQZ R2 LOGSKIP jump if no log buffer exists 01387 60168800 0 2 BASE 1197 LD R0 R2,0 get first word 01388 FA2C13AA 0 1198 JEQMW R0 LOGFULL jump if log is full 1199 01389 60090840 0 4 ZBM 1200 LD R0 R4,DCBPFILE/PFSLOT get slot number of PPU 0138A E4088843 0 2 ZBM 1201 ST R0 R2,ERRSLOT save it 0138B 60093020 0 4 ZBM 1202 LD R0 R4,DCBPFILE/PPUCHAN get channel number of BFD 0138C E4089043 0 2 ZBM 1203 ST R0 R2,ERRCHAN save it 0138D 60170801 0 4 BASE 1204 LD R0 R4,DCBUNIT get disk unit number 0138E E4089843 0 2 ZBM 1205 ST R0 R2,ERRUNIT save it 0138F 600013B9 0 1206 LD R0 DKBLOCKNO get block number 01390 E4089181 0 2 ZBM 1207 ST R0 R2,ERRBLOCK save it 01391 600013BB 0 1208 LD R0 DKSEEKADDR get seek address 01392 E4168802 0 2 BASE 1209 ST R0 R2,ERRSEEKADR save it 1210 01393 DCD3C000 7 REG 1211 EXPCS R7 go get parms 01394 C1568004 2 CACH 1212 STPV R2,ERROPER save operation type 01395 C148A103 2 ZBM 1213 STPV R2,ERRPPUSTAT save PPU status 01396 C0568804 2 BASE 1214 STPVL R2,ERRCTLSTAT save disk status 1215 01397 38968004 2 2 CACH 1216 LEA R2 R2,ERRCOMPARE R2 -> beginning of part to compare 01398 E4961005 2 0 REG 1217 ST R2 R0+ERRLNTH R0 -> previous log entry 01399 60440010 1 IMM 1218 LD R1 ERREND DISPC ERRCOMPARE R1 = size to compare 0139A FE540000 1219 CMS same error as previous entry? 0139B 608013EA 2 1220 LD R2 VERRLOGPTR re-fetch error log buffer pointer 0139C FE0C13A0 1221 JNE SETTIME jump if not same error 0139D 10840005 2 IMM 1222 SUB R2 ERRLNTH make pointer to previous entry 0139E D0168000 2 CACH 1223 INC R2,ERRCOUNT increment number of times for this error 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 61 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 0139F FE0E13A9 1224 JMP LOGDONE and we're all done 1225 * --- 1226 000013A0 1227 SETTIME LABEL 013A0 620013B1 01 1228 LD2 R0 CLOCKTIME get the time last read from SSU 013A1 160403E8 01 IMM 1229 DIV2 R0 1000 convert value to seconds 013A2 58C40010 IMM 1230 IORPSR PSRMODIF 013A3 14055180 0 IMM 1231 DIV R0 86400 R1 = seconds past midnight 013A4 58840010 IMM 1232 CLBPSR PSRMODIF 013A5 E4489180 1 2 ZBM 1233 ST R1 R2,ERRTIME save time of error 013A6 EDD68000 2 CACH 1234 STW R2,ERRCOUNT say error has occurred once 013A7 18840005 2 IMM 1235 ADD R2 ERRLNTH point to next entry 013A8 E48013EA 2 1236 ST R2 VERRLOGPTR update pointer to error log buffer 1237 * \ / 1238 000013A9 1239 LOGDONE LABEL 013A9 5D1F8001 6 STAK 1240 LEAVE POP return 1241 * --- 1242 000013AA 1243 LOGFULL LABEL 013AA D0168801 2 BASE 1244 INC R2,1 increment number of lost errors 1245 * \ / 1246 000013AB 1247 LOGSKIP LABEL throw away the parameters 013AB DCD3C000 7 REG 1248 EXPCS R7 go get parms 013AC C1520000 0 REG 1249 STPV R0 get operation in error 013AD C1520000 0 REG 1250 STPV R0 get PPU status 013AE C0520000 0 REG 1251 STPVL R0 get disk status 013AF FE0E13A9 1252 JMP LOGDONE 1253 * --- 1254 1255 END of error log routine 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 62 (SALON.ASSEM) F 17 Off-Line Mass Storage Driver 1257 1258 ********************************************************************************** 1259 * * 1260 * Constants for various routines. * 1261 * * 1262 ********************************************************************************** 1263 1264 00003A98 ABS 1265 DEADMAN EQU 15000 seek end timeout counter (2.5 seconds) 1266 0F000000 ABS 1267 MASK1 EQU 1*BFDSSRDY+1*BFDSSONCYL+1*BFDSSSKERR+1*BFDSSFAULT 0000030F ABS 1268 MASK2 EQU 1*BFDSSIFPE+1*BFDSSRSPER+0F*BFDSSERRCD 013B0 0F00030F 1269 STATMASK VFD MASK1+MASK2 mask of relevant bits 1270 08000000 ABS 1271 SEEKINGSTAT EQU 1*BFDSSRDY status while still seeking 0C000000 ABS 1272 SEEKOKSTAT EQU 1*BFDSSRDY+1*BFDSSONCYL status if seek successful 1273 1274 ********************************************************************************** 1275 * * 1276 * Data areas for the offline disk driver. * 1277 * * 1278 ********************************************************************************** 1279 000013B1 1280 CLOCKTIME BSS 2 time when driver was called 000013B3 1281 DISKERRS BSS 2 error control words 000013B4 1282 SEEKERRS EQU DISKERRS(1) seek error counter 000013B5 1283 CHANERRS BSS 1 channel error counter 000013B6 1284 DISKERRLIM BSS 1 max retries for a disk error 000013B7 1285 CHANERRLIM BSS 1 max retries for a ppu error 000013B8 1286 SEEKERRLIM BSS 1 max retries for a seek error 000013B9 1287 DKBLOCKNO BSS 1 hold the requested MS block number 000013BA 1288 DKREALBLK BSS 1 block number after substitution 000013BB 1289 DKSEEKADDR BSS 1 machine-formatted seek address 000013BC 1290 DKPAGENO BSS 1 holds the page map value 000013BD 1291 FBILOC BSS 1 holds the monitor memad of the FBI 1292 1293 END of off line mass storage driver 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 63 F 0 Various definitions 724 725 ********************************************************************************** 726 * PAGE FILE CONSTANTS * 727 ********************************************************************************** 728 000013BE 729 PFWNDO1 BSS 1 page file for window 1 000013BF 730 PFWNDO2 BSS 1 page file for window 2 731 732 733 ********************************************************************************** 734 * MASS STORAGE ADDRESS CONSTANTS AND VARIABLES * 735 ********************************************************************************** 736 000013C0 737 DATEMP BSS 1 disk address temp 738 013C1 00000316 739 DISKCB PTR BOOTDEVPF pointer to PM value for boot device 740 013C2 B674BFEF 741 THENAME PAK12 SYSTEM default system name 013C4 E79DF200 742 PAK6 !!! project 013C6 00000000 743 VFD 0,0 744 BSS2 1 file name 013C9 533719C0 745 PAK6 CODE extension 013CB 00000000 746 VFD 0,0 747 748 * Alternate system names chosen by the rightmost two 749 * bits of the front panel switches at boot. 000013CC 750 SYSNAMES LABEL 013CC B674BFEF 751 PAK12 SYSTEM normal operating system 013CE 9C0046D5 752 PAK12 OLDSYSTEM previous version of the system 013D0 60D7BED5 753 PAK12 EXPSYSTEM experimental operating system 00000003 ABS 754 MAXFPSYS EQU (DISPW SYSNAMES)/2 boot switch values >= get OPL 013D2 9CA39C00 755 PAK12 OPL off-line program loader 756 013D4 53A9B61E 757 CDNAME PAK12 CRASHDUMP name of crashdump file 758 759 760 ********************************************************************************** 761 * * 762 * Pointer to the next available word in Window 4. This * 763 * space is used to build substitution lists. * 764 * * 765 ********************************************************************************** 766 013D6 00001400 767 VMEMSPACE VFD STORE+ADR WNDO4 768 769 ********************************************************************************** 770 * * 771 * Constants and variables used by the DUMPBLKS routine. * 772 * * 773 ********************************************************************************** 774 000013D7 775 PMARRAY BSS 1 start of the page map values 00000040 ABS 776 PPLMAPSIZE EQU 64 number of FBI pages 0000001A ABS 777 CMAPDISP EQU 01A displacement into the CPU page for the 778 * user pages 779 * These CCB indices control the location 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 64 F 0 Various definitions 780 * of dump data within the dump file 00000000 ABS 781 OSINDX EQU 0 OS CCB index 00000100 ABS 782 FBIINDX EQU 0100 FBI CCB index 00000080 ABS 783 CPUINDX EQU 080 CPU pages CCB index 784 785 ********************************************************************************** 786 * * 787 * Redefinitions of the INITPAGE to CPUWNDO for mapping each * 788 * CPU page to get at its local variables. * 789 * * 790 ********************************************************************************** 791 00000088 ABS 792 PNCPUWNDO EQU PNINITPAGE page number for the CPU window 00002000 793 CPUWNDO EQU INITPAGE virtual address of this window 794 795 ********************************************************************************** 796 * * 797 * Lock and CPU control flags * 798 * * 799 ********************************************************************************** 800 013D8 00000000 801 LOCKWORD VFD STORE lock word for major critical region 013D9 00000000 802 NUMCPUS VFD STORE counted up once by each active CPU 803 804 ********************************************************************************** 805 * MISC TEMPS * 806 ********************************************************************************** 807 000013DA 808 OTHERSTART BSS 1 starting address for secondary CPU's 809 810 811 ********************************************************************************** 812 * * 813 * The last 32 words of the DISKBOOT page contain pointers * 814 * to the routines herein so that the standalone software can get * 815 * at them. * 816 * * 817 ********************************************************************************** 818 819 ORG BOOTLOC(WPP-32) 013E0 000011D4 820 VFD ADR READ disk read routine 013E1 00001201 821 VFD ADR WRITE disk write routine 013E2 00001123 822 VFD ADR SRCHDIR directory searcher 013E3 000011C8 823 VFD ADR DISPLAY front panel displayer 013E4 000013C1 824 VFD ADR DISKCB => boot disk control block 013E5 00000310 825 VFD ADR SSUPF page file for SSU 013E6 00000311 826 VFD ADR PHPNAV PF for some page in this memory 013E7 00000370 827 VFD ADR IBSLOTS array of WRU responses for slots 013E8 000013BE 828 VPFWNDO1 VFD ADR PFWNDO1 page file for WNDO1 013E9 000013BF 829 VPFWNDO2 VFD ADR PFWNDO2 page file for WNDO2 013EA 00000000 830 VERRLOGPTR VFD 0 next entry in error log buffer 013EB 0000109F 831 VFD ADR OPENDISK disk control block initialize routine 013EC 0000110E 832 VFD ADR CLOSEDISK terminate disk usage 013ED 000013D6 833 VFD ADR VMEMSPACE free space in window 4 013EE 00001120 834 VFD ADR SRCHDIRSN directory searcher for serial # 013EF 000013FF 835 VFD ADR GRUNDGE 15 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 65 F 0 Various definitions 836 * Above is by DISKBOOT, below is set by others (OPL in particular) 013F0 000013FF 837 VFD ADR GRUNDGE 16 013F1 000013FF 838 VFD ADR GRUNDGE 17 013F2 000013FF 839 VFD ADR GRUNDGE 18 013F3 000013FF 840 VFD ADR GRUNDGE 19 013F4 000013FF 841 VFD ADR GRUNDGE 20 013F5 000013FF 842 VFD ADR GRUNDGE 21 013F6 000013FF 843 VFD ADR GRUNDGE 22 013F7 000013FF 844 VFD ADR GRUNDGE 23 013F8 000013FF 845 VFD ADR GRUNDGE 24 013F9 000013FF 846 VFD ADR GRUNDGE 25 013FA 000013FF 847 VFD ADR GRUNDGE 26 013FB 000013FF 848 VFD ADR GRUNDGE 27 013FC 000013FF 849 VFD ADR GRUNDGE 28 013FD 000013FF 850 VFD ADR GRUNDGE 29 013FE 000013FF 851 VFD ADR GRUNDGE 30 013FF 00024100 852 GRUNDGE HALT HALTB4100 31 853 854 855 END of bootstrap 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 66 F 0 Various definitions 857 858 ********************************************************************************** 859 * * 860 * Code to write the bootstrap block onto the system volume. * 861 * * 862 ********************************************************************************** 863 00001400 864 WRITEOUT LABEL 01400 604401E0 1 IMM 865 LD R1 VBFSIZE*CPW get buffer size 01401 6084142A 2 IMM 866 LD R2 ADR VIBUFF and address 01402 FE580000 867 CFILL 000 clear out for end check 868 01403 60040043 0 IMM 869 LD R0 ORVINFO request for volume information 01404 604401E0 1 IMM 870 LD R1 VBFSIZE*CPW get buffer size 01405 6084142A 2 IMM 871 LD R2 ADR VIBUFF and address 01406 09440000 IMM 872 OPREQ 0 now fetch in information 01407 FA08141B 0 873 JLTZ R0 DIE1 jump on error 874 01408 6084142A 2 IMM 875 LD R2 ADR VIBUFF get buffer address 00001409 876 NEXTCHEK LABEL 01409 5C089810 2 ZBM 877 CMZ R2,VISYSVOL is this entry for the system volume? 0140A FE0C140F 878 JNE FOUNDVOL jump if so 0140B 18889F10 2 2 ZBM 879 ADD R2 R2,VIENTLEN otherwise, advance to next entry 0140C 5C089F10 2 ZBM 880 CMZ R2,VIENTLEN check new entry for existence 0140D FE0C1409 881 JNE NEXTCHEK jump if okay 0140E 00000404 882 HALT 0404 stop if can't find system volume 883 * --- 884 0000140F 885 FOUNDVOL LABEL 0140F 600400B0 0 IMM 886 LD R0 ORMOUNTMAI request for maintenance mount 01410 60568801 1 2 BASE 887 LD R1 R2,VIDNAME get system volumes device name 01411 09401429 888 OPREQ LUNNUM and do mount 01412 FA08141C 0 889 JLTZ R0 DIE2 jump for error 890 01413 60040150 0 IMM 891 LD R0 ORMAINTW request for maintenance write 01414 60441000 1 IMM 892 LD R1 ADR BOOTLOC address of data part 01415 6084141E 2 IMM 893 LD R2 ADR BOOTFBI address of FBI 01416 60C40002 3 IMM 894 LD R3 BOOTDA pick up the disk address 01417 09401429 895 OPREQ LUNNUM do the write 01418 FA08141D 0 896 JLTZ R0 DIE3 jump for error 897 01419 60040073 0 IMM 898 LD R0 URSTOPZR request to stop and clear everything 0141A 09040000 IMM 899 UREQ 0 DONE 900 * --- 901 0000141B 902 DIE1 LABEL 0141B 00000401 903 HALT 0401 904 0000141C 905 DIE2 LABEL 0141C 00000402 906 HALT 0402 907 0000141D 908 DIE3 LABEL 0141D 00000403 909 HALT 0403 910 0000141E 911 BOOTFBI LABEL FBI for boot block 0141E 00000000 912 VFD 8:FBITBOOT,24:0 specify FBI type 1 Assembler C9208 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:16 PAGE 67 F 0 Various definitions 0141F 00000002 913 VFD 8:060,24:BOOTDA error control bits and disk address 01420 00000000 914 VFD 0 backward pointer 01421 3BDB4E00 915 VFD ASSYTIME time of assembly 01428 00000000 916 VFD 0,0,0,0,0,0,0 remainder zeros 917 01429 00000014 918 LUNNUM VFD 20 fixed unit for now 919 00000078 ABS 920 VBFSIZE EQU VILENGTH*12 leave lots of room for volume entries 0000142A 921 VIBUFF BSS VBFSIZE supply buffer for volume information 922 923 END of enclosing block 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 1 ACTION 00178801 F 17 1060= 1084s 1096 AGAIN 00001285 F 17 514= 539j ASCII6MASK 000011D3 F 16 36 44= ASSYTIME 3BDB4E00 F 0 96= 915x BADDISK 00001103 F 14 114j 120j 226= BADFBI 000011FF F 17 167j 173= BADNAME 00001102 F 14 95j 100j 103j 225= BADPACKLBL 00001105 F 14 142a 228= BADSEGPTR 00178801 F 17 320= 333s 370 BADSUBBLK 00001107 F 14 168a 230= BADVOLLBL 00001106 F 14 157a 229= BFDMASK 0000134C F 17 808 1027= BFDOKSTAT 0C000000 F 17 809 1029= BLDUNLODN 00001030 F 0 304j 339= BLNOPC 0000102F F 0 306j 307j 327= BLSCANEXT 0000101B F 0 302= 328j BOOT 00001000 F 0 102 191= BOOTFBI 0000141E F 0 893a 911= CALCERRC 000011C4 F 15 371j 372j 373j 374j 375j 376j 378= CALCRETC 00001109 F 14 225j 226j 227j 228j 229j 230j 231j 234= CCBINDX 00178801 F 0 552= 557s 564 CCBRDERR 0000109E F 0 710a 713= CDFILEBAD 00001088 F 0 448j 549 575a 598= CDNAME 000013D4 F 0 446 757= CDNOWRITE 00001089 F 0 581a 613= CHANERRLIM 000013B7 F 17 456s 955 1285= CHANERROR 0000133A F 17 823j 838j 847j 848j 849j 851j 852j 853j 897j 925j 952= CHANERRS 000013B5 F 17 438s 954s 1283= CHERRLIM 0000000A F 17 67= 445 CHKSEGBUF 0000178C F 17 317= 336a 359 CKSUMBAD 000011FF F 17 163j 174= CLEARFAULT 000012CC F 17 596 665 697 702= 827 CLOCKTIME 000013B1 F 17 230 433s 1228 1280= CLOSEDISK 0000110E F 0 832a F 14 265 270= CMAPDISP 0000001A F 0 506a 777= COREGWORD 00001258 F 17 373j 379= CPUINDX 00000080 F 0 508 783= CPUWNDO 00002000 F 0 506a 793= CRASHDUMP 0000104A F 0 249j 442= DATEMP 000013C0 F 0 569s 571 578 737= *DCBBTRAX 00081187 F 13 27= DCBFILLADR 00160802 F 13 15= 28e F 14 83a DCBFILLLEN 00000006 F 13 28= F 14 84 *DCBLEN 00000008 F 13 30= *DCBLUN 0016001C F 13 26= *DCBMAIMNT 00080216 F 13 22= DCBNORETRY 00080416 F 13 23= F 17 442 DCBNOSUBS 00080016 F 13 21= F 17 420 DCBPFILE 00160800 F 13 13= F 14 89s 101s 104s 110 116 F 17 434 1200 1202 DCBSCSI 00080816 F 13 25= F 14 134s DCBSECPTRK 00160802 F 13 16= F 14 129s 145s F 17 518 DCBSUBLIST 00160804 F 13 18= F 14 131s 190a 237s 272a 277 F 17 422 DCBTRKPCYL 00160803 F 13 17= F 14 130s 147s F 17 521 DCBUNIT 00160801 F 13 14= F 14 96s 121 F 17 231 440 526 571 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 2 704 1064 1204 *DCBVERIFY 00080616 F 13 24= DCBVOLSIZE 00160805 F 13 19= F 14 132s 149s DCBWORD 00160806 F 13 20= 21e 22e 23e 24e 25e F 14 133s DEADMAN 00003A98 F 17 574 634 706 1265= DEADMANL 00001388 F 17 745 766= DIE1 0000141B F 0 873j 902= DIE2 0000141C F 0 889j 905= DIE3 0000141D F 0 896j 908= DIRBAD 000011C1 F 15 217a 296a 374= DISKCB 000013C1 F 0 647 739= 824a DISKCTLBLK 00000400 F 13 12= 30e 31a DISKERRLIM 000013B6 F 17 455s 983 1284= DISKERROR 00001342 F 17 862j 865j 871j 879j 888j 928j 981= DISKERRS 000013B3 F 17 437s 878 926 982s 1069 1281= 1282e DISKSTAT 00178802 F 17 801= 807s 820 821 DISPLAY 000011C8 F 0 242 340 443 517 823a F 16 25 30= DISPLOOP 000011CC F 16 34= 38j DKBLOCKNO 000013B9 F 17 120s 166 208s 417 419s 864 1206 1287= DKERRLIM 00000014 F 17 66= 444 DKFBITYPE 00178801 F 17 88= 123s 159 DKPAGENO 000013BC F 17 121s 209s 353 1155 1290= DKREALBLK 000013BA F 17 427s 516 1288= DKSEEKADDR 000013BB F 17 525s 1208 1289= DONE 000012B8 F 17 639j 646= DONE 000012D5 F 17 709j 715= DONE 000012E2 F 17 749j 758= DONTFREE 00001117 F 14 276j 280= DOREGWORD 0000124C F 17 361= 364j DOSEEK 0000120C F 17 222= 237j DOZERO 0000129B F 17 564 569= 670 913 DRVFAULT 000012C6 F 17 657j 664= DSK000 0000110D F 14 90 241= DUMPBLKS 0000106F F 0 460 477 505 548 555= DUMPMORE 00001073 F 0 561= 585j *ECBLKREUS 0000000D F 13 74= ECCHAN 00000003 F 13 64= F 17 957 *ECDA 0000000C F 13 73= ECDATA 00000001 F 13 62= F 17 988 ECFBI 00000002 F 13 63= F 17 175 *ECFBIACCT 00000009 F 13 70= *ECFBIBDAT 00000019 F 13 86= *ECFBIBLNE 00000011 F 13 78= *ECFBIBLNK 0000000B F 13 72= *ECFBIFDAT 00000013 F 13 80= *ECFBIFLAG 0000000F F 13 76= *ECFBIFLNK 0000000E F 13 75= *ECFBIFSN 0000000A F 13 71= *ECFBINBAN 00000015 F 13 82= *ECFBINBFS 00000018 F 13 85= *ECFBINBPJ 00000016 F 13 83= *ECFBIODAT 00000012 F 13 79= *ECFBIPROJ 00000017 F 13 84= *ECFBIRBN 00000014 F 13 81= *ECFBISUB 00000010 F 13 77= *ECFBITYPE 00000008 F 13 69= 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 3 ECMPE 00000007 F 13 68= F 17 970 *ECNOCODE 00000000 F 13 61= ECNOTRDY 00000005 F 13 66= F 17 261 939 *ECRECBAD 0000001D F 13 90= *ECSAFBAD 0000001C F 13 89= ECSEEK 00000004 F 13 65= F 17 266 919 *ECSUBENT 0000001B F 13 88= *ECUDIRORD 0000001A F 13 87= ECWRPROT 00000006 F 13 67= F 17 1000 ENDFLAG 000BC210 F 15 92= 154s 193j 195s ENDLOAD 00001048 F 0 392j 400= ERRAD 00178802 F 17 89= 124s 211s 270 ERRBLOCK 00081181 F 12 53= F 17 1207s ERRCHAN 00081043 F 12 60= F 17 1203s ERRCOMPARE 00160004 F 12 23= F 17 1216a 1218 ERRCOUNT 00160000 F 12 20= F 17 1223s 1234s ERRCTLSTAT 00160804 F 12 64= F 17 1214s *ERRDEVICE 000808C3 F 12 58= ERREND 00160805 F 12 65= F 17 1218 ERRLNTH 00000005 F 12 67= F 17 1217s 1222 1235 ERRLOGBLK 00000400 F 12 19= 67e 68a ERRLOGFILE 00178802 F 17 800= 801e 802e 883s 884a 887 ERROPCKSEG 00000005 F 12 32= F 17 345 ERROPER 00160004 F 12 25= F 17 1212s *ERROPFMT 0000000C F 12 40= *ERROPINQ 00000008 F 12 36= *ERROPMS 0000000A F 12 38= *ERROPMSN 0000000B F 12 39= ERROPOFSET 00000006 F 12 33= F 17 1090 *ERROPRDC 0000000D F 12 41= ERROPREAD 00000002 F 12 29= F 17 143 *ERROPRES 00000009 F 12 37= *ERROPRS 0000000E F 12 42= ERROPRTN 00000007 F 12 34= F 17 275 ERROPSEEK 00000000 F 12 27= F 17 529 ERROPSEG 00000004 F 12 31= F 17 325 ERROPWRITE 00000003 F 12 30= F 17 235 841 *ERROPZERO 00000001 F 12 28= ERROR 00001361 F 17 1092= 1099j ERROR1 00001297 F 17 531j 536= ERRORRET 00001102 F 14 224= 236a ERRPPUSTAT 00082103 F 12 62= F 17 1213s ERRSEEKADR 00160802 F 12 55= F 17 1209s ERRSLOT 00080843 F 12 59= F 17 1201s ERRTIME 00081180 F 12 21= F 17 1233s ERRUNIT 00081843 F 12 61= F 17 1205s *ERTOPBKSP 00000010 F 12 44= *ERTOPGAP 00000016 F 12 50= *ERTOPREAD 00000012 F 12 46= *ERTOPREW 00000011 F 12 45= *ERTOPSEFB 00000017 F 12 51= *ERTOPSEFF 00000015 F 12 49= *ERTOPWFM 00000014 F 12 48= *ERTOPWRITE 00000013 F 12 47= FATALDISK 00001345 F 17 901j 987= FBIINDX 00000100 F 0 479 782= 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 4 FBILOC 000013BD F 17 122s 132 162 164 210s 214 368 375s 859 1144 1291= FILEBAD 0000103E F 0 263j 322a 363= FILEFOUND1 00001180 F 15 245j 255= 267j FILEFOUND2 000011B9 F 15 329j 347j 355= FIXSEG 000011EF F 17 147j 151= *FNAMBLKLEN 0000000A F 13 100= FNBLKPROT 00000400 F 13 92= 100e 101a FOUNDACCT 00001160 F 15 181j 207= FOUNDCODE 00001097 F 0 693j 704= FOUNDIT 00001093 F 0 650j 690= FOUNDVOL 0000140F F 0 878j 885= GIVEERROR 00001220 F 17 144j 155j 176j 236j 256 262j 269= GIVEUP 00001339 F 17 920j 940= 958j 971j 989j 1001j GOBACK 00001101 F 14 219= 238j GOODRET 00001364 F 17 1070j 1098= GOODRETURN 00001228 F 17 160j 169j 171j 240j 255 282= GOODRETURN 000012CB F 17 648j 678= GOTWORD 00001252 F 17 366j 369= GRUNDGE 000013FF F 0 835a 837a 838a 839a 840a 841a 842a 843a 844a 845a 846a 847a 848a 849a 850a 851a 852= HARDWAY 000012ED F 17 810j 815= HAVEAREA 000010ED F 14 185j 189= HAVEDISK 000010B6 F 14 88j 107= IDXBAD 000011C0 F 15 165a 373= INTONEXT 00001141 F 15 155= 192j 196j LOADOTHER 00001042 F 0 390= 397j LOCKWORD 000013D8 F 0 229s 348s 376 801= LOGDONE 000013A9 F 17 1224j 1239= 1252j LOGERROR 00001384 F 17 274 324 651 817 1189 1194= LOGFULL 000013AA F 17 1198j 1243= LOGSKIP 000013AB F 17 1196j 1247= LOOP 000012B3 F 17 636= 640j LOOP 000012D1 F 17 707= 710j LOOP 000012DB F 17 747= 751j LUNNUM 00001429 F 0 888 895 918= MASK1 0F000000 F 17 1023= 1027x MASK1 0F000000 F 17 1267= 1269x MASK2 00000F00 F 17 1024= 1027x MASK2 0000030F F 17 1268= 1269x MASK3 000000FF F 17 1025= 1027x MAXFPSYS 00000003 F 0 259 754= MOVETONEXT 00001156 F 15 179j 183= MPEERROR 00001340 F 17 824j 969= NAME 00000005 F 0 643s F 13 96= F 15 224 251 299 351 NAMEEXT 00000007 F 13 97= F 15 241 343 NEXTCHEK 00001409 F 0 876= 881j NEXTWORD 00001249 F 17 357= 382j NOACCT 000011C2 F 15 158j 175j 193j 375= NOCDWRITE 00001086 F 0 563j 567j 584= NOFAULT 000012FA F 17 826j 832= NOFILE 000011C3 F 15 228j 231j 236j 265j 271j 306j 319j 322j 376= NOGOHALT 00001092 F 0 676 679= NOHEADERR1 00001314 F 17 856j 868= NOHEADERR2 00001333 F 17 899j 923= NOLOADPF 00001047 F 0 394j 396= 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 5 NOPROTECT 00001025 F 0 311j 313= NORETRY 00001279 F 17 443j 449= NOSUBSPACE 00001108 F 14 197j 231= NOTACPU 00001069 F 0 501j 513= NOTEMPTY 00001152 F 15 173j 177= NOTOURS 00001100 F 14 212j 214= NOTREADY 0000121D F 17 129j 135j 224j 257 260= NOTSUBD 00001265 F 17 421j 424j 426= NUMCPUS 000013D9 F 0 203s 349s 351 401s 802= *ODBADNAME 00000001 F 13 41= *ODBADPL 00000004 F 13 44= *ODBADSB 00000006 F 13 46= *ODBADVL 00000005 F 13 45= *ODISYR 0000000B F 13 51= *ODNOTDISK 00000002 F 13 42= *ODOFFLINE 00000003 F 13 43= *ODOOPS 00000008 F 13 48= *ODPFM 0000000A F 13 50= *ODSUBBIG 00000007 F 13 47= *ODVIU 00000009 F 13 49= OFFLINE 00001104 F 14 125j 126j 227= OFFLINE 000012C5 F 17 656j 660= 666j 671j OFFLINE 00001338 F 17 825j 828j 833j 914j 938= OFFLINE 00001360 F 17 1091= 1092j OFSETA 00001365 F 17 1075 1102= 1113e OPENDISK 0000109F F 0 831a F 14 73 79= OPERATION 00178802 F 17 629= 633s 652 OPERATION 00178801 F 17 799= 806s 818 840 OSINDX 00000000 F 0 462 781= OTHERSTART 000013DA F 0 345s 402 808= OTHERWAIT 0000103F F 0 375= 377j OTHERWAY 0000103F F 0 230j 374= OVERVERSN 00001004 F 0 192j 201= PADBILD 00001370 F 17 139 229 1136 1142= PFWNDO1 000013BE F 0 707 729= 828a PFWNDO2 000013BF F 0 572 730= 829a PMARRAY 000013D7 F 0 556s 562 579 775= PNCPUWNDO 00000088 F 0 502 792= PPLMAPSIZE 00000040 F 0 480 776= PPUMASK 00006540 F 17 811 1021= PPUSTAT 00178803 F 17 802= 819 PTRBDE 0000134D F 17 837 1031= R3SAVE 00178801 F 17 1139= 1143s 1148 READ 000011D4 F 0 317 570 705 820a F 14 137 152 163 F 15 114 131 160 212 291 F 17 56 117 119= READCCB 0000108A F 0 262 447 637 642= READOK 000011F3 F 17 148j 158= READOVER 000011DE F 17 131= 146j 153j RETRYDATA 0000134A F 17 956j 984j 1013= RETRYSEEK 0000134B F 17 918j 1016= RETURN 00001100 F 14 160j 216= RETURN 000011C6 F 15 260j 360j 382= RETURN 000012AE F 17 588j 599= RETURN 000012E4 F 17 755j 762= RETURN 00001349 F 17 812j 873j 1010= RETURN0 00001242 F 17 347j 348= 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 6 RETURN0 00001294 F 17 530= 540j RETURN0 000012AD F 17 589j 591j 597= 600j RETURN0 000012C5 F 17 661= 675j RETURN0 000012D4 F 17 712= 718j RETURN0 00001339 F 17 941= 1017j RETURN1 00001241 F 17 346j 347= RETURN1 0000129A F 17 533j 540= RETURN1 000012CA F 17 674= 679j RETURN1 0000134B F 17 1014j 1017= RETURN2 00001240 F 17 346= 384j RETURN2 0000134A F 17 890j 1014= RETURN3 0000125A F 17 330j 384= RETURN3 00001325 F 17 890= 1011j REWRITE 0000120F F 17 226= 238j SD10 00001125 F 15 96j 102= SDERRTAB 000011BE F 15 370= 379a SDFAULT 000012AC F 17 590j 595= SECBAD 000011BF F 15 136a 372= SEEK 00001284 F 17 128 223 508 513= SEEKDONE 000012A6 F 17 579j 586= SEEKERR 0000121F F 17 130j 225j 258 265= SEEKERRLIM 000013B8 F 17 457s 538 917 1286= SEEKERROR 0000132C F 17 834j 835j 858j 912= SEEKERROR1 0000132E F 17 829j 915= SEEKERRS 000013B4 F 17 537s 857 900 916s 1282= SEEKINGSTAT 08000000 F 17 578 638 1271= SEEKNDWAIT 000012AF F 17 528 625 632= 1089 SEEKOKSTAT 0C000000 F 17 587 647 1272= SEEKOVER 000011DB F 17 127= 136j 145j 154j SEEKWLOOP 000012A1 F 17 576= 580j SEGCORRECT 0000122B F 17 152 313 323= SEGERROR 0000131A F 17 872j 877= SERROR 000012C8 F 17 658j 659j 669= SETBDE 0040134E F 17 1031a 1032= SETLIMITS 0000127C F 17 447j 454= SETTIME 000013A0 F 17 1221j 1227= SETUPNMAP 0000125B F 17 125 220 411 416= SKERRLIM 00000004 F 17 68= 446 SLOTLOOP 0000105C F 0 497= 514j SRCDIRENLP 00001170 F 15 226= 235j SRCDIRFND 00001179 F 15 230j 240= SRCDIRGO 00001175 F 15 232= 252j SRCDIRRAF 0000118D F 15 221j 283= SRCDIRRESN 0000117E F 15 243j 250= SRCDIRRFNF 000011A3 F 15 303j 315= 327j 333j SRCDIRRGA 0000118E F 15 285= 321j SRCDIRSERN 00001185 F 15 225j 263= 270j SRCDISENLP 0000119B F 15 301= 310j SRCDISFND 000011B2 F 15 305j 342= SRCDISGO 000011A0 F 15 307= 352j SRCDISRESN 000011B7 F 15 345j 350= SRCHBLKLEN 00000008 F 15 84= 103 SRCHDIR 00001123 F 0 649 822a F 15 72 100= SRCHDIRSN 00001120 F 0 834a F 15 73 94= SRCHIDXBKT 00001119 F 15 77= 156s 190s SRCHIDXBLK 0000111A F 15 78= 159s 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 7 SRCHIDXOFF 0000111B F 15 79= 211s SRCHRESULT 00001118 F 15 75= 84e 104a 383a SRCHSECBLK 00001118 F 15 76= 130s SRCHTYPE 000BC010 F 15 91= 95s 101s 225j 300j SRCHUD1BLK 0000111C F 15 80= 209s SRCHUD1OFF 0000111D F 15 81= 258s 286s 316 SRCHUD2BLK 0000111E F 15 82= 289s SRCHUD2OFF 0000111F F 15 83= 358s SRCLKSERN 000011AA F 15 300j 325= 332j STATCHK 000012E5 F 17 142 234 344 796 805= STATMASK 000013B0 F 17 575 635 1269= STATUS 00178801 F 17 628= 649s 654 655 STATWRITE 00001326 F 17 842j 895= SUBLISTEND 0000178C F 14 187a F 17 314 316= 317e SUBSAREA 00178801 F 14 76= 80s 184 211 SUBSDONE 000010FC F 14 195j 209= SUBSLOOP 000010EE F 14 193= 207j SYSACCT 00000000 F 13 93= F 15 153 168 SYSNAMES 000013CC F 0 260 750= 754e SYSPROJ 00000002 F 13 94= F 15 153 169 TALOOP 0000135A F 17 1080= 1097j TERRORLIM 0000000A F 17 66e 1057 1073 1113= THENAME 000013C2 F 0 643s 648a 741= THISDONE 00001259 F 17 376j 381= TRYNEXT 0000114E F 15 171= 186j TSELECT 0000134F F 17 134 1056 1063= TSWAIT 0000135C F 17 1076j 1083= UMAPRTN 00001229 F 17 279j 284= UNMAP 00001280 F 17 285 476 481= VBFSIZE 00000078 F 0 865 870 920= 921 VERRLOGPTR 000013EA F 0 830= F 17 1195 1220 1236s *VERSION 00001001 F 0 195= *VIACCTNUM 00160807 F 0 34= *VIADTBZY 00081010 F 0 34= VIBUFF 0000142A F 0 866a 871a 875a 921= *VIBUSY 00081184 F 0 34= VIDNAME 00160801 F 0 34= 887 VIENTLEN 00081F10 F 0 34= 879 880 *VIFREEBLK 00160805 F 0 34= *VIINHIB 00081C10 F 0 34= VILENGTH 0000000A F 0 34= 34e 920e *VILOG 00000004 F 0 34= *VIMAIM 00080E10 F 0 34= *VINOTMNT 00081A10 F 0 34= VIPROTO 00000400 F 0 34a 34e 34= *VIQDR 00081210 F 0 34= *VIQDW 00081410 F 0 34= *VIREALNAME 00160808 F 0 34= VISYSVOL 00081810 F 0 34= 877 *VITOTBLK 00160806 F 0 34= *VIVNAME 00160802 F 0 34= *VIVNUM 00160010 F 0 34= VIWORDZ 000800F0 F 0 34e 34e 34e 34e 34e 34e 34e 34= VMEMSPACE 000013D6 F 0 767= 833a F 14 186 213s 275 278s VOLLBAD 000011BE F 15 119a 371= VPFWNDO1 000013E8 F 0 828= F 14 139 154 165 F 15 116 133 214 1 Jimbo's CREF Extractor 2.0 DISKBOOT - Disk Resident BootStrap Program 28-Jun-93 9:18 PAGE 8 VPFWNDO2 000013E9 F 0 829= F 15 162 293 WAIT2ZERO 0000103B F 0 350= 352j WAITSTAT 000012D8 F 17 141 233 343 739 744= WRITE 00001201 F 0 577 821a F 17 57 205 207= WRITEOUT 00001400 F 0 36a 864= WRITEPROT 00001347 F 17 896j 999=