/ CPU IDENTIFICATION PROGRAM. / LAST EDIT: 15-JUN-2016 CJL / MUST BE ASSEMBLED WITH THE '/J' COMMAND-LINE SWITCH OFF IN P?S/8 PAL OR THE / '/F' COMMAND-LINE SWITCH OFF IN OS/8 PAL8 TO ENSURE PROPER STRING FORMAT. / THIS PROGRAM IDENTIFIES THE PARTICULAR MODEL OF PDP-8 THE PROGRAM IS RUNNING / ON. THIS IS ACCOMPLISHED USING A SERIES OF TESTS FOR QUIRKS THAT APPLY TO THE / VARIOUS MODELS. / MUCH OF THE CODE IN THIS PROGRAM WAS OBTAINED FROM THE KERMIT-12 SOURCE FILES / USED FOR SIMILAR PURPOSES; SOME MODIFICATIONS HAVE BEEN MADE THAT WILL / EVENTUALLY BE APPLIED TO KERMIT-12 TO BETTER IDENTIFY THE COMPUTER MODEL. / NOTE: KERMIT-12 USES A MODEL-DEPENDENT COMMAND PROMPT TO HELP ASSIST IN / DETERMINING WHICH KERMIT IS CURRENTLY BEING ADDRESSED; IN SOME CIRCUMSTANCES, / TWO DIFFERENT SYSTEMS ARE IN USE SIMULTANOUSLY. IT CAN SOMETIMES BE CONFUSING / WHICH COMPUTER IS CURRENTLY IN EFFECT,; AS SUCH, USING MODEL-SPECIFIC PROMPTS / CAN AID IN PREVENTING CONFUSION. AS CURRENTLY IMPLEMENTED AS OF THIS WRITING, / KERMIT-12 CANNOT DISTINGUISH BETWEEN DECMATE SYSTEMS AND OTHER SYSTEMS BASED / ON THE 6120 CHIP SUCH AS THE SB6120 FROM SPARE-TIME GIZMOS. WHILE THIS ASPECT / OF THE PROBLEM IS PURELY COSMETIC, KERMIT-12 HAS CONFIGURATION ISSUES WHEN RUN / ON THESE PARTICULAR SYSTEMS. AS SUCH, FUTURE RELEASES OF KERMIT-12 WILL NOT / ONLY MODIFY THE COMMAND PROMPT, BUT THE INTERNAL LOGIC WILL PROPERLY / SELF-CONFIGURE USING ANALOGOUS CODING TO THAT WITHIN THIS CPU IDENTIFICATION / PROGRAM PREVENTING THE NEED FOR PROGRAM PATCHING, ETC. / AN OLDER PROGRAM SEGMENT ATTEMPTING CPU IDENTIFICATION IS CONTAINED WITHIN THE / ORIGINAL RELEASE OF FOCAL, 1969; HOWEVER, THAT [OPTIONAL OVERLAY] HAS SEVERAL / KNOWN PROBLEMS: / 1) NEWER MODELS [INCLUDING DECMATES] COULD NOT BE FORESEEN; AS SUCH, THESE / SYSTEMS ARE MISIDENTIFIED. / 2) THE CODING USED TO IDENTIFY THE PDP-8/I AND PDP-8/L IS FLAWED; CERTAIN / CONFIGURATIONS OF PDP-8/I WILL BE MISIDENTIFIED AS PDP-8/L BECAUSE THE / METHOD CHOSEN IS TO USE SOFTWARE TIMING BASED ON THE CONSOLE OUTPUT / AS A PRIMITIVE CLOCK. THERE ARE MULTIPLE REASONS WHY THIS METHOD CANNOT / BE TRUSTED RANGING FROM MEMORY TIMING PROBLEMS OF THE CPU TO CONSOLE DEVICE / UPGRADES THAT RUN FASTER THAN THE TELETYPE MODELS 33 OR 35. THE PROGRAM'S / DEPENDENCE ON NOMINAL TIMING VALUES THAT MIGHT NOT APPLY WOULD TEND TO / INCREASE THE NUMBER OF MACHINES MISIDENTIFIED EVEN DURING THE ECONOMIC / LIFETIME OF THE PDP-8/I [AND BEYOND]. / THE PROGRAM IMPLEMENTED HERE USES AN ALTERNATE METHOD THAT ALWAYS WORKS. THE / PDP-8/L INHIBITS ALL TYPE III OPERATE INSTRUCTIONS WHILE THE PDP-8/I ALWAYS / ALLOWS CERTAIN INSTRUCTIONS WITHIN THIS OPERATE GROUP, EVEN IF EAE IS NOT / PRESENT. THE ACCUMULATOR CAN BE CLEARED USING THE AC CLEAR OPERATION IN GROUP / III ON THE PDP-8/I; THE ACCUMULATOR WILL NOT CLEAR ON THE PDP-8/L. / LINC-8 INSTRUCTION DEFINITIONS. IAAC= 6171 /LOAD LINC "A" REGISTER INTO ACCUMULATOR. IACA= 6167 /LOAD ACCUMULATOR INTO LINC "A" REGISTER. / PDP-12 INSTRUCTION DEFINITIONS. COM= 0017 /COMPLEMENT ACCUMULATOR [IN LINC MODE]. LINC= 6141 /SWITCH FROM PDP-8 MODE TO LINC MODE ON PDP-12. PDP= 0002 /SWITCH FROM LINC MODE TO PDP-8 MODE ON PDP-12. / NUMERIC LOAD DEFINITIONS. [NOTE: ONLY USE "FAMILY OF 8" DEFINITIONS /UNIVERSAL TO ALL MODELS!] NL7777= CLA CMA /LOAD ACCUMULATOR WITH 7777. / PROGRAM DEFINITIONS. SBOOT= 7600 /EXIT LOCATION FOR MOST OPERATING SYSTEMS. FIELD 0 /PROGRAM SHOULD BE LOADED INTO FIELD 0. *PDP /OVER POTENTIALLY RELEVANT MEMORY LOCATION. 0 /THIS IS NEEDED FOR CERTAIN PDP-8/I SYSTEMS. ZBLOCK 10-. /EMPTY SPACE [AVAILABLE]. *10 /GET TO AUTO-INDEX AREA. XR0, .-. /AUTO-INDEX REGISTER 0. / THE PROGRAM STARTS HERE. *200 /THE USUAL STARTING LOCATION. START, CLA CLL /CLEAN UP. / FOR MOST PROGRAMS, THE STATE OF THE CONSOLE OUTPUT FLAG CAN BE ASSUMED WHERE / THE WORST CASE PROBLEM IS TO "SPLAT" THE PREVIOUS CHARACTER IN THE PROCESS OF / BEING PRINTED; THE OUTPUT FLAG WILL RAISE REGARDLESS OF THIS POTENTIAL / COSMETIC PROBLEM. HOWEVER, PART OF THE LOGIC OF THIS PROGRAM INCLUDES THE / ABILITY TO PROPERLY IDENTIFY DECMATE SYSTEMS [AS OPPOSED TO OTHER SYSTEMS ALSO / BASED ON THE 6120 CHIP]; AS SUCH, WE HAVE TO HANDLE ALL POTENTIAL SITUATIONS. / 1) THE PROGRAM IS RUNNING STANDALONE AND WAS STARTED FROM THE FRONT PANEL. IN / THIS SITUATION, THE CONSOLE OUTPUT FLAG IS NOT SET NOR WILL IT COME UP IN A / REASONABLE AMOUNT OF TIME; ONCE A REASONABLE TIMEOUT HAS OCCURRED, THE / PROGRAM SHOULD OUTPUT AN OPENING CHARACTER. FOR THIS PURPOSE, THE / CHARACTER IS PREFERRED SINCE ON MOST SYSTEMS IT HAS NO SIGNIFICANCE OTHER / THAN A ONE-CHARACTER DELAY; ON TELETYPE MODEL 33 AND 35 BASED SYSTEMS, THE / OUTPUT WILL CAUSE AN ASSOCIATED SOUND; HOWEVER, THE CARRIAGE WILL NOT BE / ADVANCED THUS THIS METHOD IS GENERALLY INNOCUOUS. / 2) THE PROGRAM COULD BE RUNNING FROM AN OPERATING SYSTEM SUCH AS OS/8 WHERE / THERE IS NO ABSOLUTE RULE REGARDING THE CONSOLE FLAG CONVENTION. BY AN / INACCURATE CONSENSUS, MANY PROGRAMS MERELY ASSUME THERE IS NO CONSOLE / OUTPUT IN PROGRESS; CHARACTERS ARE OUTPUT AND THEN THE FLAG IS WAITED FOR. / WHILE THIS MIGHT WORK MOST OF THE TIME, IT IS NOT FOOLPROOF AND ALSO USES / THE INEFFICIENT METHOD THAT DOES NOT OVERLAP PROCESSING WITH CONSOLE / OUTPUT. AS SUCH, THIS CASE SHOULD BE HANDLED MUCH LIKE 1) ABOVE WITH THE / PROVISO THAT PROPER TESTING AFTER THE TIMEOUT MUST BE PERFORMED. / 3) THE PROGRAM MAY BE RUNNING UNDER P?S/8 WITHOUT THE LOGICAL CONSOLE OVERLAY / ENABLED. IN THIS CASE, THE PROGRAM HAS A RIGHT TO ASSUME A CHARACTER IS / EITHER IN THE PROCESS OF PRINTING OR THE DONE FLAG HAS ALREADY RAISED. IF / THIS MODE OF OPERATION WERE GUARANTEED TO APPLY, THE PROGRAM COULD BE / WRITTEN TO THE ORIGINAL P?S/8 SPECIFICATION WHERE OVERLAPPING PROCESSING / AND CONSOLE OUTPUT CAN BE DONE WITH IMPUNITY WITHOUT ANY INITIAL OUTPUT / CONSIDERATION. UNFORTUNATELY, P?S/8 NOW SUPPORTS THE LOGICAL CONSOLE / OVERLAY WHICH CHANGES THIS CONVENTION SIGNIFICANTLY. [SEE 4) BELOW.] / 4) THE PROGRAM MAY BE RUNNING UNDER P?S/8 WITH THE LOGICAL CONSOLE OVERLAY / ENABLED. OUTPUT DIRECTED TO THE LOGICAL CONSOLE DEVICE REQUIRES THE / PROGRAM TO AVOID PHYSICAL CONSOLE OUTPUT AND INSTEAD DIRECT ALL OUTPUT / TO PARTICULAR LOGICAL SUBROUTINE CALLS IN EXTENDED MEMORY AS DETERMINED BY / PARAMETERS LOCATED IN THE RESIDENT P?S/8 KERNEL. AS SUCH, ALL SUCH USE OF / THE CONSOLE DEVICE IS DONE WITH THE PROVISO THAT THE PHYSICAL CONSOLE / DEVICE MAY BE UNDER THE CONTROL OF THE LOGICAL CONSOLE OVERLAY WHICH MAY OR / MAY NOT BE REDIRECTING BACK TO THE DEVICE 03/04 NORMAL PHYSICAL CONSOLE. / HOWEVER, THE LOGIC OF THIS PROGRAM REQUIRES PHYSICAL ACCESS TO THE CONSOLE / DEVICE; AS SUCH, IT IS RECOMMENDED THE PROGRAM EXIT [VIA BRANCH TO 07600]. / THIS WILL ALLOW THE ENABLED LOGICAL CONSOLE OVERLAY TO RESET PROPERLY. THE / PROGRAM WILL BE RUN USING A PROPER TIMEOUT SUCH AS IS DESCRIBED IN 1) ABOVE / TO ENSURE THE CONSOLE OUTPUT IS NOT GARBLED. NOTE: A MORE COMPLEX PROGRAM / COULD BE CONSTRUCTED TO BE FULLY CONFORMING TO P?S/8 STANDARDS FOR THE / CONSOLE DEVICE, BUT THIS IS BEYOND THE SCOPE OF THIS PROGRAM AS WRITTEN. / THE BEST WAY TO HANDLE ALL OF THE ABOVE CONSIDERATIONS CONSISTS OF THE / FOLLOWING: / 1) PERFORM A REASONABLE TIMEOUT THAT INCLUDES CHECKING THE CONSOLE OUTPUT FLAG / DURING THE TIMEOUT LOOP. / 2) IF THE FLAG RAISES THUS ENDING THE TIMEOUT INTERVAL, FURTHER OUTPUT CAN BE / PERFORMED WITH IMPUNITY. SINCE DECMATE DETECTION HASN'T BEEN PERFORMED / YET, OUTPUT A CHARACTER WITHOUT WAITING FOR THE DONE FLAG. / 3) IF THE FLAG DID NOT RAISE DURING THE TIMEOUT INTERVAL, THE OUTPUT MUST BE / INITIALIZED WITH THE CHARACTER OUTPUT AFTERWARDS. ALL PRINTING IN / THE REST OF THE PROGRAM CAN USE THE METHOD OF OVERLAPPING PROCESSING AND / OUTPUT WAIT FOR MAXIMUM EFFICIENCY WITHOUT REGARD FOR WHETHER 3) OR 2) / ABOVE APPLIES. / 4) IF IT IS DETERMINED THE CPU IS THE 6120 CHIP, A NORMAL WAIT FOR THE CONSOLE / OUTPUT DONE FLAG WILL BE PERFORMED. ONCE THE OUTPUT FLAG SKIPS, THE / "TSF" INSTRUCTION WILL BE PERFORMED AGAIN. IF THE INSTRUCTION CAUSES A / SKIP, THE MACHINE IS NOT A DECMATE. DETECTION OF A DECMATE WILL CHANGE THE / EVENTUAL DETECTION DISPLAY CONTENTS; ANOTHER CHARACTER WILL BE OUTPUT / TO SETUP THE PROPER OVERLAP USED IN ALL MESSAGE PRINTING ROUTINES. / SETUP THE OUTER TIMEOUT LOOP COUNTER. THIS CAN BE ADJUSTED FOR UNUSUAL / SITUATIONS SUCH AS "HOME-BREW" MACHINES THAT ARE VERY FAST COMPARED TO / STANDARD MODELS YET HAVE LOW BAUD RATE SERIAL CONSOLE INTERFACES. TAD (-30) /SETUP A REASONABLE DCA OUTER /WAIT TIME. WATLUP, TSF /DID THE OUTPUT FLAG COME UP? SKP /SKIP IF NOT. JMP FLAGUP /JUMP IF IT DID COME UP. ISZ INNER /WAIT FOR A JMP .-1 /BIT OF TIME. ISZ OUTER /WAITED LONG ENOUGH? JMP WATLUP /NO, KEEP GOING. / COMES HERE BECAUSE THE FLAG DID COME UP OR WE WAITED LONG ENOUGH AND THE FLAG / NEVER RAISED. WE CAN OUTPUT A CHARACTER TO INITIALIZE ALL FURTHER / PRINTING OPERATIONS. FLAGUP, TLS /OUTPUT A CHARACTER NOW. / NOW FIND OUT WHAT KIND OF MACHINE THIS IS. JMS I (MACHINE) /CALL IDENTIFICATION ROUTINE. DCA MODEL /STORE IT. TAD MODEL /GET IT BACK. TAD (-13) /COMPARE TO 6120 VALUE. SZA CLA /SKIP IF IT MATCHES. JMP PRCPU /JUMP IF ANY OTHER MODEL. / THE CPU IS A 6120; IS THIS A DECMATE? TSF /OUTPUT FLAG UP? JMP .-1 /NOT YET, WAIT FOR IT. / IF THIS IS A DECMATE, THE FLAG WAS CLEARED BY THE "TSF" INSTRUCTION. TSF /FLAG STILL UP? SKP /SKIP IF NOT. JMP PRCPU /NOT A DECMATE; JUST HANDLE NORMALLY. / THIS MACHINE IS A DECMATE; INDICATE THIS FOR THE OUTPUT DISPLAY AND OUTPUT AN / ADDITIONAL CHARACTER RIGHT NOW SO FURTHER PRINTING WILL FUNCTION. ISZ MODEL /SET MODEL TO 14: 6120 ON DECMATE. TLS /OUTPUT ANOTHER CHARACTER. / COMES HERE WITH THE OUTPUT FLAG IN PROGRESS FOR PRINTING THE NOW FULLY / DETERMINED MACHINE MODEL TYPE. PRCPU, JMS CRLF /PRINT / FIRST. TAD (OPNMSG-1) /GET POINTER TO THE OPENING MESSAGE. JMS PSTRING /PRINT IT. TAD (MDLPTRS) /GET TABLE OF MODELS POINTER. TAD MODEL /INDEX TO THE RELEVANT ONE. DCA TEMP /STASH THE POINTER. TAD I TEMP /GET THE PROPER STRING MESSAGE POINTER JMS PSTRING /PRINT THE MODEL-SPECIFIC STRING. JMS CRLF /PRINT / BEFORE EXIT. JMP I (7600) /EXIT TO O/S. HLT [7402] IF STANDALONE. / STRING PRINTING ROUTINE. / CALL WITH THE ACCUMULATOR POINTING TO THE TEXT STRING [-1]. PSTRING,.-. /STRING PRINT ROUTINE. DCA XR0 /STASH THE POINTER. PLOOP, TAD I XR0 /GET A PAIR OF CHARACTERS TO PRINT. DCA TEMP /SAVE THEM. TAD TEMP /GET THEM BACK. RTR;RTR;RTR /MOVE HIGH-ORDER TO LOW-ORDER AC BITS. JMS P6CH /PRINT ORIGINAL HIGH-ORDER. TAD TEMP /GET THEM BACK AGAIN. JMS P6CH /PRINT THE LOW-ORDER NOW. JMP PLOOP /GO DO NEXT PAIR. P6CH, .-. /PRINT A SIXBIT TEXT CHARACTER ROUTINE. AND (77) /JUST THE LATEST CHARACTER BITS. SNA /SKIP IF NOT AT END OF MESSAGE. JMP I PSTRING /RETURN TO ORIGINAL CALLER. TAD (40) /INVERT QUADRANT FOR ASCII CONVERSION. AND (77) /JUST CHARACTER BITS. TAD (40) /NOW CONVERTED BACK TO ASCII. JMS P7CH /PRINT IT. JMP I P6CH /RETURN TO CALLER. P7CH, .-. /SEVEN-BIT ASCII PRINT ROUTINE. TSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT. TLS /YES, PRINT THE CHARACTER. CLA /CLEAN UP JMP I P7CH /RETURN TO CALLER. CRLF, .-. /, PRINTING ROUTINE. TAD ("M&37) /GET CODE. JMS P7CH /PRINT IT. TAD ("J&37) /GET CODE. JMS P7CH /PRINT IT. JMP I CRLF /RETURN TO CALLER. INNER, .-. /INNER TIMEOUT COUNTER. MODEL, .-. /MACHINE MODEL TEMPORARY. OUTER, .-. /OUTER TIMEOUT COUNTER. TEMP, .-. /MULTI-PURPOSE TEMPORARY. MDLPTRS,UNKNMSG-1 /0=UNKNOWN MODEL. PDP5MSG-1 /1=PDP-5. PDP8MSG-1 /2=PDP-8. PDP8SMSG-1 /3=PDP-8/S. LINC8MSG-1 /4=LINC-8. PDP8IMSG-1 /5=PDP-8/I. PDP8LMSG-1 /6=PDP-8/L. PDP12MSG-1 /7=PDP-12. KK8FMSG-1 /10=KK8F [PDP-8/E, F, M, 8A-600 SERIES]. KK8AMSG-1 /11=KK8A [PDP-8/A 400 OR SIMILAR]. CHP6100-1 /12=6100 CHIP [VT78 OR INTERCEPT I]. CHP6120-1 /13=6120 CHIP [SBC6120]. DMATMSG-1 /14=DECMATE. PAGE / CPU IDENTIFICATION ROUTINE. / CALL WITH: / AC, LINK UNIMPORTANT / JMS I (MACHINE) /CALL THE ROUTINE. / UPON EXIT, THE ACCUMULATOR WILL CONTAIN THE IDENTIFIED MODEL: / AC CONTENTS CPU TYPE / 0 UNKNOWN MODEL [NON-DEC] / 1 PDP-5 / 2 ORIGINAL PDP-8 / 3 PDP-8/S / 4 LINC-8 / 5 PDP-8/I / 6 PDP-8/L / 7 PDP-12 / 10 KK8F CPU [PDP-8E, F, M OR PDP-8/A 600 SERIES] / 11 KK8A CPU [PDP-8/A 400 OR SIMILAR] / 12 6100 CHIP [VT78 OR INTERSIL INTERCEPT I] / 13 6120 CHIP [DECMATE OR SBC6120] MACHINE,.-. /MACHINE IDENTIFYING ROUTINE. CLA CLL /CLEAN UP. TAD 0000 /GET LOCATION 0000 [PC ON PDP-5]. DCA MCHTEMP /SAVE IT [WILL LATER RESTORE ON MOST MODELS]. / FIRST TEST: PDP-5. / ON THE PDP-5 LOCATION 0000 IN MEMORY IS USES AS THE PROGRAM COUNTER, AN INEPT / ATTEMPT AT "ECONOMY" WHICH CAUSES THE MACHINE TO BE RELATIVELY SLOW DESPITE / THE USE OF HIGH-SPEED CORE MEMORY [QUITE EXPENSIVE AT THE TIME] BECAUSE OF THE / EXTRA CYCLES USED FOR EVERY INSTRUCTION TO MAINTAIN AND UPDATE IT. IF STORED / INTO, THIS IS EQUIVALENT TO PERFORMING A "JMP" INSTRUCTION IN THE ORDINARY / SENSE; THE VALUE WILL BE PRE-INCREMENTED [WHICH IS THE NORMAL OPERATION OF A / PROGRAM COUNTER UNLESS THE INSTRUCTION EXECUTION ALSO SKIPPED IN WHICH CASE IT / INCREMENTS AGAIN]. TAD (PDP5-1) /GET PDP-5 DETECT ADDRESS [WILL BE INCREMENTED]. DCA 0000 /STORE OVER PROGRAM COUNTER [IF PDP-5]. / EXECUTION CONTINUES HERE FOR ALL MODELS EXCEPT THE PDP-5; ON THE PDP-5 THE / NEXT INSTRUCTION IS PART OF THE ROUTINE EXIT SETTING THE VALUE FOR THE / PDP-5 IN THE ACCUMULATOR. / RESTORE THE PREVIOUS CONTENTS OF LOCATION 0000 FOR ALL OTHER MODELS. TAD MCHTEMP /GET THE PREVIOUS CONTENTS OF LOCATION 0000. DCA 0000 /RESTORE IT IN CASE THAT MATTERS. / SECOND TEST: PDP-8/I, PDP-8/L, PDP-12. / THE PDP-8/I "FAMILY" CAN PERFORM A COMBINED ROTATE OPERATION THAT CAN CLEAR / BOTH THE LOW-ORDER AND HIGH-ORDER BIT IN THE SAME INSTRUCTION. THIS WAS / REMOVED IN NEWER VALUES AND THE COMBINATION WAS REPURPOSED TO ALLOW OTHER / OPERATIONS. NEITHER THE ORIGINAL PDP-8 NOR LINC-8 ALLOWS COMBINING INCREMENT / AND ROTATE [SINGLE OR DOUBLE] IN THE SAME INSTRUCTION. NOTE: THIS COULD BE A / USEFUL COMBINATION OF OPERATIONS TO LOAD THE VALUE 3776 INTO THE AC IN ONE / INSTRUCTION IF IT IS CERTAIN EXECUTION IS LIMITED TO ONE OF THESE THREE / MODELS; SUCH USAGE IS QUITE RARE OUTSIDE OF MODEL DETECTION ROUTINES. CLA CLL CMA RAL RAR /CLEAR THE AC AND LINK, THEN COMPLEMENT THE AC, /THEN SET ROTATE ONCE IN BOTH DIRECTIONS. TAD (-3776) /COMPARE TO EXPECTED VALUE. SNA CLA /SKIP IF NOT THESE THREE MODELS. JMP PDP8IL /SORT OUT WHICH ONE THERE. / THIRD TEST: PDP-8/S. / THE PDP-8/S IS NOT A MEMBER OF "THE FAMILY OF 8" BECAUSE IT LACKS CERTAIN / COMBINED OPERATE FUNCTIONS WHICH ARE SUPPORTED BY THE PDP-8 WHICH WAS RELEASED / EARLIER; THIS IS TRULY A "STEP BACKWARDS" THAT IS NOT TOLERATED BY MOST PDP-8 / SOFTWARE INCLUDING P?S/8, THE R-L MONITOR SYSTEM, OS/8, COS-300/310, POLY / BASIC [AND ALL OF ITS EDU VARIANTS], 4K/8K/LAB-8/E BASIC, ETC. THE ONLY / SOFTWARE KNOWN TO RUN ON A PDP-8/S IS FOCAL, 1969 [WHICH SELF-MODIFIES TO / CHANGE SOFTWARE TIMING LOOPS] AND A SPECIAL CONFIGURATION OF THE DISK MONITOR / SYSTEM USING A DF32 WITH INCREASED DATA INTERLEAVING TO PREVENT DATA BREAK / OVERRUN. THE LATTER POINT IS RELATED TO THE LACK OF SUFFICIENT SPEED OF / OPERATION; ALL OTHER RESTRICTIONS ARE A DIRECT RESULT OF NOT SUPPORTING THE / COMBINING COMPLEMENT AND ROTATE OPERATIONS. THE COMMONLY USED COMBINED / OPERATE INSTRUCTION NL7776 [CLA CLL CMA RAL] IS USED TO DETECT THE PDP-8/S / SINCE AT THIS POINT, IT IS THE ONLY MODEL NOT ALREADY DETECTED THAT CANNOT / PERFORM THIS INSTRUCTION. [THE PDP-5 ALSO HAS SIMILAR RESTRICTIONS.] CLA CLL CMA RAL /ATTEMPT TO LOAD THE AC WITH 7776. TAD (-7776) /COMPARE TO EXPECTED VALUE. SZA CLA /SKIP IF NOT PDP-8/S. JMP PDP8S /EXIT SETTING AC VALUE FOR THE PDP-8/S. / FOURTH TEST: PDP-8, LINC-8. / AT THIS POINT, THE CPU IS EITHER THE ORIGINAL PDP-8 [ALSO USED IN THE LINC-8] / OR A MODEL NEWER THAN THE PDP-12. / ALL NEWER MODELS CAN PERFORM A BYTE-SWAP [BSW] OPERATION; TESTING FOR THIS / WILL FAIL ON THE ORIGINAL MODEL[S]. CLA IAC BSW /ON NEWER MODELS THIS LOADS THE AC WITH 0100. TAD (-100) /COMPARE WITH EXPECTED VALUE. SNA CLA /SKIP IF PDP-8 [OR LINC-8]. JMP PDPOMNIBUS /JUMP IF NEWER MODEL. / FIFTH TEST: LINC-8. / THE LINC-8 HAS SPECIAL INTERFACE REGISTER INSTRUCTIONS USED FOR VARIOUS / CONTROL FUNCTIONS OF THE LINC CPU WHEN IT IS NOT RUNNING. [WHEN THE LINC / CPU IS RUNNING, NO PDP-8 INSTRUCTIONS ARE EXECUTED.] IF THESE INSTRUCTIONS / ARE NOT IMPLEMENTED, THE CPU IS THE ORIGINAL PDP-8 MODEL. NL7777 /SETUP NON-ZERO TEST VALUE. IACA /LOAD THE LINC "A" REGISTER. CLA /CLEAN UP. IAAC /READ THE LINC "A" REGISTER. IAC /ADD ONE TO THE RETURNED VALUE [IF LINC-8]. SNA CLA /SKIP IF NOT LINC-8. JMP LINC8 /RETURN TO CALLER WITH LINC-8 VALUE IN AC. / IN FOCAL, 1969, AN ADDITIONAL TEST WAS PERFORMED TO DETERMINE IF THE AX08 / LABORATORY PERIPHERAL WAS INSTALLED; IF THE AX08 WAS PRESENT, THIS WAS USED TO / DECLARE THE MACHINE A "LAB-8". THE LOGICAL PROBLEM WITH THIS IS TWO-FOLD: / 1) NEWER LABORATORY PERIPHERALS WERE RELEASED WHICH UNDERCUTS THE NOTION / ENTIRELY, 2) THE AX08 WAS OFTEN HOOKED TO OTHER MODELS SUCH AS THE PDP-8/I, / YET FOCAL, 1969 COULD NEVER DETECT SUCH COMBINATIONS. SINCE THIS IS NOT A / VALID CPU DETECTION CONSIDERATION, THE PRESENCE OF AN AX08 IS NOT TESTED FOR. JMP PDP8 /EXIT WITH THE AC SET FOR PDP-8 DETECTED. / COMES HERE TO DETERMINE IF THE CPU IS A PDP-8/L OR A PDP-8/I [WHICH COULD BE A / PDP-12]. THIS CODE USES THE GROUP III OPERATE DETECTION METHOD WHICH ALWAYS / WORKS. AS SUCH, THE TIMING PROBLEMS OF THE FOCAL, 1969 TEST ARE AVOIDED. PDP8IL, NL7777 /SETUP NON-ZERO AC FOR TEST. CLA!401 /ATTEMPT GROUP III AC CLEAR OPERATION. SZA CLA /SKIP IF THE AC DID CLEAR. JMP PDP8L /RETURN WITH AC SET FOR PDP-8/L DETECTION. / THE CPU IS A PDP-8/I. CHECK TO SEE IF THE MACHINE IS A PDP-12 [ORIGINALLY / KNOWN AS THE LINC-8/I]. LINC /GO INTO LINC MODE WITH THE AC CLEAR. COM /COMPLEMENT THE ACCUMULATOR. PDP /COME BACK TO PDP-8 MODE. / ON A PDP-8/I, THE "LINC" INSTRUCTION IS ONLY MEANINGFUL IF A DEVICE 14 / INTERFACE IS PRESENT. IN GENERAL, THIS IS NOT THE CASE; HOWEVER, IF A DEVICE / 14 INTERFACE IS PRESENT, THE ACCUMULATOR MIGHT CHANGE AND/OR THE NEXT / OPERATION MIGHT BE SKIPPED. THE "COM" AND "PDP" INSTRUCTIONS ON MACHINES / OTHER THAN THE PDP-12 ARE HARMLESS "AND 0017" AND "AND 0002" INSTRUCTIONS / RESPECTIVELY. AS SUCH, IT IS IMPOSSIBLE FOR THE ACCUMULATOR TO BE SET TO 7777 / AS LONG AS LOCATION 0002 IS NOT SET TO 7777; THE DETECTION ROUTINE SHOULD / ENSURE THIS IS NOT THE CASE TO PREVENT POTENTIAL CONFUSION. IAC /ADD ONE [MAKING THE AC 0000 ONLY ON A PDP-12]. SNA CLA /SKIP IF NOT RUNNING ON A PDP-12. JMP PDP12 /RETURN WITH AC SET FOR PDP-12 DETECTION VALUE. / FOR CONSISTENCY, NO PERIPHERAL CONSIDERATIONS ARE USED TO DISTINGUISH MODELS. / AS SUCH, JUST PERFORM EXIT FOR PDP-8/I. JMP PDP8I /RETURN WITH AC SET TO PDP-8/I DETECTION VALUE. / COMES HERE TO DETERMINE WHICH OMNIBUS PROCESSOR [OR NEWER] IS IN EFFECT. / ON THE KK8F PROCESSOR [FOUND ONLY IN PDP/8E, PDP-8/F, PDP-8/M AND PDP-8/A-600 / SERIES SYSTEMS], A SYSTEM-UNIQUE OPERATION IS AVAILABLE: EXECUTING A 7016 / INSTRUCTION [WHICH IS THE SAME INSTRUCTION CODE AS ROTATE TWICE IN BOTH / DIRECTIONS] WILL LOAD THE ACCUMULATOR BITS[0-4] WITH THE CURRENT PAGE OF THE / INSTRUCTION; BITS[5-11] OF THE ACCUMULATOR ARE LOADED FROM THE EXECUTED / INSTRUCTION. FOR EXAMPLE, IF THE INSTRUCTION IS EXECUTED ANYWHERE ON PAGE 1 / [0200 THROUGH 0377], THE ACCUMULATOR IS SET TO 0216. / ON THE KK8A PROCESSOR [FOUND ONLY IN PDP-8/A-400 SERIES AND SIMILAR SYSTEMS], / EXECUTION OF 7016 WILL LOAD THE ACCUMULATOR WITH THE UPDATED PROGRAM COUNTER. / FOR EXAMPLE, IF THE INSTRUCTION IS EXECUTED IN LOCATION 0215, THE ACCUMULATOR / IS SET TO 0216. / PRACTICAL DEVICE HANDLERS HAVE BEEN WRITTEN FOR OMNIBUS-BASED SYSTEMS THAT / EXPLOIT THIS FEATURE BY PLACING THE 7016 INSTRUCTION AT RELATIVE LOCATION 015 / ON THE CURRENT PAGE; THE ACCUMULATOR WILL BE CHANGED TO THE SAME VALUE / REGARDLESS OF WHICH OF THE TWO POSSIBLE PROCESSORS IS PRESENT. THIS ALLOWS / RELOCATABLE HANDLERS TO BE WRITTEN USING THE SHORTEST POSSIBLE CODE. PDPOMNI,RTL!RTR /EXECUTE INSTRUCTION WHICH CHANGES THE /ACCUMULATOR ON PDP-8/E AND PDP-8/A SYSTEMS. UPDTPC, SNA /SKIP IF NOT A NEWER MODEL [WHICH DOES NOT /CHANGE THE ACCUMULATOR]. JMP PDPCHIP /JUMP IF NEWER CHIP-BASED PROCESSOR. / WE NEED TO DETERMINE WHICH CPU [KK8F OR KK8A] IS IN EFFECT. TAD (.&7600+16^7777) /CHECK FOR PDP-8/E VALUE. SNA /SKIP IF NOT PDP-8/E. JMP PDP8E /SET PDP-8/E RETURN VALUE AND EXIT. / ON THE KK8A, THE AC SHOULD BE THE UPDATED PROGRAM COUNTER WHERE THE 7016 WAS / EXECUTED. NOTE: IT IS CONCEIVABLE THIS IS A NON-DEC "HOME-BREW" CPU BASED ON / OTHER HARDWARE. TAD (.&7600+16-UPDTPC) /CHECK FOR PDP-8/A VALUE. SNA CLA /SKIP IF SOME OTHER CPU. JMP PDP8A /SET PDP-8/A RETURN VALUE AND EXIT. / THE CPU IS NOT A KNOWN DEC MODEL. SEVERAL PEOPLE HAVE CREATED THEIR OWN CPU / USING ALTERNATE TECHNOLOGY. JMP CPUNKNOWN /SET RETURN VALUE FOR UNKNOWN SYSTEM AND EXIT. / NOTE: BASED ON SELF-SABOTAGE CODE KNOWN TO HAVE ONCE BEEN PLACED INTO AN EARLY / RELEASE OF OS/8, A HIDDEN MODEL CHECK WAS ONCE INCLUDED THAT WAS AN ATTEMPT TO / MAKE OS/8 FAIL ON THE COMPETING DCC-112 MODELS FROM DIGITAL COMPUTER CONTROLS / [DCC], LATER A DIVISION OF DATA GENERAL. CERTAIN OS/8 SOURCE FILES INDICATE / THE [EVENTUAL] REMOVAL OF THE DCC CODE WITHIN THE PROGRAM'S EDIT HISTORY. / MORE RECENTLY, IT HAS BEEN DISCOVERED THAT ANALOGOUS SELF-SABOTAGE CODE IS / PRESENT IN SURVIVING COPIES OF FOCAL-8, A DUBIOUS REPLACEMENT FOR FOCAL, 1969. / THIS VERSION WAS APPARENTLY RELEASED FOR MOSTLY NEFARIOUS PURPOSES AS FOLLOWS: / 1) REMOVES SUPPORT FOR ALL EARLIER MODELS [INCLUDING THE PDP-5 AND PDP-8/S]. / OTHER THAN REMOVING SUPPORT FOR MACHINES PRIOR TO THE PDP-8/E, IT IS NOT / CLEAR IF ANYTHING OF WORTH WAS ACTUALLY ADDED [SEE BELOW]. ADDITIONALLY, / A SEPARATE PACKAGE WAS CREATED TO BE PURCHASED [AT ADDITIONAL COST] / CLAIMING TO RESTORE THE "FAMILY OF EIGHT" FUNCTIONALITY AS WOULD NORMALLY / BE INCLUDED WITHIN FOCAL, 1969 [WITHOUT SUPPORT FOR THE PDP-5 AND PDP-8/S]. / AS SUCH, IT WOULD APPEAR THE ONLY REASON TO CREATE THIS "NEW" VERSION WAS / GREED AND FEAR OF COMPETITION. COPIES OF FOCAL, 1969 HAVE ALWAYS BEEN / READILY AVAILABLE AS USERS OFTEN EXCHANGED FILES, ETC. THE APPARENT THEORY / WOULD BE TO FIND WITHIN THE PAPER-TAPE SOFTWARE KIT [ALWAYS PROVIDED WITH / EACH NEW SYSTEM PURCHASE] THE RIGGED REPLACEMENT WHICH MIGHT WIND UP ON A / DCC MACHINE TO EMBARRASS DCC; THE SELF-SABOTAGE CODE WORKS TO GRADUALLY / DESTROY FOCAL IN MEMORY, THUS PERHAPS APPEARING TO BE A HARDWARE FAILURE. / NOTE: SEPARATELY SOLD PAPER-TAPE SOFTWARE KITS DID NOT EXIST UNTIL FOCAL-8 / REPLACED FOCAL, 1969 [IN 1971]. / 2) THE SELF-SABOTAGE CODE CREATES AN OPERATE INSTRUCTION IN-LINE AND THEN / EXECUTES IT VERY MUCH LIKE ANALOGOUS CODE IN THIS PROGRAM AND [WITHIN THE / ONCE-ONLY INITIALIZATION CODE WITHIN FOCAL, 1969 THAT WAS REMOVED]. IF / EXPECTED ACCUMULATOR/LINK RESULTS MATCH, IMPORTANT INTERNAL POINTERS WITHIN / FOCAL ARE SET TO 0000 MAKING EVERY ASPECT OF FOCAL SUBJECT TO DESTRUCTION, / INCLUDING THE INTERPRETED SOURCE CODE. / 3) THE CODE MENTIONED IN 2) ABOVE IS CLEVERLY HIDDEN USING XLIST DIRECTIVE / STATEMENTS SO AS TO APPEAR TO NOT BE PRESENT [TO ALL BUT THE BEST PDP-8 / PROGRAMMERS]. THE ACTUAL SOURCE FILES WERE NEVER RELEASED, BUT A POORLY / PRINTED LISTING FILE WAS SOMETIMES PROVIDED. [NOTE: GENERALLY, THE QUALITY / OF ALL SUCH LISTINGS WAS ALWAYS POOR.] / 4) TAKING ADVANTAGE OF THE INHERENTLY POOR DESIGN OF OS/8 CREF, THERE IS NO / INDICATION OF "FOUL PLAY" IN THE LISTING FILE; THIS IS BECAUSE CREF IS NOT / REALLY A TRUE PAL ASSEMBLER CROSS-REFERENCE PROGRAM. RATHER, CREF IS A / SCANNER OF LISTING FILES OUTPUT FROM PAL8 [AND OTHER PROGRAMS] THAT TAKES / EDUCATED GUESSES AS TO WHAT TO INCLUDE IN THE EVENTUAL CROSS-REFERENCE / OUTPUT; IT IS EASILY FOOLED IN SEVERAL DIFFERENT WAYS AND IS THUS IDEAL TO / BE USED TO OBFUSCATE THE CODE FURTHER. / IF THE SOURCE CODE IS ASSEMBLED BY EITHER P?S/8 PAL OR TOPS-10 PAL10, THE / TRUTH IS REVEALED BECAUSE THE LISTING INCLUDES ASSEMBLER STATEMENT NUMBERS / INSTEAD OF LINEAR SEQUENCE NUMBERS. NOTE: PREFERRED PROGRAMMING TECHNIQUES / CAN CAUSE OS/8 CREF TO ERRONEOUSLY CROSS-REFERENCE COMMENTS! / 5) THE BINARY OUTPUT OF FOCAL-8 CAN BE PASSED THROUGH P?S/8 MAP OR OS/8 BITMAP / TO REVEAL THE TELL-TALE DOUBLE LOADING OF THE AFFECTED AREA. THE PRIMARY / WORDS ASSEMBLED ARE PLAUSIBLE SHAM STATEMENTS THAT MOST PROGRAMMERS WOULD / IGNORE AS THEY DO NOT AFFECT THE PROGRAM FLOW, ETC. [NOTE: A DUMMY / VARIABLE IS REFERENCED THAT IS NOT USED OUTSIDE OF THE ONCE-ONLY CODE THAT / IS AFFECTED; WHEN THE TRUE CODE IS REVEALED, THERE ARE NO REFERENCES TO / THIS LOCATION.] HOWEVER. THE SECONDARY LOADING IS THE SELF-SABOTEGE CODE. / 6) P?S/8 SLURP BINARY FORMAT QUICKLY REVEALS THE DOUBLE ASSEMBLY AND COMMON / UTILITIES CAN BE USED TO EASILY REMOVE THE SHAM PRIMARY CODE. THE / RESULTING BINARY CODE CAN BE PROPERLY DISASSEMBLED TO REVEAL THE TRUE / NATURE OF THE CODE TREACHERY. / THIS ANALYSIS WAS PERFORMED MANY YEARS AGO, AND AS OF THIS WRITING HAS NOT / BEEN RECOVERED; AS SUCH, IT MAY BE NECESSARY TO REDERIVE THE TREACHERY. / WHEN THE PROPER SOURCE CODE IS MADE AVAILABLE [AGAIN], THIS PROGRAM [AND / KERMIT-12] WILL BE UPDATED TO ALLOW SUPPORT FOR THE DCC-112 SERIES / MACHINES. / NOTE: ONE SMALL FEATURE OF FOCAL-8 HAS BEEN DISCOVERED THAT IS OF WORTH! / IT IS SURMISED THAT SUBSEQUENT WORK ON FOCAL, 1969 WAS PERFORMED [BUT NEVER / RELEASED]. IT CONSISTS OF A MINOR FIX TO A QUIRK OF THE "FOR" COMMAND THAT / WAS ACCOMPLISHED BY ADDING ONE INSTRUCTION TO THE CODE. / AN IMPORTANT REASON TO NOT RELEASE THIS UPDATE IS THAT IT WAS VERY IMPORTANT / TO MAINTAIN FULL BINARY COMPATIBILITY WITH USER-CREATED ADD-ONS, MOST OF WHICH / ARE DOCUMENTED IN DECUS FOCAL-17, A DOCUMENT WIDELY AVAILABLE TODAY. P?S/8 / FOCAL IS FULLY COMPLIANT WITH THIS AS WELL; HOWEVER, FOCAL-8 IS NOT! / FOCAL-12 FOR DIAL WAS CREATED SOME TIME BEFORE FOCAL-8 AND INCLUDES THIS FIX, / PRESUMABLY ALSO DERIVED FROM THE POST-RELEASE FILES BEYOND FOCAL, 1969. [IN / THE CASE OF FOCAL-12 FOR ONLY THE PDP-12, THERE IS NO NEED TO BE BINARY / COMPATIBLE WITH FOCAL, 1969 AS NO SUCH COMPATIBILITY CLAIMS ARE MADE TO THAT / EFFECT WITHIN LAP6-DIAL/DIAL-MS. / IT IS NOT POSSIBLE TO APPLY TO PATCH TO FOCAL, 1969 TO MAINTAIN BINARY / COMPATIBILITY AND ALSO RUN ON THE PDP-5 AND/OR THE PDP-8/S. SINCE P?S/8 DOES / NOT RUN ON THESE MODELS, IT IS ACCEPTABLE TO PATCH THE EQUIVALENT CODE INTO / FOCAL, 1969 IF THE INTENDED TARGET IS FOR FAMILY OF 8 MACHINES ONLY. AS SUCH, / P?S/8 FOCAL MODIFIES SEVERAL SMALL ROUTINES ON THE SAME PAGE AS THE AFFECTED / "FOR" CODE; THE RELEASED P?S/8 FOCAL RUNS ON ALL FAMILY OF 8 MACHINES WITH THE / PROBLEM REMEDIED WHILE MAINTAINING BINARY COMPATIBILITY. / THUS, THE P?S/8 VARIANT OF FOCAL, 1969 WITH THE P?S/8 PATCHES APPLIES CAN BE / USED ON ALL FAMILY OF 8 MACHINES; FOCAL-8 IS NOT BINARY-COMPATIBLE, BUT IT DID / PROVIDE A FEEBLE IMPLEMENTATION OF THE FIX THAT WAS USED SOLELY FOR ULTIMATE / INSPIRATION FOR THE P?S/8 RELEASE. / COMES HERE TO DETERMINE WHICH OF THE PREVAILING PDP-8 CHIP-BASED PROCESSORS IS / IN EFFECT. THE IM/HM6100 CHIP IS ESSENTIALLY FULLY COMPATIBLE WITH THE KK8E / AND KK8A PROCESSORS [WITHOUT THE IMPLEMENTATION OF THE 7016 OPERATION OF / THE OTHER TWO PROCESSORS]. / IF FURTHER TESTING WERE TO BECOME NECESSARY, THERE IS AN ADDITIONAL / COMPATIBILITY QUIRK THAT CAN BE EXPLOITED: FOR ALL OTHER 12-BIT MODELS, WHEN / AN INSTRUCTION IS SETUP TO USE AN AUTO-INDEX REGISTER LOCATION, THE OPERATION / ALWAYS OCCURS AS EXPECTED. THIS IS TRUE EVEN IF THE INSTRUCTION IS EXECUTED / ON PAGE ZERO. ADDITIONALLY, IF THE INSTRUCTION IS MODIFIED TO SET THE CURRENT / PAGE BIT, THE AUTO-INDEXING OPERATION STILL OCCURS BECAUSE THE EFFECTIVE / POINTER ADDRESS IS IN THE RANGE OF 0010 THROUGH 0017. HOWEVER, ON THE / IM/HM6100 CHIP, THE AUTO-INDEXING DOES NOT OCCUR IF THE CURRENT PAGE BIT IS / SET WHEN THE INSTRUCTION IS EXECUTED ON PAGE ZERO. SINCE. AS A PRACTICAL / MATTER, THIS PARTICULAR PROGRAMMING METHOD IS NEVER USED, THIS QUIRK IS / GENERALLY UNIMPORTANT. ADDITIONALLY, SUCH AN INSTRUCTION CANNOT BE DIRECTLY / CREATED BY ANY OF THE PREVAILING ASSEMBLERS, ALL OF WHICH WILL FORCE THE / CURRENT PAGE BIT OFF USING CONVENTIONAL PROGRAMMING TECHNIQUES. THE PROBLEM / WAS DISCOVERED BY EXECUTING CERTAIN PDP-8/E-ORIENTED DIAGNOSTIC PROGRAMS THAT / ACTUALLY CHECK FOR THIS SET OF CIRCUMSTANCES. THE INCOMPATIBILITY HAS BEEN / NOTED ADVISING TO AVOID RUNNING THESE DIAGNOSTIC PROGRAMS ON AFFECTED SYSTEMS / SUCH AS THE VT78 AND THE INTERSIL INTERCEPT I. / THE QUIRK OF THE IM/HM6100 CHIP WAS CORRECTED IN THE HM6120 CHIP, WHICH WOULD / MAKE CPU DETECTION SLIGHTLY MORE DIFFICULT; HOWEVER, THE HM6120 ADDS A NEW / UNIQUE FEATURE: A NEW GROUP I OPERATE WAS ADDED TO ROTATE THE ACCUMULATOR / 3 BITS TO THE LEFT [CIRCULARLY EXCLUDING THE LINK]. THIS FEATURE WILL BE USED / TO DIFFERENTIATE BETWEEN THE TWO CHIP-BASED IMPLEMENTATIONS. PDPCHIP,CLA IAC RAL!RAR /THIS WILL LOAD THE AC WITH 0010 ON THE HM6120. TAD (-10) /COMPARE TO EXPECTED VALUE FOR HM6120. SNA CLA /SKIP IF NOT A MATCH. JMP CP6120 /SET 6120 RETURN VALUE AND EXIT. / SINCE THERE ARE APPARENTLY NO OTHER MODELS TO CHECK FOR, THE EXPANDED TEST FOR / THE QUIRKS OF THE IM/HM6100 WILL NOT BE REQUIRED. JMP CP6100 /SET 6100 RETURN VALUE AND EXIT. MCHTEMP,.-. /LOCATION 0000 SAVED HERE DURING PDP-5 TEST. / RETURN GAUNTLET. / THE SUBROUTINE EXITS WITH THE ACCUMULATOR SET TO THE VALUE CORRESPONDING TO / THE CPU MODEL DETECTED. CP6120, IAC /SET 6120 VALUE. CP6100, IAC /SET 6100 VALUE. PDP8A, IAC /SET PDP-8/A VALUE. PDP8E, IAC /SET PDP-8/E VALUE. PDP12, IAC /SET PDP-12 VALUE. PDP8L, IAC /SET PDP-8/L VALUE. PDP8I, IAC /SET PDP-8/I VALUE. LINC8, IAC /SET LINC-8 VALUE. PDP8S, IAC /SET PDP-8/S VALUE. PDP8, IAC /SET PDP-8 VALUE. PDP5, IAC /SET PDP-5 VALUE. CPUNKNO,JMP I MACHINE /RETURN TO CALLER; AC IS CLEAR /FOR UNKNOWN MODEL TYPE. PAGE OPNMSG, TEXT "THIS PROGRAM IS RUNNING ON A" / MODEL-SPECIFIC TEXT STRINGS. UNKNMSG,TEXT "N UNKNOWN MODEL." PDP5MSG,TEXT " PDP-5." PDP8MSG,TEXT " PDP-8." PDP8SMS,TEXT " PDP-8/S." LINC8MS,TEXT " LINC-8." PDP8IMS,TEXT " PDP-8/I." PDP8LMS,TEXT " PDP-8/L." PDP12MS,TEXT " PDP-12." KK8FMSG,TEXT " PDP-8/E OR SIMILAR MODEL." KK8AMSG,TEXT " PDP-8/A." CHP6100,TEXT " 6100 CHIP-BASED MACHINE." CHP6120,TEXT " 6120 CHIP-BASED MACHINE." DMATMSG,TEXT " DECMATE." $ /THAT'S ALL FOLK! / COMMENT RULER FOR SUCH AS THIS. FOR NON-COMMENT STATEMENTS, TWO MORE ALLOWED. / 123456789012345678901234567890123456789012345678901234567890123456789012345678