/ P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 1 1 / P?S/8 RX01, ETC. SYSTEM HANDLER 2 3 / LAST EDIT: 10-DEC-1986 01:00:00 CJL 4 5 / MUST BE ASSEMBLED WITH '/J' SWITCH SET. 6 7 / P?S/8 RX01/RX02/RX03/DSD-210/440 SINGLE DENSITY SYSTEM HANDLER. 8 9 / SUPPORTS DOUBLE-SIDED DISKS ON RX03. 10 11 / SUPPORTS SECONDARY DRIVES ON DSD-210 OR VT78/VT278. 12 13 / SUPPORTS RX01/RX02/RX03 PRIMARY AND SECONDARY DRIVES ON DECMATE II 14 / (PROPER BOOTSTRAP SOFTWARE MUST BE PROVIDED BY THE USER). 15 16 / USES OS/8 COMPATIBLE DISK FORMAT FOR FILE CONVERSION COMPATIBILITY. / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 4 109 / P?S/8 DEC-COMPATIBLE FLOPPY DISK HANDLER. 110 111 / A HANDLER FOR THAT BLECHEROUS PIECE OF HARDWARE, THE DEC VERSION OF THE 112 / IBM-COMPATIBLE FLOPPY DISC, AND ANY OTHER DISC INTERFACE TO A PDP-8 TYPE 113 / MACHINE FOOLISHLY DESIGNED TO BE COMPATIBLE WITH IT! 114 115 / GENERAL WARNING TO ANYONE FOOLISH ENOUGH TO WRITE CODE FOR THIS HUNK OF JUNK: 116 117 / THE HARDWARE IS SO INCREDIBLY CRUDE THAT STRANGE OPERATIONS MUST BE PERFORMED 118 / ON THIS DEVICE TO GET THE HANDLER TO FIT EVEN THOUGH DISC THROUGHPUT AND 119 / ERROR HANDLING ARE GROSSLY INEFFICIENT. 120 121 122 / A LIST OF GRIPES FOLLOWS: / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 5 123 / GRIPE LIST FOR RX-TYPE DEVICES. 124 125 / A) THE DEC-SUPPLIED BOOTSTRAP FOR THIS DEVICE WAS SELFISHLY AND 126 / EXPEDIENTLY WRITTEN TO GET UP OS/8 WITHOUT REGARD FOR THE CONSEQUENCES 127 / TO OTHER SYSTEMS. CONTRADICTORY ATTEMPTS AT BOTH BREVITY AND FRILL 128 / FEATURES YIELD A BOOTSTRAP FOR EITHER DRIVE ZERO OR ONE THAT ONLY 129 / BRINGS IN PART OF A SINGLE SECTOR ON TOP OF THE PRIMARY CODE! THERE 130 / IS EVEN A DEPENDENCY UPON A PORTION OF THE PRIMARY CODE WHICH IS 131 / NEVER OVERLAYED! THE 8K OS/8 RX01 SYSTEM HANDLER IS ALSO HANDICAPPED 132 / BY THIS AND HAS A PROBLEM WITH WRITE-LOCKED DISKS. SINCE OS/8 WRITES 133 / ON THE DISK WHEN COLD-BOOTSTRAPPING IT, THE USER CAN'T WRITE-PROTECT 134 / THE DISK BECAUSE: 135 136 / 1) SOME MACHINES CAN'T "CONTINUE". 137 138 / 2) SOME MACHINES DON'T HAVE A FRONT PANEL AND THEREFORE CAN'T 139 / TELL WHAT'S HAPPENING. 140 141 / 3) THE USER HAS TO UNDERSTAND THE BOOTSTRAP PROCESS TO DECIDE 142 / THAT THE HALT AT 007605 IS ACCEPTABLE TO CONTINUE FROM AND 143 / USERS HARDLY EVER APPRECIATE THIS. 144 145 / OS/8 USERS ARE THEREFORE LOCKED OUT OF THE USEFULNESS OF WRITE- 146 / PROTECTED BOOTSTRAPPING BECAUSE OS/8 CAN'T COME UP WITHOUT WRITING 147 / DUE TO LACK OF ROOM IN THE HANDLER. SINCE OS/8 HAS LARGE SECONDARY 148 / BOOTSTRAP SPACE, THIS BOOTSTRAP IS OBVIOUSLY SLOPPY, AND WILL TAX 149 / OTHER SYSTEMS EVEN FURTHER. 150 151 / B) AS A CONSEQUENCE OF A), THE P?S/8 SYSTEM HANDLER IS SIMILARLY 152 / COMPROMISED AS MUCH OF THE CODE NORMALLY RESIDING ON BLOCK 0000 153 / FIRST HALF MUST BE PERVERTED TO A SECONDARY BOOTSTRAP OF NO USE 154 / TO THE HANDLER WHEN IT FINALLY COMES UP. A COPY OF THE CODE WANTING 155 / TO BE IN THE SAME RELATIVE LOCATIONS AS ARE USED BY THE BOOTSTRAP 156 / MUST BE RESERVED IN THE ADDITIONAL BLOCKS THAT MAKE UP THE HANDLER. 157 / THESE WORDS ARE BROUGHT IN LATER BY THE SECONDARY CODE, WHICH 158 / ULTIMATELY SETS EVERYTHING RIGHT. 159 160 / C) THE WHOLE PROBLEM COULD BE ELIMINATED FOR ALL OPERATING SYSTEMS 161 / BY UTILIZING A BETTER SCHEME SUCH AS FULL PAGE LOADING BY A TRACK 162 / ZERO RESIDENT PROGRAM (DEC DOESN'T USE TRACK ZERO). AN EXAMPLE OF 163 / THIS CAN BE FOUND IN THE "PQSRXH" HANDLER. / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 6 164 / D) THE RX INTERFACE, EVEN THOUGH IT IS A MICROPROCESSOR-BASED CONTROLLER, 165 / DOES NOT DO ANY ERROR RECOVERY FOR YOU. IN ADDITION, THE USUAL HANDLER 166 / CAN'T SENSE INDIVIDUAL ERRORS, AS THE ERROR RECOVERY SCHEME IS TOO 167 / COMPLICATED, AND SPACE IS AT A PREMIUM. THE ONLY POSSIBLE ERROR 168 / RECOVERY IS TO "INIT" THE DRIVES, WHICH DESTROYS THE SILO (WHY?) 169 / IN THE PROCESS. UNLESS THE SILO IS RELOADED BEFORE TRYING TO WRITE 170 / OUT THE CURRENT SECTOR AGAIN, THE CURRENT SECTOR WILL WIND UP BEING 171 / A COPY OF TRACK ONE, SECTOR ONE! THE CURRENT DESIRED MEMORY CONTENTS 172 / WILL BE LOST AND NO ERRORS WILL EVER BE DETECTED, EVEN WHEN READING 173 / IT BACK LATER (ONLY A DIRECT WRITE/READ-VERIFY OPERATION WOULD BE 174 / SECURE THROUGH THIS OPERATION; OS/8, P?S/8, AND MOST OF THE OTHER 175 / DEC-TYPE SYSTEMS DON'T USUALLY DO THIS!). THIS HANDLER (THROUGH 176 / MUCH SQUEEZING), WILL OVERCOME THESE PROBLEMS BY RETRYING THE I/O 177 / TRANSACTION, "INIT"-ING THE SYSTEM ONLY WHEN NECESSARY. 178 179 / E) THE RX IS TOO SLOW TO TRANSFER CONTIGUOUS SECTORS, SO AN INTERLEAVING 180 / SCHEME IS USED. DEC UNWISELY CHOSE TO ARBITRATE THE USE OF NON- 181 / INTERLEAVED IBM FORMAT AS THEIR STANDARD FOR ALL USES EVEN THOUGH 182 / IBM ITSELF ALLOWS FOR INTERLEAVING, AND IN ANY CASE STAND-ALONE 183 / PROGRAMS COULD HAVE WRITTEN IBM COMPATIBLE DATA ANYWAY IF ANYONE 184 / CARED! DEC FORCES YOU TO SOFTWARE INTERLEAVE THE NON-INTERLEAVED 185 / SECTORS. THE SIMPLEST APPROACH TO THIS INTERLEAVING ALGORITHM IS 186 / TO USE CORRECTED REPETITIVE SUBTRACTING, HOWEVER THIS LEADS TO A 187 / FAILURE TO KEEP IN STEP WITH THE TWO-WAY INTERLEAVED SECTORS WHEN 188 / ACCESSING THE HIGHER TRACKS, ESPECIALLY ON THE SLOWER CPU'S (IM6100 189 / BASED). THIS LEADS TO THROUGHPUT DEGRADED BY A FACTOR OF 13! THIS 190 / APPROACH IS THE ONE THAT DEC USES WITHIN OS/8 AS THEY HAVE NO OTHER 191 / CHOICE (IN 8K) BUT TO USE THE SMALLEST PIECE OF CODE. THIS HANDLER 192 / USES A HIGH-SPEED ALGORITHM TO ALLOW EVEN THE SLOWEST CPU TO KEEP 193 / UP WITH THE TWO-WAY INTERLEAVE. 194 195 / THE PRICE PAID FOR ALL OF THESE FEATURES IS THE NEED FOR EXTENDED MEMORY 196 / (THIS IS A SOFTWARE CORE SIZE LIMITING HANDLER.) / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 7 197 / RX BOOTSTRAPS. 198 199 / ALL RX SYSTEMS EMERGE FROM A SHORT BOOTSTRAP WHICH EITHER ASSUMES THE 200 / (EVENTUAL) RAISING OF THE DONE FLAG OR (IN THE CASE OF THE TINY 201 / RX01/DSD-210 DRIVE ZERO ONLY BOOTSTRAP) THE EXECUTION OF THE SELF-DIAGNOSTIC 202 / FUNCTION (WHICH RAISES THE DONE FLAG.) 203 204 / THIS HANDLER IS COMPATIBLE WITH THE FOLLOWING BOOTSTRAPS: 205 206 / (DEC) RX01 ONLY: LOOKS FOR DRIVE ZERO OR ONE IN SINGLE DENSITY MODE 207 / ONLY. STORES UNIT^20+7004 IN 000060. 208 209 / (DEC) RX01/RX02/RX03: LOOKS FOR DRIVE ZERO OR ONE IN SINGLE OR DOUBLE 210 / DENSITY MODE. STORES UNIT^20+7004 IN 000060 AND 211 / + IN 000061. 212 213 / TINY RX01 DRIVE 0 ONLY: HARDWARE "INIT" READS IN BOOT SECTOR ON DRIVE ZERO. 214 / STORES 0^20+7004 IN 000060. 215 216 / MASTER: LOOKS FOR DRIVES 0-3 ON DSD-210 OR DRIVES 0-1 ON 217 / MAIN PAIR AND 2-3 ON SECONDARY PAIR OF DRIVES OF 218 / VT78, VT278, PC278 (ALSO RX50 DRIVES 0-3 ON PC278) 219 / IN SINGLE OR DOUBLE DENSITY. STORES UNITS^20+7004 220 / IN 000060 AND + IN 000061. 221 222 / NOTES ON (DEC) RX01 ONLY BOOTSTRAP: 223 224 / A) STORES AN "RAL" INSTRUCTION OR "CML RAL" INSTRUCTION IN 000060 FOR 225 / THE BENEFIT OF CERTAIN DEC SYSTEMS WHICH LOCATE THE BOOT UNIT BY 226 / THIS METHOD. THIS IS NOT A COMPLETELY VALID ASSUMPTION AND IS NOT 227 / USED BY THIS HANDLER. 228 229 / B) THIS IS THE STANDARD BOOTSTRAP ON HARDWARE BOOTSTRAP LOADERS FOR 230 / PDP-8/E, F, M, A AND VT-78. 231 232 / C) THIS BOOTSTRAP IS VALID ON DRIVES ZERO AND ONE ONLY ON ANY HARDWARE 233 / WHICH IGNORES THE RX02/RX03 HEAD BIT. THIS BIT IS EXTRANEOUSLY SET 234 / DURING EXECUTION OF THIS BOOTSTRAP AND WILL FAIL ON AN RX02/RX03 235 / SETUP FOR RX02/RX03 MODE. / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 8 236 / NOTES ON (DEC) RX01/RX02/RX03 BOOTSTRAP: 237 238 / A) BOOTSTRAP CAN'T RUN ON CLASSIC PDP-8 AS SUPPLIED DUE TO NL0006 239 / ("IAC RTL" PROBLEM). 240 241 / B) IF GENERALITY IS DESIRED, PATCH LOCATION SRBOOT TO: 242 / TAD S6 (24/ 7327 1017). INCLUDE LOCATION 0017 IN THE BOOTSTRAP, 243 / MAKING IT ONE WORD LONGER. 244 245 / C) IF DSD-210/440 SYSTEM (WITH THREE OR FOUR DRIVES) COMPATIBILITY 246 / CAN BE FORGONE, THEN RX01/RX02/RX03 AND ONE OR TWO DRIVE DSD-210/440 247 / SYSTEMS ON ANY PROCESSOR CAN BE SUCCESSFULLY BOOTSTRAPPED BY PATCHING 248 / LOCATION SRBOOT TO TAD S46 (24/ 7327 1043). THIS DOES NOT CHANGE 249 / THE BOOTSTRAP LENGTH. 250 251 / D) THIS BOOTSTRAP FUNCTIONS IDENTICALLY TO THE RX01 ONLY BOOTSTRAPS 252 / FOR THE PURPOSES OF THIS HANDLER AS THE ONLY FEATURE ADDED IS THE 253 / ABILITY TO BOOTSTRAP DOUBLE-DENSITY DRIVES WHICH IS IMPOSSIBLE FOR 254 / THIS HANDLER. THE ADDITIONAL INFORMATION IN 000061 IS IGNORED AS 255 / IT MIGHT NOT BE THERE. 256 257 / E) THIS BOOTSTRAP IS STANDARD ON VT-278 AND CAN BE USED ON THE DECMATE 258 / II IF THE RX01/RX02 IS PROPERLY SELECTED FIRST. 259 260 / NOTES ON TINY RX01 DRIVE 0 ONLY BOOTSTRAP: 261 262 / A) THIS IS THE SHORTEST MANUAL BOOTSTRAP FOR THIS HANDLER. 263 264 / B) DRIVE ZERO MUST BE READY AND THEN INITIALIZED BY THE SELF-DIAGNOSTIC 265 / OPERATION WHICH DOES THE READ. THE BOOTSTRAP MERELY ASSUMES NO ERROR 266 / AND EMPTIES THE SILO INTO MEMORY. 267 268 / C) THIS BOOTSTRAP WORKS ON DRIVE ZERO ONLY ON RX01 COMPATIBLES ONLY. 269 / THIS INCLUDES RX02 DRIVES WITH THE SWITCH THROWN TO RX01 POSITION 270 / TO ALLOW THE SELF-DIAGNOSTIC TO BE PERFORMED IN SINGLE-DENSITY MODE. 271 272 / NOTES ON MASTER BOOTSTRAP: 273 274 / A) THIS IS THE ONLY BOOTSTRAP FOR SECONDARY DRIVES SUCH AS THE DSD-210 275 / DRIVES 2-3 AND THE SECONDARY PAIR OF DRIVES ON VT-78, VT-278, AND 276 / FOR ALL EIGHT DRIVES ON DECMATE II. 277 278 / B) THIS BOOTSTRAP WILL PROBABLY NOT WORK ON DEC OPERATING SYSTEMS (OS/8) 279 / ON SECONDARY DRIVES DUE TO THE "RAL" INSTRUCTION QUIRK NOTED ABOVE. 280 / SINCE THIS HANDLER JUST LOOKS AT 000060 FOR THE UNIT BITS AND 281 / MANIPULATES THE HARDWARE FOR EITHER DSD-210 OR VT-78/VT-278 MODE 282 / AS NECESSARY, THIS IS THE PREFERRED BOOTSTRAP TO BE USED WHEN 283 / TRANSFERRING CONTROL BETWEEN SYSTEMS. 284 285 / C) THIS BOOTSTRAP WILL BOOTSTRAP ALL 12-BIT RX01/RX02/RX03 OPERATING 286 / SYSTEMS KNOWN (AT LEAST ON DRIVES ZERO AND ONE.) INCLUDING 287 / RX01/RX02/RX03 ON THE DECMATE II. 288 289 / D) THIS BOOTSTRAP WILL ALSO BOOTSTRAP RX50 SYSTEMS (ON DECMATE II ONLY). / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 9 290 / OTHER NOTES OF INTEREST: 291 292 / A) THE RX02 SUPPORTS AN RX01-COMPATIBLE SUBSET KNOWN AS RX8E. IT IS 293 / TOTALLY COMPATIBLE WITH RX01 OPERATIONS EXCEPT FOR THE ANOMALOUS 294 / "RX02" BIT[8] WHICH INDICATES THE DRIVE IS AN RX02 ONLY ON AN RX02! 295 / IT MEANS WRITE-PROTECT ON AN RX01 OR DSD-210. SINCE THIS BIT IS 296 / THEREFORE WORTHLESS, THIS SEEMS UNIMPORTANT. HOWEVER, MANY EXISTING 297 / SOFTWARE PACKAGES HANDLE THIS SITUATION WRONG AND BELIEVE BIT[8] TO 298 / ALWAYS INDICATE RX02 VALIDITY. THIS HANDLER WILL NOT "SCREW UP" ON 299 / THIS BIT, ALWAYS CHECKING THE DRIVE TYPE BY THE "READ-STATUS 300 / DOUBLE-DENSITY" METHOD. 301 302 / B) IF ACTUAL RX03 DRIVES EXIST (CESI, DSD, ETC.), THE PARITY BIT[10] 303 / OF THE RX01 MUST BE INTERPRETED AS "DOUBLE-SIDED DISK PRESENT" AND 304 / MUST BE HANDLED PROPERLY. THIS HANDLER WILL NOT "SCREW UP" ON THIS 305 / BIT EITHER, AS IN A) ABOVE. 306 307 / C) THE RX01/RX02 CONTROLLER CANNOT BE USED DIRECTLY ON A DECMATE II 308 / AS ONLY THE RX50 (OR RD50, RD51) IS SELECTED BY THE CP MEMORY FIRMWARE. 309 / ONCE A DIFFERENT OPERATING SYSTEM HAS GAINED CONTROL OF THE MACHINE 310 / (ON RD50, RD51 OR RX50), THE MASTER BOOTSTRAP CAN BE USED TO BOOTSTRAP 311 / ANY RX-TYPE SYSTEM ON ANY DRIVE. / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 10 312 / (DEC) RX01 ONLY BOOTSTRAP. 313 314 NOPUNCH /THIS IS NOT PART OF THE HANDLER 315 316 0024 *24 /WHERE THIS LOADS 317 318 000024 7126 SRBOOT, STL RTL /SET AC TO 0002 319 000025 1060 TAD SBU /NOW HAVE UNIT^20+7000+6 320 000026 6751 LCD /LOAD "READ SECTOR" COMMAND 321 000027 7201 CLA IAC /SET AC TO 0001 322 000030 4053 JMS SLODE /ASK FOR SECTOR ONE 323 000031 4053 JMS SLODE /ASK FOR TRACK ONE 324 000032 7104 CLL RAL /SET AC TO 0002 325 000033 6755 SHANGG, SDN /BOOTSTRAP STARTS HERE; IS DONE FLAG UP? 326 000034 5054 JMP SLODE1 /NO, TRY TRANSFER FLAG 327 000035 6754 SER /SKIP IF ANY ERRORS 328 000036 7450 SNA /ARE WE HERE FROM INITIAL WAIT? 329 000037 7610 SKP CLA /SKIP NEXT IF FIRST TIME OR ERROR 330 000040 5046 JMP SDOTR /ELSE GO LOAD THE NEXT COMMAND 331 000041 1060 TAD SBU /GET CURRENT UNIT 332 000042 7041 CIA /INVERT IT 333 000043 1061 TAD SSUM/(CML RAL+RAL) /ADD ON MAGIC SUM 334 000044 3060 DCA SBU /STORE BACK OTHER UNIT VALUE 335 000045 5024 JMP SRBOOT /TRY AGAIN 336 337 000046 6751 SDOTR, LCD /LOAD "EMPTY SECTOR" COMMAND 338 000047 4053 SLP, JMS SLODE /GET A WORD 339 000050 3002 SLPSTR, DCA SBOOT&177+2 /PUT A WORD 340 000051 2050 ISZ SLPSTR /PUT TO NEXT 341 000052 5047 JMP SLP /KEEP GOING UNTIL OVERLAYED 342 343 / THE FOLLOWING WORDS ARE NEVER OVERLAYED. ALL OPERATING SYSTEMS PRIMARY 344 / BOOTSTRAP BLOCKS MUST ASSUME THEIR PRESENCE IN ORDER TO LOAD AT ALL. 345 / DEPENDENCE ON THESE WORDS PREVENTS SIGNIFICENT IMPROVEMENT OR ALTERATION 346 / OF THE BOOTSTRAP CONVENTION IN THE FUTURE. 347 348 000053 0000 SLODE, .-. /LOAD A WORD ROUTINE 349 000054 6753 SLODE1, STR /TRANSFER FLAG UP? 350 000055 5033 JMP SHANGG /NO, BUT DONE FLAG MAY BE UP 351 000056 6752 XDR /DO TRANSFER IN PREVAILING DIRECTION 352 000057 5453 JMP I SLODE /RETURN 353 354 000060 7024 SBU, CML RAL /WILL BE UNIT^20+7004 ON SUCCESSFULL BOOT 355 000061 6030 SSUM, CML RAL+RAL /MAGIC SUM FOR FLIPPING UNITS / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 11 356 / (DEC) RX01/RX02/RX03 BOOTSTRAP. 357 358 0017 *17 /THIS IS NOT PART OF THE HANDLER 359 360 000017 0006 S6, 6 /CONSTANT 0006; THIS IS NOT OFFICIALLY IN THE BOOTSTRAP 361 /HOWEVER IT IS NEEDED FOR COMPATIBILITY WITH 362 /CLASSIC PDP-8. 363 364 0020 *20 /OFFICIAL LOADING ADDRESS OF THIS BOOTSTRAP 365 366 000020 1061 SBREAD, TAD SRXU /GET CURRENT UNIT^20+DENSITY WORD 367 000021 1046 TAD SGDCON/(360) /UPDATE TO NEXT CANDIDATE 368 000022 0060 AND SBU/(420) /KEEP ONLY NEW DENSITY AND UNIT BITS 369 000023 3061 DCA SRXU /STORE BACK 370 000024 7327 SRBOOT, NL0006 /TAD S6 /TAD S46/SET AC TO SIX 371 000025 1061 TAD SRXU /ADD ON DENSITY AND UNIT BITS 372 000026 6751 LCD /LOAD "READ SECTOR" COMMAND 373 000027 7301 CLA CLL IAC /SET AC TO ONE AND CLEAR LINK 374 000030 4053 JMS SLODE /ASK FOR SECTOR ONE 375 000031 4053 JMS SLODE /ASK FOR TRACK ONE 376 000032 7004 SRAL, RAL /AC NOW 0002 377 000033 6755 SHANGG, SDN /BOOTSTRAP STARTS HERE; DONE FLAG UP? 378 000034 5054 JMP SLODE1 /NO, TRY TRANSFER FLAG 379 000035 6754 SER /SKIP IF ANY ERRORS 380 000036 7450 SNA /FIRST TIME THROUGH? 381 000037 5020 JMP SBREAD /JUMP IF FIRST TIME THROUGH OR ERRORS 382 000040 1061 TAD SRXU /GET CURRENT DENSITY SETTING; UNIT IS IGNORED 383 000041 6751 LCD /LOAD "EMPTY SECTOR" COMMAND 384 000042 1061 TAD SRXU /GET GOOD DRIVE 385 000043 0046 S46, AND SGDCON/(360) /REMOVE DENSITY BIT 386 000044 1032 TAD SRAL/(RAL) /ADD ON "RAL" INSTRUCTION 387 000045 3060 DCA SBU /STORE FOR COMPATIBILIY WITH RX01 ONLY BOOTSTRAP 388 000046 0360 SGDCON, 0360 /CONSTANT 0360 389 000047 4053 SLP, JMS SLODE /GET A WORD 390 000050 3002 SLPSTR, DCA SBOOT&177+2 /PUT A WORD 391 000051 2050 ISZ SLPSTR /PUT TO NEXT 392 000052 5047 JMP SLP /KEEP GOING UNTIL OVERLAYED 393 394 / THE FOLLOWING WORDS ARE NEVER OVERLAYED. ALL OPERATING SYSTEMS PRIMARY 395 / BOOTSTRAP BLOCKS MUST ASSUME THEIR PRESENCE IN ORDER TO LOAD AT ALL. 396 / DEPENDENCE ON THESE WORDS PREVENTS SIGNIFICENT IMPROVEMENT OR ALTERATION 397 / OF THE BOOTSTRAP CONVENTION IN THE FUTURE. 398 399 000053 0000 SLODE, .-. /LOAD A WORD ROUTINE 400 000054 6753 SLODE1, STR /TRANSFER FLAG UP? 401 000055 5033 JMP SHANGG /NO, BUT DONE FLAG MAY BE UP 402 000056 6752 XDR /DO TRANSFER IN PREVAILING DIRECTION 403 000057 5453 JMP I SLODE /RETURN 404 405 000060 0420 SBU, 0420 /DENSITY AND UNIT MASK 406 /WILL BE UNIT^20+7004 ON SUCCESSFULL BOOT 407 000061 0020 SRXU, 0020 /WILL BE UNIT^20+DENSITY^400 ON SUCCESSFULL BOOT / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 12 408 / TINY RX01 DRIVE ZERO ONLY BOOTSTRAP. 409 410 0033 *33 /STARTS LOADING HERE 411 412 000033 6755 SHANGG, SDN /BOOTSTRAP STARTS HERE; DONE FLAG UP? 413 000034 5054 JMP SLODE1 /TRY TRANSFER FLAG IF DONE FLAG IS NOT UP 414 000035 7326 NL0002 /SETUP FOR EMPTYING 415 000036 6751 LCD /LOAD THE COMMAND 416 417 000037 0000 ZBLOCK SLP-. /0000'S WILL EXECUTE AND FALL THROUGH TO SLP! 418 419 000047 4053 SLP, JMS SLODE /GET A WORD 420 000050 3002 SLPSTR, DCA SBOOT&177+2 /PUT A WORD 421 000051 2050 ISZ SLPSTR /BUMP TO NEXT WORD 422 000052 5047 JMP SLP /KEEP GOING UNTIL SLP IS OVERLAYED! 423 424 / THE FOLLOWING WORDS ARE NEVER OVERLAYED. ALL OPERATING SYSTEMS PRIMARY 425 / BOOTSTRAP BLOCKS MUST ASSUME THEIR PRESENCE IN ORDER TO LOAD AT ALL. 426 / DEPENDENCE ON THESE WORDS PREVENTS SIGNIFICENT IMPROVEMENT OR ALTERATION 427 / OF THE BOOTSTRAP CONVENTION IN THE FUTURE. 428 429 000053 0000 SLODE, .-. /LOAD A WORD ROUTINE 430 000054 6753 SLODE1, STR /WORD READY? 431 000055 5033 JMP SHANGG /NO, TRY DONE 432 000056 6752 XDR /YES, GET A WORD 433 000057 5453 JMP I SLODE /RETURN 434 435 000060 7004 SBU, 0^20+7004 /INDICATE UNIT ZERO TO NEXT LEVEL / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 13 436 / MASTER BOOTSTRAP. 437 438 0010 *10 /START LOADING HERE 439 440 000010 7326 SBOK, NL0002 /SET MASK BIT 441 000011 7004 RAL /MOVE IT OVER 442 000012 0141 AND SCNT /JUST PAIR BIT 443 000013 7006 RTL;RAL /MOVE TO DSD EXTRA UNIT BIT 444 000014 7004 445 000015 3126 DCA SCONTRL /SAVE FOR NOW 446 000016 1061 TAD SRXU /GET CURRENT UNIT AND DENSITY 447 000017 0060 AND SBU/(420) /REMOVE PAIR BIT 448 000020 1046 TAD SGDCON/(360) /UPDATE TO NEXT CANDIDATE 449 000021 0060 AND SBU/(420) /KEEP ONLY DENSITY, UNIT BITS 450 000022 1126 TAD SCONTRL /ADD ON PAIR UNIT BIT 451 000023 3061 DCA SRXU /STORE BACK 452 000024 1140 TAD SB6/(6) /GET "READ SECTOR" COMMAND 453 000025 1061 TAD SRXU /ADD ON DENSITY, UNIT BITS 454 000026 6751 LCD /LOAD THE READ SECTOR COMMAND 455 000027 7301 CLA CLL IAC /CLEAR LINK FOR LATER, SET AC TO 0001 456 000030 4053 JMS SLODE /ASK FOR SECTOR ONE 457 000031 4053 JMS SLODE /ASK FOR TRACK ONE 458 000032 7004 SRAL, RAL /AC NOW 0002 459 000033 6755 SHANGG, SDN /BOOTSTRAP STARTS HERE; TEST FOR DONE 460 000034 5054 JMP SLODE1 /NOT YET, TEST FOR TRANSFER AND COME BACK 461 000035 6754 SER /DONE, ANY ERRORS? 462 000036 7450 SNA /NO, ARE WE JUST STARTING UP? 463 000037 5062 JMP SNXREAD /YES, GO DO NEXT CASE 464 000040 1061 TAD SRXU /ADD ON DENSITY, UNIT BITS 465 000041 6751 LCD /LOAD "EMPTY SECTOR" COMMAND 466 000042 1061 TAD SRXU /GET CURRENT DENSITY, UNIT BITS 467 000043 0046 AND SGDCON/(360) /JUST UNIT BITS 468 000044 1032 TAD SRAL/(RAL) /NOW HAVE UNITS^20+7004 FOR COMPATIBILITY WITH RX01 BOOT 469 000045 3060 DCA SBU /STORE IN RX01 BOOT WORD 470 000046 0360 SGDCON, 0360 /UPDATE AND MASK CONSTANT 471 000047 4053 SLP, JMS SLODE /GET A WORD 472 000050 3002 SLPSTR, DCA SBOOT&177+2 /PUT A WORD 473 000051 2050 ISZ SLPSTR /PUT TO NEXT 474 000052 5047 JMP SLP /KEEP GOING UNTIL OVERLAYED 475 476 / THE FOLLOWING WORDS ARE NEVER OVERLAYED. ALL OPERATING SYSTEMS PRIMARY 477 / BOOTSTRAP BLOCKS MUST ASSUME THEIR PRESENCE IN ORDER TO LOAD AT ALL. 478 / DEPENDENCE ON THESE WORDS PREVENTS SIGNIFICENT IMPROVEMENT OR ALTERATION 479 / OF THE BOOTSTRAP CONVENTION IN THE FUTURE. 480 481 000053 0000 SLODE, .-. /LOAD A WORD ROUTINE 482 000054 6753 SLODE1, STR /TRANSFER FLAG UP? 483 000055 5033 JMP SHANGG /NO, BUT DONE FLAG MAY BE UP 484 000056 6752 XDR /DO TRANSFER IN PREVAILING DIRECTION 485 000057 5453 JMP I SLODE /RETURN 486 487 000060 0420 SBU, 0420 /DENSITY AND UNIT MASK; WILL BE UNITS^20+RAL 488 000061 0020 SRXU, 0020 /DENSITY, UNIT WORD; WILL BE UNITS^20+DENSITY^400 / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 14 489 / COMES HERE TO STARTUP THE NEXT CANDIDATE. 490 491 000062 2141 SNXREAD,ISZ SCNT /BUMP COUNTER 492 000063 0014 S14, 14 /CONSTANT 0014; THIS CAN BE SKIPPED 493 000064 4126 JMS SCONTRL /SETUP CONTROLLER BITS 494 000065 7430 SZL /EVEN PAIR? 495 000066 7001 IAC /NO, USE ODD PAIR 496 000067 4110 JMS SSEL /SELECT LATEST PAIR 497 000070 1124 TAD S16/(16) /GET "READ ERROR REGISTER" VALUE 498 000071 6751 LCD /LOAD COMMAND TO POSSIBLY LISTENING PAIR 499 000072 3053 DCA SLODE /INITIALIZE THE TIMER 500 501 / THE FOLLOWING CODE IS USED TO DETERMINE IF THE SELECTED PAIR ACTUALLY EXISTS. 502 / IF THE DONE FLAG NEVER COMES UP, THE INTERFACE MUST BE REINITIALIZED 503 / AND THE OTHER DRIVE PAIR SELECTED. SINCE THE OTHER PAIR MAY EXIST IN A 504 / DSD-210 EXTENDED CONFIGURATION (SINGLE CONTROLLER WITH FOUR DRIVES) 505 / THE EXTENDED UNIT BIT WILL BE PRESERVED. 506 507 000073 6755 SDNTST, SDN /DONE FLAG UP? 508 000074 7410 SKP /SKIP IF NOT 509 000075 5010 JMP SBOK /JUMP IF SO 510 000076 2053 ISZ SLODE /WAITED TOO LONG? 511 000077 5073 JMP SDNTST /NO, GO BACK 512 000100 4126 JMS SCONTRL /SETUP CONTROLLER BITS 513 000101 7420 SNL /WAS IT ODD CONTROLLER? 514 000102 7001 IAC /NO, MAKE IT SO 515 000103 4110 JMS SSEL /SELECT OTHER PAIR 516 000104 6757 INIT /INITIALIZE THE DRIVES 517 000105 6755 SDN /WAIT FOR 518 000106 5105 JMP .-1 /FLAG TO COME UP 519 000107 5010 JMP SBOK /KEEP GOING 520 521 000110 0000 SSEL, .-. /SELECT ROUTINE 522 000111 3126 DCA SCONTRL /SAVE FOR NOW 523 000112 1124 TAD S16/(16) /GET "READ ERROR REGISTER" VALUE 524 000113 6751 LCD /LOAD THE COMMAND 525 000114 1122 TAD SWTVALUE/(-600) /SETUP THE 526 000115 3053 DCA SLODE /TIME-OUT 527 000116 2053 ISZ SLODE /WASTE 528 000117 5116 JMP .-1 /SOME TIME 529 000120 1126 TAD SCONTRL /GET THE SELECT VALUE BACK 530 000121 6750 SEL /SELECT THE PAIR NOW 531 000122 7200 SWTVALU,CLA /CLEAN UP 532 000123 6755 SDN /CLEAR DONE FLAG NOW 533 000124 0016 S16, 16 /CONSTANT 0016; THIS CAN BE SKIPPED 534 000125 5510 JMP I SSEL /RETURN / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 15 535 000126 0000 SCONTRL,.-. /CONTROLLER BITS ROUTINE 536 000127 7300 CLA CLL /CLEAN UP 537 000130 1141 TAD SCNT /GET CURRENT COUNT 538 000131 0063 AND S14/(14) /JUST PAIR BITS 539 000132 7012 RTR;RAR /MOVE OVER 540 000133 7010 541 000134 7640 SZA CLA /SKIP IF RX50 QUAD 542 000135 1137 TAD S4000/(4000) /ELSE SELECT RX01/RX02 QUAD 543 000136 5526 JMP I SCONTRL /RETURN FOR PAIR DISPOSITION BY LINK TEST 544 545 000137 4000 S4000, 4000 /CONSTANT 4000 546 000140 0006 SB6, 6 /CONSTANT 0006 547 000141 0007 SCNT, 10-1 /CONTROLLER COUNTER 548 549 ENPUNCH /RESTORE BINARY OUTPUT / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 23 823 / P?S/8 SYSTEM I/O ROUTINE LOADER. 824 825 / CORE IMAGE OF A BINARY FORMAT FILE WHICH WILL BE WRITTEN OUT TO THE /I BLOCK. 826 827 / THE FOLLOWING PAGE OF CODE IS AN EXAMPLE OF A P?S/8 BINARY FORMAT FILE. 828 / IT WILL BE WRITTEN OUT AT SYSGEN TIME AS A CORE IMAGE OF A "FILE" TO BE 829 / USED LATER AS THE LAST LOADED "FILE" WHEN INVOKING THE '/I' OPTION OF THE 830 / SLURP LOADER. AT RUN TIME, IT WILL BE LOADED OVER AND NEXT TO THE SLURP 831 / LOADER (BY THE SLURP LOADER!), CAUSING THE SYSTEM I/O ROUTINES TO BE RELOADED; 832 / THE FINAL EFFECT IS AS IF THE VIRTUAL LOADER (/V) HAD BEEN USED, BUT WITHOUT 833 / THE OVERHEAD AND WRITING (THE SLURP LOADER AND /I CODING CAN BE USED WITH 834 / WRITE-LOCKED DEVICES.) 835 836 / THE ONLY RESTRICTION ON USE OF THE /I OPTION IS THAT IT IS PASSED AS A FILE 837 / ARGUMENT TO THE LOADER, AND THUS LIMITS THE LOADER TO ONLY SIXTEEN FILES 838 / MAXIMUM INSTEAD OF THE NORMAL SEVENTEEN. BY USING THE /I OPTION, THE USER 839 / CAN MAINTAIN DEVICE INDEPENDENCE, YET TAKE ADVANTAGE OF THE BENEFITS OF 840 / THE SLURP LOADER OVER THE VIRTUAL (/V) LOADER. 841 842 / P?S/8 BINARY FORMAT AND CORE IMAGE FORMAT ARE RELATIVELY SIMILAR, BUT THE 843 / DIFFERENCES WILL BE DESCRIBED. 844 845 / P?S/8 BINARY FORMAT DESCRIPTION. 846 847 / THE P?S/8 BINARY FILE FORMAT CONSISTS OF A SEQUENTIAL LIST OF BLOCKS, EACH 848 / BLOCK CONTAINING 128 LOGICAL WORDS. THE WORDS BREAKDOWN FURTHER INTO EIGHTEEN 849 / GROUPS OF SEVEN WORDS PLUS TWO WASTE WORDS. IF ANY PHYSICAL ADDITIONAL WORDS 850 / EXIST, IT IS THE LOADER'S RESPONSIBILITY TO PROPERLY IGNORE THEM, JUST AS 851 / IN SEVERAL SYSTEM HANDLERS. 852 853 / EACH GROUP OF SEVEN WORDS CONSISTS OF A CONTROL WORD AND SIX DATA WORDS. 854 / THE CONTROL WORD CONSISTS OF SIX BIT PAIRS EACH OF WHICH CONTROLS THE 855 / CORRESPONDING FOLLOWING DATA WORDS. THE ORDERING IS LEFT TO RIGHT, I.E. 856 / THE HIGH-ORDER TWO BITS OF THE CONTROL WORD CONTROL THE DATA WORD IMMEDIATELY 857 / FOLLOWING THE CONTROL WORD; THE LOW-ORDER TWO BITS OF THE CONTROL WORD CONTROL 858 / THE SIXTH DATA WORD FOLLOWING THE CONTROL WORD. SINCE EACH GROUP (AND 859 / THEREFORE BLOCK) IS AUTONOMOUS EXCEPT FOR IMPLIED ORIGIN AND FIELD, ANY 860 / SINGLE BLOCK CAN BE LOADED INDEPENDENTLY. 861 862 / THIS /I BLOCK CONFORMS TO THIS CONVENTION, AND WILL BE TREATED AS A ONE 863 / BLOCK LONG "FILE" COMPLETE WITH . 864 865 / ALL ACTUAL DATA WORDS ARE IDENTICAL TO THEIR CORE IMAGE COUNTERPARTS, HOWEVER, 866 / NOT ALL WORDS IN A GROUP ARE ACTUAL DATA WORDS. / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 24 867 / BIT CONVENTION FOR CONTROL WORDS. 868 869 / EACH OF THE CONTROL WORD'S BIT PAIRS CONTROLS THE CORRESPONDING DATA WORD 870 / IN THE FOLLOWING MANNER: 871 872 / 00 ACTUAL DATA WORD; THE CORRESPONDING WORD IS AN ACTUAL DATA WORD 873 / TO BE LOADED ACCORDING TO THE CURRENT ORIGIN ADDRESS; LOAD IT AND 874 / ADVANCE THE ORIGIN ADDRESS BY ONE. 875 / 01 END OF FILE; IGNORE CORRESPONDING WORD (AND REST OF FILE!). 876 / 10 ORIGIN SETTING; SET CURRENT ORIGIN ADDRESS TO THE VALUE OF THE 877 / CORRESPONDING DATA WORD. 878 / 11 FIELD SETTING; THE CORRESPONDING WORD IS A CDF INSTRUCTION TO THE 879 / NEW FIELD; EXECUTE IT WHEN LOADING DATA WORDS INDIRECTLY THROUGH 880 / THE CURRENT ORIGIN ADDRESS. THIS ALLOWS LOADING TO OCCUR IN FIELDS 881 / 0-7. 882 883 / TYPICAL P?S/8 BINARY FORMAT FILES ARE CREATED BY EITHER AN ASSEMBLER PROGRAM 884 / OR THE BINARY UTILITIES (BIN, BSAVE, ETC.). SEVERAL SYSTEM PROGRAMS CHECK 885 / BINARY FILE FORMAT VALIDITY BY LOOKING FOR INITIAL DATA OF AN ORIGIN TO 886 / 0200, THUS MAKING THE CONTROL WORD OF THE FORM 10 XX XX XX XX XX, AND THE 887 / FIRST DATA WORD 0200. 888 889 / THE /I "FILE" WAS NOT CREATED DIRECTLY BY ANY ASSEMBLER, AND THIS LACKS THE 890 / (UNNECESSARY) "*200" CONVENTION OF A DEFAULT ORIGIN. ONLY THE SLURP LOADER 891 / WILL EVER LOOK AT THE /I "FILE", AND THE LOADER DOESN'T VALIDATE THE FILE 892 / FORMAT. 893 894 / A TYPICAL BINARY FILE IS SLIGHTLY GREATER THAN 7/6 OF THE EQUIVALENT CORE 895 / IMAGE FILE SIZE. 896 897 / SINCE NO CHECKSUM SCHEME IS USED IN THE FILE FORMAT, THE USER CAN PATCH 898 / FREELY ANY BINARY FILE. THIS IS USEFUL WHEN MODIFYING OLD PAPER-TAPE BINARY 899 / FILES WHICH LACK FIELD SETTINGS, ETC. WHEN ATTEMPTING TO LOAD THEM INTO 900 / EXTENDED MEMORY FIELDS THEY WERE NOT INTENDED FOR, ETC. 901 902 / THE /I CODE COULD BE IMPLEMENTED BY A USER PROGRAM, BUT WOULD THEN NOT BE 903 / DEVICE INDEPENDENT. 904 905 / SPECIAL NOTE ON SELF-STARTING. 906 907 / SINCE THE USER CAN DIRECTLY OVERLAY THE LOADER (INDEED THE /I OPTION USES 908 / THIS VERY METHOD!), IT IS POSSIBLE TO CREATE A "SELF-STARTING" PROGRAM BY 909 / SELECTIVE OVERLAY OF THE STARTUP LOCATIONS: 910 911 / BCIF (07746) STARTING FIELD AS A CIF CDF INSTRUCTION. 912 / SPARM (07756) STARTING ADDRESS IN THE STARTING FIELD. 913 914 / USER LOADING OF THESE LOCATIONS WILL ALWAYS OVERRIDE ANY AND ALL OTHER METHODS 915 / (DEFAULT VALUES, DEFAULT VALUES WITH /I IN EFFECT, "GET" VALUES, EXPLICIT 916 / COMMAND OPTION SWITCHES, EQUALS PARAMETERS, PRIOR USER LOADING OF THESE 917 / SAME LOCATIONS IN AN EARLIER PASSED BINARY FILE, ETC.). 918 919 / N. B. THIS SELF-STARTING ABILITY IS TOTALLY IGNORED WHEN USING THE VIRTUAL 920 / (/V) LOADER; SEE "BIN" FOR A DISCUSSION OF THE DISPOSITION OF USER LOADING 921 / INTO 07600-07777, ETC. WHEN THE VIRTUAL LOADER IS IN EFFECT. / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 29 1098 1041 RELOC /UN-FOOL THE ASSEMBLER 1099 1100 / I/O TRAPS COME HERE. 1101 1102 011041 6214 TRAPIO, RDF /GET CALLING FIELD 1103 011042 1244 TAD TRPCDF/(CDF) /MAKE INTO CDF CALLING FIELD 1104 011043 3254 DCA TRPINST /STORE IN-LINE 1105 011044 6201 TRPCDF, CDF 00 /GOTO MONITOR FIELD 1106 011045 7026 CML RTL /MOVE UP INVERTED LINK 1107 011046 3777 DCA I (SFUNCT) /STORE AS READ/WRITE FUNCTION 1108 011047 7240 NL7777 /BACKUP 1109 011050 1776 TAD I (SYSIO) /GET CALLING ADDRESS 1110 011051 3020 DCA CALADR /SAVE FOR ERROR HANDLER 1111 011052 1254 TAD TRPINST /GET CDF CALLING FIELD 1112 011053 3021 DCA CALFLD /SAVE FOR ERROR HANDLER 1113 011054 0000 TRPINST,.-. /GOTO CALLING FIELD 1114 011055 6202 CIF 00 /GOTO MONITOR FIELD 1115 011056 5775 JMP I (OEND+4) /CONTINUE THERE 1116 1117 / ERROR BLURBS. 1118 1119 011057 4004 DENS, TEXT " DENSITY" /DENSITY ERROR BLURB 1120 011060 0516 1121 011061 2311 1122 011062 2431 1123 011063 4040 PAR, TEXT " PARITY" /PARITY ERROR BLURB 1124 011064 2001 1125 011065 2211 1126 011066 2431 1127 011067 4040 CRC, TEXT " CRC" /CRC ERROR BLURB 1128 011070 4040 1129 011071 4003 1130 011072 2203 1131 011073 4040 REDERR, TEXT " READY" /DRIVE NOT READY ERROR BLURB 1132 011074 4022 1133 011075 0501 1134 011076 0431 1135 011077 0317 TYPCODE,TEXT "CODE " /ERROR CODE-ORIENTED ERROR BLURB 1136 011100 0405 1137 011101 4040 1138 011102 4040 1139 011103 4020 WRIERR, TEXT " PROTECT" /WRITE-LOCK ERROR 1140 011104 2217 1141 011105 2405 1142 011106 0324 1143 011107 1011 TEXERR, TEXT "HIGH TRK" /TRACK EXCEEDED ERROR 1144 011110 0710 1145 011111 4024 1146 011112 2213 1147 011113 2411 TIMO, TEXT "TIME OUT" /TIME-OUT ERROR (2 REVOLUTIONS) 1148 011114 1505 1149 011115 4017 1150 011116 2524 / P?S/8 RX01, ETC. SYSTEM HANDLER PAL8-VB0 10-DEC-86 PAGE 30 1151 011117 1001 HARD, TEXT "HARDWARE" /HARDWARE TIME-OUT ERROR 1152 011120 2204 1153 011121 2701 1154 011122 2205 1155 1156 0004 BLBLEN= .-HARD /LENGTH OF ERROR BLURBS 1157 1158 011175 7662 1159 011176 7640 1160 011177 7621 1161 1200 PAGE