1 / CPU IDENTIFICATION PROGRAM. 2 3 / LAST EDIT: 15-JUN-2016 CJL 4 5 / MUST BE ASSEMBLED WITH THE '/J' COMMAND-LINE SWITCH OFF IN P?S/8 PAL OR THE 6 / '/F' COMMAND-LINE SWITCH OFF IN OS/8 PAL8 TO ENSURE PROPER STRING FORMAT. 7 8 / THIS PROGRAM IDENTIFIES THE PARTICULAR MODEL OF PDP-8 THE PROGRAM IS RUNNING 9 / ON. THIS IS ACCOMPLISHED USING A SERIES OF TESTS FOR QUIRKS THAT APPLY TO THE 10 / VARIOUS MODELS. 11 12 / MUCH OF THE CODE IN THIS PROGRAM WAS OBTAINED FROM THE KERMIT-12 SOURCE FILES 13 / USED FOR SIMILAR PURPOSES; SOME MODIFICATIONS HAVE BEEN MADE THAT WILL 14 / EVENTUALLY BE APPLIED TO KERMIT-12 TO BETTER IDENTIFY THE COMPUTER MODEL. 15 16 / NOTE: KERMIT-12 USES A MODEL-DEPENDENT COMMAND PROMPT TO HELP ASSIST IN 17 / DETERMINING WHICH KERMIT IS CURRENTLY BEING ADDRESSED; IN SOME CIRCUMSTANCES, 18 / TWO DIFFERENT SYSTEMS ARE IN USE SIMULTANOUSLY. IT CAN SOMETIMES BE CONFUSING 19 / WHICH COMPUTER IS CURRENTLY IN EFFECT,; AS SUCH, USING MODEL-SPECIFIC PROMPTS 20 / CAN AID IN PREVENTING CONFUSION. AS CURRENTLY IMPLEMENTED AS OF THIS WRITING, 21 / KERMIT-12 CANNOT DISTINGUISH BETWEEN DECMATE SYSTEMS AND OTHER SYSTEMS BASED 22 / ON THE 6120 CHIP SUCH AS THE SB6120 FROM SPARE-TIME GIZMOS. WHILE THIS ASPECT 23 / OF THE PROBLEM IS PURELY COSMETIC, KERMIT-12 HAS CONFIGURATION ISSUES WHEN RUN 24 / ON THESE PARTICULAR SYSTEMS. AS SUCH, FUTURE RELEASES OF KERMIT-12 WILL NOT 25 / ONLY MODIFY THE COMMAND PROMPT, BUT THE INTERNAL LOGIC WILL PROPERLY 26 / SELF-CONFIGURE USING ANALOGOUS CODING TO THAT WITHIN THIS CPU IDENTIFICATION 27 / PROGRAM PREVENTING THE NEED FOR PROGRAM PATCHING, ETC. 28 29 / AN OLDER PROGRAM SEGMENT ATTEMPTING CPU IDENTIFICATION IS CONTAINED WITHIN THE 30 / ORIGINAL RELEASE OF FOCAL, 1969; HOWEVER, THAT [OPTIONAL OVERLAY] HAS SEVERAL 31 / KNOWN PROBLEMS: 32 33 / 1) NEWER MODELS [INCLUDING DECMATES] COULD NOT BE FORESEEN; AS SUCH, THESE 34 / SYSTEMS ARE MISIDENTIFIED. 35 36 / 2) THE CODING USED TO IDENTIFY THE PDP-8/I AND PDP-8/L IS FLAWED; CERTAIN 37 / CONFIGURATIONS OF PDP-8/I WILL BE MISIDENTIFIED AS PDP-8/L BECAUSE THE 38 / METHOD CHOSEN IS TO USE SOFTWARE TIMING BASED ON THE CONSOLE OUTPUT 39 / AS A PRIMITIVE CLOCK. THERE ARE MULTIPLE REASONS WHY THIS METHOD CANNOT 40 / BE TRUSTED RANGING FROM MEMORY TIMING PROBLEMS OF THE CPU TO CONSOLE DEVICE 41 / UPGRADES THAT RUN FASTER THAN THE TELETYPE MODELS 33 OR 35. THE PROGRAM'S 42 / DEPENDENCE ON NOMINAL TIMING VALUES THAT MIGHT NOT APPLY WOULD TEND TO 43 / INCREASE THE NUMBER OF MACHINES MISIDENTIFIED EVEN DURING THE ECONOMIC 44 / LIFETIME OF THE PDP-8/I [AND BEYOND]. 45 46 / THE PROGRAM IMPLEMENTED HERE USES AN ALTERNATE METHOD THAT ALWAYS WORKS. THE 47 / PDP-8/L INHIBITS ALL TYPE III OPERATE INSTRUCTIONS WHILE THE PDP-8/I ALWAYS 48 / ALLOWS CERTAIN INSTRUCTIONS WITHIN THIS OPERATE GROUP, EVEN IF EAE IS NOT 49 / PRESENT. THE ACCUMULATOR CAN BE CLEARED USING THE AC CLEAR OPERATION IN GROUP 50 / III ON THE PDP-8/I; THE ACCUMULATOR WILL NOT CLEAR ON THE PDP-8/L. 51 / LINC-8 INSTRUCTION DEFINITIONS. 52 53 IAAC= 6171 /LOAD LINC "A" REGISTER INTO ACCUMULATOR. 54 IACA= 6167 /LOAD ACCUMULATOR INTO LINC "A" REGISTER. 55 56 / PDP-12 INSTRUCTION DEFINITIONS. 57 58 COM= 0017 /COMPLEMENT ACCUMULATOR [IN LINC MODE]. 59 LINC= 6141 /SWITCH FROM PDP-8 MODE TO LINC MODE ON PDP-12. 60 PDP= 0002 /SWITCH FROM LINC MODE TO PDP-8 MODE ON PDP-12. 61 62 / NUMERIC LOAD DEFINITIONS. [NOTE: ONLY USE "FAMILY OF 8" DEFINITIONS 63 /UNIVERSAL TO ALL MODELS!] 64 65 NL7777= CLA CMA /LOAD ACCUMULATOR WITH 7777. 66 67 / PROGRAM DEFINITIONS. 68 69 SBOOT= 7600 /EXIT LOCATION FOR MOST OPERATING SYSTEMS. 70 71 FIELD 0 /PROGRAM SHOULD BE LOADED INTO FIELD 0. 72 73 *PDP /OVER POTENTIALLY RELEVANT MEMORY LOCATION. 74 75 000002 0000 0 /THIS IS NEEDED FOR CERTAIN PDP-8/I SYSTEMS. 76 77 000003 0000 ZBLOCK 10-. /EMPTY SPACE [AVAILABLE]. 000004 0000 000005 0000 000006 0000 000007 0000 78 79 *10 /GET TO AUTO-INDEX AREA. 80 81 000010 0000 XR0, .-. /AUTO-INDEX REGISTER 0. 82 / THE PROGRAM STARTS HERE. 83 84 *200 /THE USUAL STARTING LOCATION. 85 86 000200 7300 START, CLA CLL /CLEAN UP. 87 88 / FOR MOST PROGRAMS, THE STATE OF THE CONSOLE OUTPUT FLAG CAN BE ASSUMED WHERE 89 / THE WORST CASE PROBLEM IS TO "SPLAT" THE PREVIOUS CHARACTER IN THE PROCESS OF 90 / BEING PRINTED; THE OUTPUT FLAG WILL RAISE REGARDLESS OF THIS POTENTIAL 91 / COSMETIC PROBLEM. HOWEVER, PART OF THE LOGIC OF THIS PROGRAM INCLUDES THE 92 / ABILITY TO PROPERLY IDENTIFY DECMATE SYSTEMS [AS OPPOSED TO OTHER SYSTEMS ALSO 93 / BASED ON THE 6120 CHIP]; AS SUCH, WE HAVE TO HANDLE ALL POTENTIAL SITUATIONS. 94 95 / 1) THE PROGRAM IS RUNNING STANDALONE AND WAS STARTED FROM THE FRONT PANEL. IN 96 / THIS SITUATION, THE CONSOLE OUTPUT FLAG IS NOT SET NOR WILL IT COME UP IN A 97 / REASONABLE AMOUNT OF TIME; ONCE A REASONABLE TIMEOUT HAS OCCURRED, THE 98 / PROGRAM SHOULD OUTPUT AN OPENING CHARACTER. FOR THIS PURPOSE, THE 99 / CHARACTER IS PREFERRED SINCE ON MOST SYSTEMS IT HAS NO SIGNIFICANCE OTHER 100 / THAN A ONE-CHARACTER DELAY; ON TELETYPE MODEL 33 AND 35 BASED SYSTEMS, THE 101 / OUTPUT WILL CAUSE AN ASSOCIATED SOUND; HOWEVER, THE CARRIAGE WILL NOT BE 102 / ADVANCED THUS THIS METHOD IS GENERALLY INNOCUOUS. 103 104 / 2) THE PROGRAM COULD BE RUNNING FROM AN OPERATING SYSTEM SUCH AS OS/8 WHERE 105 / THERE IS NO ABSOLUTE RULE REGARDING THE CONSOLE FLAG CONVENTION. BY AN 106 / INACCURATE CONSENSUS, MANY PROGRAMS MERELY ASSUME THERE IS NO CONSOLE 107 / OUTPUT IN PROGRESS; CHARACTERS ARE OUTPUT AND THEN THE FLAG IS WAITED FOR. 108 / WHILE THIS MIGHT WORK MOST OF THE TIME, IT IS NOT FOOLPROOF AND ALSO USES 109 / THE INEFFICIENT METHOD THAT DOES NOT OVERLAP PROCESSING WITH CONSOLE 110 / OUTPUT. AS SUCH, THIS CASE SHOULD BE HANDLED MUCH LIKE 1) ABOVE WITH THE 111 / PROVISO THAT PROPER TESTING AFTER THE TIMEOUT MUST BE PERFORMED. 112 113 / 3) THE PROGRAM MAY BE RUNNING UNDER P?S/8 WITHOUT THE LOGICAL CONSOLE OVERLAY 114 / ENABLED. IN THIS CASE, THE PROGRAM HAS A RIGHT TO ASSUME A CHARACTER IS 115 / EITHER IN THE PROCESS OF PRINTING OR THE DONE FLAG HAS ALREADY RAISED. IF 116 / THIS MODE OF OPERATION WERE GUARANTEED TO APPLY, THE PROGRAM COULD BE 117 / WRITTEN TO THE ORIGINAL P?S/8 SPECIFICATION WHERE OVERLAPPING PROCESSING 118 / AND CONSOLE OUTPUT CAN BE DONE WITH IMPUNITY WITHOUT ANY INITIAL OUTPUT 119 / CONSIDERATION. UNFORTUNATELY, P?S/8 NOW SUPPORTS THE LOGICAL CONSOLE 120 / OVERLAY WHICH CHANGES THIS CONVENTION SIGNIFICANTLY. [SEE 4) BELOW.] 121 122 / 4) THE PROGRAM MAY BE RUNNING UNDER P?S/8 WITH THE LOGICAL CONSOLE OVERLAY 123 / ENABLED. OUTPUT DIRECTED TO THE LOGICAL CONSOLE DEVICE REQUIRES THE 124 / PROGRAM TO AVOID PHYSICAL CONSOLE OUTPUT AND INSTEAD DIRECT ALL OUTPUT 125 / TO PARTICULAR LOGICAL SUBROUTINE CALLS IN EXTENDED MEMORY AS DETERMINED BY 126 / PARAMETERS LOCATED IN THE RESIDENT P?S/8 KERNEL. AS SUCH, ALL SUCH USE OF 127 / THE CONSOLE DEVICE IS DONE WITH THE PROVISO THAT THE PHYSICAL CONSOLE 128 / DEVICE MAY BE UNDER THE CONTROL OF THE LOGICAL CONSOLE OVERLAY WHICH MAY OR 129 / MAY NOT BE REDIRECTING BACK TO THE DEVICE 03/04 NORMAL PHYSICAL CONSOLE. 130 / HOWEVER, THE LOGIC OF THIS PROGRAM REQUIRES PHYSICAL ACCESS TO THE CONSOLE 131 / DEVICE; AS SUCH, IT IS RECOMMENDED THE PROGRAM EXIT [VIA BRANCH TO 07600]. 132 / THIS WILL ALLOW THE ENABLED LOGICAL CONSOLE OVERLAY TO RESET PROPERLY. THE 133 / PROGRAM WILL BE RUN USING A PROPER TIMEOUT SUCH AS IS DESCRIBED IN 1) ABOVE 134 / TO ENSURE THE CONSOLE OUTPUT IS NOT GARBLED. NOTE: A MORE COMPLEX PROGRAM 135 / COULD BE CONSTRUCTED TO BE FULLY CONFORMING TO P?S/8 STANDARDS FOR THE 136 / CONSOLE DEVICE, BUT THIS IS BEYOND THE SCOPE OF THIS PROGRAM AS WRITTEN. 137 / THE BEST WAY TO HANDLE ALL OF THE ABOVE CONSIDERATIONS CONSISTS OF THE 138 / FOLLOWING: 139 140 / 1) PERFORM A REASONABLE TIMEOUT THAT INCLUDES CHECKING THE CONSOLE OUTPUT FLAG 141 / DURING THE TIMEOUT LOOP. 142 143 / 2) IF THE FLAG RAISES THUS ENDING THE TIMEOUT INTERVAL, FURTHER OUTPUT CAN BE 144 / PERFORMED WITH IMPUNITY. SINCE DECMATE DETECTION HASN'T BEEN PERFORMED 145 / YET, OUTPUT A CHARACTER WITHOUT WAITING FOR THE DONE FLAG. 146 147 / 3) IF THE FLAG DID NOT RAISE DURING THE TIMEOUT INTERVAL, THE OUTPUT MUST BE 148 / INITIALIZED WITH THE CHARACTER OUTPUT AFTERWARDS. ALL PRINTING IN 149 / THE REST OF THE PROGRAM CAN USE THE METHOD OF OVERLAPPING PROCESSING AND 150 / OUTPUT WAIT FOR MAXIMUM EFFICIENCY WITHOUT REGARD FOR WHETHER 3) OR 2) 151 / ABOVE APPLIES. 152 153 / 4) IF IT IS DETERMINED THE CPU IS THE 6120 CHIP, A NORMAL WAIT FOR THE CONSOLE 154 / OUTPUT DONE FLAG WILL BE PERFORMED. ONCE THE OUTPUT FLAG SKIPS, THE 155 / "TSF" INSTRUCTION WILL BE PERFORMED AGAIN. IF THE INSTRUCTION CAUSES A 156 / SKIP, THE MACHINE IS NOT A DECMATE. DETECTION OF A DECMATE WILL CHANGE THE 157 / EVENTUAL DETECTION DISPLAY CONTENTS; ANOTHER CHARACTER WILL BE OUTPUT 158 / TO SETUP THE PROPER OVERLAP USED IN ALL MESSAGE PRINTING ROUTINES. 159 160 / SETUP THE OUTER TIMEOUT LOOP COUNTER. THIS CAN BE ADJUSTED FOR UNUSUAL 161 / SITUATIONS SUCH AS "HOME-BREW" MACHINES THAT ARE VERY FAST COMPARED TO 162 / STANDARD MODELS YET HAVE LOW BAUD RATE SERIAL CONSOLE INTERFACES. 163 164 000201 1377 TAD (-30) /SETUP A REASONABLE 165 000202 3305 DCA OUTER /WAIT TIME. 166 000203 6041 WATLUP, TSF /DID THE OUTPUT FLAG COME UP? 167 000204 7410 SKP /SKIP IF NOT. 168 000205 5212 JMP FLAGUP /JUMP IF IT DID COME UP. 169 000206 2303 ISZ INNER /WAIT FOR A 170 000207 5206 JMP .-1 /BIT OF TIME. 171 000210 2305 ISZ OUTER /WAITED LONG ENOUGH? 172 000211 5203 JMP WATLUP /NO, KEEP GOING. 173 174 / COMES HERE BECAUSE THE FLAG DID COME UP OR WE WAITED LONG ENOUGH AND THE FLAG 175 / NEVER RAISED. WE CAN OUTPUT A CHARACTER TO INITIALIZE ALL FURTHER 176 / PRINTING OPERATIONS. 177 178 000212 6046 FLAGUP, TLS /OUTPUT A CHARACTER NOW. 179 180 / NOW FIND OUT WHAT KIND OF MACHINE THIS IS. 181 182 000213 4776 JMS I (MACHINE) /CALL IDENTIFICATION ROUTINE. 183 000214 3304 DCA MODEL /STORE IT. 184 000215 1304 TAD MODEL /GET IT BACK. 185 000216 1375 TAD (-13) /COMPARE TO 6120 VALUE. 186 000217 7640 SZA CLA /SKIP IF IT MATCHES. 187 000220 5230 JMP PRCPU /JUMP IF ANY OTHER MODEL. 188 / THE CPU IS A 6120; IS THIS A DECMATE? 189 190 000221 6041 TSF /OUTPUT FLAG UP? 191 000222 5221 JMP .-1 /NOT YET, WAIT FOR IT. 192 193 / IF THIS IS A DECMATE, THE FLAG WAS CLEARED BY THE "TSF" INSTRUCTION. 194 195 000223 6041 TSF /FLAG STILL UP? 196 000224 7410 SKP /SKIP IF NOT. 197 000225 5230 JMP PRCPU /NOT A DECMATE; JUST HANDLE NORMALLY. 198 199 / THIS MACHINE IS A DECMATE; INDICATE THIS FOR THE OUTPUT DISPLAY AND OUTPUT AN 200 / ADDITIONAL CHARACTER RIGHT NOW SO FURTHER PRINTING WILL FUNCTION. 201 202 000226 2304 ISZ MODEL /SET MODEL TO 14: 6120 ON DECMATE. 203 000227 6046 TLS /OUTPUT ANOTHER CHARACTER. 204 205 / COMES HERE WITH THE OUTPUT FLAG IN PROGRESS FOR PRINTING THE NOW FULLY 206 / DETERMINED MACHINE MODEL TYPE. 207 208 000230 4275 PRCPU, JMS CRLF /PRINT / FIRST. 209 000231 1374 TAD (OPNMSG-1) /GET POINTER TO THE OPENING MESSAGE. 210 000232 4242 JMS PSTRING /PRINT IT. 211 000233 1373 TAD (MDLPTRS) /GET TABLE OF MODELS POINTER. 212 000234 1304 TAD MODEL /INDEX TO THE RELEVANT ONE. 213 000235 3306 DCA TEMP /STASH THE POINTER. 214 000236 1706 TAD I TEMP /GET THE PROPER STRING MESSAGE POINTER 215 000237 4242 JMS PSTRING /PRINT THE MODEL-SPECIFIC STRING. 216 000240 4275 JMS CRLF /PRINT / BEFORE EXIT. 217 000241 5772 JMP I (7600) /EXIT TO O/S. HLT [7402] IF STANDALONE. 218 219 / STRING PRINTING ROUTINE. 220 221 / CALL WITH THE ACCUMULATOR POINTING TO THE TEXT STRING [-1]. 222 223 000242 0000 PSTRING,.-. /STRING PRINT ROUTINE. 224 000243 3010 DCA XR0 /STASH THE POINTER. 225 000244 1410 PLOOP, TAD I XR0 /GET A PAIR OF CHARACTERS TO PRINT. 226 000245 3306 DCA TEMP /SAVE THEM. 227 000246 1306 TAD TEMP /GET THEM BACK. 228 000247 7012 RTR;RTR;RTR /MOVE HIGH-ORDER TO LOW-ORDER AC BITS. 000250 7012 000251 7012 229 000252 4256 JMS P6CH /PRINT ORIGINAL HIGH-ORDER. 230 000253 1306 TAD TEMP /GET THEM BACK AGAIN. 231 000254 4256 JMS P6CH /PRINT THE LOW-ORDER NOW. 232 000255 5244 JMP PLOOP /GO DO NEXT PAIR. 233 000256 0000 P6CH, .-. /PRINT A SIXBIT TEXT CHARACTER ROUTINE. 234 000257 0371 AND (77) /JUST THE LATEST CHARACTER BITS. 235 000260 7450 SNA /SKIP IF NOT AT END OF MESSAGE. 236 000261 5642 JMP I PSTRING /RETURN TO ORIGINAL CALLER. 237 000262 1370 TAD (40) /INVERT QUADRANT FOR ASCII CONVERSION. 238 000263 0371 AND (77) /JUST CHARACTER BITS. 239 000264 1370 TAD (40) /NOW CONVERTED BACK TO ASCII. 240 000265 4267 JMS P7CH /PRINT IT. 241 000266 5656 JMP I P6CH /RETURN TO CALLER. 242 243 000267 0000 P7CH, .-. /SEVEN-BIT ASCII PRINT ROUTINE. 244 000270 6041 TSF /FLAG UP? 245 000271 5270 JMP .-1 /NO, WAIT FOR IT. 246 000272 6046 TLS /YES, PRINT THE CHARACTER. 247 000273 7200 CLA /CLEAN UP 248 000274 5667 JMP I P7CH /RETURN TO CALLER. 249 250 000275 0000 CRLF, .-. /, PRINTING ROUTINE. 251 000276 1367 TAD ("M&37) /GET CODE. 252 000277 4267 JMS P7CH /PRINT IT. 253 000300 1366 TAD ("J&37) /GET CODE. 254 000301 4267 JMS P7CH /PRINT IT. 255 000302 5675 JMP I CRLF /RETURN TO CALLER. 256 257 000303 0000 INNER, .-. /INNER TIMEOUT COUNTER. 258 000304 0000 MODEL, .-. /MACHINE MODEL TEMPORARY. 259 000305 0000 OUTER, .-. /OUTER TIMEOUT COUNTER. 260 000306 0000 TEMP, .-. /MULTI-PURPOSE TEMPORARY. 261 262 000307 0616 MDLPTRS,UNKNMSG-1 /0=UNKNOWN MODEL. 263 000310 0627 PDP5MSG-1 /1=PDP-5. 264 000311 0633 PDP8MSG-1 /2=PDP-8. 265 000312 0637 PDP8SMSG-1 /3=PDP-8/S. 266 000313 0644 LINC8MSG-1 /4=LINC-8. 267 000314 0651 PDP8IMSG-1 /5=PDP-8/I. 268 000315 0656 PDP8LMSG-1 /6=PDP-8/L. 269 000316 0663 PDP12MSG-1 /7=PDP-12. 270 000317 0670 KK8FMSG-1 /10=KK8F [PDP-8/E, F, M, 8A-600 SERIES]. 271 000320 0706 KK8AMSG-1 /11=KK8A [PDP-8/A 400 OR SIMILAR]. 272 000321 0713 CHP6100-1 /12=6100 CHIP [VT78 OR INTERCEPT I]. 273 000322 0730 CHP6120-1 /13=6120 CHIP [SBC6120]. 274 000323 0745 DMATMSG-1 /14=DECMATE. 275 276 000366 0012 PAGE 000367 0015 000370 0040 000371 0077 000372 7600 000373 0307 000374 0577 000375 7765 000376 0400 000377 7750 277 / CPU IDENTIFICATION ROUTINE. 278 279 / CALL WITH: 280 281 / AC, LINK UNIMPORTANT 282 283 / JMS I (MACHINE) /CALL THE ROUTINE. 284 285 / UPON EXIT, THE ACCUMULATOR WILL CONTAIN THE IDENTIFIED MODEL: 286 287 / AC CONTENTS CPU TYPE 288 289 / 0 UNKNOWN MODEL [NON-DEC] 290 / 1 PDP-5 291 / 2 ORIGINAL PDP-8 292 / 3 PDP-8/S 293 / 4 LINC-8 294 / 5 PDP-8/I 295 / 6 PDP-8/L 296 / 7 PDP-12 297 / 10 KK8F CPU [PDP-8E, F, M OR PDP-8/A 600 SERIES] 298 / 11 KK8A CPU [PDP-8/A 400 OR SIMILAR] 299 / 12 6100 CHIP [VT78 OR INTERSIL INTERCEPT I] 300 / 13 6120 CHIP [DECMATE OR SBC6120] 301 302 303 000400 0000 MACHINE,.-. /MACHINE IDENTIFYING ROUTINE. 304 000401 7300 CLA CLL /CLEAN UP. 305 000402 1000 TAD 0000 /GET LOCATION 0000 [PC ON PDP-5]. 306 000403 3266 DCA MCHTEMP /SAVE IT [WILL LATER RESTORE ON MOST MODELS]. 307 308 / FIRST TEST: PDP-5. 309 310 / ON THE PDP-5 LOCATION 0000 IN MEMORY IS USES AS THE PROGRAM COUNTER, AN INEPT 311 / ATTEMPT AT "ECONOMY" WHICH CAUSES THE MACHINE TO BE RELATIVELY SLOW DESPITE 312 / THE USE OF HIGH-SPEED CORE MEMORY [QUITE EXPENSIVE AT THE TIME] BECAUSE OF THE 313 / EXTRA CYCLES USED FOR EVERY INSTRUCTION TO MAINTAIN AND UPDATE IT. IF STORED 314 / INTO, THIS IS EQUIVALENT TO PERFORMING A "JMP" INSTRUCTION IN THE ORDINARY 315 / SENSE; THE VALUE WILL BE PRE-INCREMENTED [WHICH IS THE NORMAL OPERATION OF A 316 / PROGRAM COUNTER UNLESS THE INSTRUCTION EXECUTION ALSO SKIPPED IN WHICH CASE IT 317 / INCREMENTS AGAIN]. 318 319 000404 1377 TAD (PDP5-1) /GET PDP-5 DETECT ADDRESS [WILL BE INCREMENTED]. 320 000405 3000 DCA 0000 /STORE OVER PROGRAM COUNTER [IF PDP-5]. 321 322 / EXECUTION CONTINUES HERE FOR ALL MODELS EXCEPT THE PDP-5; ON THE PDP-5 THE 323 / NEXT INSTRUCTION IS PART OF THE ROUTINE EXIT SETTING THE VALUE FOR THE 324 / PDP-5 IN THE ACCUMULATOR. 325 326 / RESTORE THE PREVIOUS CONTENTS OF LOCATION 0000 FOR ALL OTHER MODELS. 327 328 000406 1266 TAD MCHTEMP /GET THE PREVIOUS CONTENTS OF LOCATION 0000. 329 000407 3000 DCA 0000 /RESTORE IT IN CASE THAT MATTERS. 330 / SECOND TEST: PDP-8/I, PDP-8/L, PDP-12. 331 332 / THE PDP-8/I "FAMILY" CAN PERFORM A COMBINED ROTATE OPERATION THAT CAN CLEAR 333 / BOTH THE LOW-ORDER AND HIGH-ORDER BIT IN THE SAME INSTRUCTION. THIS WAS 334 / REMOVED IN NEWER VALUES AND THE COMBINATION WAS REPURPOSED TO ALLOW OTHER 335 / OPERATIONS. NEITHER THE ORIGINAL PDP-8 NOR LINC-8 ALLOWS COMBINING INCREMENT 336 / AND ROTATE [SINGLE OR DOUBLE] IN THE SAME INSTRUCTION. NOTE: THIS COULD BE A 337 / USEFUL COMBINATION OF OPERATIONS TO LOAD THE VALUE 3776 INTO THE AC IN ONE 338 / INSTRUCTION IF IT IS CERTAIN EXECUTION IS LIMITED TO ONE OF THESE THREE 339 / MODELS; SUCH USAGE IS QUITE RARE OUTSIDE OF MODEL DETECTION ROUTINES. 340 341 000410 7354 CLA CLL CMA RAL RAR /CLEAR THE AC AND LINK, THEN COMPLEMENT THE AC, 342 /THEN SET ROTATE ONCE IN BOTH DIRECTIONS. 343 000411 1376 TAD (-3776) /COMPARE TO EXPECTED VALUE. 344 000412 7650 SNA CLA /SKIP IF NOT THESE THREE MODELS. 345 000413 5234 JMP PDP8IL /SORT OUT WHICH ONE THERE. 346 347 / THIRD TEST: PDP-8/S. 348 349 / THE PDP-8/S IS NOT A MEMBER OF "THE FAMILY OF 8" BECAUSE IT LACKS CERTAIN 350 / COMBINED OPERATE FUNCTIONS WHICH ARE SUPPORTED BY THE PDP-8 WHICH WAS RELEASED 351 / EARLIER; THIS IS TRULY A "STEP BACKWARDS" THAT IS NOT TOLERATED BY MOST PDP-8 352 / SOFTWARE INCLUDING P?S/8, THE R-L MONITOR SYSTEM, OS/8, COS-300/310, POLY 353 / BASIC [AND ALL OF ITS EDU VARIANTS], 4K/8K/LAB-8/E BASIC, ETC. THE ONLY 354 / SOFTWARE KNOWN TO RUN ON A PDP-8/S IS FOCAL, 1969 [WHICH SELF-MODIFIES TO 355 / CHANGE SOFTWARE TIMING LOOPS] AND A SPECIAL CONFIGURATION OF THE DISK MONITOR 356 / SYSTEM USING A DF32 WITH INCREASED DATA INTERLEAVING TO PREVENT DATA BREAK 357 / OVERRUN. THE LATTER POINT IS RELATED TO THE LACK OF SUFFICIENT SPEED OF 358 / OPERATION; ALL OTHER RESTRICTIONS ARE A DIRECT RESULT OF NOT SUPPORTING THE 359 / COMBINING COMPLEMENT AND ROTATE OPERATIONS. THE COMMONLY USED COMBINED 360 / OPERATE INSTRUCTION NL7776 [CLA CLL CMA RAL] IS USED TO DETECT THE PDP-8/S 361 / SINCE AT THIS POINT, IT IS THE ONLY MODEL NOT ALREADY DETECTED THAT CANNOT 362 / PERFORM THIS INSTRUCTION. [THE PDP-5 ALSO HAS SIMILAR RESTRICTIONS.] 363 364 000414 7344 CLA CLL CMA RAL /ATTEMPT TO LOAD THE AC WITH 7776. 365 000415 1375 TAD (-7776) /COMPARE TO EXPECTED VALUE. 366 000416 7640 SZA CLA /SKIP IF NOT PDP-8/S. 367 000417 5277 JMP PDP8S /EXIT SETTING AC VALUE FOR THE PDP-8/S. 368 369 / FOURTH TEST: PDP-8, LINC-8. 370 371 / AT THIS POINT, THE CPU IS EITHER THE ORIGINAL PDP-8 [ALSO USED IN THE LINC-8] 372 / OR A MODEL NEWER THAN THE PDP-12. 373 374 / ALL NEWER MODELS CAN PERFORM A BYTE-SWAP [BSW] OPERATION; TESTING FOR THIS 375 / WILL FAIL ON THE ORIGINAL MODEL[S]. 376 377 000420 7203 CLA IAC BSW /ON NEWER MODELS THIS LOADS THE AC WITH 0100. 378 000421 1374 TAD (-100) /COMPARE WITH EXPECTED VALUE. 379 000422 7650 SNA CLA /SKIP IF PDP-8 [OR LINC-8]. 380 000423 5247 JMP PDPOMNIBUS /JUMP IF NEWER MODEL. 381 / FIFTH TEST: LINC-8. 382 383 / THE LINC-8 HAS SPECIAL INTERFACE REGISTER INSTRUCTIONS USED FOR VARIOUS 384 / CONTROL FUNCTIONS OF THE LINC CPU WHEN IT IS NOT RUNNING. [WHEN THE LINC 385 / CPU IS RUNNING, NO PDP-8 INSTRUCTIONS ARE EXECUTED.] IF THESE INSTRUCTIONS 386 / ARE NOT IMPLEMENTED, THE CPU IS THE ORIGINAL PDP-8 MODEL. 387 388 000424 7240 NL7777 /SETUP NON-ZERO TEST VALUE. 389 000425 6167 IACA /LOAD THE LINC "A" REGISTER. 390 000426 7200 CLA /CLEAN UP. 391 000427 6171 IAAC /READ THE LINC "A" REGISTER. 392 000430 7001 IAC /ADD ONE TO THE RETURNED VALUE [IF LINC-8]. 393 000431 7650 SNA CLA /SKIP IF NOT LINC-8. 394 000432 5276 JMP LINC8 /RETURN TO CALLER WITH LINC-8 VALUE IN AC. 395 396 / IN FOCAL, 1969, AN ADDITIONAL TEST WAS PERFORMED TO DETERMINE IF THE AX08 397 / LABORATORY PERIPHERAL WAS INSTALLED; IF THE AX08 WAS PRESENT, THIS WAS USED TO 398 / DECLARE THE MACHINE A "LAB-8". THE LOGICAL PROBLEM WITH THIS IS TWO-FOLD: 399 / 1) NEWER LABORATORY PERIPHERALS WERE RELEASED WHICH UNDERCUTS THE NOTION 400 / ENTIRELY, 2) THE AX08 WAS OFTEN HOOKED TO OTHER MODELS SUCH AS THE PDP-8/I, 401 / YET FOCAL, 1969 COULD NEVER DETECT SUCH COMBINATIONS. SINCE THIS IS NOT A 402 / VALID CPU DETECTION CONSIDERATION, THE PRESENCE OF AN AX08 IS NOT TESTED FOR. 403 404 000433 5300 JMP PDP8 /EXIT WITH THE AC SET FOR PDP-8 DETECTED. 405 406 / COMES HERE TO DETERMINE IF THE CPU IS A PDP-8/L OR A PDP-8/I [WHICH COULD BE A 407 / PDP-12]. THIS CODE USES THE GROUP III OPERATE DETECTION METHOD WHICH ALWAYS 408 / WORKS. AS SUCH, THE TIMING PROBLEMS OF THE FOCAL, 1969 TEST ARE AVOIDED. 409 410 000434 7240 PDP8IL, NL7777 /SETUP NON-ZERO AC FOR TEST. 411 000435 7601 CLA!401 /ATTEMPT GROUP III AC CLEAR OPERATION. 412 000436 7640 SZA CLA /SKIP IF THE AC DID CLEAR. 413 000437 5274 JMP PDP8L /RETURN WITH AC SET FOR PDP-8/L DETECTION. 414 415 / THE CPU IS A PDP-8/I. CHECK TO SEE IF THE MACHINE IS A PDP-12 [ORIGINALLY 416 / KNOWN AS THE LINC-8/I]. 417 418 000440 6141 LINC /GO INTO LINC MODE WITH THE AC CLEAR. 419 000441 0017 COM /COMPLEMENT THE ACCUMULATOR. 420 000442 0002 PDP /COME BACK TO PDP-8 MODE. 421 422 / ON A PDP-8/I, THE "LINC" INSTRUCTION IS ONLY MEANINGFUL IF A DEVICE 14 423 / INTERFACE IS PRESENT. IN GENERAL, THIS IS NOT THE CASE; HOWEVER, IF A DEVICE 424 / 14 INTERFACE IS PRESENT, THE ACCUMULATOR MIGHT CHANGE AND/OR THE NEXT 425 / OPERATION MIGHT BE SKIPPED. THE "COM" AND "PDP" INSTRUCTIONS ON MACHINES 426 / OTHER THAN THE PDP-12 ARE HARMLESS "AND 0017" AND "AND 0002" INSTRUCTIONS 427 / RESPECTIVELY. AS SUCH, IT IS IMPOSSIBLE FOR THE ACCUMULATOR TO BE SET TO 7777 428 / AS LONG AS LOCATION 0002 IS NOT SET TO 7777; THE DETECTION ROUTINE SHOULD 429 / ENSURE THIS IS NOT THE CASE TO PREVENT POTENTIAL CONFUSION. 430 431 000443 7001 IAC /ADD ONE [MAKING THE AC 0000 ONLY ON A PDP-12]. 432 000444 7650 SNA CLA /SKIP IF NOT RUNNING ON A PDP-12. 433 000445 5273 JMP PDP12 /RETURN WITH AC SET FOR PDP-12 DETECTION VALUE. 434 / FOR CONSISTENCY, NO PERIPHERAL CONSIDERATIONS ARE USED TO DISTINGUISH MODELS. 435 / AS SUCH, JUST PERFORM EXIT FOR PDP-8/I. 436 437 000446 5275 JMP PDP8I /RETURN WITH AC SET TO PDP-8/I DETECTION VALUE. 438 439 / COMES HERE TO DETERMINE WHICH OMNIBUS PROCESSOR [OR NEWER] IS IN EFFECT. 440 441 / ON THE KK8F PROCESSOR [FOUND ONLY IN PDP/8E, PDP-8/F, PDP-8/M AND PDP-8/A-600 442 / SERIES SYSTEMS], A SYSTEM-UNIQUE OPERATION IS AVAILABLE: EXECUTING A 7016 443 / INSTRUCTION [WHICH IS THE SAME INSTRUCTION CODE AS ROTATE TWICE IN BOTH 444 / DIRECTIONS] WILL LOAD THE ACCUMULATOR BITS[0-4] WITH THE CURRENT PAGE OF THE 445 / INSTRUCTION; BITS[5-11] OF THE ACCUMULATOR ARE LOADED FROM THE EXECUTED 446 / INSTRUCTION. FOR EXAMPLE, IF THE INSTRUCTION IS EXECUTED ANYWHERE ON PAGE 1 447 / [0200 THROUGH 0377], THE ACCUMULATOR IS SET TO 0216. 448 449 / ON THE KK8A PROCESSOR [FOUND ONLY IN PDP-8/A-400 SERIES AND SIMILAR SYSTEMS], 450 / EXECUTION OF 7016 WILL LOAD THE ACCUMULATOR WITH THE UPDATED PROGRAM COUNTER. 451 / FOR EXAMPLE, IF THE INSTRUCTION IS EXECUTED IN LOCATION 0215, THE ACCUMULATOR 452 / IS SET TO 0216. 453 454 / PRACTICAL DEVICE HANDLERS HAVE BEEN WRITTEN FOR OMNIBUS-BASED SYSTEMS THAT 455 / EXPLOIT THIS FEATURE BY PLACING THE 7016 INSTRUCTION AT RELATIVE LOCATION 015 456 / ON THE CURRENT PAGE; THE ACCUMULATOR WILL BE CHANGED TO THE SAME VALUE 457 / REGARDLESS OF WHICH OF THE TWO POSSIBLE PROCESSORS IS PRESENT. THIS ALLOWS 458 / RELOCATABLE HANDLERS TO BE WRITTEN USING THE SHORTEST POSSIBLE CODE. 459 460 000447 7016 PDPOMNI,RTL!RTR /EXECUTE INSTRUCTION WHICH CHANGES THE 461 /ACCUMULATOR ON PDP-8/E AND PDP-8/A SYSTEMS. 462 000450 7450 UPDTPC, SNA /SKIP IF NOT A NEWER MODEL [WHICH DOES NOT 463 /CHANGE THE ACCUMULATOR]. 464 000451 5261 JMP PDPCHIP /JUMP IF NEWER CHIP-BASED PROCESSOR. 465 466 / WE NEED TO DETERMINE WHICH CPU [KK8F OR KK8A] IS IN EFFECT. 467 468 000452 1373 TAD (.&7600+16^7777) /CHECK FOR PDP-8/E VALUE. 469 000453 7450 SNA /SKIP IF NOT PDP-8/E. 470 000454 5272 JMP PDP8E /SET PDP-8/E RETURN VALUE AND EXIT. 471 472 / ON THE KK8A, THE AC SHOULD BE THE UPDATED PROGRAM COUNTER WHERE THE 7016 WAS 473 / EXECUTED. NOTE: IT IS CONCEIVABLE THIS IS A NON-DEC "HOME-BREW" CPU BASED ON 474 / OTHER HARDWARE. 475 476 000455 1372 TAD (.&7600+16-UPDTPC) /CHECK FOR PDP-8/A VALUE. 477 000456 7650 SNA CLA /SKIP IF SOME OTHER CPU. 478 000457 5271 JMP PDP8A /SET PDP-8/A RETURN VALUE AND EXIT. 479 480 / THE CPU IS NOT A KNOWN DEC MODEL. SEVERAL PEOPLE HAVE CREATED THEIR OWN CPU 481 / USING ALTERNATE TECHNOLOGY. 482 483 000460 5302 JMP CPUNKNOWN /SET RETURN VALUE FOR UNKNOWN SYSTEM AND EXIT. 484 / NOTE: BASED ON SELF-SABOTAGE CODE KNOWN TO HAVE ONCE BEEN PLACED INTO AN EARLY 485 / RELEASE OF OS/8, A HIDDEN MODEL CHECK WAS ONCE INCLUDED THAT WAS AN ATTEMPT TO 486 / MAKE OS/8 FAIL ON THE COMPETING DCC-112 MODELS FROM DIGITAL COMPUTER CONTROLS 487 / [DCC], LATER A DIVISION OF DATA GENERAL. CERTAIN OS/8 SOURCE FILES INDICATE 488 / THE [EVENTUAL] REMOVAL OF THE DCC CODE WITHIN THE PROGRAM'S EDIT HISTORY. 489 490 / MORE RECENTLY, IT HAS BEEN DISCOVERED THAT ANALOGOUS SELF-SABOTAGE CODE IS 491 / PRESENT IN SURVIVING COPIES OF FOCAL-8, A DUBIOUS REPLACEMENT FOR FOCAL, 1969. 492 / THIS VERSION WAS APPARENTLY RELEASED FOR MOSTLY NEFARIOUS PURPOSES AS FOLLOWS: 493 494 / 1) REMOVES SUPPORT FOR ALL EARLIER MODELS [INCLUDING THE PDP-5 AND PDP-8/S]. 495 / OTHER THAN REMOVING SUPPORT FOR MACHINES PRIOR TO THE PDP-8/E, IT IS NOT 496 / CLEAR IF ANYTHING OF WORTH WAS ACTUALLY ADDED [SEE BELOW]. ADDITIONALLY, 497 / A SEPARATE PACKAGE WAS CREATED TO BE PURCHASED [AT ADDITIONAL COST] 498 / CLAIMING TO RESTORE THE "FAMILY OF EIGHT" FUNCTIONALITY AS WOULD NORMALLY 499 / BE INCLUDED WITHIN FOCAL, 1969 [WITHOUT SUPPORT FOR THE PDP-5 AND PDP-8/S]. 500 / AS SUCH, IT WOULD APPEAR THE ONLY REASON TO CREATE THIS "NEW" VERSION WAS 501 / GREED AND FEAR OF COMPETITION. COPIES OF FOCAL, 1969 HAVE ALWAYS BEEN 502 / READILY AVAILABLE AS USERS OFTEN EXCHANGED FILES, ETC. THE APPARENT THEORY 503 / WOULD BE TO FIND WITHIN THE PAPER-TAPE SOFTWARE KIT [ALWAYS PROVIDED WITH 504 / EACH NEW SYSTEM PURCHASE] THE RIGGED REPLACEMENT WHICH MIGHT WIND UP ON A 505 / DCC MACHINE TO EMBARRASS DCC; THE SELF-SABOTAGE CODE WORKS TO GRADUALLY 506 / DESTROY FOCAL IN MEMORY, THUS PERHAPS APPEARING TO BE A HARDWARE FAILURE. 507 / NOTE: SEPARATELY SOLD PAPER-TAPE SOFTWARE KITS DID NOT EXIST UNTIL FOCAL-8 508 / REPLACED FOCAL, 1969 [IN 1971]. 509 510 / 2) THE SELF-SABOTAGE CODE CREATES AN OPERATE INSTRUCTION IN-LINE AND THEN 511 / EXECUTES IT VERY MUCH LIKE ANALOGOUS CODE IN THIS PROGRAM AND [WITHIN THE 512 / ONCE-ONLY INITIALIZATION CODE WITHIN FOCAL, 1969 THAT WAS REMOVED]. IF 513 / EXPECTED ACCUMULATOR/LINK RESULTS MATCH, IMPORTANT INTERNAL POINTERS WITHIN 514 / FOCAL ARE SET TO 0000 MAKING EVERY ASPECT OF FOCAL SUBJECT TO DESTRUCTION, 515 / INCLUDING THE INTERPRETED SOURCE CODE. 516 517 / 3) THE CODE MENTIONED IN 2) ABOVE IS CLEVERLY HIDDEN USING XLIST DIRECTIVE 518 / STATEMENTS SO AS TO APPEAR TO NOT BE PRESENT [TO ALL BUT THE BEST PDP-8 519 / PROGRAMMERS]. THE ACTUAL SOURCE FILES WERE NEVER RELEASED, BUT A POORLY 520 / PRINTED LISTING FILE WAS SOMETIMES PROVIDED. [NOTE: GENERALLY, THE QUALITY 521 / OF ALL SUCH LISTINGS WAS ALWAYS POOR.] 522 523 / 4) TAKING ADVANTAGE OF THE INHERENTLY POOR DESIGN OF OS/8 CREF, THERE IS NO 524 / INDICATION OF "FOUL PLAY" IN THE LISTING FILE; THIS IS BECAUSE CREF IS NOT 525 / REALLY A TRUE PAL ASSEMBLER CROSS-REFERENCE PROGRAM. RATHER, CREF IS A 526 / SCANNER OF LISTING FILES OUTPUT FROM PAL8 [AND OTHER PROGRAMS] THAT TAKES 527 / EDUCATED GUESSES AS TO WHAT TO INCLUDE IN THE EVENTUAL CROSS-REFERENCE 528 / OUTPUT; IT IS EASILY FOOLED IN SEVERAL DIFFERENT WAYS AND IS THUS IDEAL TO 529 / BE USED TO OBFUSCATE THE CODE FURTHER. 530 531 / IF THE SOURCE CODE IS ASSEMBLED BY EITHER P?S/8 PAL OR TOPS-10 PAL10, THE 532 / TRUTH IS REVEALED BECAUSE THE LISTING INCLUDES ASSEMBLER STATEMENT NUMBERS 533 / INSTEAD OF LINEAR SEQUENCE NUMBERS. NOTE: PREFERRED PROGRAMMING TECHNIQUES 534 / CAN CAUSE OS/8 CREF TO ERRONEOUSLY CROSS-REFERENCE COMMENTS! 535 / 5) THE BINARY OUTPUT OF FOCAL-8 CAN BE PASSED THROUGH P?S/8 MAP OR OS/8 BITMAP 536 / TO REVEAL THE TELL-TALE DOUBLE LOADING OF THE AFFECTED AREA. THE PRIMARY 537 / WORDS ASSEMBLED ARE PLAUSIBLE SHAM STATEMENTS THAT MOST PROGRAMMERS WOULD 538 / IGNORE AS THEY DO NOT AFFECT THE PROGRAM FLOW, ETC. [NOTE: A DUMMY 539 / VARIABLE IS REFERENCED THAT IS NOT USED OUTSIDE OF THE ONCE-ONLY CODE THAT 540 / IS AFFECTED; WHEN THE TRUE CODE IS REVEALED, THERE ARE NO REFERENCES TO 541 / THIS LOCATION.] HOWEVER. THE SECONDARY LOADING IS THE SELF-SABOTEGE CODE. 542 543 / 6) P?S/8 SLURP BINARY FORMAT QUICKLY REVEALS THE DOUBLE ASSEMBLY AND COMMON 544 / UTILITIES CAN BE USED TO EASILY REMOVE THE SHAM PRIMARY CODE. THE 545 / RESULTING BINARY CODE CAN BE PROPERLY DISASSEMBLED TO REVEAL THE TRUE 546 / NATURE OF THE CODE TREACHERY. 547 548 / THIS ANALYSIS WAS PERFORMED MANY YEARS AGO, AND AS OF THIS WRITING HAS NOT 549 / BEEN RECOVERED; AS SUCH, IT MAY BE NECESSARY TO REDERIVE THE TREACHERY. 550 / WHEN THE PROPER SOURCE CODE IS MADE AVAILABLE [AGAIN], THIS PROGRAM [AND 551 / KERMIT-12] WILL BE UPDATED TO ALLOW SUPPORT FOR THE DCC-112 SERIES 552 / MACHINES. 553 554 / NOTE: ONE SMALL FEATURE OF FOCAL-8 HAS BEEN DISCOVERED THAT IS OF WORTH! 555 556 / IT IS SURMISED THAT SUBSEQUENT WORK ON FOCAL, 1969 WAS PERFORMED [BUT NEVER 557 / RELEASED]. IT CONSISTS OF A MINOR FIX TO A QUIRK OF THE "FOR" COMMAND THAT 558 / WAS ACCOMPLISHED BY ADDING ONE INSTRUCTION TO THE CODE. 559 560 / AN IMPORTANT REASON TO NOT RELEASE THIS UPDATE IS THAT IT WAS VERY IMPORTANT 561 / TO MAINTAIN FULL BINARY COMPATIBILITY WITH USER-CREATED ADD-ONS, MOST OF WHICH 562 / ARE DOCUMENTED IN DECUS FOCAL-17, A DOCUMENT WIDELY AVAILABLE TODAY. P?S/8 563 / FOCAL IS FULLY COMPLIANT WITH THIS AS WELL; HOWEVER, FOCAL-8 IS NOT! 564 565 / FOCAL-12 FOR DIAL WAS CREATED SOME TIME BEFORE FOCAL-8 AND INCLUDES THIS FIX, 566 / PRESUMABLY ALSO DERIVED FROM THE POST-RELEASE FILES BEYOND FOCAL, 1969. [IN 567 / THE CASE OF FOCAL-12 FOR ONLY THE PDP-12, THERE IS NO NEED TO BE BINARY 568 / COMPATIBLE WITH FOCAL, 1969 AS NO SUCH COMPATIBILITY CLAIMS ARE MADE TO THAT 569 / EFFECT WITHIN LAP6-DIAL/DIAL-MS. 570 571 / IT IS NOT POSSIBLE TO APPLY TO PATCH TO FOCAL, 1969 TO MAINTAIN BINARY 572 / COMPATIBILITY AND ALSO RUN ON THE PDP-5 AND/OR THE PDP-8/S. SINCE P?S/8 DOES 573 / NOT RUN ON THESE MODELS, IT IS ACCEPTABLE TO PATCH THE EQUIVALENT CODE INTO 574 / FOCAL, 1969 IF THE INTENDED TARGET IS FOR FAMILY OF 8 MACHINES ONLY. AS SUCH, 575 / P?S/8 FOCAL MODIFIES SEVERAL SMALL ROUTINES ON THE SAME PAGE AS THE AFFECTED 576 / "FOR" CODE; THE RELEASED P?S/8 FOCAL RUNS ON ALL FAMILY OF 8 MACHINES WITH THE 577 / PROBLEM REMEDIED WHILE MAINTAINING BINARY COMPATIBILITY. 578 579 / THUS, THE P?S/8 VARIANT OF FOCAL, 1969 WITH THE P?S/8 PATCHES APPLIES CAN BE 580 / USED ON ALL FAMILY OF 8 MACHINES; FOCAL-8 IS NOT BINARY-COMPATIBLE, BUT IT DID 581 / PROVIDE A FEEBLE IMPLEMENTATION OF THE FIX THAT WAS USED SOLELY FOR ULTIMATE 582 / INSPIRATION FOR THE P?S/8 RELEASE. 583 / COMES HERE TO DETERMINE WHICH OF THE PREVAILING PDP-8 CHIP-BASED PROCESSORS IS 584 / IN EFFECT. THE IM/HM6100 CHIP IS ESSENTIALLY FULLY COMPATIBLE WITH THE KK8E 585 / AND KK8A PROCESSORS [WITHOUT THE IMPLEMENTATION OF THE 7016 OPERATION OF 586 / THE OTHER TWO PROCESSORS]. 587 588 / IF FURTHER TESTING WERE TO BECOME NECESSARY, THERE IS AN ADDITIONAL 589 / COMPATIBILITY QUIRK THAT CAN BE EXPLOITED: FOR ALL OTHER 12-BIT MODELS, WHEN 590 / AN INSTRUCTION IS SETUP TO USE AN AUTO-INDEX REGISTER LOCATION, THE OPERATION 591 / ALWAYS OCCURS AS EXPECTED. THIS IS TRUE EVEN IF THE INSTRUCTION IS EXECUTED 592 / ON PAGE ZERO. ADDITIONALLY, IF THE INSTRUCTION IS MODIFIED TO SET THE CURRENT 593 / PAGE BIT, THE AUTO-INDEXING OPERATION STILL OCCURS BECAUSE THE EFFECTIVE 594 / POINTER ADDRESS IS IN THE RANGE OF 0010 THROUGH 0017. HOWEVER, ON THE 595 / IM/HM6100 CHIP, THE AUTO-INDEXING DOES NOT OCCUR IF THE CURRENT PAGE BIT IS 596 / SET WHEN THE INSTRUCTION IS EXECUTED ON PAGE ZERO. SINCE. AS A PRACTICAL 597 / MATTER, THIS PARTICULAR PROGRAMMING METHOD IS NEVER USED, THIS QUIRK IS 598 / GENERALLY UNIMPORTANT. ADDITIONALLY, SUCH AN INSTRUCTION CANNOT BE DIRECTLY 599 / CREATED BY ANY OF THE PREVAILING ASSEMBLERS, ALL OF WHICH WILL FORCE THE 600 / CURRENT PAGE BIT OFF USING CONVENTIONAL PROGRAMMING TECHNIQUES. THE PROBLEM 601 / WAS DISCOVERED BY EXECUTING CERTAIN PDP-8/E-ORIENTED DIAGNOSTIC PROGRAMS THAT 602 / ACTUALLY CHECK FOR THIS SET OF CIRCUMSTANCES. THE INCOMPATIBILITY HAS BEEN 603 / NOTED ADVISING TO AVOID RUNNING THESE DIAGNOSTIC PROGRAMS ON AFFECTED SYSTEMS 604 / SUCH AS THE VT78 AND THE INTERSIL INTERCEPT I. 605 606 / THE QUIRK OF THE IM/HM6100 CHIP WAS CORRECTED IN THE HM6120 CHIP, WHICH WOULD 607 / MAKE CPU DETECTION SLIGHTLY MORE DIFFICULT; HOWEVER, THE HM6120 ADDS A NEW 608 / UNIQUE FEATURE: A NEW GROUP I OPERATE WAS ADDED TO ROTATE THE ACCUMULATOR 609 / 3 BITS TO THE LEFT [CIRCULARLY EXCLUDING THE LINK]. THIS FEATURE WILL BE USED 610 / TO DIFFERENTIATE BETWEEN THE TWO CHIP-BASED IMPLEMENTATIONS. 611 612 000461 7215 PDPCHIP,CLA IAC RAL!RAR /THIS WILL LOAD THE AC WITH 0010 ON THE HM6120. 613 000462 1371 TAD (-10) /COMPARE TO EXPECTED VALUE FOR HM6120. 614 000463 7650 SNA CLA /SKIP IF NOT A MATCH. 615 000464 5267 JMP CP6120 /SET 6120 RETURN VALUE AND EXIT. 616 617 / SINCE THERE ARE APPARENTLY NO OTHER MODELS TO CHECK FOR, THE EXPANDED TEST FOR 618 / THE QUIRKS OF THE IM/HM6100 WILL NOT BE REQUIRED. 619 620 000465 5270 JMP CP6100 /SET 6100 RETURN VALUE AND EXIT. 621 622 000466 0000 MCHTEMP,.-. /LOCATION 0000 SAVED HERE DURING PDP-5 TEST. 623 / RETURN GAUNTLET. 624 625 / THE SUBROUTINE EXITS WITH THE ACCUMULATOR SET TO THE VALUE CORRESPONDING TO 626 / THE CPU MODEL DETECTED. 627 628 000467 7001 CP6120, IAC /SET 6120 VALUE. 629 000470 7001 CP6100, IAC /SET 6100 VALUE. 630 000471 7001 PDP8A, IAC /SET PDP-8/A VALUE. 631 000472 7001 PDP8E, IAC /SET PDP-8/E VALUE. 632 000473 7001 PDP12, IAC /SET PDP-12 VALUE. 633 000474 7001 PDP8L, IAC /SET PDP-8/L VALUE. 634 000475 7001 PDP8I, IAC /SET PDP-8/I VALUE. 635 000476 7001 LINC8, IAC /SET LINC-8 VALUE. 636 000477 7001 PDP8S, IAC /SET PDP-8/S VALUE. 637 000500 7001 PDP8, IAC /SET PDP-8 VALUE. 638 000501 7001 PDP5, IAC /SET PDP-5 VALUE. 639 000502 5600 CPUNKNO,JMP I MACHINE /RETURN TO CALLER; AC IS CLEAR 640 /FOR UNKNOWN MODEL TYPE. 641 642 000571 7770 PAGE 000572 7746 000573 7362 000574 7700 000575 0002 000576 4002 000577 0500 643 000600 2410 OPNMSG, TEXT "THIS PROGRAM IS RUNNING ON A" 000601 1123 000602 4020 000603 2217 000604 0722 000605 0115 000606 4011 000607 2340 000610 2225 000611 1616 000612 1116 000613 0740 000614 1716 000615 4001 000616 0000 644 645 / MODEL-SPECIFIC TEXT STRINGS. 646 647 000617 1640 UNKNMSG,TEXT "N UNKNOWN MODEL." 000620 2516 000621 1316 000622 1727 000623 1640 000624 1517 000625 0405 000626 1456 000627 0000 648 000630 4020 PDP5MSG,TEXT " PDP-5." 000631 0420 000632 5565 000633 5600 649 000634 4020 PDP8MSG,TEXT " PDP-8." 000635 0420 000636 5570 000637 5600 650 000640 4020 PDP8SMS,TEXT " PDP-8/S." 000641 0420 000642 5570 000643 5723 000644 5600 651 000645 4014 LINC8MS,TEXT " LINC-8." 000646 1116 000647 0355 000650 7056 000651 0000 652 000652 4020 PDP8IMS,TEXT " PDP-8/I." 000653 0420 000654 5570 000655 5711 000656 5600 653 000657 4020 PDP8LMS,TEXT " PDP-8/L." 000660 0420 000661 5570 000662 5714 000663 5600 654 000664 4020 PDP12MS,TEXT " PDP-12." 000665 0420 000666 5561 000667 6256 000670 0000 655 000671 4020 KK8FMSG,TEXT " PDP-8/E OR SIMILAR MODEL." 000672 0420 000673 5570 000674 5705 000675 4017 000676 2240 000677 2311 000700 1511 000701 1401 000702 2240 000703 1517 000704 0405 000705 1456 000706 0000 656 000707 4020 KK8AMSG,TEXT " PDP-8/A." 000710 0420 000711 5570 000712 5701 000713 5600 657 000714 4066 CHP6100,TEXT " 6100 CHIP-BASED MACHINE." 000715 6160 000716 6040 000717 0310 000720 1120 000721 5502 000722 0123 000723 0504 000724 4015 000725 0103 000726 1011 000727 1605 000730 5600 658 000731 4066 CHP6120,TEXT " 6120 CHIP-BASED MACHINE." 000732 6162 000733 6040 000734 0310 000735 1120 000736 5502 000737 0123 000740 0504 000741 4015 000742 0103 000743 1011 000744 1605 000745 5600 659 000746 4004 DMATMSG,TEXT " DECMATE." 000747 0503 000750 1501 000751 2405 000752 5600 660 $ /THAT'S ALL FOLK!